Chromium Code Reviews| 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 {} |
|
bengr
2016/02/19 00:45:09
Declare TimeDelta.
tbansal1
2016/02/26 01:15:00
Done.
|
| + |
| + 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 |