Index: net/socket/deterministic_socket_data_unittest.cc |
diff --git a/net/socket/deterministic_socket_data_unittest.cc b/net/socket/deterministic_socket_data_unittest.cc |
deleted file mode 100644 |
index bdeba2bef55d6e5cf282a08008546541842503b9..0000000000000000000000000000000000000000 |
--- a/net/socket/deterministic_socket_data_unittest.cc |
+++ /dev/null |
@@ -1,622 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/socket/socket_test_util.h" |
- |
-#include <string.h> |
- |
-#include "base/memory/ref_counted.h" |
-#include "testing/platform_test.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-//----------------------------------------------------------------------------- |
- |
-namespace { |
- |
-static const char kMsg1[] = "\0hello!\xff"; |
-static const int kLen1 = arraysize(kMsg1); |
-static const char kMsg2[] = "\0a2345678\0"; |
-static const int kLen2 = arraysize(kMsg2); |
-static const char kMsg3[] = "bye!"; |
-static const int kLen3 = arraysize(kMsg3); |
- |
-} // anonymous namespace |
- |
-namespace net { |
- |
-class DeterministicSocketDataTest : public PlatformTest { |
- public: |
- DeterministicSocketDataTest(); |
- |
- void TearDown() override; |
- |
- void ReentrantReadCallback(int len, int rv); |
- void ReentrantWriteCallback(const char* data, int len, int rv); |
- |
- protected: |
- void Initialize(MockRead* reads, size_t reads_count, MockWrite* writes, |
- size_t writes_count); |
- |
- void AssertSyncReadEquals(const char* data, int len); |
- void AssertAsyncReadEquals(const char* data, int len); |
- void AssertReadReturns(const char* data, int len, int rv); |
- void AssertReadBufferEquals(const char* data, int len); |
- |
- void AssertSyncWriteEquals(const char* data, int len); |
- void AssertAsyncWriteEquals(const char* data, int len); |
- void AssertWriteReturns(const char* data, int len, int rv); |
- |
- TestCompletionCallback read_callback_; |
- TestCompletionCallback write_callback_; |
- StreamSocket* sock_; |
- scoped_ptr<DeterministicSocketData> data_; |
- |
- private: |
- scoped_refptr<IOBuffer> read_buf_; |
- MockConnect connect_data_; |
- |
- HostPortPair endpoint_; |
- scoped_refptr<TransportSocketParams> tcp_params_; |
- ClientSocketPoolHistograms histograms_; |
- DeterministicMockClientSocketFactory socket_factory_; |
- MockTransportClientSocketPool socket_pool_; |
- ClientSocketHandle connection_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DeterministicSocketDataTest); |
-}; |
- |
-DeterministicSocketDataTest::DeterministicSocketDataTest() |
- : sock_(NULL), |
- read_buf_(NULL), |
- connect_data_(SYNCHRONOUS, OK), |
- endpoint_("www.google.com", 443), |
- tcp_params_(new TransportSocketParams( |
- endpoint_, |
- false, |
- false, |
- OnHostResolutionCallback(), |
- TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), |
- histograms_(std::string()), |
- socket_pool_(10, 10, &histograms_, &socket_factory_) {} |
- |
-void DeterministicSocketDataTest::TearDown() { |
- // Empty the current queue. |
- base::MessageLoop::current()->RunUntilIdle(); |
- PlatformTest::TearDown(); |
-} |
- |
-void DeterministicSocketDataTest::Initialize(MockRead* reads, |
- size_t reads_count, |
- MockWrite* writes, |
- size_t writes_count) { |
- data_.reset(new DeterministicSocketData(reads, reads_count, |
- writes, writes_count)); |
- data_->set_connect_data(connect_data_); |
- socket_factory_.AddSocketDataProvider(data_.get()); |
- |
- // Perform the TCP connect |
- EXPECT_EQ(OK, |
- connection_.Init(endpoint_.ToString(), |
- tcp_params_, |
- LOWEST, |
- CompletionCallback(), |
- reinterpret_cast<TransportClientSocketPool*>(&socket_pool_), |
- BoundNetLog())); |
- sock_ = connection_.socket(); |
-} |
- |
-void DeterministicSocketDataTest::AssertSyncReadEquals(const char* data, |
- int len) { |
- // Issue the read, which will complete immediately |
- AssertReadReturns(data, len, len); |
- AssertReadBufferEquals(data, len); |
-} |
- |
-void DeterministicSocketDataTest::AssertAsyncReadEquals(const char* data, |
- int len) { |
- // Issue the read, which will be completed asynchronously |
- AssertReadReturns(data, len, ERR_IO_PENDING); |
- |
- EXPECT_FALSE(read_callback_.have_result()); |
- EXPECT_TRUE(sock_->IsConnected()); |
- data_->RunFor(1); // Runs 1 step, to cause the callbacks to be invoked |
- |
- // Now the read should complete |
- ASSERT_EQ(len, read_callback_.WaitForResult()); |
- AssertReadBufferEquals(data, len); |
-} |
- |
-void DeterministicSocketDataTest::AssertReadReturns(const char* data, |
- int len, int rv) { |
- read_buf_ = new IOBuffer(len); |
- ASSERT_EQ(rv, sock_->Read(read_buf_.get(), len, read_callback_.callback())); |
-} |
- |
-void DeterministicSocketDataTest::AssertReadBufferEquals(const char* data, |
- int len) { |
- ASSERT_EQ(std::string(data, len), std::string(read_buf_->data(), len)); |
-} |
- |
-void DeterministicSocketDataTest::AssertSyncWriteEquals(const char* data, |
- int len) { |
- scoped_refptr<IOBuffer> buf(new IOBuffer(len)); |
- memcpy(buf->data(), data, len); |
- |
- // Issue the write, which will complete immediately |
- ASSERT_EQ(len, sock_->Write(buf.get(), len, write_callback_.callback())); |
-} |
- |
-void DeterministicSocketDataTest::AssertAsyncWriteEquals(const char* data, |
- int len) { |
- // Issue the read, which will be completed asynchronously |
- AssertWriteReturns(data, len, ERR_IO_PENDING); |
- |
- EXPECT_FALSE(read_callback_.have_result()); |
- EXPECT_TRUE(sock_->IsConnected()); |
- data_->RunFor(1); // Runs 1 step, to cause the callbacks to be invoked |
- |
- ASSERT_EQ(len, write_callback_.WaitForResult()); |
-} |
- |
-void DeterministicSocketDataTest::AssertWriteReturns(const char* data, |
- int len, int rv) { |
- scoped_refptr<IOBuffer> buf(new IOBuffer(len)); |
- memcpy(buf->data(), data, len); |
- |
- // Issue the read, which will complete asynchronously |
- ASSERT_EQ(rv, sock_->Write(buf.get(), len, write_callback_.callback())); |
-} |
- |
-void DeterministicSocketDataTest::ReentrantReadCallback(int len, int rv) { |
- scoped_refptr<IOBuffer> read_buf(new IOBuffer(len)); |
- EXPECT_EQ(len, |
- sock_->Read( |
- read_buf.get(), |
- len, |
- base::Bind(&DeterministicSocketDataTest::ReentrantReadCallback, |
- base::Unretained(this), |
- len))); |
-} |
- |
-void DeterministicSocketDataTest::ReentrantWriteCallback( |
- const char* data, int len, int rv) { |
- scoped_refptr<IOBuffer> write_buf(new IOBuffer(len)); |
- memcpy(write_buf->data(), data, len); |
- EXPECT_EQ(len, |
- sock_->Write( |
- write_buf.get(), |
- len, |
- base::Bind(&DeterministicSocketDataTest::ReentrantWriteCallback, |
- base::Unretained(this), |
- data, |
- len))); |
-} |
- |
-// ----------- Read |
- |
-TEST_F(DeterministicSocketDataTest, SingleSyncReadWhileStopped) { |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Read |
- MockRead(SYNCHRONOUS, 0, 1), // EOF |
- }; |
- |
- Initialize(reads, arraysize(reads), NULL, 0); |
- |
- data_->SetStopped(true); |
- AssertReadReturns(kMsg1, kLen1, ERR_UNEXPECTED); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SingleSyncReadTooEarly) { |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 1), // Sync Read |
- MockRead(SYNCHRONOUS, 0, 2), // EOF |
- }; |
- |
- MockWrite writes[] = { |
- MockWrite(SYNCHRONOUS, 0, 0) |
- }; |
- |
- Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
- |
- data_->StopAfter(2); |
- ASSERT_FALSE(data_->stopped()); |
- AssertReadReturns(kMsg1, kLen1, ERR_UNEXPECTED); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SingleSyncRead) { |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Read |
- MockRead(SYNCHRONOUS, 0, 1), // EOF |
- }; |
- |
- Initialize(reads, arraysize(reads), NULL, 0); |
- // Make sure we don't stop before we've read all the data |
- data_->StopAfter(1); |
- AssertSyncReadEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, MultipleSyncReads) { |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Read |
- MockRead(SYNCHRONOUS, kMsg2, kLen2, 1), // Sync Read |
- MockRead(SYNCHRONOUS, kMsg3, kLen3, 2), // Sync Read |
- MockRead(SYNCHRONOUS, kMsg3, kLen3, 3), // Sync Read |
- MockRead(SYNCHRONOUS, kMsg2, kLen2, 4), // Sync Read |
- MockRead(SYNCHRONOUS, kMsg3, kLen3, 5), // Sync Read |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 6), // Sync Read |
- MockRead(SYNCHRONOUS, 0, 7), // EOF |
- }; |
- |
- Initialize(reads, arraysize(reads), NULL, 0); |
- |
- // Make sure we don't stop before we've read all the data |
- data_->StopAfter(10); |
- AssertSyncReadEquals(kMsg1, kLen1); |
- AssertSyncReadEquals(kMsg2, kLen2); |
- AssertSyncReadEquals(kMsg3, kLen3); |
- AssertSyncReadEquals(kMsg3, kLen3); |
- AssertSyncReadEquals(kMsg2, kLen2); |
- AssertSyncReadEquals(kMsg3, kLen3); |
- AssertSyncReadEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SingleAsyncRead) { |
- MockRead reads[] = { |
- MockRead(ASYNC, kMsg1, kLen1, 0), // Async Read |
- MockRead(SYNCHRONOUS, 0, 1), // EOF |
- }; |
- |
- Initialize(reads, arraysize(reads), NULL, 0); |
- |
- AssertAsyncReadEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, MultipleAsyncReads) { |
- MockRead reads[] = { |
- MockRead(ASYNC, kMsg1, kLen1, 0), // Async Read |
- MockRead(ASYNC, kMsg2, kLen2, 1), // Async Read |
- MockRead(ASYNC, kMsg3, kLen3, 2), // Async Read |
- MockRead(ASYNC, kMsg3, kLen3, 3), // Async Read |
- MockRead(ASYNC, kMsg2, kLen2, 4), // Async Read |
- MockRead(ASYNC, kMsg3, kLen3, 5), // Async Read |
- MockRead(ASYNC, kMsg1, kLen1, 6), // Async Read |
- MockRead(SYNCHRONOUS, 0, 7), // EOF |
- }; |
- |
- Initialize(reads, arraysize(reads), NULL, 0); |
- |
- AssertAsyncReadEquals(kMsg1, kLen1); |
- AssertAsyncReadEquals(kMsg2, kLen2); |
- AssertAsyncReadEquals(kMsg3, kLen3); |
- AssertAsyncReadEquals(kMsg3, kLen3); |
- AssertAsyncReadEquals(kMsg2, kLen2); |
- AssertAsyncReadEquals(kMsg3, kLen3); |
- AssertAsyncReadEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, MixedReads) { |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Read |
- MockRead(ASYNC, kMsg2, kLen2, 1), // Async Read |
- MockRead(SYNCHRONOUS, kMsg3, kLen3, 2), // Sync Read |
- MockRead(ASYNC, kMsg3, kLen3, 3), // Async Read |
- MockRead(SYNCHRONOUS, kMsg2, kLen2, 4), // Sync Read |
- MockRead(ASYNC, kMsg3, kLen3, 5), // Async Read |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 6), // Sync Read |
- MockRead(SYNCHRONOUS, 0, 7), // EOF |
- }; |
- |
- Initialize(reads, arraysize(reads), NULL, 0); |
- |
- data_->StopAfter(1); |
- AssertSyncReadEquals(kMsg1, kLen1); |
- AssertAsyncReadEquals(kMsg2, kLen2); |
- data_->StopAfter(1); |
- AssertSyncReadEquals(kMsg3, kLen3); |
- AssertAsyncReadEquals(kMsg3, kLen3); |
- data_->StopAfter(1); |
- AssertSyncReadEquals(kMsg2, kLen2); |
- AssertAsyncReadEquals(kMsg3, kLen3); |
- data_->StopAfter(1); |
- AssertSyncReadEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SyncReadFromCompletionCallback) { |
- MockRead reads[] = { |
- MockRead(ASYNC, kMsg1, kLen1, 0), // Async Read |
- MockRead(SYNCHRONOUS, kMsg2, kLen2, 1), // Sync Read |
- }; |
- |
- Initialize(reads, arraysize(reads), NULL, 0); |
- |
- data_->StopAfter(2); |
- |
- scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1)); |
- ASSERT_EQ(ERR_IO_PENDING, |
- sock_->Read( |
- read_buf.get(), |
- kLen1, |
- base::Bind(&DeterministicSocketDataTest::ReentrantReadCallback, |
- base::Unretained(this), |
- kLen2))); |
- data_->Run(); |
-} |
- |
-// ----------- Write |
- |
-TEST_F(DeterministicSocketDataTest, SingleSyncWriteWhileStopped) { |
- MockWrite writes[] = { |
- MockWrite(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Read |
- }; |
- |
- Initialize(NULL, 0, writes, arraysize(writes)); |
- |
- data_->SetStopped(true); |
- AssertWriteReturns(kMsg1, kLen1, ERR_UNEXPECTED); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SingleSyncWriteTooEarly) { |
- MockWrite writes[] = { |
- MockWrite(SYNCHRONOUS, kMsg1, kLen1, 1), // Sync Write |
- }; |
- |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, 0, 0) |
- }; |
- |
- Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
- |
- data_->StopAfter(2); |
- ASSERT_FALSE(data_->stopped()); |
- AssertWriteReturns(kMsg1, kLen1, ERR_UNEXPECTED); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SingleSyncWrite) { |
- MockWrite writes[] = { |
- MockWrite(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Write |
- }; |
- |
- Initialize(NULL, 0, writes, arraysize(writes)); |
- |
- // Make sure we don't stop before we've read all the data |
- data_->StopAfter(1); |
- AssertSyncWriteEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, MultipleSyncWrites) { |
- MockWrite writes[] = { |
- MockWrite(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Write |
- MockWrite(SYNCHRONOUS, kMsg2, kLen2, 1), // Sync Write |
- MockWrite(SYNCHRONOUS, kMsg3, kLen3, 2), // Sync Write |
- MockWrite(SYNCHRONOUS, kMsg3, kLen3, 3), // Sync Write |
- MockWrite(SYNCHRONOUS, kMsg2, kLen2, 4), // Sync Write |
- MockWrite(SYNCHRONOUS, kMsg3, kLen3, 5), // Sync Write |
- MockWrite(SYNCHRONOUS, kMsg1, kLen1, 6), // Sync Write |
- }; |
- |
- Initialize(NULL, 0, writes, arraysize(writes)); |
- |
- // Make sure we don't stop before we've read all the data |
- data_->StopAfter(10); |
- AssertSyncWriteEquals(kMsg1, kLen1); |
- AssertSyncWriteEquals(kMsg2, kLen2); |
- AssertSyncWriteEquals(kMsg3, kLen3); |
- AssertSyncWriteEquals(kMsg3, kLen3); |
- AssertSyncWriteEquals(kMsg2, kLen2); |
- AssertSyncWriteEquals(kMsg3, kLen3); |
- AssertSyncWriteEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SingleAsyncWrite) { |
- MockWrite writes[] = { |
- MockWrite(ASYNC, kMsg1, kLen1, 0), // Async Write |
- }; |
- |
- Initialize(NULL, 0, writes, arraysize(writes)); |
- |
- AssertAsyncWriteEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, MultipleAsyncWrites) { |
- MockWrite writes[] = { |
- MockWrite(ASYNC, kMsg1, kLen1, 0), // Async Write |
- MockWrite(ASYNC, kMsg2, kLen2, 1), // Async Write |
- MockWrite(ASYNC, kMsg3, kLen3, 2), // Async Write |
- MockWrite(ASYNC, kMsg3, kLen3, 3), // Async Write |
- MockWrite(ASYNC, kMsg2, kLen2, 4), // Async Write |
- MockWrite(ASYNC, kMsg3, kLen3, 5), // Async Write |
- MockWrite(ASYNC, kMsg1, kLen1, 6), // Async Write |
- }; |
- |
- Initialize(NULL, 0, writes, arraysize(writes)); |
- |
- AssertAsyncWriteEquals(kMsg1, kLen1); |
- AssertAsyncWriteEquals(kMsg2, kLen2); |
- AssertAsyncWriteEquals(kMsg3, kLen3); |
- AssertAsyncWriteEquals(kMsg3, kLen3); |
- AssertAsyncWriteEquals(kMsg2, kLen2); |
- AssertAsyncWriteEquals(kMsg3, kLen3); |
- AssertAsyncWriteEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, MixedWrites) { |
- MockWrite writes[] = { |
- MockWrite(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Write |
- MockWrite(ASYNC, kMsg2, kLen2, 1), // Async Write |
- MockWrite(SYNCHRONOUS, kMsg3, kLen3, 2), // Sync Write |
- MockWrite(ASYNC, kMsg3, kLen3, 3), // Async Write |
- MockWrite(SYNCHRONOUS, kMsg2, kLen2, 4), // Sync Write |
- MockWrite(ASYNC, kMsg3, kLen3, 5), // Async Write |
- MockWrite(SYNCHRONOUS, kMsg1, kLen1, 6), // Sync Write |
- }; |
- |
- Initialize(NULL, 0, writes, arraysize(writes)); |
- |
- data_->StopAfter(1); |
- AssertSyncWriteEquals(kMsg1, kLen1); |
- AssertAsyncWriteEquals(kMsg2, kLen2); |
- data_->StopAfter(1); |
- AssertSyncWriteEquals(kMsg3, kLen3); |
- AssertAsyncWriteEquals(kMsg3, kLen3); |
- data_->StopAfter(1); |
- AssertSyncWriteEquals(kMsg2, kLen2); |
- AssertAsyncWriteEquals(kMsg3, kLen3); |
- data_->StopAfter(1); |
- AssertSyncWriteEquals(kMsg1, kLen1); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, SyncWriteFromCompletionCallback) { |
- MockWrite writes[] = { |
- MockWrite(ASYNC, kMsg1, kLen1, 0), // Async Write |
- MockWrite(SYNCHRONOUS, kMsg2, kLen2, 1), // Sync Write |
- }; |
- |
- Initialize(NULL, 0, writes, arraysize(writes)); |
- |
- data_->StopAfter(2); |
- |
- scoped_refptr<IOBuffer> write_buf(new IOBuffer(kLen1)); |
- memcpy(write_buf->data(), kMsg1, kLen1); |
- ASSERT_EQ(ERR_IO_PENDING, |
- sock_->Write( |
- write_buf.get(), |
- kLen1, |
- base::Bind(&DeterministicSocketDataTest::ReentrantWriteCallback, |
- base::Unretained(this), |
- kMsg2, |
- kLen2))); |
- data_->Run(); |
-} |
- |
-// ----------- Mixed Reads and Writes |
- |
-TEST_F(DeterministicSocketDataTest, MixedSyncOperations) { |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Read |
- MockRead(SYNCHRONOUS, kMsg2, kLen2, 3), // Sync Read |
- MockRead(SYNCHRONOUS, 0, 4), // EOF |
- }; |
- |
- MockWrite writes[] = { |
- MockWrite(SYNCHRONOUS, kMsg2, kLen2, 1), // Sync Write |
- MockWrite(SYNCHRONOUS, kMsg3, kLen3, 2), // Sync Write |
- }; |
- |
- Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
- |
- // Make sure we don't stop before we've read/written everything |
- data_->StopAfter(10); |
- AssertSyncReadEquals(kMsg1, kLen1); |
- AssertSyncWriteEquals(kMsg2, kLen2); |
- AssertSyncWriteEquals(kMsg3, kLen3); |
- AssertSyncReadEquals(kMsg2, kLen2); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, MixedAsyncOperations) { |
- MockRead reads[] = { |
- MockRead(ASYNC, kMsg1, kLen1, 0), // Sync Read |
- MockRead(ASYNC, kMsg2, kLen2, 3), // Sync Read |
- MockRead(ASYNC, 0, 4), // EOF |
- }; |
- |
- MockWrite writes[] = { |
- MockWrite(ASYNC, kMsg2, kLen2, 1), // Sync Write |
- MockWrite(ASYNC, kMsg3, kLen3, 2), // Sync Write |
- }; |
- |
- Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
- |
- AssertAsyncReadEquals(kMsg1, kLen1); |
- AssertAsyncWriteEquals(kMsg2, kLen2); |
- AssertAsyncWriteEquals(kMsg3, kLen3); |
- AssertAsyncReadEquals(kMsg2, kLen2); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, InterleavedAsyncOperations) { |
- // Order of completion is read, write, write, read |
- MockRead reads[] = { |
- MockRead(ASYNC, kMsg1, kLen1, 0), // Async Read |
- MockRead(ASYNC, kMsg2, kLen2, 3), // Async Read |
- MockRead(ASYNC, 0, 4), // EOF |
- }; |
- |
- MockWrite writes[] = { |
- MockWrite(ASYNC, kMsg2, kLen2, 1), // Async Write |
- MockWrite(ASYNC, kMsg3, kLen3, 2), // Async Write |
- }; |
- |
- Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
- |
- // Issue the write, which will block until the read completes |
- AssertWriteReturns(kMsg2, kLen2, ERR_IO_PENDING); |
- |
- // Issue the read which will return first |
- AssertReadReturns(kMsg1, kLen1, ERR_IO_PENDING); |
- |
- data_->RunFor(1); |
- ASSERT_TRUE(read_callback_.have_result()); |
- ASSERT_EQ(kLen1, read_callback_.WaitForResult()); |
- AssertReadBufferEquals(kMsg1, kLen1); |
- |
- data_->RunFor(1); |
- ASSERT_TRUE(write_callback_.have_result()); |
- ASSERT_EQ(kLen2, write_callback_.WaitForResult()); |
- |
- data_->StopAfter(1); |
- // Issue the read, which will block until the write completes |
- AssertReadReturns(kMsg2, kLen2, ERR_IO_PENDING); |
- |
- // Issue the writes which will return first |
- AssertWriteReturns(kMsg3, kLen3, ERR_IO_PENDING); |
- |
- data_->RunFor(1); |
- ASSERT_TRUE(write_callback_.have_result()); |
- ASSERT_EQ(kLen3, write_callback_.WaitForResult()); |
- |
- data_->RunFor(1); |
- ASSERT_TRUE(read_callback_.have_result()); |
- ASSERT_EQ(kLen2, read_callback_.WaitForResult()); |
- AssertReadBufferEquals(kMsg2, kLen2); |
-} |
- |
-TEST_F(DeterministicSocketDataTest, InterleavedMixedOperations) { |
- // Order of completion is read, write, write, read |
- MockRead reads[] = { |
- MockRead(SYNCHRONOUS, kMsg1, kLen1, 0), // Sync Read |
- MockRead(ASYNC, kMsg2, kLen2, 3), // Async Read |
- MockRead(SYNCHRONOUS, 0, 4), // EOF |
- }; |
- |
- MockWrite writes[] = { |
- MockWrite(ASYNC, kMsg2, kLen2, 1), // Async Write |
- MockWrite(SYNCHRONOUS, kMsg3, kLen3, 2), // Sync Write |
- }; |
- |
- Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
- |
- // Issue the write, which will block until the read completes |
- AssertWriteReturns(kMsg2, kLen2, ERR_IO_PENDING); |
- |
- // Issue the writes which will complete immediately |
- data_->StopAfter(1); |
- AssertSyncReadEquals(kMsg1, kLen1); |
- |
- data_->RunFor(1); |
- ASSERT_TRUE(write_callback_.have_result()); |
- ASSERT_EQ(kLen2, write_callback_.WaitForResult()); |
- |
- // Issue the read, which will block until the write completes |
- AssertReadReturns(kMsg2, kLen2, ERR_IO_PENDING); |
- |
- // Issue the writes which will complete immediately |
- data_->StopAfter(1); |
- AssertSyncWriteEquals(kMsg3, kLen3); |
- |
- data_->RunFor(1); |
- ASSERT_TRUE(read_callback_.have_result()); |
- ASSERT_EQ(kLen2, read_callback_.WaitForResult()); |
- AssertReadBufferEquals(kMsg2, kLen2); |
-} |
- |
-} // namespace net |