summaryrefslogtreecommitdiffstats
path: root/net/udp/udp_socket_unittest.cc
diff options
context:
space:
mode:
authorygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-16 11:52:34 +0000
committerygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-16 11:52:34 +0000
commita1781d7b57ead009cd69fed51dd1185ab1844404 (patch)
tree826c1c20f94c24dd9adb2d0134d17f5381c4105c /net/udp/udp_socket_unittest.cc
parentb0b902f2aa03f2fe861456d720c7c82007e37b9f (diff)
downloadchromium_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.cc39
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.