OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |