diff options
Diffstat (limited to 'net/udp/udp_socket_unittest.cc')
-rw-r--r-- | net/udp/udp_socket_unittest.cc | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/net/udp/udp_socket_unittest.cc b/net/udp/udp_socket_unittest.cc index 09a2806..d488bea 100644 --- a/net/udp/udp_socket_unittest.cc +++ b/net/udp/udp_socket_unittest.cc @@ -526,6 +526,60 @@ TEST_F(UDPSocketTest, CloseWithPendingRead) { EXPECT_FALSE(callback.have_result()); } +#if defined(OS_ANDROID) +// Some Android devices do not support multicast socket. +// The ones supporting multicast need WifiManager.MulitcastLock to enable it. +// http://goo.gl/jjAk9 +#define MAYBE_JoinMulticastGroup DISABLED_JoinMulticastGroup +#else +#define MAYBE_JoinMulticastGroup JoinMulticastGroup +#endif // defined(OS_ANDROID) + +TEST_F(UDPSocketTest, MAYBE_JoinMulticastGroup) { + const int kPort = 9999; + const char* const kGroup = "237.132.100.17"; + + IPEndPoint bind_address; + CreateUDPAddress("0.0.0.0", kPort, &bind_address); + IPAddressNumber group_ip; + EXPECT_TRUE(ParseIPLiteralToNumber(kGroup, &group_ip)); + + UDPSocket socket(DatagramSocket::DEFAULT_BIND, + RandIntCallback(), + NULL, + NetLog::Source()); + EXPECT_EQ(OK, socket.Bind(bind_address)); + EXPECT_EQ(OK, socket.JoinGroup(group_ip)); + // Joining group multiple times. + EXPECT_NE(OK, socket.JoinGroup(group_ip)); + EXPECT_EQ(OK, socket.LeaveGroup(group_ip)); + // Leaving group multiple times. + EXPECT_NE(OK, socket.LeaveGroup(group_ip)); + + socket.Close(); +} + +TEST_F(UDPSocketTest, MulticastOptions) { + const int kPort = 9999; + IPEndPoint bind_address; + CreateUDPAddress("0.0.0.0", kPort, &bind_address); + + UDPSocket socket(DatagramSocket::DEFAULT_BIND, + RandIntCallback(), + NULL, + NetLog::Source()); + // Before binding. + EXPECT_EQ(OK, socket.SetMulticastLoopbackMode(false)); + EXPECT_EQ(OK, socket.SetMulticastLoopbackMode(true)); + EXPECT_EQ(OK, socket.SetMulticastTimeToLive(0)); + EXPECT_EQ(OK, socket.SetMulticastTimeToLive(3)); + EXPECT_NE(OK, socket.SetMulticastTimeToLive(-1)); + + EXPECT_EQ(OK, socket.Bind(bind_address)); + + socket.Close(); +} + } // namespace } // namespace net |