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

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

Issue 8688002: PPB_TCPSocket_Private/PPB_UDPSocket_Private are exposed to Browser (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 "ppapi/tests/test_tcp_socket_private_shared.h"
6
7 #include <string.h>
8 #include <new>
9 #include <string>
10
11 #include "base/memory/scoped_ptr.h"
12 #include "ppapi/cpp/module.h"
13 #include "ppapi/tests/test_utils.h"
14 #include "ppapi/tests/testing_instance.h"
15
16 REGISTER_TEST_CASE(TCPSocketPrivateShared);
17
18 // TODO(ygorshenin): get rid of using external server in tests,
19 // http://crbug.com/105863
20 const char* const TestTCPSocketPrivateShared::kHost = "www.google.com";
21
22 TestTCPSocketPrivateShared::TestTCPSocketPrivateShared(
23 TestingInstance* instance)
24 : TestCase(instance), tcp_socket_private_interface_(NULL) {
25 }
26
27 bool TestTCPSocketPrivateShared::Init() {
28 tcp_socket_private_interface_ =
29 reinterpret_cast<PPB_TCPSocket_Private const*>(
30 pp::Module::Get()->GetBrowserInterface(
31 PPB_TCPSOCKET_PRIVATE_INTERFACE));
32 if (!tcp_socket_private_interface_)
33 instance_->AppendError("TCPSocketPrivate interface not available");
34 return tcp_socket_private_interface_ && InitTestingInterface();
35 }
36
37 void TestTCPSocketPrivateShared::RunTests(const std::string& filter) {
38 RUN_TEST(Create, filter);
39 RUN_TEST_FORCEASYNC_AND_NOT(GetAddress, filter);
40 RUN_TEST_FORCEASYNC_AND_NOT(Connect, filter);
41 RUN_TEST_FORCEASYNC_AND_NOT(Reconnect, filter);
42 }
43
44 void TestTCPSocketPrivateShared::QuitMessageLoop() {
45 testing_interface_->QuitMessageLoop(instance_->pp_instance());
46 }
47
48 std::string TestTCPSocketPrivateShared::CreateSocket(PP_Resource* socket) {
49 *socket = tcp_socket_private_interface_->Create(instance_->pp_instance());
50 if (0 == *socket)
51 return "PPB_TCPSocket_Private::Create failed";
52 if (!tcp_socket_private_interface_->IsTCPSocket(*socket))
53 return "PPB_TCPSocket_Private::IsTCPSocket failed";
54 PASS();
55 }
56
57 std::string TestTCPSocketPrivateShared::SyncConnect(PP_Resource socket,
58 const char* host,
59 int port) {
60 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
61
62 int32_t rv = tcp_socket_private_interface_->Connect(
63 socket, host, port,
64 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
65
66 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
67 return ReportError("PPB_TCPSocket_Private::Connect force_async", rv);
68 if (rv == PP_OK_COMPLETIONPENDING)
69 rv = callback.WaitForResult();
70 if (rv != PP_OK)
71 return ReportError("PPB_TCPSocket_Private::Connect", rv);
72 PASS();
73 }
74
75 std::string TestTCPSocketPrivateShared::SyncConnectWithNetAddress(
76 PP_Resource socket, const PP_NetAddress_Private& addr) {
77 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
78
79 int32_t rv = tcp_socket_private_interface_->ConnectWithNetAddress(
80 socket, &addr,
81 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
82
83 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
84 return ReportError(
85 "PPB_TCPSocket_Private::ConnectWithNetAddress force_async", rv);
86 if (rv == PP_OK_COMPLETIONPENDING)
87 rv = callback.WaitForResult();
88 if (rv != PP_OK)
89 return ReportError("PPB_TCPSocket_Private::ConnectWithNetAddress", rv);
90 PASS();
91 }
92
93 std::string TestTCPSocketPrivateShared::SyncSSLHandshake(PP_Resource socket,
94 const char* host,
95 int port) {
96 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
97
98 int32_t rv = tcp_socket_private_interface_->SSLHandshake(
99 socket, host, port,
100 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
101
102 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
103 return ReportError("PPB_TCPSocket_Private::SSLHandshake force_async", rv);
104 if (rv == PP_OK_COMPLETIONPENDING)
105 rv = callback.WaitForResult();
106 if (rv != PP_OK)
107 return ReportError("PPB_TCPSocket_Private::SSLHandshake", rv);
108 PASS();
109 }
110
111 std::string TestTCPSocketPrivateShared::SyncRead(PP_Resource socket,
112 char* buffer,
113 int32_t num_bytes,
114 int32_t* bytes_read) {
115 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
116
117 int32_t rv = tcp_socket_private_interface_->Read(
118 socket, buffer, num_bytes,
119 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
120
121 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
122 return ReportError("PPB_TCPSocket_Private::Read force_async", rv);
123 if (rv == PP_OK_COMPLETIONPENDING)
124 rv = callback.WaitForResult();
125
126 if (num_bytes != rv)
127 return ReportError("PPB_TCPSocket_Private::Read", rv);
128
129 *bytes_read = rv;
130 PASS();
131 }
132
133 std::string TestTCPSocketPrivateShared::SyncWrite(PP_Resource socket,
134 const char* buffer,
135 int32_t num_bytes,
136 int32_t* bytes_wrote) {
137 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
138 int32_t rv = tcp_socket_private_interface_->Write(
139 socket, buffer, num_bytes,
140 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
141
142 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
143 return ReportError("PPB_TCPSocket_Private::Write force_async", rv);
144 if (rv == PP_OK_COMPLETIONPENDING)
145 rv = callback.WaitForResult();
146 if (num_bytes != rv)
147 return ReportError("PPB_TCPSocket_Private::Write", rv);
148
149 *bytes_wrote = rv;
150 PASS();
151 }
152
153 std::string TestTCPSocketPrivateShared::CheckHTTPResponse(
154 PP_Resource socket,
155 const std::string& request,
156 const std::string& response) {
157 int32_t rv;
158 std::string error_message;
159
160 error_message = SyncWrite(socket, request.c_str(), request.size(), &rv);
161 if (!error_message.empty())
162 return error_message;
163
164 scoped_array<char> response_buffer;
165 response_buffer.reset(new (std::nothrow) char [response.size()]);
166
167 if (response_buffer.get() == NULL)
168 return "Can't allocate memory for response buffer";
169
170 error_message = SyncRead(socket, response_buffer.get(), response.size(), &rv);
171 if (!error_message.empty())
172 return error_message;
173
174 std::string actual_response(response_buffer.get(), rv);
175
176 if (response != actual_response)
177 return "CheckHTTPResponse failed, expected: " + response +
178 ", actual: " + actual_response;
179 PASS();
180 }
181
182 std::string TestTCPSocketPrivateShared::TestCreate() {
183 PP_Resource socket = tcp_socket_private_interface_->Create(0);
184 if (0 != socket)
185 return "PPB_TCPSocket_Private::Create returns valid socket " \
186 "for invalid instance";
187
188 return CreateSocket(&socket);
189 }
190
191 std::string TestTCPSocketPrivateShared::TestGetAddress() {
192 PP_Resource socket;
193 std::string error_message;
194
195 error_message = CreateSocket(&socket);
196 if (!error_message.empty())
197 return error_message;
198
199 error_message = SyncConnect(socket, kHost, kPort);
200 if (!error_message.empty())
201 return error_message;
202
203 PP_NetAddress_Private local_address, remote_address;
204
205 if (PP_TRUE != tcp_socket_private_interface_->GetLocalAddress(
206 socket, &local_address))
207 return "PPB_TCPSocketPrivate::GetLocalAddress failed";
208 if (PP_TRUE != tcp_socket_private_interface_->GetRemoteAddress(
209 socket, &remote_address))
210 return "PPB_TCPSocketPrivate::GetRemoteAddress failed";
211
212 tcp_socket_private_interface_->Disconnect(socket);
213
214 PASS();
215 }
216
217 std::string TestTCPSocketPrivateShared::TestConnect() {
218 PP_Resource socket;
219 std::string error_message;
220
221 error_message = CreateSocket(&socket);
222 if (!error_message.empty())
223 return error_message;
224 error_message = SyncConnect(socket, kHost, kPort);
225 if (!error_message.empty())
226 return error_message;
227 error_message = SyncSSLHandshake(socket, kHost, kPort);
228 if (!error_message.empty())
229 return error_message;
230 error_message =
231 CheckHTTPResponse(socket, "GET /robots.txt\r\n", "HTTP/1.0 200 OK");
232 if (!error_message.empty())
233 return error_message;
234 tcp_socket_private_interface_->Disconnect(socket);
235
236 PASS();
237 }
238
239 std::string TestTCPSocketPrivateShared::TestReconnect() {
240 PP_Resource socket;
241 std::string error_message;
242
243 error_message = CreateSocket(&socket);
244 if (!error_message.empty())
245 return error_message;
246 error_message = SyncConnect(socket, kHost, kPort);
247 if (!error_message.empty())
248 return error_message;
249 error_message = SyncSSLHandshake(socket, kHost, kPort);
250 if (!error_message.empty())
251 return error_message;
252
253 PP_NetAddress_Private remote_address;
254 if (PP_TRUE !=
255 tcp_socket_private_interface_->GetRemoteAddress(socket,
256 &remote_address))
257 return "PPB_TCPSocketPrivate::GetRemoteAddress failed";
258 tcp_socket_private_interface_->Disconnect(socket);
259
260 error_message = CreateSocket(&socket);
261 if (!error_message.empty())
262 return error_message;
263 error_message = SyncConnectWithNetAddress(socket, remote_address);
264 if (!error_message.empty())
265 return error_message;
266 error_message = SyncSSLHandshake(socket, kHost, kPort);
267 if (!error_message.empty())
268 return error_message;
269 error_message =
270 CheckHTTPResponse(socket, "GET /robots.txt\r\n", "HTTP/1.0 200 OK");
271 if (!error_message.empty())
272 return error_message;
273 tcp_socket_private_interface_->Disconnect(socket);
274
275 PASS();
276 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698