OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/udp/udp_socket.h" | 5 #include "net/udp/udp_socket.h" |
6 | 6 |
7 #include "net/udp/udp_client_socket.h" | 7 #include "net/udp/udp_client_socket.h" |
8 #include "net/udp/udp_server_socket.h" | 8 #include "net/udp/udp_server_socket.h" |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 TEST_F(UDPSocketTest, DISABLED_Broadcast) { | 210 TEST_F(UDPSocketTest, DISABLED_Broadcast) { |
211 #elif defined(OS_ANDROID) | 211 #elif defined(OS_ANDROID) |
212 // It is also disabled for Android because it is extremely flaky. | 212 // It is also disabled for Android because it is extremely flaky. |
213 // The first call to SendToSocket returns -109 (Address not reachable) | 213 // The first call to SendToSocket returns -109 (Address not reachable) |
214 // in some unpredictable cases. crbug.com/139144. | 214 // in some unpredictable cases. crbug.com/139144. |
215 TEST_F(UDPSocketTest, DISABLED_Broadcast) { | 215 TEST_F(UDPSocketTest, DISABLED_Broadcast) { |
216 #else | 216 #else |
217 TEST_F(UDPSocketTest, Broadcast) { | 217 TEST_F(UDPSocketTest, Broadcast) { |
218 #endif | 218 #endif |
219 const int kPort = 9999; | 219 const int kPort = 9999; |
220 std::string first_message("first message"), second_message("second message"); | 220 std::string first_message("first message"); |
| 221 std::string second_message("second message"); |
| 222 std::string third_message("third message"); |
| 223 std::string fourth_message("fourth message"); |
221 | 224 |
222 IPEndPoint broadcast_address; | 225 IPEndPoint broadcast_address; |
223 CreateUDPAddress("255.255.255.255", kPort, &broadcast_address); | 226 CreateUDPAddress("255.255.255.255", kPort, &broadcast_address); |
224 IPEndPoint listen_address; | 227 IPEndPoint listen_address; |
225 CreateUDPAddress("0.0.0.0", kPort, &listen_address); | 228 CreateUDPAddress("0.0.0.0", kPort, &listen_address); |
226 | 229 |
227 CapturingNetLog server1_log, server2_log; | 230 CapturingNetLog server1_log, server2_log; |
228 scoped_ptr<UDPServerSocket> server1( | 231 scoped_ptr<UDPServerSocket> server1( |
229 new UDPServerSocket(&server1_log, NetLog::Source())); | 232 new UDPServerSocket(&server1_log, NetLog::Source())); |
230 scoped_ptr<UDPServerSocket> server2( | 233 scoped_ptr<UDPServerSocket> server2( |
231 new UDPServerSocket(&server2_log, NetLog::Source())); | 234 new UDPServerSocket(&server2_log, NetLog::Source())); |
232 server1->AllowAddressReuse(); | 235 server1->AllowAddressReuse(); |
233 server1->AllowBroadcast(); | 236 int rv = server1->SetBroadcast(true); |
| 237 ASSERT_EQ(OK, rv); |
234 server2->AllowAddressReuse(); | 238 server2->AllowAddressReuse(); |
235 server2->AllowBroadcast(); | 239 rv = server2->SetBroadcast(true); |
| 240 ASSERT_EQ(OK, rv); |
236 | 241 |
237 int rv = server1->Listen(listen_address); | 242 rv = server1->Listen(listen_address); |
238 EXPECT_EQ(OK, rv); | 243 EXPECT_EQ(OK, rv); |
239 rv = server2->Listen(listen_address); | 244 rv = server2->Listen(listen_address); |
240 EXPECT_EQ(OK, rv); | 245 EXPECT_EQ(OK, rv); |
241 | 246 |
242 rv = SendToSocket(server1.get(), first_message, broadcast_address); | 247 rv = SendToSocket(server1.get(), first_message, broadcast_address); |
243 ASSERT_EQ(static_cast<int>(first_message.size()), rv); | 248 ASSERT_EQ(static_cast<int>(first_message.size()), rv); |
244 std::string str = RecvFromSocket(server1.get()); | 249 std::string str = RecvFromSocket(server1.get()); |
245 ASSERT_EQ(first_message, str); | 250 ASSERT_EQ(first_message, str); |
246 str = RecvFromSocket(server2.get()); | 251 str = RecvFromSocket(server2.get()); |
247 ASSERT_EQ(first_message, str); | 252 ASSERT_EQ(first_message, str); |
248 | 253 |
249 rv = SendToSocket(server2.get(), second_message, broadcast_address); | 254 rv = SendToSocket(server2.get(), second_message, broadcast_address); |
250 ASSERT_EQ(static_cast<int>(second_message.size()), rv); | 255 ASSERT_EQ(static_cast<int>(second_message.size()), rv); |
251 str = RecvFromSocket(server1.get()); | 256 str = RecvFromSocket(server1.get()); |
252 ASSERT_EQ(second_message, str); | 257 ASSERT_EQ(second_message, str); |
253 str = RecvFromSocket(server2.get()); | 258 str = RecvFromSocket(server2.get()); |
254 ASSERT_EQ(second_message, str); | 259 ASSERT_EQ(second_message, str); |
| 260 |
| 261 rv = server1->SetBroadcast(false); |
| 262 ASSERT_EQ(OK, rv); |
| 263 rv = server2->SetBroadcast(false); |
| 264 ASSERT_EQ(OK, rv); |
| 265 rv = SendToSocket(server1.get(), third_message, broadcast_address); |
| 266 ASSERT_LT(rv, 0); |
| 267 rv = SendToSocket(server2.get(), fourth_message, broadcast_address); |
| 268 ASSERT_LT(rv, 0); |
255 } | 269 } |
256 | 270 |
257 // In this test, we verify that random binding logic works, which attempts | 271 // In this test, we verify that random binding logic works, which attempts |
258 // to bind to a random port and returns if succeeds, otherwise retries for | 272 // to bind to a random port and returns if succeeds, otherwise retries for |
259 // |kBindRetries| number of times. | 273 // |kBindRetries| number of times. |
260 | 274 |
261 // To generate the scenario, we first create |kBindRetries| number of | 275 // To generate the scenario, we first create |kBindRetries| number of |
262 // UDPClientSockets with default binding policy and connect to the same | 276 // UDPClientSockets with default binding policy and connect to the same |
263 // peer and save the used port numbers. Then we get rid of the last | 277 // peer and save the used port numbers. Then we get rid of the last |
264 // socket, making sure that the local port it was bound to is available. | 278 // socket, making sure that the local port it was bound to is available. |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 g_expected_traffic_type = QOSTrafficTypeExcellentEffort; | 746 g_expected_traffic_type = QOSTrafficTypeExcellentEffort; |
733 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_NO_CHANGE)); | 747 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_NO_CHANGE)); |
734 g_expected_dscp = DSCP_DEFAULT; | 748 g_expected_dscp = DSCP_DEFAULT; |
735 g_expected_traffic_type = QOSTrafficTypeBestEffort; | 749 g_expected_traffic_type = QOSTrafficTypeBestEffort; |
736 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_DEFAULT)); | 750 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_DEFAULT)); |
737 client.Close(); | 751 client.Close(); |
738 } | 752 } |
739 #endif | 753 #endif |
740 | 754 |
741 } // namespace net | 755 } // namespace net |
OLD | NEW |