Chromium Code Reviews| 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 |