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 |