diff options
author | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-16 11:52:34 +0000 |
---|---|---|
committer | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-16 11:52:34 +0000 |
commit | a1781d7b57ead009cd69fed51dd1185ab1844404 (patch) | |
tree | 826c1c20f94c24dd9adb2d0134d17f5381c4105c /net/udp/udp_socket_unittest.cc | |
parent | b0b902f2aa03f2fe861456d720c7c82007e37b9f (diff) | |
download | chromium_src-a1781d7b57ead009cd69fed51dd1185ab1844404.zip chromium_src-a1781d7b57ead009cd69fed51dd1185ab1844404.tar.gz chromium_src-a1781d7b57ead009cd69fed51dd1185ab1844404.tar.bz2 |
Added broadcasting feature to UDP server sockets.
BUG=136797
TEST=net_unittests:UDPSocketTest.Broadcast
Review URL: https://chromiumcodereview.appspot.com/10739002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146790 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/udp/udp_socket_unittest.cc')
-rw-r--r-- | net/udp/udp_socket_unittest.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/net/udp/udp_socket_unittest.cc b/net/udp/udp_socket_unittest.cc index 1650709..2da866d 100644 --- a/net/udp/udp_socket_unittest.cc +++ b/net/udp/udp_socket_unittest.cc @@ -201,6 +201,45 @@ TEST_F(UDPSocketTest, Connect) { client_entries, 5, NetLog::TYPE_SOCKET_ALIVE)); } +TEST_F(UDPSocketTest, Broadcast) { + const int kPort = 9999; + std::string first_message("first message"), second_message("second message"); + + IPEndPoint broadcast_address; + CreateUDPAddress("255.255.255.255", kPort, &broadcast_address); + IPEndPoint listen_address; + CreateUDPAddress("0.0.0.0", kPort, &listen_address); + + CapturingNetLog server1_log, server2_log; + scoped_ptr<UDPServerSocket> server1( + new UDPServerSocket(&server1_log, NetLog::Source())); + scoped_ptr<UDPServerSocket> server2( + new UDPServerSocket(&server2_log, NetLog::Source())); + server1->AllowAddressReuse(); + server1->AllowBroadcast(); + server2->AllowAddressReuse(); + server2->AllowBroadcast(); + + int rv = server1->Listen(listen_address); + EXPECT_EQ(OK, rv); + rv = server2->Listen(listen_address); + EXPECT_EQ(OK, rv); + + rv = SendToSocket(server1.get(), first_message, broadcast_address); + EXPECT_EQ(static_cast<int>(first_message.size()), rv); + std::string str = RecvFromSocket(server1.get()); + ASSERT_EQ(first_message, str); + str = RecvFromSocket(server2.get()); + ASSERT_EQ(first_message, str); + + rv = SendToSocket(server2.get(), second_message, broadcast_address); + EXPECT_EQ(static_cast<int>(second_message.size()), rv); + str = RecvFromSocket(server1.get()); + ASSERT_EQ(second_message, str); + str = RecvFromSocket(server2.get()); + ASSERT_EQ(second_message, str); +} + // In this test, we verify that random binding logic works, which attempts // to bind to a random port and returns if succeeds, otherwise retries for // |kBindRetries| number of times. |