| Index: webrtc/base/virtualsocket_unittest.cc
|
| diff --git a/webrtc/base/virtualsocket_unittest.cc b/webrtc/base/virtualsocket_unittest.cc
|
| index f517346f5a48a94710a22cb73abc62f3c57753c9..4ee2c75617ba49e7b3c625c85c4b5b4e46183add 100644
|
| --- a/webrtc/base/virtualsocket_unittest.cc
|
| +++ b/webrtc/base/virtualsocket_unittest.cc
|
| @@ -1018,10 +1018,73 @@ TEST_F(VirtualSocketServerTest, CanSendDatagramFromUnboundIPv6ToIPv4Any) {
|
| true);
|
| }
|
|
|
| +TEST_F(VirtualSocketServerTest, SetSendingBlockedWithUdpSocket) {
|
| + AsyncSocket* socket1 =
|
| + ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_DGRAM);
|
| + AsyncSocket* socket2 =
|
| + ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_DGRAM);
|
| + socket1->Bind(kIPv4AnyAddress);
|
| + socket2->Bind(kIPv4AnyAddress);
|
| + TestClient* client1 = new TestClient(new AsyncUDPSocket(socket1));
|
| +
|
| + ss_->SetSendingBlocked(true);
|
| + EXPECT_EQ(-1, client1->SendTo("foo", 3, socket2->GetLocalAddress()));
|
| + EXPECT_TRUE(socket1->IsBlocking());
|
| + EXPECT_EQ(0, client1->ready_to_send_count());
|
| +
|
| + ss_->SetSendingBlocked(false);
|
| + EXPECT_EQ(1, client1->ready_to_send_count());
|
| + EXPECT_EQ(3, client1->SendTo("foo", 3, socket2->GetLocalAddress()));
|
| +}
|
| +
|
| +TEST_F(VirtualSocketServerTest, SetSendingBlockedWithTcpSocket) {
|
| + constexpr size_t kBufferSize = 1024;
|
| + ss_->set_send_buffer_capacity(kBufferSize);
|
| + ss_->set_recv_buffer_capacity(kBufferSize);
|
| +
|
| + testing::StreamSink sink;
|
| + AsyncSocket* socket1 =
|
| + ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_STREAM);
|
| + AsyncSocket* socket2 =
|
| + ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_STREAM);
|
| + sink.Monitor(socket1);
|
| + sink.Monitor(socket2);
|
| + socket1->Bind(kIPv4AnyAddress);
|
| + socket2->Bind(kIPv4AnyAddress);
|
| +
|
| + // Connect sockets.
|
| + EXPECT_EQ(0, socket1->Connect(socket2->GetLocalAddress()));
|
| + EXPECT_EQ(0, socket2->Connect(socket1->GetLocalAddress()));
|
| + ss_->ProcessMessagesUntilIdle();
|
| +
|
| + char data[kBufferSize] = {};
|
| +
|
| + // First Send call will fill the send buffer but not send anything.
|
| + ss_->SetSendingBlocked(true);
|
| + EXPECT_EQ(static_cast<int>(kBufferSize), socket1->Send(data, kBufferSize));
|
| + ss_->ProcessMessagesUntilIdle();
|
| + EXPECT_FALSE(sink.Check(socket1, testing::SSE_WRITE));
|
| + EXPECT_FALSE(sink.Check(socket2, testing::SSE_READ));
|
| + EXPECT_FALSE(socket1->IsBlocking());
|
| +
|
| + // Since the send buffer is full, next Send will result in EWOULDBLOCK.
|
| + EXPECT_EQ(-1, socket1->Send(data, kBufferSize));
|
| + EXPECT_FALSE(sink.Check(socket1, testing::SSE_WRITE));
|
| + EXPECT_FALSE(sink.Check(socket2, testing::SSE_READ));
|
| + EXPECT_TRUE(socket1->IsBlocking());
|
| +
|
| + // When sending is unblocked, the buffered data should be sent and
|
| + // SignalWriteEvent should fire.
|
| + ss_->SetSendingBlocked(false);
|
| + ss_->ProcessMessagesUntilIdle();
|
| + EXPECT_TRUE(sink.Check(socket1, testing::SSE_WRITE));
|
| + EXPECT_TRUE(sink.Check(socket2, testing::SSE_READ));
|
| +}
|
| +
|
| TEST_F(VirtualSocketServerTest, CreatesStandardDistribution) {
|
| const uint32_t kTestMean[] = {10, 100, 333, 1000};
|
| const double kTestDev[] = { 0.25, 0.1, 0.01 };
|
| - // TODO: The current code only works for 1000 data points or more.
|
| + // TODO(deadbeef): The current code only works for 1000 data points or more.
|
| const uint32_t kTestSamples[] = {/*10, 100,*/ 1000};
|
| for (size_t midx = 0; midx < arraysize(kTestMean); ++midx) {
|
| for (size_t didx = 0; didx < arraysize(kTestDev); ++didx) {
|
|
|