| Index: net/udp/udp_socket_unittest.cc
|
| diff --git a/net/udp/udp_socket_unittest.cc b/net/udp/udp_socket_unittest.cc
|
| index ef437316bc09647b74593ebdd85dc59df06c42a4..0f21521162814192b73fc4f4f71e983fbd121def 100644
|
| --- a/net/udp/udp_socket_unittest.cc
|
| +++ b/net/udp/udp_socket_unittest.cc
|
| @@ -107,7 +107,7 @@ class UDPSocketTest : public PlatformTest {
|
| return bytes_sent;
|
| }
|
|
|
| - private:
|
| + protected:
|
| static const int kMaxRead = 1024;
|
| scoped_refptr<IOBufferWithSize> buffer_;
|
| IPEndPoint recv_from_address_;
|
| @@ -223,14 +223,17 @@ TEST_F(UDPSocketTest, ClientGetLocalPeerAddresses) {
|
| struct TestData {
|
| std::string remote_address;
|
| std::string local_address;
|
| - bool is_ipv6;
|
| + bool may_fail;
|
| } tests[] = {
|
| { "127.0.00.1", "127.0.0.1", false },
|
| { "192.168.1.1", "127.0.0.1", false },
|
| - { "::1", "::1", true },
|
| + { "::1", "::1", false },
|
| { "2001:db8:0::42", "::1", true },
|
| };
|
| for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); i++) {
|
| + SCOPED_TRACE(std::string("Connecting from ") + tests[i].local_address +
|
| + std::string(" to ") + tests[i].remote_address);
|
| +
|
| net::IPAddressNumber ip_number;
|
| net::ParseIPLiteralToNumber(tests[i].remote_address, &ip_number);
|
| net::IPEndPoint remote_address(ip_number, 80);
|
| @@ -239,6 +242,12 @@ TEST_F(UDPSocketTest, ClientGetLocalPeerAddresses) {
|
|
|
| UDPClientSocket client(NULL, NetLog::Source());
|
| int rv = client.Connect(remote_address);
|
| + if (tests[i].may_fail && rv == ERR_ADDRESS_UNREACHABLE) {
|
| + // Connect() may return ERR_ADDRESS_UNREACHABLE for IPv6
|
| + // addresses if IPv6 is not configured.
|
| + continue;
|
| + }
|
| +
|
| EXPECT_LE(ERR_IO_PENDING, rv);
|
|
|
| IPEndPoint fetched_local_address;
|
| @@ -260,21 +269,52 @@ TEST_F(UDPSocketTest, ClientGetLocalPeerAddresses) {
|
| }
|
|
|
| TEST_F(UDPSocketTest, ServerGetLocalAddress) {
|
| - // TODO(mbelshe): implement me
|
| + IPEndPoint bind_address;
|
| + CreateUDPAddress("127.0.0.1", 0, &bind_address);
|
| + UDPServerSocket server(NULL, NetLog::Source());
|
| + int rv = server.Listen(bind_address);
|
| + EXPECT_EQ(OK, rv);
|
| +
|
| + IPEndPoint local_address;
|
| + rv = server.GetLocalAddress(&local_address);
|
| + EXPECT_EQ(rv, 0);
|
| +
|
| + // Verify that port was allocated.
|
| + EXPECT_GE(local_address.port(), 0);
|
| + EXPECT_EQ(local_address.address(), bind_address.address());
|
| }
|
|
|
| TEST_F(UDPSocketTest, ServerGetPeerAddress) {
|
| - // TODO(mbelshe): implement me
|
| + IPEndPoint bind_address;
|
| + CreateUDPAddress("127.0.0.1", 0, &bind_address);
|
| + UDPServerSocket server(NULL, NetLog::Source());
|
| + int rv = server.Listen(bind_address);
|
| + EXPECT_EQ(OK, rv);
|
| +
|
| + IPEndPoint peer_address;
|
| + rv = server.GetPeerAddress(&peer_address);
|
| + EXPECT_EQ(rv, ERR_SOCKET_NOT_CONNECTED);
|
| }
|
|
|
| -} // namespace
|
| +// Close the socket while read is pending.
|
| +TEST_F(UDPSocketTest, CloseWithPendingRead) {
|
| + IPEndPoint bind_address;
|
| + CreateUDPAddress("127.0.0.1", 0, &bind_address);
|
| + UDPServerSocket server(NULL, NetLog::Source());
|
| + int rv = server.Listen(bind_address);
|
| + EXPECT_EQ(OK, rv);
|
|
|
| -} // namespace net
|
| + TestCompletionCallback callback;
|
| + IPEndPoint from;
|
| + rv = server.RecvFrom(buffer_, kMaxRead, &from, &callback);
|
| + EXPECT_EQ(rv, ERR_IO_PENDING);
|
|
|
| -int main(int argc, char** argv) {
|
| - // Record histograms, so we can get histograms data in tests.
|
| - base::StatisticsRecorder recorder;
|
| - NetTestSuite test_suite(argc, argv);
|
| + server.Close();
|
|
|
| - return test_suite.Run();
|
| + EXPECT_TRUE(callback.have_result());
|
| + EXPECT_EQ(callback.GetResult(rv), ERR_ABORTED);
|
| }
|
| +
|
| +} // namespace
|
| +
|
| +} // namespace net
|
|
|