Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: ppapi/tests/test_udp_socket_private_shared.cc

Issue 8555002: Added NaCl proxy for TCP/UDP (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed issues. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <string.h>
6
7 #include "ppapi/cpp/module.h"
8 #include "ppapi/tests/test_udp_socket_private_shared.h"
9 #include "ppapi/tests/test_utils.h"
10 #include "ppapi/tests/testing_instance.h"
11
12 REGISTER_TEST_CASE(UDPSocketPrivateShared);
13
14 const char* const TestUDPSocketPrivateShared::kHost = "www.google.com";
15
16 TestUDPSocketPrivateShared::TestUDPSocketPrivateShared(
17 TestingInstance* instance)
18 : TestCase(instance),
19 tcp_socket_private_interface_(NULL),
20 udp_socket_private_interface_(NULL) {
21 }
22
23 bool TestUDPSocketPrivateShared::Init() {
24 tcp_socket_private_interface_ =
25 reinterpret_cast<PPB_TCPSocket_Private const*>(
26 pp::Module::Get()->GetBrowserInterface(
27 PPB_TCPSOCKET_PRIVATE_INTERFACE));
28 if (!tcp_socket_private_interface_)
29 instance_->AppendError("TCPSocketPrivate interface not available");
30
31 udp_socket_private_interface_ =
32 reinterpret_cast<PPB_UDPSocket_Private const*>(
33 pp::Module::Get()->GetBrowserInterface(
34 PPB_UDPSOCKET_PRIVATE_INTERFACE));
35 if (!udp_socket_private_interface_)
36 instance_->AppendError("UDPSocketPrivate interface not available");
37
38 return tcp_socket_private_interface_ && udp_socket_private_interface_ &&
39 InitTestingInterface();
40 }
41
42 void TestUDPSocketPrivateShared::RunTests(const std::string& filter) {
43 RUN_TEST(Create, filter);
44 RUN_TEST_FORCEASYNC_AND_NOT(Connect, filter);
45 }
46
47 void TestUDPSocketPrivateShared::QuitMessageLoop() {
48 testing_interface_->QuitMessageLoop(instance_->pp_instance());
49 }
50
51 std::string TestUDPSocketPrivateShared::GenerateNetAddress(
52 PP_Resource* socket, PP_NetAddress_Private* address) {
53 *socket = tcp_socket_private_interface_->Create(instance_->pp_instance());
54 if (0 == *socket)
55 return "PPB_TCPSocket_Private::Create failed";
56
57 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
58 int32_t rv = tcp_socket_private_interface_->Connect(
59 *socket, kHost, kPort,
60 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
61 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
62 return ReportError("PPB_TCPSocket_Private::Connect force_async", rv);
63 if (rv == PP_OK_COMPLETIONPENDING)
64 rv = callback.WaitForResult();
65 if (rv != PP_OK)
66 return ReportError("PPB_TCPSocket_Private::Connect", rv);
67
68 rv = tcp_socket_private_interface_->GetLocalAddress(*socket, address);
69 if (rv != PP_TRUE)
70 return ReportError("PPB_TCPSocket_Private::GetLocalAddress", rv);
71
72 PASS();
73 }
74
75 std::string TestUDPSocketPrivateShared::CreateAndBindUDPSocket(
76 const PP_NetAddress_Private *address,
77 PP_Resource *socket) {
78 *socket = udp_socket_private_interface_->Create(instance_->pp_instance());
79 if (0 == *socket)
80 return "PPB_UDPSocket_Private::Create failed";
81 if (!udp_socket_private_interface_->IsUDPSocket(*socket))
82 return "PPB_UDPSocket_Private::IsUDPSocket failed";
83
84 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
85 int32_t rv = udp_socket_private_interface_->Bind(
86 *socket, address,
87 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
88
89 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
90 return ReportError("PPB_UDPSocket_Private::Bind force_async", rv);
91 if (rv == PP_OK_COMPLETIONPENDING)
92 rv = callback.WaitForResult();
93 if (rv != PP_OK)
94 return ReportError("PPB_UDPSocket_Private::Bind", rv);
95
96 PASS();
97 }
98
99 std::string TestUDPSocketPrivateShared::TestCreate() {
100 PP_Resource udp_socket;
101 std::string error_message;
102
103 udp_socket = udp_socket_private_interface_->Create(0);
104 if (0 != udp_socket)
105 return "PPB_UDPSocket_Private::Create returns valid socket " \
106 "for invalid instance";
107
108 udp_socket = udp_socket_private_interface_->Create(instance_->pp_instance());
109 if (0 == udp_socket)
110 return "PPB_UDPSocket_Private::Create failed";
111 if (!udp_socket_private_interface_->IsUDPSocket(udp_socket))
112 return "PPB_UDPSocket_Private::IsUDPSocket failed";
113
114 PASS();
115 }
116
117 std::string TestUDPSocketPrivateShared::TestConnect() {
118 PP_NetAddress_Private server_address, client_address;
119 PP_Resource tcp_socket_server, tcp_socket_client;
120 std::string error_message;
121
122 error_message = GenerateNetAddress(&tcp_socket_server, &server_address);
123 if (!error_message.empty())
124 return error_message;
125 error_message = GenerateNetAddress(&tcp_socket_client, &client_address);
126 if (error_message.empty())
127 return error_message;
128
129 PP_Resource socket_server, socket_client;
130 error_message = CreateAndBindUDPSocket(&server_address, &socket_server);
131 if (error_message.empty())
132 return error_message;
133 error_message = CreateAndBindUDPSocket(&client_address, &socket_client);
134 if (error_message.empty())
135 return error_message;
136
137 static const char* const kMessage =
138 "Simple message that will be sent via UDP";
139 static const size_t kMessageBufferSize = 1024;
140 char message_buffer[kMessageBufferSize];
141
142 TestCompletionCallback write_cb(instance_->pp_instance(), force_async_);
143 int32_t write_rv = udp_socket_private_interface_->SendTo(
144 socket_client,
145 kMessage,
146 strlen(kMessage),
147 &server_address,
148 static_cast<pp::CompletionCallback>(write_cb).pp_completion_callback());
149 if (force_async_ && write_rv != PP_OK_COMPLETIONPENDING)
150 return ReportError("PPB_UDPSocket_Private::SendTo force_async", write_rv);
151
152 TestCompletionCallback read_cb(instance_->pp_instance(), force_async_);
153 int32_t read_rv = udp_socket_private_interface_->RecvFrom(
154 socket_server,
155 message_buffer,
156 strlen(kMessage),
157 static_cast<pp::CompletionCallback>(read_cb).pp_completion_callback());
158 if (force_async_ && read_rv != PP_OK_COMPLETIONPENDING)
159 return ReportError("PPB_UDPSocket_Private::RecvFrom force_async", read_rv);
160
161 if (read_rv == PP_OK_COMPLETIONPENDING)
162 read_rv = read_cb.WaitForResult();
163 if (read_rv < 0 || strlen(kMessage) != static_cast<size_t>(read_rv))
164 return ReportError("PPB_UDPSocket_Private::RecvFrom", read_rv);
165
166 if (write_rv == PP_OK_COMPLETIONPENDING)
167 write_rv = write_cb.WaitForResult();
168 if (write_rv < 0 || strlen(kMessage) != static_cast<size_t>(write_rv))
169 return ReportError("PPB_UDPSocket_Private::SendTo", write_rv);
170
171 ASSERT_EQ(0, strncmp(kMessage, message_buffer, strlen(kMessage)));
172
173 udp_socket_private_interface_->Close(socket_server);
174 udp_socket_private_interface_->Close(socket_client);
175
176 tcp_socket_private_interface_->Disconnect(tcp_socket_server);
177 tcp_socket_private_interface_->Disconnect(tcp_socket_client);
178
179 PASS();
180 }
OLDNEW
« ppapi/tests/test_tcp_socket_private_shared.cc ('K') | « ppapi/tests/test_udp_socket_private_shared.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698