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

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

Issue 9791003: Added pepper test for SSLHandshake (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 9 months 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 <vector>
8
9 #include "ppapi/cpp/module.h"
10 #include "ppapi/tests/test_utils.h"
11 #include "ppapi/tests/testing_instance.h"
12
13 REGISTER_TEST_CASE(TCPSocketPrivateShared);
14
15 TestTCPSocketPrivateShared::TestTCPSocketPrivateShared(
16 TestingInstance* instance)
17 : TestCase(instance), tcp_socket_private_interface_(NULL) {
18 }
19
20 bool TestTCPSocketPrivateShared::Init() {
21 tcp_socket_private_interface_ = static_cast<const PPB_TCPSocket_Private*>(
22 pp::Module::Get()->GetBrowserInterface(PPB_TCPSOCKET_PRIVATE_INTERFACE));
23 if (!tcp_socket_private_interface_)
24 instance_->AppendError("TCPSocketPrivate interface not available");
25
26 bool init_host_port = false;
27 if (!GetLocalHostPort(instance_->pp_instance(), &host_, &port_))
28 instance_->AppendError("Can't init host and port");
29 else
30 init_host_port = true;
31
32 return tcp_socket_private_interface_ &&
33 init_host_port &&
34 CheckTestingInterface();
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 std::string& host,
59 uint16_t port) {
60 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
61
62 int32_t rv = tcp_socket_private_interface_->Connect(
63 socket, host.c_str(), 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::SyncRead(PP_Resource socket,
94 char* buffer,
95 int32_t num_bytes,
96 int32_t* bytes_read) {
97 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
98
99 int32_t rv = tcp_socket_private_interface_->Read(
100 socket, buffer, num_bytes,
101 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
102
103 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
104 return ReportError("PPB_TCPSocket_Private::Read force_async", rv);
105 if (rv == PP_OK_COMPLETIONPENDING)
106 rv = callback.WaitForResult();
107
108 if (num_bytes != rv)
109 return ReportError("PPB_TCPSocket_Private::Read", rv);
110
111 *bytes_read = rv;
112 PASS();
113 }
114
115 std::string TestTCPSocketPrivateShared::SyncWrite(PP_Resource socket,
116 const char* buffer,
117 int32_t num_bytes,
118 int32_t* bytes_wrote) {
119 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
120 int32_t rv = tcp_socket_private_interface_->Write(
121 socket, buffer, num_bytes,
122 static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
123
124 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
125 return ReportError("PPB_TCPSocket_Private::Write force_async", rv);
126 if (rv == PP_OK_COMPLETIONPENDING)
127 rv = callback.WaitForResult();
128 if (num_bytes != rv)
129 return ReportError("PPB_TCPSocket_Private::Write", rv);
130
131 *bytes_wrote = rv;
132 PASS();
133 }
134
135 std::string TestTCPSocketPrivateShared::CheckHTTPResponse(
136 PP_Resource socket,
137 const std::string& request,
138 const std::string& response) {
139 int32_t rv = 0;
140 std::string error_message;
141
142 error_message = SyncWrite(socket, request.c_str(), request.size(), &rv);
143 if (!error_message.empty())
144 return error_message;
145
146 std::vector<char> response_buffer(response.size());
147 error_message = SyncRead(socket, &response_buffer[0], response.size(), &rv);
148 if (!error_message.empty())
149 return error_message;
150
151 std::string actual_response(&response_buffer[0], rv);
152
153 if (response != actual_response)
154 return "CheckHTTPResponse failed, expected: " + response +
155 ", actual: " + actual_response;
156 PASS();
157 }
158
159 std::string TestTCPSocketPrivateShared::TestCreate() {
160 PP_Resource socket = tcp_socket_private_interface_->Create(0);
161 if (0 != socket)
162 return "PPB_TCPSocket_Private::Create returns valid socket " \
163 "for invalid instance";
164
165 return CreateSocket(&socket);
166 }
167
168 std::string TestTCPSocketPrivateShared::TestGetAddress() {
169 PP_Resource socket;
170 std::string error_message;
171
172 error_message = CreateSocket(&socket);
173 if (!error_message.empty())
174 return error_message;
175
176 error_message = SyncConnect(socket, host_, port_);
177 if (!error_message.empty())
178 return error_message;
179
180 PP_NetAddress_Private local_address, remote_address;
181
182 if (PP_TRUE != tcp_socket_private_interface_->GetLocalAddress(
183 socket, &local_address))
184 return "PPB_TCPSocketPrivate::GetLocalAddress failed";
185 if (PP_TRUE != tcp_socket_private_interface_->GetRemoteAddress(
186 socket, &remote_address))
187 return "PPB_TCPSocketPrivate::GetRemoteAddress failed";
188
189 tcp_socket_private_interface_->Disconnect(socket);
190
191 PASS();
192 }
193
194 std::string TestTCPSocketPrivateShared::TestConnect() {
195 PP_Resource socket;
196 std::string error_message;
197
198 error_message = CreateSocket(&socket);
199 if (!error_message.empty())
200 return error_message;
201 error_message = SyncConnect(socket, host_, port_);
202 if (!error_message.empty())
203 return error_message;
204 error_message =
205 CheckHTTPResponse(socket, "GET / HTTP/1.0\r\n\r\n", "HTTP/1.0 200 OK");
206 if (!error_message.empty())
207 return error_message;
208 tcp_socket_private_interface_->Disconnect(socket);
209
210 PASS();
211 }
212
213 std::string TestTCPSocketPrivateShared::TestReconnect() {
214 PP_Resource socket;
215 std::string error_message;
216
217 error_message = CreateSocket(&socket);
218 if (!error_message.empty())
219 return error_message;
220 error_message = SyncConnect(socket, host_, port_);
221 if (!error_message.empty())
222 return error_message;
223
224 PP_NetAddress_Private remote_address;
225 if (PP_TRUE !=
226 tcp_socket_private_interface_->GetRemoteAddress(socket,
227 &remote_address))
228 return "PPB_TCPSocketPrivate::GetRemoteAddress failed";
229 tcp_socket_private_interface_->Disconnect(socket);
230
231 error_message = CreateSocket(&socket);
232 if (!error_message.empty())
233 return error_message;
234 error_message = SyncConnectWithNetAddress(socket, remote_address);
235 if (!error_message.empty())
236 return error_message;
237 error_message = CheckHTTPResponse(socket,
238 "GET / HTTP/1.0\r\n\r\n",
239 "HTTP/1.0 200 OK");
240 if (!error_message.empty())
241 return error_message;
242 tcp_socket_private_interface_->Disconnect(socket);
243
244 PASS();
245 }
246
247 // TODO(ygorshenin): test SSLHandshake somehow
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698