| Index: ppapi/tests/test_tcp_server_socket_private.cc
|
| diff --git a/ppapi/tests/test_tcp_server_socket_private.cc b/ppapi/tests/test_tcp_server_socket_private.cc
|
| index 26b43e625fd17d4cd359e36638eac0e769ea2651..47e30203819333164dc83757df52b1ce510dc1fe 100644
|
| --- a/ppapi/tests/test_tcp_server_socket_private.cc
|
| +++ b/ppapi/tests/test_tcp_server_socket_private.cc
|
| @@ -60,23 +60,19 @@ bool TestTCPServerSocketPrivate::Init() {
|
| }
|
|
|
| void TestTCPServerSocketPrivate::RunTests(const std::string& filter) {
|
| - RUN_TEST_FORCEASYNC_AND_NOT(Listen, filter);
|
| - RUN_TEST_FORCEASYNC_AND_NOT(Backlog, filter);
|
| + RUN_CALLBACK_TEST(TestTCPServerSocketPrivate, Listen, filter);
|
| + RUN_CALLBACK_TEST(TestTCPServerSocketPrivate, Backlog, filter);
|
| }
|
|
|
| std::string TestTCPServerSocketPrivate::GetLocalAddress(
|
| PP_NetAddress_Private* address) {
|
| TCPSocketPrivate socket(instance_);
|
| - TestCompletionCallback callback(instance_->pp_instance(), force_async_);
|
| - int32_t rv = socket.Connect(host_.c_str(), port_, callback.GetCallback());
|
| - if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
|
| - return ReportError("PPB_TCPSocket_Private::Connect force_async", rv);
|
| - if (rv == PP_OK_COMPLETIONPENDING)
|
| - rv = callback.WaitForResult();
|
| - if (rv != PP_OK)
|
| - return ReportError("PPB_TCPSocket_Private::Connect", rv);
|
| - if (!socket.GetLocalAddress(address))
|
| - return ReportError("PPB_TCPSocket_Private::GetLocalAddress", 0);
|
| + TestCompletionCallback callback(instance_->pp_instance(), callback_type());
|
| + callback.WaitForResult(
|
| + socket.Connect(host_.c_str(), port_, callback.GetCallback()));
|
| + CHECK_CALLBACK_BEHAVIOR(callback);
|
| + ASSERT_EQ(PP_OK, callback.result());
|
| + ASSERT_TRUE(socket.GetLocalAddress(address));
|
| socket.Disconnect();
|
| PASS();
|
| }
|
| @@ -85,16 +81,13 @@ std::string TestTCPServerSocketPrivate::SyncRead(TCPSocketPrivate* socket,
|
| char* buffer,
|
| size_t num_bytes) {
|
| while (num_bytes > 0) {
|
| - TestCompletionCallback callback(instance_->pp_instance(), force_async_);
|
| - int32_t rv = socket->Read(buffer, num_bytes, callback.GetCallback());
|
| - if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
|
| - return ReportError("PPB_TCPSocket_Private::Read force_async", rv);
|
| - if (rv == PP_OK_COMPLETIONPENDING)
|
| - rv = callback.WaitForResult();
|
| - if (rv < 0)
|
| - return ReportError("PPB_TCPSocket_Private::Read", rv);
|
| - buffer += rv;
|
| - num_bytes -= rv;
|
| + TestCompletionCallback callback(instance_->pp_instance(), callback_type());
|
| + callback.WaitForResult(
|
| + socket->Read(buffer, num_bytes, callback.GetCallback()));
|
| + CHECK_CALLBACK_BEHAVIOR(callback);
|
| + ASSERT_TRUE(callback.result() >= 0);
|
| + buffer += callback.result();
|
| + num_bytes -= callback.result();
|
| }
|
| PASS();
|
| }
|
| @@ -103,16 +96,13 @@ std::string TestTCPServerSocketPrivate::SyncWrite(TCPSocketPrivate* socket,
|
| const char* buffer,
|
| size_t num_bytes) {
|
| while (num_bytes > 0) {
|
| - TestCompletionCallback callback(instance_->pp_instance(), force_async_);
|
| - int32_t rv = socket->Write(buffer, num_bytes, callback.GetCallback());
|
| - if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
|
| - return ReportError("PPB_TCPSocket_Private::Write force_async", rv);
|
| - if (rv == PP_OK_COMPLETIONPENDING)
|
| - rv = callback.WaitForResult();
|
| - if (rv < 0)
|
| - return ReportError("PPB_TCPSocket_Private::Write", rv);
|
| - buffer += rv;
|
| - num_bytes -= rv;
|
| + TestCompletionCallback callback(instance_->pp_instance(), callback_type());
|
| + callback.WaitForResult(
|
| + socket->Write(buffer, num_bytes, callback.GetCallback()));
|
| + CHECK_CALLBACK_BEHAVIOR(callback);
|
| + ASSERT_TRUE(callback.result() >= 0);
|
| + buffer += callback.result();
|
| + num_bytes -= callback.result();
|
| }
|
| PASS();
|
| }
|
| @@ -120,14 +110,11 @@ std::string TestTCPServerSocketPrivate::SyncWrite(TCPSocketPrivate* socket,
|
| std::string TestTCPServerSocketPrivate::SyncConnect(
|
| TCPSocketPrivate* socket,
|
| PP_NetAddress_Private* address) {
|
| - TestCompletionCallback callback(instance_->pp_instance(), force_async_);
|
| - int32_t rv = socket->ConnectWithNetAddress(address, callback.GetCallback());
|
| - if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
|
| - return ReportError("PPB_TCPSocket_Private::Connect force_async", rv);
|
| - if (rv == PP_OK_COMPLETIONPENDING)
|
| - rv = callback.WaitForResult();
|
| - if (rv != PP_OK)
|
| - return ReportError("PPB_TCPSocket_Private::Connect", rv);
|
| + TestCompletionCallback callback(instance_->pp_instance(), callback_type());
|
| + callback.WaitForResult(
|
| + socket->ConnectWithNetAddress(address, callback.GetCallback()));
|
| + CHECK_CALLBACK_BEHAVIOR(callback);
|
| + ASSERT_EQ(PP_OK, callback.result());
|
| PASS();
|
| }
|
|
|
| @@ -153,20 +140,17 @@ std::string TestTCPServerSocketPrivate::SyncListen(
|
| if (!NetAddressPrivate::ReplacePort(base_address, port, address))
|
| return ReportError("PPB_NetAddress_Private::ReplacePort", 0);
|
|
|
| - TestCompletionCallback callback(instance_->pp_instance(), force_async_);
|
| - int32_t rv = socket->Listen(address, backlog, callback.GetCallback());
|
| - if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
|
| - return ReportError("PPB_TCPServerSocket_Private::Listen force_async", rv);
|
| - if (rv == PP_OK_COMPLETIONPENDING)
|
| - rv = callback.WaitForResult();
|
| - if (rv == PP_OK) {
|
| + TestCompletionCallback callback(instance_->pp_instance(), callback_type());
|
| + callback.WaitForResult(
|
| + socket->Listen(address, backlog, callback.GetCallback()));
|
| + CHECK_CALLBACK_BEHAVIOR(callback);
|
| + if (callback.result() == PP_OK) {
|
| is_free_port_found = true;
|
| break;
|
| }
|
| }
|
|
|
| - if (!is_free_port_found)
|
| - return "Can't find available port";
|
| + ASSERT_TRUE(is_free_port_found);
|
| PASS();
|
| }
|
|
|
| @@ -178,8 +162,17 @@ std::string TestTCPServerSocketPrivate::TestListen() {
|
| PP_NetAddress_Private address;
|
| ASSERT_SUBTEST_SUCCESS(SyncListen(&server_socket, &address, kBacklog));
|
|
|
| + // We can't use a blocking callback for Accept, because it will wait forever
|
| + // for the client to connect, since the client connects after.
|
| TestCompletionCallback accept_callback(instance_->pp_instance(),
|
| - force_async_);
|
| + PP_REQUIRED);
|
| + // We need to make sure there's a message loop to run accept_callback on.
|
| + pp::MessageLoop current_thread_loop(pp::MessageLoop::GetCurrent());
|
| + if (current_thread_loop.is_null() && testing_interface_->IsOutOfProcess()) {
|
| + current_thread_loop = pp::MessageLoop(instance_);
|
| + current_thread_loop.AttachToCurrentThread();
|
| + }
|
| +
|
| PP_Resource resource;
|
| int32_t accept_rv = server_socket.Accept(&resource,
|
| accept_callback.GetCallback());
|
| @@ -187,14 +180,9 @@ std::string TestTCPServerSocketPrivate::TestListen() {
|
| TCPSocketPrivate client_socket(instance_);
|
| ForceConnect(&client_socket, &address);
|
|
|
| - if (force_async_ && accept_rv != PP_OK_COMPLETIONPENDING) {
|
| - return ReportError("PPB_TCPServerSocket_Private::Accept force_async",
|
| - accept_rv);
|
| - }
|
| - if (accept_rv == PP_OK_COMPLETIONPENDING)
|
| - accept_rv = accept_callback.WaitForResult();
|
| - if (accept_rv != PP_OK)
|
| - return ReportError("PPB_TCPServerSocket_Private::Accept", accept_rv);
|
| + accept_callback.WaitForResult(accept_rv);
|
| + CHECK_CALLBACK_BEHAVIOR(accept_callback);
|
| + ASSERT_EQ(PP_OK, accept_callback.result());
|
|
|
| ASSERT_TRUE(resource != 0);
|
| TCPSocketPrivate accepted_socket(pp::PassRef(), resource);
|
| @@ -231,37 +219,29 @@ std::string TestTCPServerSocketPrivate::TestBacklog() {
|
| for (size_t i = 0; i < kBacklog; ++i) {
|
| client_sockets[i] = new TCPSocketPrivate(instance_);
|
| connect_callbacks[i] = new TestCompletionCallback(instance_->pp_instance(),
|
| - force_async_);
|
| + callback_type());
|
| connect_rv[i] = client_sockets[i]->ConnectWithNetAddress(
|
| &address,
|
| connect_callbacks[i]->GetCallback());
|
| - if (force_async_ && connect_rv[i] != PP_OK_COMPLETIONPENDING) {
|
| - return ReportError("PPB_TCPSocket_Private::Connect force_async",
|
| - connect_rv[i]);
|
| - }
|
| }
|
|
|
| std::vector<PP_Resource> resources(kBacklog);
|
| std::vector<TCPSocketPrivate*> accepted_sockets(kBacklog);
|
| for (size_t i = 0; i < kBacklog; ++i) {
|
| - TestCompletionCallback callback(instance_->pp_instance(), force_async_);
|
| - int32_t rv = server_socket.Accept(&resources[i], callback.GetCallback());
|
| - if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
|
| - return ReportError("PPB_TCPServerSocket_Private::Accept force_async", rv);
|
| - if (rv == PP_OK_COMPLETIONPENDING)
|
| - rv = callback.WaitForResult();
|
| - if (rv != PP_OK)
|
| - return ReportError("PPB_TCPServerSocket_Private::Accept", rv);
|
| + TestCompletionCallback callback(instance_->pp_instance(), callback_type());
|
| + callback.WaitForResult(
|
| + server_socket.Accept(&resources[i], callback.GetCallback()));
|
| + CHECK_CALLBACK_BEHAVIOR(callback);
|
| + ASSERT_EQ(PP_OK, callback.result());
|
|
|
| ASSERT_TRUE(resources[i] != 0);
|
| accepted_sockets[i] = new TCPSocketPrivate(pp::PassRef(), resources[i]);
|
| }
|
|
|
| for (size_t i = 0; i < kBacklog; ++i) {
|
| - if (connect_rv[i] == PP_OK_COMPLETIONPENDING)
|
| - connect_rv[i] = connect_callbacks[i]->WaitForResult();
|
| - if (connect_rv[i] != PP_OK)
|
| - return ReportError("PPB_TCPSocket_Private::Connect", connect_rv[i]);
|
| + connect_callbacks[i]->WaitForResult(connect_rv[i]);
|
| + CHECK_CALLBACK_BEHAVIOR(*connect_callbacks[i]);
|
| + ASSERT_EQ(PP_OK, connect_callbacks[i]->result());
|
| }
|
|
|
| for (size_t i = 0; i < kBacklog; ++i) {
|
|
|