| Index: net/quic/quic_connection_logger_unittest.cc
|
| diff --git a/net/quic/quic_connection_logger_unittest.cc b/net/quic/quic_connection_logger_unittest.cc
|
| index ebaa12dbfeccb8fbb1845f941c955465e1cee0a2..8b382531f590c99e922281425c21f958a558ad6e 100644
|
| --- a/net/quic/quic_connection_logger_unittest.cc
|
| +++ b/net/quic/quic_connection_logger_unittest.cc
|
| @@ -4,7 +4,12 @@
|
|
|
| #include "net/quic/quic_connection_logger.h"
|
|
|
| +#include <stdint.h>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "net/base/socket_performance_watcher.h"
|
| +#include "net/base/socket_performance_watcher_factory.h"
|
| #include "net/quic/quic_protocol.h"
|
| #include "net/quic/test_tools/quic_test_utils.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -12,48 +17,113 @@
|
| namespace net {
|
| namespace test {
|
|
|
| +class TestSocketPerformanceWatcherFactory
|
| + : public SocketPerformanceWatcherFactory {
|
| + public:
|
| + TestSocketPerformanceWatcherFactory()
|
| + : num_packets_lost_(0),
|
| + num_packets_received_in_order_(0),
|
| + num_packets_received_not_in_order_(0) {}
|
| +
|
| + ~TestSocketPerformanceWatcherFactory() override {}
|
| +
|
| + scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
|
| + const Protocol protocol) override {
|
| + if (protocol != PROTOCOL_QUIC) {
|
| + NOTIMPLEMENTED();
|
| + }
|
| + return scoped_ptr<SocketPerformanceWatcher>(
|
| + new SocketPerformanceWatcher(protocol, this));
|
| + }
|
| +
|
| + void OnUpdatedRTTAvailable(const Protocol protocol,
|
| + const base::TimeDelta& rtt) override {}
|
| +
|
| + void OnUpdatedPacketCountAvailable(
|
| + Protocol protocol,
|
| + uint64_t num_packets_lost,
|
| + uint64_t num_packets_received_in_order,
|
| + uint64_t num_packets_received_not_in_order) override {
|
| + if (protocol != PROTOCOL_QUIC) {
|
| + NOTIMPLEMENTED();
|
| + }
|
| + num_packets_lost_ = num_packets_lost;
|
| + num_packets_received_in_order_ = num_packets_received_in_order;
|
| + num_packets_received_not_in_order_ = num_packets_received_not_in_order;
|
| + }
|
| +
|
| + void VerifyAndResetPacketCounts(uint64_t num_packets_lost,
|
| + uint64_t num_packets_received_in_order,
|
| + uint64_t num_packets_received_not_in_order) {
|
| + EXPECT_EQ(num_packets_lost, num_packets_lost_);
|
| + EXPECT_EQ(num_packets_received_in_order, num_packets_received_in_order_);
|
| + EXPECT_EQ(num_packets_received_not_in_order,
|
| + num_packets_received_not_in_order_);
|
| + num_packets_lost_ = 0;
|
| + num_packets_received_in_order_ = 0;
|
| + num_packets_received_not_in_order_ = 0;
|
| + }
|
| +
|
| + private:
|
| + uint64_t num_packets_lost_;
|
| + uint64_t num_packets_received_in_order_;
|
| + uint64_t num_packets_received_not_in_order_;
|
| + DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory);
|
| +};
|
| +
|
| class QuicConnectionLoggerPeer {
|
| public:
|
| - static size_t num_truncated_acks_sent(const QuicConnectionLogger& logger) {
|
| - return logger.num_truncated_acks_sent_;
|
| + static size_t num_truncated_acks_sent(const QuicConnectionLogger* logger) {
|
| + return logger->num_truncated_acks_sent_;
|
| }
|
|
|
| - static void set_num_packets_received(QuicConnectionLogger& logger,
|
| + static void set_num_packets_received(QuicConnectionLogger* logger,
|
| int value) {
|
| - logger.num_packets_received_ = value;
|
| + logger->num_packets_received_ = value;
|
| }
|
|
|
| - static void set_largest_received_packet_number(QuicConnectionLogger& logger,
|
| + static void set_largest_received_packet_number(QuicConnectionLogger* logger,
|
| int value) {
|
| - logger.largest_received_packet_number_ = value;
|
| + logger->largest_received_packet_number_ = value;
|
| + }
|
| +
|
| + static void ReportPacketCounts(
|
| + QuicConnectionLogger* logger,
|
| + size_t previous_largest_received_packet_number) {
|
| + logger->ReportPacketCounts(previous_largest_received_packet_number);
|
| }
|
| };
|
|
|
| class QuicConnectionLoggerTest : public ::testing::Test {
|
| protected:
|
| QuicConnectionLoggerTest()
|
| - : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)),
|
| - logger_(&session_,
|
| - "CONNECTION_UNKNOWN",
|
| - /*socket_performance_watcher=*/nullptr,
|
| - net_log_) {}
|
| + : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)) {
|
| + logger_.reset(new QuicConnectionLogger(
|
| + &session_, "CONNECTION_UNKNOWN",
|
| + socket_performance_watcher_factory_.CreateSocketPerformanceWatcher(
|
| + SocketPerformanceWatcherFactory::PROTOCOL_QUIC),
|
| + net_log_));
|
| + }
|
|
|
| BoundNetLog net_log_;
|
| MockConnectionHelper helper_;
|
| + TestSocketPerformanceWatcherFactory socket_performance_watcher_factory_;
|
| MockQuicSpdySession session_;
|
| - QuicConnectionLogger logger_;
|
| + scoped_ptr<QuicConnectionLogger> logger_;
|
| };
|
|
|
| TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) {
|
| QuicAckFrame frame;
|
| - logger_.OnFrameAddedToPacket(QuicFrame(&frame));
|
| - EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_));
|
| + logger_->OnFrameAddedToPacket(QuicFrame(&frame));
|
| + EXPECT_EQ(0u,
|
| + QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
|
|
|
| for (QuicPacketNumber i = 0; i < 256; ++i) {
|
| frame.missing_packets.Add(i);
|
| }
|
| - logger_.OnFrameAddedToPacket(QuicFrame(&frame));
|
| - EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_));
|
| + logger_->OnFrameAddedToPacket(QuicFrame(&frame));
|
| + EXPECT_EQ(0u,
|
| + QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
|
| }
|
|
|
| TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) {
|
| @@ -61,14 +131,38 @@ TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) {
|
| for (QuicPacketNumber i = 0; i < 512; i += 2) {
|
| frame.missing_packets.Add(i);
|
| }
|
| - logger_.OnFrameAddedToPacket(QuicFrame(&frame));
|
| - EXPECT_EQ(1u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_));
|
| + logger_->OnFrameAddedToPacket(QuicFrame(&frame));
|
| + EXPECT_EQ(1u,
|
| + QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
|
| }
|
|
|
| TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) {
|
| - QuicConnectionLoggerPeer::set_num_packets_received(logger_, 1);
|
| - QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_, 2);
|
| - EXPECT_EQ(0.5f, logger_.ReceivedPacketLossRate());
|
| + QuicConnectionLoggerPeer::set_num_packets_received(logger_.get(), 1);
|
| + QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
|
| + 2);
|
| + EXPECT_EQ(0.5f, logger_->ReceivedPacketLossRate());
|
| +}
|
| +
|
| +// Tests that packet counts reported to the socket performance watcher are
|
| +// computed correctly.
|
| +TEST_F(QuicConnectionLoggerTest, ReportUplinkPacketCounts) {
|
| + // Expecting packet 10. Received packet 10.
|
| + QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
|
| + 10);
|
| + QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 9);
|
| + socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 1, 0);
|
| +
|
| + // Expecting packet 11. Received packet 12.
|
| + QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
|
| + 12);
|
| + QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 10);
|
| + socket_performance_watcher_factory_.VerifyAndResetPacketCounts(1, 1, 0);
|
| +
|
| + // Expecting packet 13. Received packet with sequence number less than 13.
|
| + QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
|
| + 12);
|
| + QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 12);
|
| + socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 0, 1);
|
| }
|
|
|
| } // namespace test
|
|
|