Cleanups in udp_socket_unittests. Disabled some tests for Fuchsia.

Various cleanups in the tests.
Disabled tests for broadcast and multicast as these features are not
fully implemented on Fuchsia yet.

Bug: 731302
Change-Id: I3adf576a6d32d03fce54d1ca4175310a03a04664
Reviewed-on: https://chromium-review.googlesource.com/590868
Reviewed-by: Matt Menke <[email protected]>
Commit-Queue: Sergey Ulanov <[email protected]>
Cr-Commit-Position: refs/heads/master@{#490480}
diff --git a/net/socket/udp_socket_unittest.cc b/net/socket/udp_socket_unittest.cc
index 01ed87d0..684d252 100644
--- a/net/socket/udp_socket_unittest.cc
+++ b/net/socket/udp_socket_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "build/build_config.h"
 #include "net/base/io_buffer.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
@@ -55,10 +56,9 @@
 
     int rv = socket->RecvFrom(
         buffer_.get(), kMaxRead, &recv_from_address_, callback.callback());
-    if (rv == ERR_IO_PENDING)
-      rv = callback.WaitForResult();
+    rv = callback.GetResult(rv);
     if (rv < 0)
-      return std::string();  // error!
+      return std::string();
     return std::string(buffer_->data(), rv);
   }
 
@@ -85,8 +85,7 @@
     while (buffer->BytesRemaining()) {
       int rv = socket->SendTo(
           buffer.get(), buffer->BytesRemaining(), address, callback.callback());
-      if (rv == ERR_IO_PENDING)
-        rv = callback.WaitForResult();
+      rv = callback.GetResult(rv);
       if (rv <= 0)
         return bytes_sent > 0 ? bytes_sent : rv;
       bytes_sent += rv;
@@ -99,10 +98,9 @@
     TestCompletionCallback callback;
 
     int rv = socket->Read(buffer_.get(), kMaxRead, callback.callback());
-    if (rv == ERR_IO_PENDING)
-      rv = callback.WaitForResult();
+    rv = callback.GetResult(rv);
     if (rv < 0)
-      return std::string();  // error!
+      return std::string();
     return std::string(buffer_->data(), rv);
   }
 
@@ -120,8 +118,7 @@
     while (buffer->BytesRemaining()) {
       int rv = socket->Write(
           buffer.get(), buffer->BytesRemaining(), callback.callback());
-      if (rv == ERR_IO_PENDING)
-        rv = callback.WaitForResult();
+      rv = callback.GetResult(rv);
       if (rv <= 0)
         return bytes_sent > 0 ? bytes_sent : rv;
       bytes_sent += rv;
@@ -166,20 +163,18 @@
   std::string simple_message("hello world!");
 
   // Setup the server to listen.
-  IPEndPoint bind_address;
-  CreateUDPAddress("127.0.0.1", kPort, &bind_address);
+  IPEndPoint server_address;
+  CreateUDPAddress("127.0.0.1", kPort, &server_address);
   TestNetLog server_log;
   std::unique_ptr<UDPServerSocket> server(
       new UDPServerSocket(&server_log, NetLogSource()));
   if (use_nonblocking_io)
     server->UseNonBlockingIO();
   server->AllowAddressReuse();
-  int rv = server->Listen(bind_address);
+  int rv = server->Listen(server_address);
   ASSERT_THAT(rv, IsOk());
 
   // Setup the client.
-  IPEndPoint server_address;
-  CreateUDPAddress("127.0.0.1", kPort, &server_address);
   TestNetLog client_log;
   std::unique_ptr<UDPClientSocket> client(
       new UDPClientSocket(DatagramSocket::DEFAULT_BIND, RandIntCallback(),
@@ -196,7 +191,7 @@
 
   // Server waits for message.
   std::string str = RecvFromSocket(server.get());
-  DCHECK(simple_message == str);
+  EXPECT_EQ(simple_message, str);
 
   // Server echoes reply.
   rv = SendToSocket(server.get(), simple_message);
@@ -204,7 +199,7 @@
 
   // Client waits for response.
   str = ReadSocket(client.get());
-  DCHECK(simple_message == str);
+  EXPECT_EQ(simple_message, str);
 
   // Test asynchronous read. Server waits for message.
   base::RunLoop run_loop;
@@ -279,18 +274,17 @@
 }
 #endif
 
-#if defined(OS_MACOSX)
-// UDPSocketPrivate_Broadcast is disabled for OSX because it requires
-// root permissions on OSX 10.7+.
-TEST_F(UDPSocketTest, DISABLED_Broadcast) {
-#elif defined(OS_ANDROID)
-// Disabled for Android because devices attached to testbots don't have default
-// network, so broadcasting to 255.255.255.255 returns error -109 (Address not
-// reachable). crbug.com/139144.
-TEST_F(UDPSocketTest, DISABLED_Broadcast) {
+#if defined(OS_MACOSX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
+// - MacOS: requires root permissions on OSX 10.7+.
+// - Android: devices attached to testbots don't have default network, so
+// broadcasting to 255.255.255.255 returns error -109 (Address not reachable).
+// crbug.com/139144.
+// - Fuchsia: TODO(fuchsia): broadcast support is not implemented yet.
+#define MAYBE_LocalBroadcast DISABLED_LocalBroadcast
 #else
-TEST_F(UDPSocketTest, Broadcast) {
+#define MAYBE_LocalBroadcast LocalBroadcast
 #endif
+TEST_F(UDPSocketTest, MAYBE_LocalBroadcast) {
   const uint16_t kPort = 9999;
   std::string first_message("first message"), second_message("second message");
 
@@ -443,26 +437,25 @@
   std::string foreign_message("BAD MESSAGE TO GET!!");
 
   // Setup the first server to listen.
-  IPEndPoint bind_address;
-  CreateUDPAddress("127.0.0.1", kPort1, &bind_address);
+  IPEndPoint server1_address;
+  CreateUDPAddress("127.0.0.1", kPort1, &server1_address);
   UDPServerSocket server1(NULL, NetLogSource());
   server1.AllowAddressReuse();
-  int rv = server1.Listen(bind_address);
+  int rv = server1.Listen(server1_address);
   ASSERT_THAT(rv, IsOk());
 
   // Setup the second server to listen.
-  CreateUDPAddress("127.0.0.1", kPort2, &bind_address);
+  IPEndPoint server2_address;
+  CreateUDPAddress("127.0.0.1", kPort2, &server2_address);
   UDPServerSocket server2(NULL, NetLogSource());
   server2.AllowAddressReuse();
-  rv = server2.Listen(bind_address);
+  rv = server2.Listen(server2_address);
   ASSERT_THAT(rv, IsOk());
 
   // Setup the client, connected to server 1.
-  IPEndPoint server_address;
-  CreateUDPAddress("127.0.0.1", kPort1, &server_address);
   UDPClientSocket client(DatagramSocket::DEFAULT_BIND, RandIntCallback(), NULL,
                          NetLogSource());
-  rv = client.Connect(server_address);
+  rv = client.Connect(server1_address);
   EXPECT_THAT(rv, IsOk());
 
   // Client sends to server1.
@@ -471,7 +464,7 @@
 
   // Server1 waits for message.
   std::string str = RecvFromSocket(&server1);
-  DCHECK(simple_message == str);
+  EXPECT_EQ(simple_message, str);
 
   // Get the client's address.
   IPEndPoint client_address;
@@ -490,7 +483,7 @@
 
   // Client waits for response.
   str = ReadSocket(&client);
-  DCHECK(simple_message == str);
+  EXPECT_EQ(simple_message, str);
 }
 
 TEST_F(UDPSocketTest, ClientGetLocalPeerAddresses) {
@@ -636,10 +629,12 @@
   EXPECT_FALSE(callback.have_result());
 }
 
-#if defined(OS_ANDROID)
+#if defined(OS_ANDROID) || defined(OS_FUCHSIA)
 // Some Android devices do not support multicast socket.
 // The ones supporting multicast need WifiManager.MulitcastLock to enable it.
 // http://goo.gl/jjAk9
+//
+// TODO(fuchsia): Multicast is not implemented on Fuchsia yet.
 #define MAYBE_JoinMulticastGroup DISABLED_JoinMulticastGroup
 #else
 #define MAYBE_JoinMulticastGroup JoinMulticastGroup