| 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 |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 EXPECT_EQ(b->GetRemoteAddress(), a->GetLocalAddress()); | 457 EXPECT_EQ(b->GetRemoteAddress(), a->GetLocalAddress()); |
| 458 | 458 |
| 459 EXPECT_EQ(1, a->Send("a", 1)); | 459 EXPECT_EQ(1, a->Send("a", 1)); |
| 460 b->Close(); | 460 b->Close(); |
| 461 EXPECT_EQ(1, a->Send("b", 1)); | 461 EXPECT_EQ(1, a->Send("b", 1)); |
| 462 | 462 |
| 463 ss_->ProcessMessagesUntilIdle(); | 463 ss_->ProcessMessagesUntilIdle(); |
| 464 | 464 |
| 465 char buffer[10]; | 465 char buffer[10]; |
| 466 EXPECT_FALSE(sink.Check(b.get(), testing::SSE_READ)); | 466 EXPECT_FALSE(sink.Check(b.get(), testing::SSE_READ)); |
| 467 EXPECT_EQ(-1, b->Recv(buffer, 10)); | 467 int64_t timestamp; |
| 468 EXPECT_EQ(-1, b->Recv(buffer, 10, ×tamp)); |
| 468 | 469 |
| 469 EXPECT_TRUE(sink.Check(a, testing::SSE_CLOSE)); | 470 EXPECT_TRUE(sink.Check(a, testing::SSE_CLOSE)); |
| 470 EXPECT_EQ(a->GetState(), AsyncSocket::CS_CLOSED); | 471 EXPECT_EQ(a->GetState(), AsyncSocket::CS_CLOSED); |
| 471 EXPECT_EQ(a->GetRemoteAddress(), kEmptyAddr); | 472 EXPECT_EQ(a->GetRemoteAddress(), kEmptyAddr); |
| 472 | 473 |
| 473 // No signal for Closer | 474 // No signal for Closer |
| 474 EXPECT_FALSE(sink.Check(b.get(), testing::SSE_CLOSE)); | 475 EXPECT_FALSE(sink.Check(b.get(), testing::SSE_CLOSE)); |
| 475 EXPECT_EQ(b->GetState(), AsyncSocket::CS_CLOSED); | 476 EXPECT_EQ(b->GetState(), AsyncSocket::CS_CLOSED); |
| 476 EXPECT_EQ(b->GetRemoteAddress(), kEmptyAddr); | 477 EXPECT_EQ(b->GetRemoteAddress(), kEmptyAddr); |
| 477 } | 478 } |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 ss_->ProcessMessagesUntilIdle(); | 525 ss_->ProcessMessagesUntilIdle(); |
| 525 EXPECT_FALSE(sink.Check(a, testing::SSE_WRITE)); | 526 EXPECT_FALSE(sink.Check(a, testing::SSE_WRITE)); |
| 526 EXPECT_FALSE(sink.Check(b, testing::SSE_READ)); | 527 EXPECT_FALSE(sink.Check(b, testing::SSE_READ)); |
| 527 | 528 |
| 528 // No more room in send or receive buffer | 529 // No more room in send or receive buffer |
| 529 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); | 530 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); |
| 530 EXPECT_EQ(-1, result); | 531 EXPECT_EQ(-1, result); |
| 531 EXPECT_TRUE(a->IsBlocking()); | 532 EXPECT_TRUE(a->IsBlocking()); |
| 532 | 533 |
| 533 // Read a subset of the data | 534 // Read a subset of the data |
| 534 result = b->Recv(recv_buffer + recv_pos, 500); | 535 int64_t timestamp; |
| 536 result = b->Recv(recv_buffer + recv_pos, 500, ×tamp); |
| 535 EXPECT_EQ(500, result); | 537 EXPECT_EQ(500, result); |
| 536 recv_pos += result; | 538 recv_pos += result; |
| 537 | 539 |
| 538 ss_->ProcessMessagesUntilIdle(); | 540 ss_->ProcessMessagesUntilIdle(); |
| 539 EXPECT_TRUE(sink.Check(a, testing::SSE_WRITE)); | 541 EXPECT_TRUE(sink.Check(a, testing::SSE_WRITE)); |
| 540 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); | 542 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); |
| 541 | 543 |
| 542 // Room for more on the sending side | 544 // Room for more on the sending side |
| 543 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); | 545 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); |
| 544 EXPECT_EQ(500, result); | 546 EXPECT_EQ(500, result); |
| 545 send_pos += result; | 547 send_pos += result; |
| 546 | 548 |
| 547 // Empty the recv buffer | 549 // Empty the recv buffer |
| 548 while (true) { | 550 while (true) { |
| 549 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos); | 551 result = |
| 552 b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, ×tamp); |
| 550 if (result < 0) { | 553 if (result < 0) { |
| 551 EXPECT_EQ(-1, result); | 554 EXPECT_EQ(-1, result); |
| 552 EXPECT_TRUE(b->IsBlocking()); | 555 EXPECT_TRUE(b->IsBlocking()); |
| 553 break; | 556 break; |
| 554 } | 557 } |
| 555 recv_pos += result; | 558 recv_pos += result; |
| 556 } | 559 } |
| 557 | 560 |
| 558 ss_->ProcessMessagesUntilIdle(); | 561 ss_->ProcessMessagesUntilIdle(); |
| 559 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); | 562 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); |
| 560 | 563 |
| 561 // Continue to empty the recv buffer | 564 // Continue to empty the recv buffer |
| 562 while (true) { | 565 while (true) { |
| 563 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos); | 566 result = |
| 567 b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, ×tamp); |
| 564 if (result < 0) { | 568 if (result < 0) { |
| 565 EXPECT_EQ(-1, result); | 569 EXPECT_EQ(-1, result); |
| 566 EXPECT_TRUE(b->IsBlocking()); | 570 EXPECT_TRUE(b->IsBlocking()); |
| 567 break; | 571 break; |
| 568 } | 572 } |
| 569 recv_pos += result; | 573 recv_pos += result; |
| 570 } | 574 } |
| 571 | 575 |
| 572 // Send last of the data | 576 // Send last of the data |
| 573 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); | 577 result = a->Send(send_buffer + send_pos, kDataSize - send_pos); |
| 574 EXPECT_EQ(500, result); | 578 EXPECT_EQ(500, result); |
| 575 send_pos += result; | 579 send_pos += result; |
| 576 | 580 |
| 577 ss_->ProcessMessagesUntilIdle(); | 581 ss_->ProcessMessagesUntilIdle(); |
| 578 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); | 582 EXPECT_TRUE(sink.Check(b, testing::SSE_READ)); |
| 579 | 583 |
| 580 // Receive the last of the data | 584 // Receive the last of the data |
| 581 while (true) { | 585 while (true) { |
| 582 result = b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos); | 586 result = |
| 587 b->Recv(recv_buffer + recv_pos, kDataSize - recv_pos, ×tamp); |
| 583 if (result < 0) { | 588 if (result < 0) { |
| 584 EXPECT_EQ(-1, result); | 589 EXPECT_EQ(-1, result); |
| 585 EXPECT_TRUE(b->IsBlocking()); | 590 EXPECT_TRUE(b->IsBlocking()); |
| 586 break; | 591 break; |
| 587 } | 592 } |
| 588 recv_pos += result; | 593 recv_pos += result; |
| 589 } | 594 } |
| 590 | 595 |
| 591 ss_->ProcessMessagesUntilIdle(); | 596 ss_->ProcessMessagesUntilIdle(); |
| 592 EXPECT_FALSE(sink.Check(b, testing::SSE_READ)); | 597 EXPECT_FALSE(sink.Check(b, testing::SSE_READ)); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 619 char buffer[2] = { 0, 0 }; | 624 char buffer[2] = { 0, 0 }; |
| 620 const char cNumPackets = 10; | 625 const char cNumPackets = 10; |
| 621 for (char i = 0; i < cNumPackets; ++i) { | 626 for (char i = 0; i < cNumPackets; ++i) { |
| 622 buffer[0] = '0' + i; | 627 buffer[0] = '0' + i; |
| 623 EXPECT_EQ(1, a->Send(buffer, 1)); | 628 EXPECT_EQ(1, a->Send(buffer, 1)); |
| 624 } | 629 } |
| 625 | 630 |
| 626 ss_->ProcessMessagesUntilIdle(); | 631 ss_->ProcessMessagesUntilIdle(); |
| 627 | 632 |
| 628 for (char i = 0; i < cNumPackets; ++i) { | 633 for (char i = 0; i < cNumPackets; ++i) { |
| 629 EXPECT_EQ(1, b->Recv(buffer, sizeof(buffer))); | 634 int64_t timestamp; |
| 635 EXPECT_EQ(1, b->Recv(buffer, sizeof(buffer), ×tamp)); |
| 630 EXPECT_EQ(static_cast<char>('0' + i), buffer[0]); | 636 EXPECT_EQ(static_cast<char>('0' + i), buffer[0]); |
| 631 } | 637 } |
| 632 | 638 |
| 633 // Next, deliver packets at random intervals | 639 // Next, deliver packets at random intervals |
| 634 const uint32_t mean = 50; | 640 const uint32_t mean = 50; |
| 635 const uint32_t stddev = 50; | 641 const uint32_t stddev = 50; |
| 636 | 642 |
| 637 ss_->set_delay_mean(mean); | 643 ss_->set_delay_mean(mean); |
| 638 ss_->set_delay_stddev(stddev); | 644 ss_->set_delay_stddev(stddev); |
| 639 ss_->UpdateDelayDistribution(); | 645 ss_->UpdateDelayDistribution(); |
| 640 | 646 |
| 641 for (char i = 0; i < cNumPackets; ++i) { | 647 for (char i = 0; i < cNumPackets; ++i) { |
| 642 buffer[0] = 'A' + i; | 648 buffer[0] = 'A' + i; |
| 643 EXPECT_EQ(1, a->Send(buffer, 1)); | 649 EXPECT_EQ(1, a->Send(buffer, 1)); |
| 644 } | 650 } |
| 645 | 651 |
| 646 ss_->ProcessMessagesUntilIdle(); | 652 ss_->ProcessMessagesUntilIdle(); |
| 647 | 653 |
| 648 for (char i = 0; i < cNumPackets; ++i) { | 654 for (char i = 0; i < cNumPackets; ++i) { |
| 649 EXPECT_EQ(1, b->Recv(buffer, sizeof(buffer))); | 655 int64_t timestamp; |
| 656 EXPECT_EQ(1, b->Recv(buffer, sizeof(buffer), ×tamp)); |
| 650 EXPECT_EQ(static_cast<char>('A' + i), buffer[0]); | 657 EXPECT_EQ(static_cast<char>('A' + i), buffer[0]); |
| 651 } | 658 } |
| 652 } | 659 } |
| 653 | 660 |
| 654 // It is important that initial_addr's port has to be 0 such that the | 661 // It is important that initial_addr's port has to be 0 such that the |
| 655 // incremental port behavior could ensure the 2 Binds result in different | 662 // incremental port behavior could ensure the 2 Binds result in different |
| 656 // address. | 663 // address. |
| 657 void BandwidthTest(const SocketAddress& initial_addr) { | 664 void BandwidthTest(const SocketAddress& initial_addr) { |
| 658 AsyncSocket* send_socket = | 665 AsyncSocket* send_socket = |
| 659 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM); | 666 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM); |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1052 << " N=" << kTestSamples[sidx]; | 1059 << " N=" << kTestSamples[sidx]; |
| 1053 EXPECT_NEAR(kStdDev, stddev, 0.1 * kStdDev) | 1060 EXPECT_NEAR(kStdDev, stddev, 0.1 * kStdDev) |
| 1054 << "M=" << kTestMean[midx] | 1061 << "M=" << kTestMean[midx] |
| 1055 << " SD=" << kStdDev | 1062 << " SD=" << kStdDev |
| 1056 << " N=" << kTestSamples[sidx]; | 1063 << " N=" << kTestSamples[sidx]; |
| 1057 delete f; | 1064 delete f; |
| 1058 } | 1065 } |
| 1059 } | 1066 } |
| 1060 } | 1067 } |
| 1061 } | 1068 } |
| OLD | NEW |