Chromium Code Reviews| Index: ppapi/native_client/tests/ppapi_browser/ppb_udp_socket_private/ppapi_ppb_udp_socket_private.cc |
| diff --git a/ppapi/native_client/tests/ppapi_browser/ppb_udp_socket_private/ppapi_ppb_udp_socket_private.cc b/ppapi/native_client/tests/ppapi_browser/ppb_udp_socket_private/ppapi_ppb_udp_socket_private.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..1fe57cd3867f80d787172ca20b6730bac948a42e |
| --- /dev/null |
| +++ b/ppapi/native_client/tests/ppapi_browser/ppb_udp_socket_private/ppapi_ppb_udp_socket_private.cc |
| @@ -0,0 +1,119 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include <string.h> |
| +#include <string> |
| + |
| +#include "native_client/src/include/nacl_macros.h" |
| +#include "native_client/src/shared/platform/nacl_check.h" |
| +#include "native_client/tests/ppapi_test_lib/get_browser_interface.h" |
| +#include "native_client/tests/ppapi_test_lib/test_interface.h" |
| +#include "native_client/tests/ppapi_test_lib/testable_callback.h" |
| +#include "ppapi/c/pp_errors.h" |
| +#include "ppapi/c/private/ppb_tcp_socket_private.h" |
| +#include "ppapi/c/private/ppb_udp_socket_private.h" |
| + |
| +namespace { |
| + |
| +void GenerateNetAddress(PP_NetAddress_Private *address) { |
|
Dmitry Polukhin
2011/11/24 13:05:45
Please add comment why it works and don't close so
ygorshenin
2011/11/24 13:40:34
Done.
|
| + static const char* const kServerHost = "www.google.com"; |
| + static const int kServerPort = 80; |
| + |
| + PP_Resource tcp_socket = PPBTCPSocketPrivate()->Create(pp_instance()); |
| + EXPECT(tcp_socket != kInvalidResource); |
| + |
| + TestableCallback callback(pp_instance(), true); |
| + callback.Reset(); |
| + EXPECT(PP_OK_COMPLETIONPENDING == |
| + PPBTCPSocketPrivate()->Connect(tcp_socket, kServerHost, kServerPort, |
| + callback.GetCallback())); |
| + EXPECT(PP_OK == callback.WaitForResult()); |
| + EXPECT(PP_TRUE == |
| + PPBTCPSocketPrivate()->GetLocalAddress(tcp_socket, address)); |
| + PPBTCPSocketPrivate()->Disconnect(tcp_socket); |
| +} |
| + |
| +void CreateAndBindUDPSocket(const PP_NetAddress_Private *address, |
| + PP_Resource *socket) { |
| + *socket = PPBUDPSocketPrivate()->Create(pp_instance()); |
| + EXPECT(*socket != kInvalidResource); |
| + EXPECT(PPBUDPSocketPrivate()->IsUDPSocket(*socket)); |
| + |
| + TestableCallback callback(pp_instance(), true); |
| + callback.Reset(); |
| + EXPECT(PP_OK_COMPLETIONPENDING == |
| + PPBUDPSocketPrivate()->Bind(*socket, address, callback.GetCallback())); |
| + EXPECT(PP_OK == callback.WaitForResult()); |
| +} |
| + |
| +void TestCreate() { |
| + PP_Resource udp_socket; |
| + |
| + udp_socket = PPBUDPSocketPrivate()->Create(kInvalidInstance); |
| + EXPECT(udp_socket == kInvalidResource); |
| + udp_socket = PPBUDPSocketPrivate()->Create(pp_instance()); |
| + EXPECT(udp_socket != kInvalidResource); |
| + EXPECT(PPBUDPSocketPrivate()->IsUDPSocket(udp_socket)); |
| + |
| + TEST_PASSED; |
| +} |
| + |
| +void TestConnect() { |
| + PP_NetAddress_Private server_address, client_address; |
| + GenerateNetAddress(&server_address); |
| + GenerateNetAddress(&client_address); |
| + |
| + PP_Resource socket_server, socket_client; |
| + CreateAndBindUDPSocket(&server_address, &socket_server); |
| + CreateAndBindUDPSocket(&client_address, &socket_client); |
| + |
| + static const char* const kMessage = |
| + "Simple message that will be sent via UDP"; |
| + static const size_t kMessageBufferSize = 1024; |
| + char message_buffer[kMessageBufferSize]; |
| + |
| + TestableCallback write_callback(pp_instance(), true); |
| + write_callback.Reset(); |
| + int32_t write_rv = PPBUDPSocketPrivate()->SendTo( |
| + socket_client, |
| + kMessage, |
| + strlen(kMessage), |
| + &server_address, |
| + write_callback.GetCallback()); |
| + EXPECT(PP_OK_COMPLETIONPENDING == write_rv); |
| + |
| + TestableCallback read_callback(pp_instance(), true); |
| + read_callback.Reset(); |
| + int32_t read_rv = PPBUDPSocketPrivate()->RecvFrom( |
| + socket_server, |
| + message_buffer, |
| + strlen(kMessage), |
| + read_callback.GetCallback()); |
| + EXPECT(PP_OK_COMPLETIONPENDING == read_rv); |
| + |
| + read_rv = read_callback.WaitForResult(); |
| + EXPECT(0 <= read_rv); |
| + EXPECT(strlen(kMessage) == static_cast<size_t>(read_rv)); |
| + write_rv = write_callback.WaitForResult(); |
| + EXPECT(0 <= write_rv); |
| + EXPECT(strlen(kMessage) == static_cast<size_t>(write_rv)); |
| + |
| + EXPECT(0 == strncmp(kMessage, message_buffer, strlen(kMessage))); |
| + |
| + PPBUDPSocketPrivate()->Close(socket_server); |
| + PPBUDPSocketPrivate()->Close(socket_client); |
| + |
| + TEST_PASSED; |
| +} |
| + |
| +} // namespace |
| + |
| +void SetupTests() { |
| + RegisterTest("TestCreate", TestCreate); |
| + RegisterTest("TestConnect", TestConnect); |
| +} |
| + |
| +void SetupPluginInterfaces() { |
| + // none |
| +} |