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

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

Issue 6899055: PPAPI: Force async callback invocation option. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/tests/test_transport.h" 5 #include "ppapi/tests/test_transport.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <string.h> 8 #include <string.h>
9 9
10 #include <list> 10 #include <list>
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 97
98 bool TestTransport::Init() { 98 bool TestTransport::Init() {
99 transport_interface_ = reinterpret_cast<PPB_Transport_Dev const*>( 99 transport_interface_ = reinterpret_cast<PPB_Transport_Dev const*>(
100 pp::Module::Get()->GetBrowserInterface(PPB_TRANSPORT_DEV_INTERFACE)); 100 pp::Module::Get()->GetBrowserInterface(PPB_TRANSPORT_DEV_INTERFACE));
101 return transport_interface_ && InitTestingInterface(); 101 return transport_interface_ && InitTestingInterface();
102 } 102 }
103 103
104 void TestTransport::RunTest() { 104 void TestTransport::RunTest() {
105 RUN_TEST(Create); 105 RUN_TEST(Create);
106 RUN_TEST(Connect); 106 RUN_TEST(Connect);
107 RUN_TEST(SendDataUdp); 107 RUN_ASYNC_TEST(SendDataUdp);
108 RUN_TEST(SendDataTcp); 108 RUN_ASYNC_TEST(SendDataTcp);
109 RUN_TEST(ConnectAndCloseUdp); 109 RUN_ASYNC_TEST(ConnectAndCloseUdp);
110 RUN_TEST(ConnectAndCloseTcp); 110 RUN_ASYNC_TEST(ConnectAndCloseTcp);
111 } 111 }
112 112
113 std::string TestTransport::InitTargets(const char* proto) { 113 std::string TestTransport::InitTargets(const char* proto) {
114 transport1_.reset(new pp::Transport_Dev(instance_, kTestChannelName, proto)); 114 transport1_.reset(new pp::Transport_Dev(instance_, kTestChannelName, proto));
115 transport2_.reset(new pp::Transport_Dev(instance_, kTestChannelName, proto)); 115 transport2_.reset(new pp::Transport_Dev(instance_, kTestChannelName, proto));
116 116
117 ASSERT_TRUE(transport1_.get() != NULL); 117 ASSERT_TRUE(transport1_.get() != NULL);
118 ASSERT_TRUE(transport2_.get() != NULL); 118 ASSERT_TRUE(transport2_.get() != NULL);
119 119
120 PASS(); 120 PASS();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 191
192 std::map<int, std::vector<char> > sent_packets; 192 std::map<int, std::vector<char> > sent_packets;
193 for (int i = 0; i < kNumPackets; ++i) { 193 for (int i = 0; i < kNumPackets; ++i) {
194 std::vector<char> send_buffer(kSendBufferSize); 194 std::vector<char> send_buffer(kSendBufferSize);
195 for (size_t j = 0; j < send_buffer.size(); ++j) { 195 for (size_t j = 0; j < send_buffer.size(); ++j) {
196 send_buffer[j] = rand() % 256; 196 send_buffer[j] = rand() % 256;
197 } 197 }
198 // Put packet index in the beginning. 198 // Put packet index in the beginning.
199 memcpy(&send_buffer[0], &i, sizeof(i)); 199 memcpy(&send_buffer[0], &i, sizeof(i));
200 200
201 TestCompletionCallback send_cb(instance_->pp_instance()); 201 TestCompletionCallback send_cb(instance_->pp_instance(), force_async_);
202 ASSERT_EQ( 202 int32_t result = transport2_->Send(&send_buffer[0], send_buffer.size(),
203 transport2_->Send(&send_buffer[0], send_buffer.size(), send_cb), 203 send_cb);
204 static_cast<int>(send_buffer.size())); 204 if (force_async_) {
205 ASSERT_EQ(result, PP_OK_COMPLETIONPENDING);
206 ASSERT_EQ(send_cb.WaitForResult(), static_cast<int>(send_buffer.size()));
207 } else {
208 ASSERT_EQ(result, static_cast<int>(send_buffer.size()));
209 }
205 sent_packets[i] = send_buffer; 210 sent_packets[i] = send_buffer;
206 } 211 }
207 212
208 // Limit waiting time. 213 // Limit waiting time.
209 pp::Module::Get()->core()->CallOnMainThread(kUdpWaitTimeMs, done_cb); 214 pp::Module::Get()->core()->CallOnMainThread(kUdpWaitTimeMs, done_cb);
210 ASSERT_EQ(done_cb.WaitForResult(), PP_OK); 215 ASSERT_EQ(done_cb.WaitForResult(), PP_OK);
211 216
212 ASSERT_TRUE(reader.errors().size() == 0); 217 ASSERT_TRUE(reader.errors().size() == 0);
213 ASSERT_TRUE(reader.received().size() > 0); 218 ASSERT_TRUE(reader.received().size() > 0);
214 for (std::list<std::vector<char> >::const_iterator it = 219 for (std::list<std::vector<char> >::const_iterator it =
(...skipping 21 matching lines...) Expand all
236 StreamReader reader(transport1_.get(), kTcpSendSize, 241 StreamReader reader(transport1_.get(), kTcpSendSize,
237 done_cb); 242 done_cb);
238 243
239 std::vector<char> send_buffer(kTcpSendSize); 244 std::vector<char> send_buffer(kTcpSendSize);
240 for (size_t j = 0; j < send_buffer.size(); ++j) { 245 for (size_t j = 0; j < send_buffer.size(); ++j) {
241 send_buffer[j] = rand() % 256; 246 send_buffer[j] = rand() % 256;
242 } 247 }
243 248
244 int pos = 0; 249 int pos = 0;
245 while (pos < static_cast<int>(send_buffer.size())) { 250 while (pos < static_cast<int>(send_buffer.size())) {
246 TestCompletionCallback send_cb(instance_->pp_instance()); 251 TestCompletionCallback send_cb(instance_->pp_instance(), force_async_);
247 int result = transport2_->Send( 252 int result = transport2_->Send(
248 &send_buffer[0] + pos, send_buffer.size() - pos, send_cb); 253 &send_buffer[0] + pos, send_buffer.size() - pos, send_cb);
254 if (force_async_)
255 ASSERT_EQ(result, PP_OK_COMPLETIONPENDING);
249 if (result == PP_OK_COMPLETIONPENDING) 256 if (result == PP_OK_COMPLETIONPENDING)
250 result = send_cb.WaitForResult(); 257 result = send_cb.WaitForResult();
251 ASSERT_TRUE(result > 0); 258 ASSERT_TRUE(result > 0);
252 pos += result; 259 pos += result;
253 } 260 }
254 261
255 // Limit waiting time. 262 // Limit waiting time.
256 pp::Module::Get()->core()->CallOnMainThread(kTimeoutMs, done_cb); 263 pp::Module::Get()->core()->CallOnMainThread(kTimeoutMs, done_cb);
257 ASSERT_EQ(done_cb.WaitForResult(), PP_OK); 264 ASSERT_EQ(done_cb.WaitForResult(), PP_OK);
258 265
259 ASSERT_TRUE(reader.errors().size() == 0); 266 ASSERT_TRUE(reader.errors().size() == 0);
260 267
261 std::vector<char> received_data; 268 std::vector<char> received_data;
262 for (std::list<std::vector<char> >::const_iterator it = 269 for (std::list<std::vector<char> >::const_iterator it =
263 reader.received().begin(); it != reader.received().end(); ++it) { 270 reader.received().begin(); it != reader.received().end(); ++it) {
264 received_data.insert(received_data.end(), it->begin(), it->end()); 271 received_data.insert(received_data.end(), it->begin(), it->end());
265 } 272 }
266 ASSERT_EQ(send_buffer, received_data); 273 ASSERT_EQ(send_buffer, received_data);
267 274
268 Clean(); 275 Clean();
269 276
270 PASS(); 277 PASS();
271 } 278 }
272 279
273 std::string TestTransport::TestConnectAndCloseUdp() { 280 std::string TestTransport::TestConnectAndCloseUdp() {
274 RUN_SUBTEST(InitTargets("udp")); 281 RUN_SUBTEST(InitTargets("udp"));
275 RUN_SUBTEST(Connect()); 282 RUN_SUBTEST(Connect());
276 283
277 std::vector<char> recv_buffer(kReadBufferSize); 284 std::vector<char> recv_buffer(kReadBufferSize);
278 TestCompletionCallback recv_cb(instance_->pp_instance()); 285 TestCompletionCallback recv_cb(instance_->pp_instance(), force_async_);
279 ASSERT_EQ( 286 ASSERT_EQ(
280 transport1_->Recv(&recv_buffer[0], recv_buffer.size(), recv_cb), 287 transport1_->Recv(&recv_buffer[0], recv_buffer.size(), recv_cb),
281 PP_OK_COMPLETIONPENDING); 288 PP_OK_COMPLETIONPENDING);
282 289
283 // Close the transport and verify that callback is aborted. 290 // Close the transport and verify that callback is aborted.
284 ASSERT_EQ(transport1_->Close(), PP_OK); 291 ASSERT_EQ(transport1_->Close(), PP_OK);
285 292
286 ASSERT_EQ(recv_cb.run_count(), 1); 293 ASSERT_EQ(recv_cb.run_count(), 1);
287 ASSERT_EQ(recv_cb.result(), PP_ERROR_ABORTED); 294 ASSERT_EQ(recv_cb.result(), PP_ERROR_ABORTED);
288 295
289 Clean(); 296 Clean();
290 297
291 PASS(); 298 PASS();
292 } 299 }
293 300
294 std::string TestTransport::TestConnectAndCloseTcp() { 301 std::string TestTransport::TestConnectAndCloseTcp() {
295 RUN_SUBTEST(InitTargets("tcp")); 302 RUN_SUBTEST(InitTargets("tcp"));
296 RUN_SUBTEST(Connect()); 303 RUN_SUBTEST(Connect());
297 304
298 std::vector<char> recv_buffer(kReadBufferSize); 305 std::vector<char> recv_buffer(kReadBufferSize);
299 TestCompletionCallback recv_cb(instance_->pp_instance()); 306 TestCompletionCallback recv_cb(instance_->pp_instance(), force_async_);
300 ASSERT_EQ( 307 ASSERT_EQ(
301 transport1_->Recv(&recv_buffer[0], recv_buffer.size(), recv_cb), 308 transport1_->Recv(&recv_buffer[0], recv_buffer.size(), recv_cb),
302 PP_OK_COMPLETIONPENDING); 309 PP_OK_COMPLETIONPENDING);
303 310
304 // Close the transport and verify that callback is aborted. 311 // Close the transport and verify that callback is aborted.
305 ASSERT_EQ(transport1_->Close(), PP_OK); 312 ASSERT_EQ(transport1_->Close(), PP_OK);
306 313
307 ASSERT_EQ(recv_cb.run_count(), 1); 314 ASSERT_EQ(recv_cb.run_count(), 1);
308 ASSERT_EQ(recv_cb.result(), PP_ERROR_ABORTED); 315 ASSERT_EQ(recv_cb.result(), PP_ERROR_ABORTED);
309 316
310 Clean(); 317 Clean();
311 318
312 PASS(); 319 PASS();
313 } 320 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698