| 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 |