OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/at_exit.h" |
5 #include "base/macros.h" | 6 #include "base/macros.h" |
6 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
7 #include "base/run_loop.h" | |
8 #include "mojo/public/cpp/application/application_connection.h" | |
9 #include "mojo/public/cpp/application/application_impl.h" | |
10 #include "mojo/public/cpp/application/application_test_base.h" | |
11 #include "mojo/public/cpp/bindings/callback.h" | 8 #include "mojo/public/cpp/bindings/callback.h" |
12 #include "mojo/services/network/public/cpp/udp_socket_wrapper.h" | 9 #include "mojo/services/network/public/cpp/udp_socket_wrapper.h" |
13 #include "mojo/services/network/public/interfaces/network_service.mojom.h" | 10 #include "mojo/services/network/public/interfaces/network_service.mojom.h" |
14 #include "mojo/services/network/public/interfaces/udp_socket.mojom.h" | 11 #include "mojo/services/network/public/interfaces/udp_socket.mojom.h" |
| 12 #include "mojo/shell/shell_test_helper.h" |
15 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "url/gurl.h" |
17 | 16 |
18 namespace mojo { | 17 namespace mojo { |
19 namespace service { | 18 namespace service { |
20 namespace { | 19 namespace { |
21 | 20 |
22 NetAddressPtr GetLocalHostWithAnyPort() { | 21 NetAddressPtr GetLocalHostWithAnyPort() { |
23 NetAddressPtr addr(NetAddress::New()); | 22 NetAddressPtr addr(NetAddress::New()); |
24 addr->family = NET_ADDRESS_FAMILY_IPV4; | 23 addr->family = NET_ADDRESS_FAMILY_IPV4; |
25 addr->ipv4 = NetAddressIPv4::New(); | 24 addr->ipv4 = NetAddressIPv4::New(); |
26 addr->ipv4->port = 0; | 25 addr->ipv4->port = 0; |
(...skipping 30 matching lines...) Expand all Loading... |
57 | 56 |
58 base::RunLoop run_loop; | 57 base::RunLoop run_loop; |
59 run_loop_ = &run_loop; | 58 run_loop_ = &run_loop; |
60 run_loop.Run(); | 59 run_loop.Run(); |
61 run_loop_ = nullptr; | 60 run_loop_ = nullptr; |
62 } | 61 } |
63 | 62 |
64 protected: | 63 protected: |
65 struct StateBase : public CallbackType::Runnable { | 64 struct StateBase : public CallbackType::Runnable { |
66 StateBase() : test_callback_(nullptr) {} | 65 StateBase() : test_callback_(nullptr) {} |
67 ~StateBase() override {} | 66 virtual ~StateBase() {} |
68 | 67 |
69 void set_test_callback(TestCallbackBase* test_callback) { | 68 void set_test_callback(TestCallbackBase* test_callback) { |
70 test_callback_ = test_callback; | 69 test_callback_ = test_callback; |
71 } | 70 } |
72 | 71 |
73 protected: | 72 protected: |
74 void NotifyRun() const { | 73 void NotifyRun() const { |
75 if (test_callback_) { | 74 if (test_callback_) { |
76 test_callback_->ran_ = true; | 75 test_callback_->ran_ = true; |
77 if (test_callback_->run_loop_) | 76 if (test_callback_->run_loop_) |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 } | 214 } |
216 NotifyRun(); | 215 NotifyRun(); |
217 } | 216 } |
218 }; | 217 }; |
219 | 218 |
220 NetworkErrorPtr result_; | 219 NetworkErrorPtr result_; |
221 NetAddressPtr src_addr_; | 220 NetAddressPtr src_addr_; |
222 Array<uint8_t> data_; | 221 Array<uint8_t> data_; |
223 }; | 222 }; |
224 | 223 |
225 class UDPSocketAppTest : public test::ApplicationTestBase { | 224 class UDPSocketTest : public testing::Test { |
226 public: | 225 public: |
227 UDPSocketAppTest() {} | 226 UDPSocketTest() {} |
228 ~UDPSocketAppTest() override {} | 227 virtual ~UDPSocketTest() {} |
229 | 228 |
230 void SetUp() override { | 229 virtual void SetUp() override { |
231 ApplicationTestBase::SetUp(); | 230 test_helper_.Init(); |
232 | 231 |
233 ApplicationConnection* connection = | 232 test_helper_.application_manager()->ConnectToService( |
234 application_impl()->ConnectToApplication("mojo:network_service"); | 233 GURL("mojo:network_service"), &network_service_); |
235 connection->ConnectToService(&network_service_); | |
236 | 234 |
237 network_service_->CreateUDPSocket(GetProxy(&udp_socket_)); | 235 network_service_->CreateUDPSocket(GetProxy(&udp_socket_)); |
238 udp_socket_.set_client(&udp_socket_client_); | 236 udp_socket_.set_client(&udp_socket_client_); |
239 } | 237 } |
240 | 238 |
241 protected: | 239 protected: |
242 struct ReceiveResult { | 240 struct ReceiveResult { |
243 NetworkErrorPtr result; | 241 NetworkErrorPtr result; |
244 NetAddressPtr addr; | 242 NetAddressPtr addr; |
245 Array<uint8_t> data; | 243 Array<uint8_t> data; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 if (GetReceiveResults()->size() == count) | 286 if (GetReceiveResults()->size() == count) |
289 return; | 287 return; |
290 | 288 |
291 udp_socket_client_.expected_receive_count_ = count; | 289 udp_socket_client_.expected_receive_count_ = count; |
292 base::RunLoop run_loop; | 290 base::RunLoop run_loop; |
293 udp_socket_client_.run_loop_ = &run_loop; | 291 udp_socket_client_.run_loop_ = &run_loop; |
294 run_loop.Run(); | 292 run_loop.Run(); |
295 udp_socket_client_.run_loop_ = nullptr; | 293 udp_socket_client_.run_loop_ = nullptr; |
296 } | 294 } |
297 | 295 |
| 296 base::ShadowingAtExitManager at_exit_; |
| 297 shell::ShellTestHelper test_helper_; |
| 298 |
298 NetworkServicePtr network_service_; | 299 NetworkServicePtr network_service_; |
299 UDPSocketPtr udp_socket_; | 300 UDPSocketPtr udp_socket_; |
300 UDPSocketClientImpl udp_socket_client_; | 301 UDPSocketClientImpl udp_socket_client_; |
301 | 302 |
302 DISALLOW_COPY_AND_ASSIGN(UDPSocketAppTest); | 303 DISALLOW_COPY_AND_ASSIGN(UDPSocketTest); |
303 }; | 304 }; |
304 | 305 |
305 } // namespace | 306 } // namespace |
306 | 307 |
307 TEST_F(UDPSocketAppTest, Settings) { | 308 TEST_F(UDPSocketTest, Settings) { |
308 TestCallback callback1; | 309 TestCallback callback1; |
309 udp_socket_->AllowAddressReuse(callback1.callback()); | 310 udp_socket_->AllowAddressReuse(callback1.callback()); |
310 callback1.WaitForResult(); | 311 callback1.WaitForResult(); |
311 EXPECT_EQ(net::OK, callback1.result()->code); | 312 EXPECT_EQ(net::OK, callback1.result()->code); |
312 | 313 |
313 // Should fail because the socket hasn't been bound. | 314 // Should fail because the socket hasn't been bound. |
314 TestCallback callback2; | 315 TestCallback callback2; |
315 udp_socket_->SetSendBufferSize(1024, callback2.callback()); | 316 udp_socket_->SetSendBufferSize(1024, callback2.callback()); |
316 callback2.WaitForResult(); | 317 callback2.WaitForResult(); |
317 EXPECT_NE(net::OK, callback2.result()->code); | 318 EXPECT_NE(net::OK, callback2.result()->code); |
(...skipping 30 matching lines...) Expand all Loading... |
348 udp_socket_->NegotiateMaxPendingSendRequests(0, callback8.callback()); | 349 udp_socket_->NegotiateMaxPendingSendRequests(0, callback8.callback()); |
349 callback8.WaitForResult(); | 350 callback8.WaitForResult(); |
350 EXPECT_GT(callback8.result(), 0u); | 351 EXPECT_GT(callback8.result(), 0u); |
351 | 352 |
352 TestCallbackWithUint32 callback9; | 353 TestCallbackWithUint32 callback9; |
353 udp_socket_->NegotiateMaxPendingSendRequests(16, callback9.callback()); | 354 udp_socket_->NegotiateMaxPendingSendRequests(16, callback9.callback()); |
354 callback9.WaitForResult(); | 355 callback9.WaitForResult(); |
355 EXPECT_GT(callback9.result(), 0u); | 356 EXPECT_GT(callback9.result(), 0u); |
356 } | 357 } |
357 | 358 |
358 TEST_F(UDPSocketAppTest, TestReadWrite) { | 359 TEST_F(UDPSocketTest, TestReadWrite) { |
359 TestCallbackWithAddress callback1; | 360 TestCallbackWithAddress callback1; |
360 udp_socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); | 361 udp_socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
361 callback1.WaitForResult(); | 362 callback1.WaitForResult(); |
362 ASSERT_EQ(net::OK, callback1.result()->code); | 363 ASSERT_EQ(net::OK, callback1.result()->code); |
363 ASSERT_NE(0u, callback1.net_address()->ipv4->port); | 364 ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
364 | 365 |
365 NetAddressPtr server_addr = callback1.net_address().Clone(); | 366 NetAddressPtr server_addr = callback1.net_address().Clone(); |
366 | 367 |
367 UDPSocketPtr client_socket; | 368 UDPSocketPtr client_socket; |
368 network_service_->CreateUDPSocket(GetProxy(&client_socket)); | 369 network_service_->CreateUDPSocket(GetProxy(&client_socket)); |
(...skipping 25 matching lines...) Expand all Loading... |
394 scoped_ptr<ReceiveResult> result(GetReceiveResults()->front()); | 395 scoped_ptr<ReceiveResult> result(GetReceiveResults()->front()); |
395 GetReceiveResults()->pop(); | 396 GetReceiveResults()->pop(); |
396 | 397 |
397 EXPECT_EQ(static_cast<int>(kDatagramSize), result->result->code); | 398 EXPECT_EQ(static_cast<int>(kDatagramSize), result->result->code); |
398 EXPECT_TRUE(result->addr.Equals(client_addr)); | 399 EXPECT_TRUE(result->addr.Equals(client_addr)); |
399 EXPECT_TRUE(result->data.Equals( | 400 EXPECT_TRUE(result->data.Equals( |
400 CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize))); | 401 CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize))); |
401 } | 402 } |
402 } | 403 } |
403 | 404 |
404 TEST_F(UDPSocketAppTest, TestUDPSocketWrapper) { | 405 TEST_F(UDPSocketTest, TestUDPSocketWrapper) { |
405 UDPSocketWrapper udp_socket(udp_socket_.Pass(), 4, 4); | 406 UDPSocketWrapper udp_socket(udp_socket_.Pass(), 4, 4); |
406 | 407 |
407 TestCallbackWithAddress callback1; | 408 TestCallbackWithAddress callback1; |
408 udp_socket.Bind(GetLocalHostWithAnyPort(), callback1.callback()); | 409 udp_socket.Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
409 callback1.WaitForResult(); | 410 callback1.WaitForResult(); |
410 ASSERT_EQ(net::OK, callback1.result()->code); | 411 ASSERT_EQ(net::OK, callback1.result()->code); |
411 ASSERT_NE(0u, callback1.net_address()->ipv4->port); | 412 ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
412 | 413 |
413 NetAddressPtr server_addr = callback1.net_address().Clone(); | 414 NetAddressPtr server_addr = callback1.net_address().Clone(); |
414 | 415 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
448 receive_callbacks[j].result()->code); | 449 receive_callbacks[j].result()->code); |
449 EXPECT_TRUE(receive_callbacks[j].src_addr().Equals(client_addr)); | 450 EXPECT_TRUE(receive_callbacks[j].src_addr().Equals(client_addr)); |
450 EXPECT_TRUE(receive_callbacks[j].data().Equals( | 451 EXPECT_TRUE(receive_callbacks[j].data().Equals( |
451 CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize))); | 452 CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize))); |
452 } | 453 } |
453 } | 454 } |
454 } | 455 } |
455 | 456 |
456 } // namespace service | 457 } // namespace service |
457 } // namespace mojo | 458 } // namespace mojo |
OLD | NEW |