Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(509)

Unified Diff: net/dns/mdns_client_unittest.cc

Issue 581813004: Enqueue mDns requests if send on socket in progress. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mon Sep 22 15:53:28 PDT 2014 Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/dns/mdns_client_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/dns/mdns_client_unittest.cc
diff --git a/net/dns/mdns_client_unittest.cc b/net/dns/mdns_client_unittest.cc
index e872d8b6cec79c75e531cd16051259710fa2e62c..a7a3c033f580bc95160314da2ad23142c6b831aa 100644
--- a/net/dns/mdns_client_unittest.cc
+++ b/net/dns/mdns_client_unittest.cc
@@ -1093,6 +1093,8 @@ class MDnsConnectionTest : public ::testing::Test {
socket_ipv6_ = new MockMDnsDatagramServerSocket(ADDRESS_FAMILY_IPV6);
factory_.PushSocket(socket_ipv6_);
factory_.PushSocket(socket_ipv4_);
+ sample_packet_ = MakeString(kSamplePacket1, sizeof(kSamplePacket1));
+ sample_buffer_ = new StringIOBuffer(sample_packet_);
}
bool InitConnection() {
@@ -1106,13 +1108,12 @@ class MDnsConnectionTest : public ::testing::Test {
SimpleMockSocketFactory factory_;
MDnsConnection connection_;
TestCompletionCallback callback_;
+ std::string sample_packet_;
+ scoped_refptr<IOBuffer> sample_buffer_;
};
TEST_F(MDnsConnectionTest, ReceiveSynchronous) {
Ryan Hamilton 2014/09/22 23:19:56 nit: Should these tests be "ConnectionTest" or "Cl
Vitaly Buka (NO REVIEWS) 2014/09/22 23:33:02 I guess most content of the file should be in mdns
Ryan Hamilton 2014/09/22 23:34:50 Yeah, no worries.
- std::string sample_packet = MakeString(kSamplePacket1,
- sizeof(kSamplePacket1));
-
- socket_ipv6_->SetResponsePacket(sample_packet);
+ socket_ipv6_->SetResponsePacket(sample_packet_);
EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
@@ -1120,64 +1121,103 @@ TEST_F(MDnsConnectionTest, ReceiveSynchronous) {
Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvNow))
.WillOnce(Return(ERR_IO_PENDING));
- EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet));
-
+ EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet_));
ASSERT_TRUE(InitConnection());
}
TEST_F(MDnsConnectionTest, ReceiveAsynchronous) {
- std::string sample_packet = MakeString(kSamplePacket1,
- sizeof(kSamplePacket1));
- socket_ipv6_->SetResponsePacket(sample_packet);
+ socket_ipv6_->SetResponsePacket(sample_packet_);
+
EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
+ .Times(2)
.WillOnce(
- Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvLater))
+ Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvLater))
.WillOnce(Return(ERR_IO_PENDING));
ASSERT_TRUE(InitConnection());
- EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet));
+ EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet_));
base::MessageLoop::current()->RunUntilIdle();
}
-TEST_F(MDnsConnectionTest, Send) {
- std::string sample_packet = MakeString(kSamplePacket1,
- sizeof(kSamplePacket1));
-
- scoped_refptr<IOBufferWithSize> buf(
- new IOBufferWithSize(sizeof kSamplePacket1));
- memcpy(buf->data(), kSamplePacket1, sizeof(kSamplePacket1));
+TEST_F(MDnsConnectionTest, Error) {
+ CompletionCallback callback;
EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
- .WillOnce(Return(ERR_IO_PENDING));
+ .WillOnce(DoAll(SaveArg<3>(&callback), Return(ERR_IO_PENDING)));
ASSERT_TRUE(InitConnection());
+ EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED));
+ callback.Run(ERR_SOCKET_NOT_CONNECTED);
+ base::MessageLoop::current()->RunUntilIdle();
+}
+
+class MDnsConnectionSendTest : public MDnsConnectionTest {
+ protected:
+ virtual void SetUp() OVERRIDE {
+ MDnsConnectionTest::SetUp();
+ EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
+ .WillOnce(Return(ERR_IO_PENDING));
+ EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
+ .WillOnce(Return(ERR_IO_PENDING));
+ EXPECT_TRUE(InitConnection());
+ }
+};
+
+TEST_F(MDnsConnectionSendTest, Send) {
EXPECT_CALL(*socket_ipv4_,
- SendToInternal(sample_packet, "224.0.0.251:5353", _));
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _));
EXPECT_CALL(*socket_ipv6_,
- SendToInternal(sample_packet, "[ff02::fb]:5353", _));
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _));
- connection_.Send(buf.get(), buf->size());
+ connection_.Send(sample_buffer_, sample_packet_.size());
}
-TEST_F(MDnsConnectionTest, Error) {
+TEST_F(MDnsConnectionSendTest, SendError) {
CompletionCallback callback;
- EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
- .WillOnce(Return(ERR_IO_PENDING));
- EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
- .WillOnce(DoAll(SaveArg<3>(&callback), Return(ERR_IO_PENDING)));
-
- ASSERT_TRUE(InitConnection());
+ EXPECT_CALL(*socket_ipv4_,
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _));
+ EXPECT_CALL(*socket_ipv6_,
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _))
+ .WillOnce(DoAll(SaveArg<2>(&callback), Return(ERR_SOCKET_NOT_CONNECTED)));
+ connection_.Send(sample_buffer_, sample_packet_.size());
EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED));
- callback.Run(ERR_SOCKET_NOT_CONNECTED);
+ base::MessageLoop::current()->RunUntilIdle();
+}
+
+TEST_F(MDnsConnectionSendTest, SendQueued) {
+ // Send data immediately.
+ EXPECT_CALL(*socket_ipv4_,
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _))
+ .Times(2)
+ .WillRepeatedly(Return(OK));
+
+ CompletionCallback callback;
+ // Delay sending data. Only the first call should be made.
+ EXPECT_CALL(*socket_ipv6_,
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _))
+ .WillOnce(DoAll(SaveArg<2>(&callback), Return(ERR_IO_PENDING)));
Ryan Hamilton 2014/09/22 23:19:56 Wow, clever!
+
+ connection_.Send(sample_buffer_, sample_packet_.size());
+ connection_.Send(sample_buffer_, sample_packet_.size());
+
+ // The second IPv6 packed is not sent yet.
+ EXPECT_CALL(*socket_ipv4_,
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _))
+ .Times(0);
+ // Expect call for the second IPv6 packed.
+ EXPECT_CALL(*socket_ipv6_,
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _))
+ .WillOnce(Return(OK));
+ callback.Run(OK);
}
} // namespace
« no previous file with comments | « net/dns/mdns_client_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698