| 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/macros.h" | 5 #include "base/macros.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "mojo/public/cpp/application/application_connection.h" | 8 #include "mojo/public/cpp/application/application_connection.h" |
| 9 #include "mojo/public/cpp/application/application_impl.h" | 9 #include "mojo/public/cpp/application/application_impl.h" |
| 10 #include "mojo/public/cpp/application/application_test_base.h" | 10 #include "mojo/public/cpp/application/application_test_base.h" |
| 11 #include "mojo/public/cpp/bindings/callback.h" | 11 #include "mojo/public/cpp/bindings/callback.h" |
| 12 #include "mojo/services/network/public/cpp/udp_socket_wrapper.h" | 12 #include "mojo/services/network/public/cpp/udp_socket_wrapper.h" |
| 13 #include "mojo/services/network/public/interfaces/network_service.mojom.h" | 13 #include "mojo/services/network/public/interfaces/network_service.mojom.h" |
| 14 #include "mojo/services/network/public/interfaces/udp_socket.mojom.h" | 14 #include "mojo/services/network/public/interfaces/udp_socket.mojom.h" |
| 15 #include "net/base/net_errors.h" | |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.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(); |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 | 336 |
| 338 DISALLOW_COPY_AND_ASSIGN(UDPSocketAppTest); | 337 DISALLOW_COPY_AND_ASSIGN(UDPSocketAppTest); |
| 339 }; | 338 }; |
| 340 | 339 |
| 341 } // namespace | 340 } // namespace |
| 342 | 341 |
| 343 TEST_F(UDPSocketAppTest, Settings) { | 342 TEST_F(UDPSocketAppTest, Settings) { |
| 344 TestCallback callback1; | 343 TestCallback callback1; |
| 345 socket_->AllowAddressReuse(callback1.callback()); | 344 socket_->AllowAddressReuse(callback1.callback()); |
| 346 callback1.WaitForResult(); | 345 callback1.WaitForResult(); |
| 347 EXPECT_EQ(net::OK, callback1.result()->code); | 346 EXPECT_EQ(NETWORK_CODE_OK, callback1.result()->code); |
| 348 | 347 |
| 349 // Should fail because the socket hasn't been bound. | 348 // Should fail because the socket hasn't been bound. |
| 350 TestCallback callback2; | 349 TestCallback callback2; |
| 351 socket_->SetSendBufferSize(1024, callback2.callback()); | 350 socket_->SetSendBufferSize(1024, callback2.callback()); |
| 352 callback2.WaitForResult(); | 351 callback2.WaitForResult(); |
| 353 EXPECT_NE(net::OK, callback2.result()->code); | 352 EXPECT_NE(NETWORK_CODE_OK, callback2.result()->code); |
| 354 | 353 |
| 355 // Should fail because the socket hasn't been bound. | 354 // Should fail because the socket hasn't been bound. |
| 356 TestCallback callback3; | 355 TestCallback callback3; |
| 357 socket_->SetReceiveBufferSize(2048, callback3.callback()); | 356 socket_->SetReceiveBufferSize(2048, callback3.callback()); |
| 358 callback3.WaitForResult(); | 357 callback3.WaitForResult(); |
| 359 EXPECT_NE(net::OK, callback3.result()->code); | 358 EXPECT_NE(NETWORK_CODE_OK, callback3.result()->code); |
| 360 | 359 |
| 361 TestCallbackWithAddressAndReceiver callback4; | 360 TestCallbackWithAddressAndReceiver callback4; |
| 362 socket_->Bind(GetLocalHostWithAnyPort(), callback4.callback()); | 361 socket_->Bind(GetLocalHostWithAnyPort(), callback4.callback()); |
| 363 callback4.WaitForResult(); | 362 callback4.WaitForResult(); |
| 364 EXPECT_EQ(net::OK, callback4.result()->code); | 363 EXPECT_EQ(NETWORK_CODE_OK, callback4.result()->code); |
| 365 EXPECT_NE(0u, callback4.net_address()->ipv4->port); | 364 EXPECT_NE(0u, callback4.net_address()->ipv4->port); |
| 366 | 365 |
| 367 // Should fail because the socket has been bound. | 366 // Should fail because the socket has been bound. |
| 368 TestCallback callback5; | 367 TestCallback callback5; |
| 369 socket_->AllowAddressReuse(callback5.callback()); | 368 socket_->AllowAddressReuse(callback5.callback()); |
| 370 callback5.WaitForResult(); | 369 callback5.WaitForResult(); |
| 371 EXPECT_NE(net::OK, callback5.result()->code); | 370 EXPECT_NE(NETWORK_CODE_OK, callback5.result()->code); |
| 372 | 371 |
| 373 TestCallback callback6; | 372 TestCallback callback6; |
| 374 socket_->SetSendBufferSize(1024, callback6.callback()); | 373 socket_->SetSendBufferSize(1024, callback6.callback()); |
| 375 callback6.WaitForResult(); | 374 callback6.WaitForResult(); |
| 376 EXPECT_EQ(net::OK, callback6.result()->code); | 375 EXPECT_EQ(NETWORK_CODE_OK, callback6.result()->code); |
| 377 | 376 |
| 378 TestCallback callback7; | 377 TestCallback callback7; |
| 379 socket_->SetReceiveBufferSize(2048, callback7.callback()); | 378 socket_->SetReceiveBufferSize(2048, callback7.callback()); |
| 380 callback7.WaitForResult(); | 379 callback7.WaitForResult(); |
| 381 EXPECT_EQ(net::OK, callback7.result()->code); | 380 EXPECT_EQ(NETWORK_CODE_OK, callback7.result()->code); |
| 382 | 381 |
| 383 TestCallbackWithUint32 callback8; | 382 TestCallbackWithUint32 callback8; |
| 384 socket_->NegotiateMaxPendingSendRequests(0, callback8.callback()); | 383 socket_->NegotiateMaxPendingSendRequests(0, callback8.callback()); |
| 385 callback8.WaitForResult(); | 384 callback8.WaitForResult(); |
| 386 EXPECT_GT(callback8.result(), 0u); | 385 EXPECT_GT(callback8.result(), 0u); |
| 387 | 386 |
| 388 TestCallbackWithUint32 callback9; | 387 TestCallbackWithUint32 callback9; |
| 389 socket_->NegotiateMaxPendingSendRequests(16, callback9.callback()); | 388 socket_->NegotiateMaxPendingSendRequests(16, callback9.callback()); |
| 390 callback9.WaitForResult(); | 389 callback9.WaitForResult(); |
| 391 EXPECT_GT(callback9.result(), 0u); | 390 EXPECT_GT(callback9.result(), 0u); |
| 392 } | 391 } |
| 393 | 392 |
| 394 TEST_F(UDPSocketAppTest, TestReadWrite) { | 393 TEST_F(UDPSocketAppTest, TestReadWrite) { |
| 395 TestCallbackWithAddressAndReceiver callback1; | 394 TestCallbackWithAddressAndReceiver callback1; |
| 396 socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); | 395 socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
| 397 callback1.WaitForResult(); | 396 callback1.WaitForResult(); |
| 398 ASSERT_EQ(net::OK, callback1.result()->code); | 397 ASSERT_EQ(NETWORK_CODE_OK, callback1.result()->code); |
| 399 ASSERT_NE(0u, callback1.net_address()->ipv4->port); | 398 ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
| 400 | 399 |
| 401 receiver_binding_.Bind(callback1.receiver().Pass()); | 400 receiver_binding_.Bind(callback1.receiver().Pass()); |
| 402 | 401 |
| 403 NetAddressPtr server_addr = callback1.net_address().Clone(); | 402 NetAddressPtr server_addr = callback1.net_address().Clone(); |
| 404 | 403 |
| 405 UDPSocketPtr client_socket; | 404 UDPSocketPtr client_socket; |
| 406 network_service_->CreateUDPSocket(GetProxy(&client_socket)); | 405 network_service_->CreateUDPSocket(GetProxy(&client_socket)); |
| 407 | 406 |
| 408 TestCallbackWithAddressAndReceiver callback2; | 407 TestCallbackWithAddressAndReceiver callback2; |
| 409 client_socket->Bind(GetLocalHostWithAnyPort(), callback2.callback()); | 408 client_socket->Bind(GetLocalHostWithAnyPort(), callback2.callback()); |
| 410 callback2.WaitForResult(); | 409 callback2.WaitForResult(); |
| 411 ASSERT_EQ(net::OK, callback2.result()->code); | 410 ASSERT_EQ(NETWORK_CODE_OK, callback2.result()->code); |
| 412 ASSERT_NE(0u, callback2.net_address()->ipv4->port); | 411 ASSERT_NE(0u, callback2.net_address()->ipv4->port); |
| 413 | 412 |
| 414 NetAddressPtr client_addr = callback2.net_address().Clone(); | 413 NetAddressPtr client_addr = callback2.net_address().Clone(); |
| 415 | 414 |
| 416 const size_t kDatagramCount = 6; | 415 const size_t kDatagramCount = 6; |
| 417 const size_t kDatagramSize = 255; | 416 const size_t kDatagramSize = 255; |
| 418 socket_->ReceiveMore(kDatagramCount); | 417 socket_->ReceiveMore(kDatagramCount); |
| 419 | 418 |
| 420 for (size_t i = 0; i < kDatagramCount; ++i) { | 419 for (size_t i = 0; i < kDatagramCount; ++i) { |
| 421 TestCallback callback; | 420 TestCallback callback; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 436 EXPECT_TRUE(result->addr.Equals(client_addr)); | 435 EXPECT_TRUE(result->addr.Equals(client_addr)); |
| 437 EXPECT_TRUE(result->data.Equals( | 436 EXPECT_TRUE(result->data.Equals( |
| 438 CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize))); | 437 CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize))); |
| 439 } | 438 } |
| 440 } | 439 } |
| 441 | 440 |
| 442 TEST_F(UDPSocketAppTest, TestConnectedReadWrite) { | 441 TEST_F(UDPSocketAppTest, TestConnectedReadWrite) { |
| 443 TestCallbackWithAddressAndReceiver callback1; | 442 TestCallbackWithAddressAndReceiver callback1; |
| 444 socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); | 443 socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
| 445 callback1.WaitForResult(); | 444 callback1.WaitForResult(); |
| 446 ASSERT_EQ(net::OK, callback1.result()->code); | 445 ASSERT_EQ(NETWORK_CODE_OK, callback1.result()->code); |
| 447 ASSERT_NE(0u, callback1.net_address()->ipv4->port); | 446 ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
| 448 | 447 |
| 449 receiver_binding_.Bind(callback1.receiver().Pass()); | 448 receiver_binding_.Bind(callback1.receiver().Pass()); |
| 450 | 449 |
| 451 NetAddressPtr server_addr = callback1.net_address().Clone(); | 450 NetAddressPtr server_addr = callback1.net_address().Clone(); |
| 452 | 451 |
| 453 UDPSocketPtr client_socket; | 452 UDPSocketPtr client_socket; |
| 454 network_service_->CreateUDPSocket(GetProxy(&client_socket)); | 453 network_service_->CreateUDPSocket(GetProxy(&client_socket)); |
| 455 | 454 |
| 456 TestCallbackWithAddressAndReceiver callback2; | 455 TestCallbackWithAddressAndReceiver callback2; |
| 457 client_socket->Connect(server_addr.Clone(), callback2.callback()); | 456 client_socket->Connect(server_addr.Clone(), callback2.callback()); |
| 458 callback2.WaitForResult(); | 457 callback2.WaitForResult(); |
| 459 ASSERT_EQ(net::OK, callback2.result()->code); | 458 ASSERT_EQ(NETWORK_CODE_OK, callback2.result()->code); |
| 460 ASSERT_NE(0u, callback2.net_address()->ipv4->port); | 459 ASSERT_NE(0u, callback2.net_address()->ipv4->port); |
| 461 | 460 |
| 462 UDPSocketReceiverImpl client_socket_receiver; | 461 UDPSocketReceiverImpl client_socket_receiver; |
| 463 Binding<UDPSocketReceiver> client_receiver_binding( | 462 Binding<UDPSocketReceiver> client_receiver_binding( |
| 464 &client_socket_receiver, callback2.receiver().Pass()); | 463 &client_socket_receiver, callback2.receiver().Pass()); |
| 465 | 464 |
| 466 NetAddressPtr client_addr = callback2.net_address().Clone(); | 465 NetAddressPtr client_addr = callback2.net_address().Clone(); |
| 467 | 466 |
| 468 const size_t kDatagramCount = 6; | 467 const size_t kDatagramCount = 6; |
| 469 const size_t kDatagramSize = 255; | 468 const size_t kDatagramSize = 255; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize))); | 515 CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize))); |
| 517 } | 516 } |
| 518 } | 517 } |
| 519 | 518 |
| 520 TEST_F(UDPSocketAppTest, TestWrapperReadWrite) { | 519 TEST_F(UDPSocketAppTest, TestWrapperReadWrite) { |
| 521 UDPSocketWrapper socket(socket_.Pass(), 4, 4); | 520 UDPSocketWrapper socket(socket_.Pass(), 4, 4); |
| 522 | 521 |
| 523 TestCallbackWithAddress callback1; | 522 TestCallbackWithAddress callback1; |
| 524 socket.Bind(GetLocalHostWithAnyPort(), callback1.callback()); | 523 socket.Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
| 525 callback1.WaitForResult(); | 524 callback1.WaitForResult(); |
| 526 ASSERT_EQ(net::OK, callback1.result()->code); | 525 ASSERT_EQ(NETWORK_CODE_OK, callback1.result()->code); |
| 527 ASSERT_NE(0u, callback1.net_address()->ipv4->port); | 526 ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
| 528 | 527 |
| 529 NetAddressPtr server_addr = callback1.net_address().Clone(); | 528 NetAddressPtr server_addr = callback1.net_address().Clone(); |
| 530 | 529 |
| 531 UDPSocketPtr raw_client_socket; | 530 UDPSocketPtr raw_client_socket; |
| 532 network_service_->CreateUDPSocket(GetProxy(&raw_client_socket)); | 531 network_service_->CreateUDPSocket(GetProxy(&raw_client_socket)); |
| 533 UDPSocketWrapper client_socket(raw_client_socket.Pass(), 4, 4); | 532 UDPSocketWrapper client_socket(raw_client_socket.Pass(), 4, 4); |
| 534 | 533 |
| 535 TestCallbackWithAddress callback2; | 534 TestCallbackWithAddress callback2; |
| 536 client_socket.Bind(GetLocalHostWithAnyPort(), callback2.callback()); | 535 client_socket.Bind(GetLocalHostWithAnyPort(), callback2.callback()); |
| 537 callback2.WaitForResult(); | 536 callback2.WaitForResult(); |
| 538 ASSERT_EQ(net::OK, callback2.result()->code); | 537 ASSERT_EQ(NETWORK_CODE_OK, callback2.result()->code); |
| 539 ASSERT_NE(0u, callback2.net_address()->ipv4->port); | 538 ASSERT_NE(0u, callback2.net_address()->ipv4->port); |
| 540 | 539 |
| 541 NetAddressPtr client_addr = callback2.net_address().Clone(); | 540 NetAddressPtr client_addr = callback2.net_address().Clone(); |
| 542 | 541 |
| 543 const size_t kDatagramCount = 16; | 542 const size_t kDatagramCount = 16; |
| 544 const size_t kDatagramSize = 255; | 543 const size_t kDatagramSize = 255; |
| 545 | 544 |
| 546 for (size_t i = 1; i < kDatagramCount; ++i) { | 545 for (size_t i = 1; i < kDatagramCount; ++i) { |
| 547 scoped_ptr<TestCallback[]> send_callbacks(new TestCallback[i]); | 546 scoped_ptr<TestCallback[]> send_callbacks(new TestCallback[i]); |
| 548 scoped_ptr<TestReceiveCallback[]> receive_callbacks( | 547 scoped_ptr<TestReceiveCallback[]> receive_callbacks( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 568 } | 567 } |
| 569 } | 568 } |
| 570 } | 569 } |
| 571 | 570 |
| 572 TEST_F(UDPSocketAppTest, TestWrapperConnectedReadWrite) { | 571 TEST_F(UDPSocketAppTest, TestWrapperConnectedReadWrite) { |
| 573 UDPSocketWrapper socket(socket_.Pass(), 4, 4); | 572 UDPSocketWrapper socket(socket_.Pass(), 4, 4); |
| 574 | 573 |
| 575 TestCallbackWithAddress callback1; | 574 TestCallbackWithAddress callback1; |
| 576 socket.Bind(GetLocalHostWithAnyPort(), callback1.callback()); | 575 socket.Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
| 577 callback1.WaitForResult(); | 576 callback1.WaitForResult(); |
| 578 ASSERT_EQ(net::OK, callback1.result()->code); | 577 ASSERT_EQ(NETWORK_CODE_OK, callback1.result()->code); |
| 579 ASSERT_NE(0u, callback1.net_address()->ipv4->port); | 578 ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
| 580 | 579 |
| 581 NetAddressPtr server_addr = callback1.net_address().Clone(); | 580 NetAddressPtr server_addr = callback1.net_address().Clone(); |
| 582 | 581 |
| 583 UDPSocketPtr raw_client_socket; | 582 UDPSocketPtr raw_client_socket; |
| 584 network_service_->CreateUDPSocket(GetProxy(&raw_client_socket)); | 583 network_service_->CreateUDPSocket(GetProxy(&raw_client_socket)); |
| 585 UDPSocketWrapper client_socket(raw_client_socket.Pass(), 4, 4); | 584 UDPSocketWrapper client_socket(raw_client_socket.Pass(), 4, 4); |
| 586 | 585 |
| 587 TestCallbackWithAddress callback2; | 586 TestCallbackWithAddress callback2; |
| 588 client_socket.Connect(server_addr.Pass(), callback2.callback()); | 587 client_socket.Connect(server_addr.Pass(), callback2.callback()); |
| 589 callback2.WaitForResult(); | 588 callback2.WaitForResult(); |
| 590 ASSERT_EQ(net::OK, callback2.result()->code); | 589 ASSERT_EQ(NETWORK_CODE_OK, callback2.result()->code); |
| 591 ASSERT_NE(0u, callback2.net_address()->ipv4->port); | 590 ASSERT_NE(0u, callback2.net_address()->ipv4->port); |
| 592 | 591 |
| 593 NetAddressPtr client_addr = callback2.net_address().Clone(); | 592 NetAddressPtr client_addr = callback2.net_address().Clone(); |
| 594 | 593 |
| 595 const size_t kDatagramCount = 16; | 594 const size_t kDatagramCount = 16; |
| 596 const size_t kDatagramSize = 255; | 595 const size_t kDatagramSize = 255; |
| 597 | 596 |
| 598 // Test send using a connected socket. | 597 // Test send using a connected socket. |
| 599 for (size_t i = 1; i < kDatagramCount; ++i) { | 598 for (size_t i = 1; i < kDatagramCount; ++i) { |
| 600 scoped_ptr<TestCallback[]> send_callbacks(new TestCallback[i]); | 599 scoped_ptr<TestCallback[]> send_callbacks(new TestCallback[i]); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 receive_callbacks[j].result()->code); | 642 receive_callbacks[j].result()->code); |
| 644 EXPECT_FALSE(receive_callbacks[j].src_addr()); | 643 EXPECT_FALSE(receive_callbacks[j].src_addr()); |
| 645 EXPECT_TRUE(receive_callbacks[j].data().Equals( | 644 EXPECT_TRUE(receive_callbacks[j].data().Equals( |
| 646 CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize))); | 645 CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize))); |
| 647 } | 646 } |
| 648 } | 647 } |
| 649 } | 648 } |
| 650 | 649 |
| 651 } // namespace service | 650 } // namespace service |
| 652 } // namespace mojo | 651 } // namespace mojo |
| OLD | NEW |