Chromium Code Reviews| Index: ppapi/tests/test_udp_socket.cc |
| diff --git a/ppapi/tests/test_udp_socket.cc b/ppapi/tests/test_udp_socket.cc |
| index 2b0568244e30001b37e5670f41a4799e733e7af6..395abe0c5d1b5b97668c5f1a365adfd51f53de0b 100644 |
| --- a/ppapi/tests/test_udp_socket.cc |
| +++ b/ppapi/tests/test_udp_socket.cc |
| @@ -47,7 +47,10 @@ pp::NetAddress ReplacePort(const pp::InstanceHandle& instance, |
| } // namespace |
| -TestUDPSocket::TestUDPSocket(TestingInstance* instance) : TestCase(instance) { |
| +TestUDPSocket::TestUDPSocket(TestingInstance* instance) |
| + : TestCase(instance), |
| + socket_interface_1_0_(NULL), |
| + socket_interface_1_1_(NULL) { |
| } |
| bool TestUDPSocket::Init() { |
| @@ -71,19 +74,36 @@ bool TestUDPSocket::Init() { |
| if (!init_address) |
| instance_->AppendError("Can't init address"); |
| + socket_interface_1_0_ = |
| + static_cast<const PPB_UDPSocket_1_0*>( |
| + pp::Module::Get()->GetBrowserInterface(PPB_UDPSOCKET_INTERFACE_1_0)); |
| + if (!socket_interface_1_0_) |
| + instance_->AppendError("PPB_UDPSocket_1_0 interface not available"); |
| + |
| + socket_interface_1_1_ = |
| + static_cast<const PPB_UDPSocket_1_1*>( |
| + pp::Module::Get()->GetBrowserInterface(PPB_UDPSOCKET_INTERFACE_1_1)); |
| + if (!socket_interface_1_1_) |
| + instance_->AppendError("PPB_UDPSocket_1_1 interface not available"); |
| + |
| return tcp_socket_is_available && |
| udp_socket_is_available && |
| net_address_is_available && |
| init_address && |
| CheckTestingInterface() && |
| - EnsureRunningOverHTTP(); |
| + EnsureRunningOverHTTP() && |
| + socket_interface_1_0_ != NULL && |
| + socket_interface_1_1_ != NULL; |
| } |
| void TestUDPSocket::RunTests(const std::string& filter) { |
| RUN_CALLBACK_TEST(TestUDPSocket, ReadWrite, filter); |
| RUN_CALLBACK_TEST(TestUDPSocket, Broadcast, filter); |
| + RUN_CALLBACK_TEST(TestUDPSocket, SetOption_1_0, filter); |
| + RUN_CALLBACK_TEST(TestUDPSocket, SetOption_1_1, filter); |
| RUN_CALLBACK_TEST(TestUDPSocket, SetOption, filter); |
| RUN_CALLBACK_TEST(TestUDPSocket, ParallelSend, filter); |
| + RUN_CALLBACK_TEST(TestUDPSocket, Multicast, filter); |
| } |
| std::string TestUDPSocket::GetLocalAddress(pp::NetAddress* address) { |
| @@ -186,6 +206,23 @@ std::string TestUDPSocket::PassMessage(pp::UDPSocket* target, |
| PASS(); |
| } |
| +std::string TestUDPSocket::SetMulticastOptions(pp::UDPSocket* socket) { |
| + TestCompletionCallback callback_1(instance_->pp_instance(), callback_type()); |
| + callback_1.WaitForResult(socket->SetOption( |
| + PP_UDPSOCKET_OPTION_MULTICAST_LOOP, pp::Var(true), |
| + callback_1.GetCallback())); |
| + CHECK_CALLBACK_BEHAVIOR(callback_1); |
| + ASSERT_EQ(PP_OK, callback_1.result()); |
| + |
| + TestCompletionCallback callback_2(instance_->pp_instance(), callback_type()); |
| + callback_2.WaitForResult(socket->SetOption( |
| + PP_UDPSOCKET_OPTION_MULTICAST_TTL, pp::Var(1), callback_2.GetCallback())); |
| + CHECK_CALLBACK_BEHAVIOR(callback_2); |
| + ASSERT_EQ(PP_OK, callback_2.result()); |
| + |
| + PASS(); |
| +} |
| + |
| std::string TestUDPSocket::TestReadWrite() { |
| pp::UDPSocket server_socket(instance_), client_socket(instance_); |
| pp::NetAddress server_address, client_address; |
| @@ -256,10 +293,43 @@ std::string TestUDPSocket::TestBroadcast() { |
| PASS(); |
| } |
| +std::string TestUDPSocket::TestSetOption_1_0() { |
| + PP_Resource socket = socket_interface_1_0_->Create(instance_->pp_instance()); |
| + ASSERT_NE(0, socket); |
| + |
| + // Multicast options are not supported in interface 1.0. |
| + struct PP_Var value = PP_MakeBool(true); |
|
bbudge
2015/02/19 21:27:04
Could we create a SetOption utility function to do
etrunko
2015/02/23 22:09:10
Done.
|
| + TestCompletionCallback cb(instance_->pp_instance(), callback_type()); |
| + cb.WaitForResult(socket_interface_1_0_->SetOption(socket, |
| + PP_UDPSOCKET_OPTION_MULTICAST_LOOP, value, |
| + cb.GetCallback().pp_completion_callback())); |
| + CHECK_CALLBACK_BEHAVIOR(cb); |
| + ASSERT_EQ(PP_ERROR_BADARGUMENT, cb.result()); |
| + |
| + PASS(); |
|
bbudge
2015/02/19 21:27:05
If you create a resource (in this case 'socket') y
etrunko
2015/02/23 22:09:10
Done.
|
| +} |
| + |
| +std::string TestUDPSocket::TestSetOption_1_1() { |
| + PP_Resource socket = socket_interface_1_1_->Create(instance_->pp_instance()); |
| + ASSERT_NE(0, socket); |
| + |
| + // Multicast options are not supported in interface 1.1. |
| + struct PP_Var value = PP_MakeBool(true); |
| + TestCompletionCallback cb(instance_->pp_instance(), callback_type()); |
| + cb.WaitForResult(socket_interface_1_1_->SetOption(socket, |
| + PP_UDPSOCKET_OPTION_MULTICAST_LOOP, value, |
| + cb.GetCallback().pp_completion_callback())); |
| + CHECK_CALLBACK_BEHAVIOR(cb); |
| + ASSERT_EQ(PP_ERROR_BADARGUMENT, cb.result()); |
| + |
| + PASS(); |
|
bbudge
2015/02/19 21:27:05
release 'socket'
etrunko
2015/02/23 22:09:10
Done.
|
| +} |
| + |
| std::string TestUDPSocket::TestSetOption() { |
| pp::UDPSocket socket(instance_); |
| ASSERT_SUBTEST_SUCCESS(SetBroadcastOptions(&socket)); |
| + ASSERT_SUBTEST_SUCCESS(SetMulticastOptions(&socket)); |
| // Try to pass incorrect option value's type. |
| TestCompletionCallback callback(instance_->pp_instance(), callback_type()); |
| @@ -268,6 +338,17 @@ std::string TestUDPSocket::TestSetOption() { |
| CHECK_CALLBACK_BEHAVIOR(callback); |
| ASSERT_EQ(PP_ERROR_BADARGUMENT, callback.result()); |
| + // Invalid multicast TTL values (less than 0 and greater than 255). |
| + callback.WaitForResult(socket->SetOption( |
| + PP_UDPSOCKET_OPTION_MULTICAST_TTL, pp::Var(-1), callback.GetCallback())); |
| + CHECK_CALLBACK_BEHAVIOR(callback); |
| + ASSERT_EQ(PP_ERROR_BADARGUMENT, callback.result()); |
| + |
| + callback.WaitForResult(socket->SetOption( |
| + PP_UDPSOCKET_OPTION_MULTICAST_TTL, pp::Var(256), callback.GetCallback())); |
| + CHECK_CALLBACK_BEHAVIOR(callback); |
| + ASSERT_EQ(PP_ERROR_BADARGUMENT, callback.result()); |
| + |
| callback.WaitForResult(socket.SetOption( |
| PP_UDPSOCKET_OPTION_BROADCAST, pp::Var(false), callback.GetCallback())); |
| CHECK_CALLBACK_BEHAVIOR(callback); |
| @@ -383,6 +464,12 @@ std::string TestUDPSocket::TestParallelSend() { |
| server_socket.Close(); |
| client_socket.Close(); |
| +} |
| + |
| +std::string TestUDPSocket::TestMulticast() { |
| + pp::UDPSocket server1(instance_), server2(instance_); |
| + ASSERT_SUBTEST_SUCCESS(SetMulticastOptions(&server1)); |
| + ASSERT_SUBTEST_SUCCESS(SetMulticastOptions(&server2)); |
| PASS(); |
| } |