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

Side by Side Diff: webrtc/base/virtualsocket_unittest.cc

Issue 2819473004: base/testutils.h: Use namespace webrtc::testing instead of plain testing (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « webrtc/base/testutils.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2006 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include <math.h> 11 #include <math.h>
12 #include <time.h> 12 #include <time.h>
13 #if defined(WEBRTC_POSIX) 13 #if defined(WEBRTC_POSIX)
14 #include <netinet/in.h> 14 #include <netinet/in.h>
15 #endif 15 #endif
16 16
17 #include <memory> 17 #include <memory>
18 18
19 #include "webrtc/base/arraysize.h" 19 #include "webrtc/base/arraysize.h"
20 #include "webrtc/base/logging.h" 20 #include "webrtc/base/logging.h"
21 #include "webrtc/base/gunit.h" 21 #include "webrtc/base/gunit.h"
22 #include "webrtc/base/testclient.h" 22 #include "webrtc/base/testclient.h"
23 #include "webrtc/base/testutils.h" 23 #include "webrtc/base/testutils.h"
24 #include "webrtc/base/thread.h" 24 #include "webrtc/base/thread.h"
25 #include "webrtc/base/timeutils.h" 25 #include "webrtc/base/timeutils.h"
26 #include "webrtc/base/virtualsocketserver.h" 26 #include "webrtc/base/virtualsocketserver.h"
27 27
28 using namespace rtc; 28 using namespace rtc;
29 29
30 using webrtc::testing::SSE_CLOSE;
31 using webrtc::testing::SSE_ERROR;
32 using webrtc::testing::SSE_OPEN;
33 using webrtc::testing::SSE_READ;
34 using webrtc::testing::SSE_WRITE;
35 using webrtc::testing::StreamSink;
36
30 // Sends at a constant rate but with random packet sizes. 37 // Sends at a constant rate but with random packet sizes.
31 struct Sender : public MessageHandler { 38 struct Sender : public MessageHandler {
32 Sender(Thread* th, AsyncSocket* s, uint32_t rt) 39 Sender(Thread* th, AsyncSocket* s, uint32_t rt)
33 : thread(th), 40 : thread(th),
34 socket(new AsyncUDPSocket(s)), 41 socket(new AsyncUDPSocket(s)),
35 done(false), 42 done(false),
36 rate(rt), 43 rate(rt),
37 count(0) { 44 count(0) {
38 last_send = rtc::TimeMillis(); 45 last_send = rtc::TimeMillis();
39 thread->PostDelayed(RTC_FROM_HERE, NextDelay(), this, 1); 46 thread->PostDelayed(RTC_FROM_HERE, NextDelay(), this, 1);
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, next_client2_addr)); 239 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, next_client2_addr));
233 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &server_addr2)); 240 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &server_addr2));
234 EXPECT_EQ(server_addr2, server_addr); 241 EXPECT_EQ(server_addr2, server_addr);
235 242
236 client2_addr = next_client2_addr; 243 client2_addr = next_client2_addr;
237 } 244 }
238 } 245 }
239 246
240 // initial_addr should be made from either INADDR_ANY or in6addr_any. 247 // initial_addr should be made from either INADDR_ANY or in6addr_any.
241 void ConnectTest(const SocketAddress& initial_addr) { 248 void ConnectTest(const SocketAddress& initial_addr) {
242 testing::StreamSink sink; 249 StreamSink sink;
243 SocketAddress accept_addr; 250 SocketAddress accept_addr;
244 const SocketAddress kEmptyAddr = 251 const SocketAddress kEmptyAddr =
245 EmptySocketAddressWithFamily(initial_addr.family()); 252 EmptySocketAddressWithFamily(initial_addr.family());
246 253
247 // Create client 254 // Create client
248 AsyncSocket* client = ss_->CreateAsyncSocket(initial_addr.family(), 255 AsyncSocket* client = ss_->CreateAsyncSocket(initial_addr.family(),
249 SOCK_STREAM); 256 SOCK_STREAM);
250 sink.Monitor(client); 257 sink.Monitor(client);
251 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED); 258 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED);
252 EXPECT_TRUE(client->GetLocalAddress().IsNil()); 259 EXPECT_TRUE(client->GetLocalAddress().IsNil());
253 260
254 // Create server 261 // Create server
255 AsyncSocket* server = ss_->CreateAsyncSocket(initial_addr.family(), 262 AsyncSocket* server = ss_->CreateAsyncSocket(initial_addr.family(),
256 SOCK_STREAM); 263 SOCK_STREAM);
257 sink.Monitor(server); 264 sink.Monitor(server);
258 EXPECT_NE(0, server->Listen(5)); // Bind required 265 EXPECT_NE(0, server->Listen(5)); // Bind required
259 EXPECT_EQ(0, server->Bind(initial_addr)); 266 EXPECT_EQ(0, server->Bind(initial_addr));
260 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family()); 267 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family());
261 EXPECT_EQ(0, server->Listen(5)); 268 EXPECT_EQ(0, server->Listen(5));
262 EXPECT_EQ(server->GetState(), AsyncSocket::CS_CONNECTING); 269 EXPECT_EQ(server->GetState(), AsyncSocket::CS_CONNECTING);
263 270
264 // No pending server connections 271 // No pending server connections
265 EXPECT_FALSE(sink.Check(server, testing::SSE_READ)); 272 EXPECT_FALSE(sink.Check(server, SSE_READ));
266 EXPECT_TRUE(nullptr == server->Accept(&accept_addr)); 273 EXPECT_TRUE(nullptr == server->Accept(&accept_addr));
267 EXPECT_EQ(AF_UNSPEC, accept_addr.family()); 274 EXPECT_EQ(AF_UNSPEC, accept_addr.family());
268 275
269 // Attempt connect to listening socket 276 // Attempt connect to listening socket
270 EXPECT_EQ(0, client->Connect(server->GetLocalAddress())); 277 EXPECT_EQ(0, client->Connect(server->GetLocalAddress()));
271 EXPECT_NE(client->GetLocalAddress(), kEmptyAddr); // Implicit Bind 278 EXPECT_NE(client->GetLocalAddress(), kEmptyAddr); // Implicit Bind
272 EXPECT_NE(AF_UNSPEC, client->GetLocalAddress().family()); // Implicit Bind 279 EXPECT_NE(AF_UNSPEC, client->GetLocalAddress().family()); // Implicit Bind
273 EXPECT_NE(client->GetLocalAddress(), server->GetLocalAddress()); 280 EXPECT_NE(client->GetLocalAddress(), server->GetLocalAddress());
274 281
275 // Client is connecting 282 // Client is connecting
276 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTING); 283 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTING);
277 EXPECT_FALSE(sink.Check(client, testing::SSE_OPEN)); 284 EXPECT_FALSE(sink.Check(client, SSE_OPEN));
278 EXPECT_FALSE(sink.Check(client, testing::SSE_CLOSE)); 285 EXPECT_FALSE(sink.Check(client, SSE_CLOSE));
279 286
280 ss_->ProcessMessagesUntilIdle(); 287 ss_->ProcessMessagesUntilIdle();
281 288
282 // Client still connecting 289 // Client still connecting
283 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTING); 290 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTING);
284 EXPECT_FALSE(sink.Check(client, testing::SSE_OPEN)); 291 EXPECT_FALSE(sink.Check(client, SSE_OPEN));
285 EXPECT_FALSE(sink.Check(client, testing::SSE_CLOSE)); 292 EXPECT_FALSE(sink.Check(client, SSE_CLOSE));
286 293
287 // Server has pending connection 294 // Server has pending connection
288 EXPECT_TRUE(sink.Check(server, testing::SSE_READ)); 295 EXPECT_TRUE(sink.Check(server, SSE_READ));
289 Socket* accepted = server->Accept(&accept_addr); 296 Socket* accepted = server->Accept(&accept_addr);
290 EXPECT_TRUE(nullptr != accepted); 297 EXPECT_TRUE(nullptr != accepted);
291 EXPECT_NE(accept_addr, kEmptyAddr); 298 EXPECT_NE(accept_addr, kEmptyAddr);
292 EXPECT_EQ(accepted->GetRemoteAddress(), accept_addr); 299 EXPECT_EQ(accepted->GetRemoteAddress(), accept_addr);
293 300
294 EXPECT_EQ(accepted->GetState(), AsyncSocket::CS_CONNECTED); 301 EXPECT_EQ(accepted->GetState(), AsyncSocket::CS_CONNECTED);
295 EXPECT_EQ(accepted->GetLocalAddress(), server->GetLocalAddress()); 302 EXPECT_EQ(accepted->GetLocalAddress(), server->GetLocalAddress());
296 EXPECT_EQ(accepted->GetRemoteAddress(), client->GetLocalAddress()); 303 EXPECT_EQ(accepted->GetRemoteAddress(), client->GetLocalAddress());
297 304
298 ss_->ProcessMessagesUntilIdle(); 305 ss_->ProcessMessagesUntilIdle();
299 306
300 // Client has connected 307 // Client has connected
301 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTED); 308 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTED);
302 EXPECT_TRUE(sink.Check(client, testing::SSE_OPEN)); 309 EXPECT_TRUE(sink.Check(client, SSE_OPEN));
303 EXPECT_FALSE(sink.Check(client, testing::SSE_CLOSE)); 310 EXPECT_FALSE(sink.Check(client, SSE_CLOSE));
304 EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress()); 311 EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress());
305 EXPECT_EQ(client->GetRemoteAddress(), accepted->GetLocalAddress()); 312 EXPECT_EQ(client->GetRemoteAddress(), accepted->GetLocalAddress());
306 } 313 }
307 314
308 void ConnectToNonListenerTest(const SocketAddress& initial_addr) { 315 void ConnectToNonListenerTest(const SocketAddress& initial_addr) {
309 testing::StreamSink sink; 316 StreamSink sink;
310 SocketAddress accept_addr; 317 SocketAddress accept_addr;
311 const SocketAddress nil_addr; 318 const SocketAddress nil_addr;
312 const SocketAddress empty_addr = 319 const SocketAddress empty_addr =
313 EmptySocketAddressWithFamily(initial_addr.family()); 320 EmptySocketAddressWithFamily(initial_addr.family());
314 321
315 // Create client 322 // Create client
316 AsyncSocket* client = ss_->CreateAsyncSocket(initial_addr.family(), 323 AsyncSocket* client = ss_->CreateAsyncSocket(initial_addr.family(),
317 SOCK_STREAM); 324 SOCK_STREAM);
318 sink.Monitor(client); 325 sink.Monitor(client);
319 326
320 // Create server 327 // Create server
321 AsyncSocket* server = ss_->CreateAsyncSocket(initial_addr.family(), 328 AsyncSocket* server = ss_->CreateAsyncSocket(initial_addr.family(),
322 SOCK_STREAM); 329 SOCK_STREAM);
323 sink.Monitor(server); 330 sink.Monitor(server);
324 EXPECT_EQ(0, server->Bind(initial_addr)); 331 EXPECT_EQ(0, server->Bind(initial_addr));
325 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family()); 332 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family());
326 // Attempt connect to non-listening socket 333 // Attempt connect to non-listening socket
327 EXPECT_EQ(0, client->Connect(server->GetLocalAddress())); 334 EXPECT_EQ(0, client->Connect(server->GetLocalAddress()));
328 335
329 ss_->ProcessMessagesUntilIdle(); 336 ss_->ProcessMessagesUntilIdle();
330 337
331 // No pending server connections 338 // No pending server connections
332 EXPECT_FALSE(sink.Check(server, testing::SSE_READ)); 339 EXPECT_FALSE(sink.Check(server, SSE_READ));
333 EXPECT_TRUE(nullptr == server->Accept(&accept_addr)); 340 EXPECT_TRUE(nullptr == server->Accept(&accept_addr));
334 EXPECT_EQ(accept_addr, nil_addr); 341 EXPECT_EQ(accept_addr, nil_addr);
335 342
336 // Connection failed 343 // Connection failed
337 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED); 344 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED);
338 EXPECT_FALSE(sink.Check(client, testing::SSE_OPEN)); 345 EXPECT_FALSE(sink.Check(client, SSE_OPEN));
339 EXPECT_TRUE(sink.Check(client, testing::SSE_ERROR)); 346 EXPECT_TRUE(sink.Check(client, SSE_ERROR));
340 EXPECT_EQ(client->GetRemoteAddress(), nil_addr); 347 EXPECT_EQ(client->GetRemoteAddress(), nil_addr);
341 } 348 }
342 349
343 void CloseDuringConnectTest(const SocketAddress& initial_addr) { 350 void CloseDuringConnectTest(const SocketAddress& initial_addr) {
344 testing::StreamSink sink; 351 StreamSink sink;
345 SocketAddress accept_addr; 352 SocketAddress accept_addr;
346 const SocketAddress empty_addr = 353 const SocketAddress empty_addr =
347 EmptySocketAddressWithFamily(initial_addr.family()); 354 EmptySocketAddressWithFamily(initial_addr.family());
348 355
349 // Create client and server 356 // Create client and server
350 std::unique_ptr<AsyncSocket> client( 357 std::unique_ptr<AsyncSocket> client(
351 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM)); 358 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM));
352 sink.Monitor(client.get()); 359 sink.Monitor(client.get());
353 std::unique_ptr<AsyncSocket> server( 360 std::unique_ptr<AsyncSocket> server(
354 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM)); 361 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM));
355 sink.Monitor(server.get()); 362 sink.Monitor(server.get());
356 363
357 // Initiate connect 364 // Initiate connect
358 EXPECT_EQ(0, server->Bind(initial_addr)); 365 EXPECT_EQ(0, server->Bind(initial_addr));
359 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family()); 366 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family());
360 367
361 EXPECT_EQ(0, server->Listen(5)); 368 EXPECT_EQ(0, server->Listen(5));
362 EXPECT_EQ(0, client->Connect(server->GetLocalAddress())); 369 EXPECT_EQ(0, client->Connect(server->GetLocalAddress()));
363 370
364 // Server close before socket enters accept queue 371 // Server close before socket enters accept queue
365 EXPECT_FALSE(sink.Check(server.get(), testing::SSE_READ)); 372 EXPECT_FALSE(sink.Check(server.get(), SSE_READ));
366 server->Close(); 373 server->Close();
367 374
368 ss_->ProcessMessagesUntilIdle(); 375 ss_->ProcessMessagesUntilIdle();
369 376
370 // Result: connection failed 377 // Result: connection failed
371 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED); 378 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED);
372 EXPECT_TRUE(sink.Check(client.get(), testing::SSE_ERROR)); 379 EXPECT_TRUE(sink.Check(client.get(), SSE_ERROR));
373 380
374 server.reset(ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM)); 381 server.reset(ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM));
375 sink.Monitor(server.get()); 382 sink.Monitor(server.get());
376 383
377 // Initiate connect 384 // Initiate connect
378 EXPECT_EQ(0, server->Bind(initial_addr)); 385 EXPECT_EQ(0, server->Bind(initial_addr));
379 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family()); 386 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family());
380 387
381 EXPECT_EQ(0, server->Listen(5)); 388 EXPECT_EQ(0, server->Listen(5));
382 EXPECT_EQ(0, client->Connect(server->GetLocalAddress())); 389 EXPECT_EQ(0, client->Connect(server->GetLocalAddress()));
383 390
384 ss_->ProcessMessagesUntilIdle(); 391 ss_->ProcessMessagesUntilIdle();
385 392
386 // Server close while socket is in accept queue 393 // Server close while socket is in accept queue
387 EXPECT_TRUE(sink.Check(server.get(), testing::SSE_READ)); 394 EXPECT_TRUE(sink.Check(server.get(), SSE_READ));
388 server->Close(); 395 server->Close();
389 396
390 ss_->ProcessMessagesUntilIdle(); 397 ss_->ProcessMessagesUntilIdle();
391 398
392 // Result: connection failed 399 // Result: connection failed
393 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED); 400 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED);
394 EXPECT_TRUE(sink.Check(client.get(), testing::SSE_ERROR)); 401 EXPECT_TRUE(sink.Check(client.get(), SSE_ERROR));
395 402
396 // New server 403 // New server
397 server.reset(ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM)); 404 server.reset(ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM));
398 sink.Monitor(server.get()); 405 sink.Monitor(server.get());
399 406
400 // Initiate connect 407 // Initiate connect
401 EXPECT_EQ(0, server->Bind(initial_addr)); 408 EXPECT_EQ(0, server->Bind(initial_addr));
402 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family()); 409 EXPECT_EQ(server->GetLocalAddress().family(), initial_addr.family());
403 410
404 EXPECT_EQ(0, server->Listen(5)); 411 EXPECT_EQ(0, server->Listen(5));
405 EXPECT_EQ(0, client->Connect(server->GetLocalAddress())); 412 EXPECT_EQ(0, client->Connect(server->GetLocalAddress()));
406 413
407 ss_->ProcessMessagesUntilIdle(); 414 ss_->ProcessMessagesUntilIdle();
408 415
409 // Server accepts connection 416 // Server accepts connection
410 EXPECT_TRUE(sink.Check(server.get(), testing::SSE_READ)); 417 EXPECT_TRUE(sink.Check(server.get(), SSE_READ));
411 std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr)); 418 std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
412 ASSERT_TRUE(nullptr != accepted.get()); 419 ASSERT_TRUE(nullptr != accepted.get());
413 sink.Monitor(accepted.get()); 420 sink.Monitor(accepted.get());
414 421
415 // Client closes before connection complets 422 // Client closes before connection complets
416 EXPECT_EQ(accepted->GetState(), AsyncSocket::CS_CONNECTED); 423 EXPECT_EQ(accepted->GetState(), AsyncSocket::CS_CONNECTED);
417 424
418 // Connected message has not been processed yet. 425 // Connected message has not been processed yet.
419 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTING); 426 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CONNECTING);
420 client->Close(); 427 client->Close();
421 428
422 ss_->ProcessMessagesUntilIdle(); 429 ss_->ProcessMessagesUntilIdle();
423 430
424 // Result: accepted socket closes 431 // Result: accepted socket closes
425 EXPECT_EQ(accepted->GetState(), AsyncSocket::CS_CLOSED); 432 EXPECT_EQ(accepted->GetState(), AsyncSocket::CS_CLOSED);
426 EXPECT_TRUE(sink.Check(accepted.get(), testing::SSE_CLOSE)); 433 EXPECT_TRUE(sink.Check(accepted.get(), SSE_CLOSE));
427 EXPECT_FALSE(sink.Check(client.get(), testing::SSE_CLOSE)); 434 EXPECT_FALSE(sink.Check(client.get(), SSE_CLOSE));
428 } 435 }
429 436
430 void CloseTest(const SocketAddress& initial_addr) { 437 void CloseTest(const SocketAddress& initial_addr) {
431 testing::StreamSink sink; 438 StreamSink sink;
432 const SocketAddress kEmptyAddr; 439 const SocketAddress kEmptyAddr;
433 440
434 // Create clients 441 // Create clients
435 AsyncSocket* a = ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM); 442 AsyncSocket* a = ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM);
436 sink.Monitor(a); 443 sink.Monitor(a);
437 a->Bind(initial_addr); 444 a->Bind(initial_addr);
438 EXPECT_EQ(a->GetLocalAddress().family(), initial_addr.family()); 445 EXPECT_EQ(a->GetLocalAddress().family(), initial_addr.family());
439 446
440 std::unique_ptr<AsyncSocket> b( 447 std::unique_ptr<AsyncSocket> b(
441 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM)); 448 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM));
442 sink.Monitor(b.get()); 449 sink.Monitor(b.get());
443 b->Bind(initial_addr); 450 b->Bind(initial_addr);
444 EXPECT_EQ(b->GetLocalAddress().family(), initial_addr.family()); 451 EXPECT_EQ(b->GetLocalAddress().family(), initial_addr.family());
445 452
446 EXPECT_EQ(0, a->Connect(b->GetLocalAddress())); 453 EXPECT_EQ(0, a->Connect(b->GetLocalAddress()));
447 EXPECT_EQ(0, b->Connect(a->GetLocalAddress())); 454 EXPECT_EQ(0, b->Connect(a->GetLocalAddress()));
448 455
449 ss_->ProcessMessagesUntilIdle(); 456 ss_->ProcessMessagesUntilIdle();
450 457
451 EXPECT_TRUE(sink.Check(a, testing::SSE_OPEN)); 458 EXPECT_TRUE(sink.Check(a, SSE_OPEN));
452 EXPECT_EQ(a->GetState(), AsyncSocket::CS_CONNECTED); 459 EXPECT_EQ(a->GetState(), AsyncSocket::CS_CONNECTED);
453 EXPECT_EQ(a->GetRemoteAddress(), b->GetLocalAddress()); 460 EXPECT_EQ(a->GetRemoteAddress(), b->GetLocalAddress());
454 461
455 EXPECT_TRUE(sink.Check(b.get(), testing::SSE_OPEN)); 462 EXPECT_TRUE(sink.Check(b.get(), SSE_OPEN));
456 EXPECT_EQ(b->GetState(), AsyncSocket::CS_CONNECTED); 463 EXPECT_EQ(b->GetState(), AsyncSocket::CS_CONNECTED);
457 EXPECT_EQ(b->GetRemoteAddress(), a->GetLocalAddress()); 464 EXPECT_EQ(b->GetRemoteAddress(), a->GetLocalAddress());
458 465
459 EXPECT_EQ(1, a->Send("a", 1)); 466 EXPECT_EQ(1, a->Send("a", 1));
460 b->Close(); 467 b->Close();
461 EXPECT_EQ(1, a->Send("b", 1)); 468 EXPECT_EQ(1, a->Send("b", 1));
462 469
463 ss_->ProcessMessagesUntilIdle(); 470 ss_->ProcessMessagesUntilIdle();
464 471
465 char buffer[10]; 472 char buffer[10];
466 EXPECT_FALSE(sink.Check(b.get(), testing::SSE_READ)); 473 EXPECT_FALSE(sink.Check(b.get(), SSE_READ));
467 EXPECT_EQ(-1, b->Recv(buffer, 10, nullptr)); 474 EXPECT_EQ(-1, b->Recv(buffer, 10, nullptr));
468 475
469 EXPECT_TRUE(sink.Check(a, testing::SSE_CLOSE)); 476 EXPECT_TRUE(sink.Check(a, SSE_CLOSE));
470 EXPECT_EQ(a->GetState(), AsyncSocket::CS_CLOSED); 477 EXPECT_EQ(a->GetState(), AsyncSocket::CS_CLOSED);
471 EXPECT_EQ(a->GetRemoteAddress(), kEmptyAddr); 478 EXPECT_EQ(a->GetRemoteAddress(), kEmptyAddr);
472 479
473 // No signal for Closer 480 // No signal for Closer
474 EXPECT_FALSE(sink.Check(b.get(), testing::SSE_CLOSE)); 481 EXPECT_FALSE(sink.Check(b.get(), SSE_CLOSE));
475 EXPECT_EQ(b->GetState(), AsyncSocket::CS_CLOSED); 482 EXPECT_EQ(b->GetState(), AsyncSocket::CS_CLOSED);
476 EXPECT_EQ(b->GetRemoteAddress(), kEmptyAddr); 483 EXPECT_EQ(b->GetRemoteAddress(), kEmptyAddr);
477 } 484 }
478 485
479 void TcpSendTest(const SocketAddress& initial_addr) { 486 void TcpSendTest(const SocketAddress& initial_addr) {
480 testing::StreamSink sink; 487 StreamSink sink;
481 const SocketAddress kEmptyAddr; 488 const SocketAddress kEmptyAddr;
482 489
483 // Connect two sockets 490 // Connect two sockets
484 AsyncSocket* a = ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM); 491 AsyncSocket* a = ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM);
485 sink.Monitor(a); 492 sink.Monitor(a);
486 a->Bind(initial_addr); 493 a->Bind(initial_addr);
487 EXPECT_EQ(a->GetLocalAddress().family(), initial_addr.family()); 494 EXPECT_EQ(a->GetLocalAddress().family(), initial_addr.family());
488 495
489 AsyncSocket* b = ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM); 496 AsyncSocket* b = ss_->CreateAsyncSocket(initial_addr.family(), SOCK_STREAM);
490 sink.Monitor(b); 497 sink.Monitor(b);
(...skipping 15 matching lines...) Expand all
506 send_buffer[i] = static_cast<char>(i % 256); 513 send_buffer[i] = static_cast<char>(i % 256);
507 memset(recv_buffer, 0, sizeof(recv_buffer)); 514 memset(recv_buffer, 0, sizeof(recv_buffer));
508 size_t send_pos = 0, recv_pos = 0; 515 size_t send_pos = 0, recv_pos = 0;
509 516
510 // Can't send more than send buffer in one write 517 // Can't send more than send buffer in one write
511 int result = a->Send(send_buffer + send_pos, kDataSize - send_pos); 518 int result = a->Send(send_buffer + send_pos, kDataSize - send_pos);
512 EXPECT_EQ(static_cast<int>(kBufferSize), result); 519 EXPECT_EQ(static_cast<int>(kBufferSize), result);
513 send_pos += result; 520 send_pos += result;
514 521
515 ss_->ProcessMessagesUntilIdle(); 522 ss_->ProcessMessagesUntilIdle();
516 EXPECT_FALSE(sink.Check(a, testing::SSE_WRITE)); 523 EXPECT_FALSE(sink.Check(a, SSE_WRITE));
517 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); 524 EXPECT_TRUE(sink.Check(b, SSE_READ));
518 525
519 // Receive buffer is already filled, fill send buffer again 526 // Receive buffer is already filled, fill send buffer again
520 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); 527 result = a->Send(send_buffer + send_pos, kDataSize - send_pos);
521 EXPECT_EQ(static_cast<int>(kBufferSize), result); 528 EXPECT_EQ(static_cast<int>(kBufferSize), result);
522 send_pos += result; 529 send_pos += result;
523 530
524 ss_->ProcessMessagesUntilIdle(); 531 ss_->ProcessMessagesUntilIdle();
525 EXPECT_FALSE(sink.Check(a, testing::SSE_WRITE)); 532 EXPECT_FALSE(sink.Check(a, SSE_WRITE));
526 EXPECT_FALSE(sink.Check(b, testing::SSE_READ)); 533 EXPECT_FALSE(sink.Check(b, SSE_READ));
527 534
528 // No more room in send or receive buffer 535 // No more room in send or receive buffer
529 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); 536 result = a->Send(send_buffer + send_pos, kDataSize - send_pos);
530 EXPECT_EQ(-1, result); 537 EXPECT_EQ(-1, result);
531 EXPECT_TRUE(a->IsBlocking()); 538 EXPECT_TRUE(a->IsBlocking());
532 539
533 // Read a subset of the data 540 // Read a subset of the data
534 result = b->Recv(recv_buffer + recv_pos, 500, nullptr); 541 result = b->Recv(recv_buffer + recv_pos, 500, nullptr);
535 EXPECT_EQ(500, result); 542 EXPECT_EQ(500, result);
536 recv_pos += result; 543 recv_pos += result;
537 544
538 ss_->ProcessMessagesUntilIdle(); 545 ss_->ProcessMessagesUntilIdle();
539 EXPECT_TRUE(sink.Check(a, testing::SSE_WRITE)); 546 EXPECT_TRUE(sink.Check(a, SSE_WRITE));
540 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); 547 EXPECT_TRUE(sink.Check(b, SSE_READ));
541 548
542 // Room for more on the sending side 549 // Room for more on the sending side
543 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); 550 result = a->Send(send_buffer + send_pos, kDataSize - send_pos);
544 EXPECT_EQ(500, result); 551 EXPECT_EQ(500, result);
545 send_pos += result; 552 send_pos += result;
546 553
547 // Empty the recv buffer 554 // Empty the recv buffer
548 while (true) { 555 while (true) {
549 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, nullptr); 556 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, nullptr);
550 if (result < 0) { 557 if (result < 0) {
551 EXPECT_EQ(-1, result); 558 EXPECT_EQ(-1, result);
552 EXPECT_TRUE(b->IsBlocking()); 559 EXPECT_TRUE(b->IsBlocking());
553 break; 560 break;
554 } 561 }
555 recv_pos += result; 562 recv_pos += result;
556 } 563 }
557 564
558 ss_->ProcessMessagesUntilIdle(); 565 ss_->ProcessMessagesUntilIdle();
559 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); 566 EXPECT_TRUE(sink.Check(b, SSE_READ));
560 567
561 // Continue to empty the recv buffer 568 // Continue to empty the recv buffer
562 while (true) { 569 while (true) {
563 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, nullptr); 570 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, nullptr);
564 if (result < 0) { 571 if (result < 0) {
565 EXPECT_EQ(-1, result); 572 EXPECT_EQ(-1, result);
566 EXPECT_TRUE(b->IsBlocking()); 573 EXPECT_TRUE(b->IsBlocking());
567 break; 574 break;
568 } 575 }
569 recv_pos += result; 576 recv_pos += result;
570 } 577 }
571 578
572 // Send last of the data 579 // Send last of the data
573 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); 580 result = a->Send(send_buffer + send_pos, kDataSize - send_pos);
574 EXPECT_EQ(500, result); 581 EXPECT_EQ(500, result);
575 send_pos += result; 582 send_pos += result;
576 583
577 ss_->ProcessMessagesUntilIdle(); 584 ss_->ProcessMessagesUntilIdle();
578 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); 585 EXPECT_TRUE(sink.Check(b, SSE_READ));
579 586
580 // Receive the last of the data 587 // Receive the last of the data
581 while (true) { 588 while (true) {
582 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, nullptr); 589 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, nullptr);
583 if (result < 0) { 590 if (result < 0) {
584 EXPECT_EQ(-1, result); 591 EXPECT_EQ(-1, result);
585 EXPECT_TRUE(b->IsBlocking()); 592 EXPECT_TRUE(b->IsBlocking());
586 break; 593 break;
587 } 594 }
588 recv_pos += result; 595 recv_pos += result;
589 } 596 }
590 597
591 ss_->ProcessMessagesUntilIdle(); 598 ss_->ProcessMessagesUntilIdle();
592 EXPECT_FALSE(sink.Check(b, testing::SSE_READ)); 599 EXPECT_FALSE(sink.Check(b, SSE_READ));
593 600
594 // The received data matches the sent data 601 // The received data matches the sent data
595 EXPECT_EQ(kDataSize, send_pos); 602 EXPECT_EQ(kDataSize, send_pos);
596 EXPECT_EQ(kDataSize, recv_pos); 603 EXPECT_EQ(kDataSize, recv_pos);
597 EXPECT_EQ(0, memcmp(recv_buffer, send_buffer, kDataSize)); 604 EXPECT_EQ(0, memcmp(recv_buffer, send_buffer, kDataSize));
598 } 605 }
599 606
600 void TcpSendsPacketsInOrderTest(const SocketAddress& initial_addr) { 607 void TcpSendsPacketsInOrderTest(const SocketAddress& initial_addr) {
601 const SocketAddress kEmptyAddr; 608 const SocketAddress kEmptyAddr;
602 609
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 ss_->set_delay_stddev(0); 741 ss_->set_delay_stddev(0);
735 ss_->UpdateDelayDistribution(); 742 ss_->UpdateDelayDistribution();
736 } 743 }
737 744
738 // Test cross-family communication between a client bound to client_addr and a 745 // Test cross-family communication between a client bound to client_addr and a
739 // server bound to server_addr. shouldSucceed indicates if communication is 746 // server bound to server_addr. shouldSucceed indicates if communication is
740 // expected to work or not. 747 // expected to work or not.
741 void CrossFamilyConnectionTest(const SocketAddress& client_addr, 748 void CrossFamilyConnectionTest(const SocketAddress& client_addr,
742 const SocketAddress& server_addr, 749 const SocketAddress& server_addr,
743 bool shouldSucceed) { 750 bool shouldSucceed) {
744 testing::StreamSink sink; 751 StreamSink sink;
745 SocketAddress accept_address; 752 SocketAddress accept_address;
746 const SocketAddress kEmptyAddr; 753 const SocketAddress kEmptyAddr;
747 754
748 // Client gets a IPv4 address 755 // Client gets a IPv4 address
749 AsyncSocket* client = ss_->CreateAsyncSocket(client_addr.family(), 756 AsyncSocket* client = ss_->CreateAsyncSocket(client_addr.family(),
750 SOCK_STREAM); 757 SOCK_STREAM);
751 sink.Monitor(client); 758 sink.Monitor(client);
752 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED); 759 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED);
753 EXPECT_EQ(client->GetLocalAddress(), kEmptyAddr); 760 EXPECT_EQ(client->GetLocalAddress(), kEmptyAddr);
754 client->Bind(client_addr); 761 client->Bind(client_addr);
755 762
756 // Server gets a non-mapped non-any IPv6 address. 763 // Server gets a non-mapped non-any IPv6 address.
757 // IPv4 sockets should not be able to connect to this. 764 // IPv4 sockets should not be able to connect to this.
758 AsyncSocket* server = ss_->CreateAsyncSocket(server_addr.family(), 765 AsyncSocket* server = ss_->CreateAsyncSocket(server_addr.family(),
759 SOCK_STREAM); 766 SOCK_STREAM);
760 sink.Monitor(server); 767 sink.Monitor(server);
761 server->Bind(server_addr); 768 server->Bind(server_addr);
762 server->Listen(5); 769 server->Listen(5);
763 770
764 if (shouldSucceed) { 771 if (shouldSucceed) {
765 EXPECT_EQ(0, client->Connect(server->GetLocalAddress())); 772 EXPECT_EQ(0, client->Connect(server->GetLocalAddress()));
766 ss_->ProcessMessagesUntilIdle(); 773 ss_->ProcessMessagesUntilIdle();
767 EXPECT_TRUE(sink.Check(server, testing::SSE_READ)); 774 EXPECT_TRUE(sink.Check(server, SSE_READ));
768 Socket* accepted = server->Accept(&accept_address); 775 Socket* accepted = server->Accept(&accept_address);
769 EXPECT_TRUE(nullptr != accepted); 776 EXPECT_TRUE(nullptr != accepted);
770 EXPECT_NE(kEmptyAddr, accept_address); 777 EXPECT_NE(kEmptyAddr, accept_address);
771 ss_->ProcessMessagesUntilIdle(); 778 ss_->ProcessMessagesUntilIdle();
772 EXPECT_TRUE(sink.Check(client, testing::SSE_OPEN)); 779 EXPECT_TRUE(sink.Check(client, SSE_OPEN));
773 EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress()); 780 EXPECT_EQ(client->GetRemoteAddress(), server->GetLocalAddress());
774 } else { 781 } else {
775 // Check that the connection failed. 782 // Check that the connection failed.
776 EXPECT_EQ(-1, client->Connect(server->GetLocalAddress())); 783 EXPECT_EQ(-1, client->Connect(server->GetLocalAddress()));
777 ss_->ProcessMessagesUntilIdle(); 784 ss_->ProcessMessagesUntilIdle();
778 785
779 EXPECT_FALSE(sink.Check(server, testing::SSE_READ)); 786 EXPECT_FALSE(sink.Check(server, SSE_READ));
780 EXPECT_TRUE(nullptr == server->Accept(&accept_address)); 787 EXPECT_TRUE(nullptr == server->Accept(&accept_address));
781 EXPECT_EQ(accept_address, kEmptyAddr); 788 EXPECT_EQ(accept_address, kEmptyAddr);
782 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED); 789 EXPECT_EQ(client->GetState(), AsyncSocket::CS_CLOSED);
783 EXPECT_FALSE(sink.Check(client, testing::SSE_OPEN)); 790 EXPECT_FALSE(sink.Check(client, SSE_OPEN));
784 EXPECT_EQ(client->GetRemoteAddress(), kEmptyAddr); 791 EXPECT_EQ(client->GetRemoteAddress(), kEmptyAddr);
785 } 792 }
786 } 793 }
787 794
788 // Test cross-family datagram sending between a client bound to client_addr 795 // Test cross-family datagram sending between a client bound to client_addr
789 // and a server bound to server_addr. shouldSucceed indicates if sending is 796 // and a server bound to server_addr. shouldSucceed indicates if sending is
790 // expected to succeed or not. 797 // expected to succeed or not.
791 void CrossFamilyDatagramTest(const SocketAddress& client_addr, 798 void CrossFamilyDatagramTest(const SocketAddress& client_addr,
792 const SocketAddress& server_addr, 799 const SocketAddress& server_addr,
793 bool shouldSucceed) { 800 bool shouldSucceed) {
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 ss_->SetSendingBlocked(false); 1040 ss_->SetSendingBlocked(false);
1034 EXPECT_EQ(1, client1->ready_to_send_count()); 1041 EXPECT_EQ(1, client1->ready_to_send_count());
1035 EXPECT_EQ(3, client1->SendTo("foo", 3, socket2->GetLocalAddress())); 1042 EXPECT_EQ(3, client1->SendTo("foo", 3, socket2->GetLocalAddress()));
1036 } 1043 }
1037 1044
1038 TEST_F(VirtualSocketServerTest, SetSendingBlockedWithTcpSocket) { 1045 TEST_F(VirtualSocketServerTest, SetSendingBlockedWithTcpSocket) {
1039 constexpr size_t kBufferSize = 1024; 1046 constexpr size_t kBufferSize = 1024;
1040 ss_->set_send_buffer_capacity(kBufferSize); 1047 ss_->set_send_buffer_capacity(kBufferSize);
1041 ss_->set_recv_buffer_capacity(kBufferSize); 1048 ss_->set_recv_buffer_capacity(kBufferSize);
1042 1049
1043 testing::StreamSink sink; 1050 StreamSink sink;
1044 AsyncSocket* socket1 = 1051 AsyncSocket* socket1 =
1045 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_STREAM); 1052 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_STREAM);
1046 AsyncSocket* socket2 = 1053 AsyncSocket* socket2 =
1047 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_STREAM); 1054 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_STREAM);
1048 sink.Monitor(socket1); 1055 sink.Monitor(socket1);
1049 sink.Monitor(socket2); 1056 sink.Monitor(socket2);
1050 socket1->Bind(kIPv4AnyAddress); 1057 socket1->Bind(kIPv4AnyAddress);
1051 socket2->Bind(kIPv4AnyAddress); 1058 socket2->Bind(kIPv4AnyAddress);
1052 1059
1053 // Connect sockets. 1060 // Connect sockets.
1054 EXPECT_EQ(0, socket1->Connect(socket2->GetLocalAddress())); 1061 EXPECT_EQ(0, socket1->Connect(socket2->GetLocalAddress()));
1055 EXPECT_EQ(0, socket2->Connect(socket1->GetLocalAddress())); 1062 EXPECT_EQ(0, socket2->Connect(socket1->GetLocalAddress()));
1056 ss_->ProcessMessagesUntilIdle(); 1063 ss_->ProcessMessagesUntilIdle();
1057 1064
1058 char data[kBufferSize] = {}; 1065 char data[kBufferSize] = {};
1059 1066
1060 // First Send call will fill the send buffer but not send anything. 1067 // First Send call will fill the send buffer but not send anything.
1061 ss_->SetSendingBlocked(true); 1068 ss_->SetSendingBlocked(true);
1062 EXPECT_EQ(static_cast<int>(kBufferSize), socket1->Send(data, kBufferSize)); 1069 EXPECT_EQ(static_cast<int>(kBufferSize), socket1->Send(data, kBufferSize));
1063 ss_->ProcessMessagesUntilIdle(); 1070 ss_->ProcessMessagesUntilIdle();
1064 EXPECT_FALSE(sink.Check(socket1, testing::SSE_WRITE)); 1071 EXPECT_FALSE(sink.Check(socket1, SSE_WRITE));
1065 EXPECT_FALSE(sink.Check(socket2, testing::SSE_READ)); 1072 EXPECT_FALSE(sink.Check(socket2, SSE_READ));
1066 EXPECT_FALSE(socket1->IsBlocking()); 1073 EXPECT_FALSE(socket1->IsBlocking());
1067 1074
1068 // Since the send buffer is full, next Send will result in EWOULDBLOCK. 1075 // Since the send buffer is full, next Send will result in EWOULDBLOCK.
1069 EXPECT_EQ(-1, socket1->Send(data, kBufferSize)); 1076 EXPECT_EQ(-1, socket1->Send(data, kBufferSize));
1070 EXPECT_FALSE(sink.Check(socket1, testing::SSE_WRITE)); 1077 EXPECT_FALSE(sink.Check(socket1, SSE_WRITE));
1071 EXPECT_FALSE(sink.Check(socket2, testing::SSE_READ)); 1078 EXPECT_FALSE(sink.Check(socket2, SSE_READ));
1072 EXPECT_TRUE(socket1->IsBlocking()); 1079 EXPECT_TRUE(socket1->IsBlocking());
1073 1080
1074 // When sending is unblocked, the buffered data should be sent and 1081 // When sending is unblocked, the buffered data should be sent and
1075 // SignalWriteEvent should fire. 1082 // SignalWriteEvent should fire.
1076 ss_->SetSendingBlocked(false); 1083 ss_->SetSendingBlocked(false);
1077 ss_->ProcessMessagesUntilIdle(); 1084 ss_->ProcessMessagesUntilIdle();
1078 EXPECT_TRUE(sink.Check(socket1, testing::SSE_WRITE)); 1085 EXPECT_TRUE(sink.Check(socket1, SSE_WRITE));
1079 EXPECT_TRUE(sink.Check(socket2, testing::SSE_READ)); 1086 EXPECT_TRUE(sink.Check(socket2, SSE_READ));
1080 } 1087 }
1081 1088
1082 TEST_F(VirtualSocketServerTest, CreatesStandardDistribution) { 1089 TEST_F(VirtualSocketServerTest, CreatesStandardDistribution) {
1083 const uint32_t kTestMean[] = {10, 100, 333, 1000}; 1090 const uint32_t kTestMean[] = {10, 100, 333, 1000};
1084 const double kTestDev[] = { 0.25, 0.1, 0.01 }; 1091 const double kTestDev[] = { 0.25, 0.1, 0.01 };
1085 // TODO(deadbeef): The current code only works for 1000 data points or more. 1092 // TODO(deadbeef): The current code only works for 1000 data points or more.
1086 const uint32_t kTestSamples[] = {/*10, 100,*/ 1000}; 1093 const uint32_t kTestSamples[] = {/*10, 100,*/ 1000};
1087 for (size_t midx = 0; midx < arraysize(kTestMean); ++midx) { 1094 for (size_t midx = 0; midx < arraysize(kTestMean); ++midx) {
1088 for (size_t didx = 0; didx < arraysize(kTestDev); ++didx) { 1095 for (size_t didx = 0; didx < arraysize(kTestDev); ++didx) {
1089 for (size_t sidx = 0; sidx < arraysize(kTestSamples); ++sidx) { 1096 for (size_t sidx = 0; sidx < arraysize(kTestSamples); ++sidx) {
(...skipping 23 matching lines...) Expand all
1113 << " N=" << kTestSamples[sidx]; 1120 << " N=" << kTestSamples[sidx];
1114 EXPECT_NEAR(kStdDev, stddev, 0.1 * kStdDev) 1121 EXPECT_NEAR(kStdDev, stddev, 0.1 * kStdDev)
1115 << "M=" << kTestMean[midx] 1122 << "M=" << kTestMean[midx]
1116 << " SD=" << kStdDev 1123 << " SD=" << kStdDev
1117 << " N=" << kTestSamples[sidx]; 1124 << " N=" << kTestSamples[sidx];
1118 delete f; 1125 delete f;
1119 } 1126 }
1120 } 1127 }
1121 } 1128 }
1122 } 1129 }
OLDNEW
« no previous file with comments | « webrtc/base/testutils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698