| // Copyright 2014 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "net/quic/quic_connection_logger.h" | 
 |  | 
 | #include "net/quic/quic_protocol.h" | 
 | #include "net/quic/test_tools/quic_test_utils.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace net { | 
 | namespace test { | 
 |  | 
 | class QuicConnectionLoggerPeer { | 
 |  public: | 
 |   static size_t num_truncated_acks_sent(const QuicConnectionLogger& logger) { | 
 |     return logger.num_truncated_acks_sent_; | 
 |   } | 
 |  | 
 |   static void set_num_packets_received(QuicConnectionLogger& logger, | 
 |                                        int value) { | 
 |     logger.num_packets_received_ = value; | 
 |   } | 
 |  | 
 |   static void set_largest_received_packet_sequence_number( | 
 |       QuicConnectionLogger& logger, | 
 |       int value) { | 
 |     logger.largest_received_packet_sequence_number_ = value; | 
 |   } | 
 | }; | 
 |  | 
 | class QuicConnectionLoggerTest : public ::testing::Test { | 
 |  protected: | 
 |   QuicConnectionLoggerTest() | 
 |       : session_(new MockConnection(Perspective::IS_CLIENT)), | 
 |         logger_(&session_, "CONNECTION_UNKNOWN", net_log_) {} | 
 |  | 
 |   BoundNetLog net_log_; | 
 |   MockSession session_; | 
 |   QuicConnectionLogger logger_; | 
 | }; | 
 |  | 
 | TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) { | 
 |   QuicAckFrame frame; | 
 |   logger_.OnFrameAddedToPacket(QuicFrame(&frame)); | 
 |   EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); | 
 |  | 
 |   for (QuicPacketSequenceNumber i = 0; i < 256; ++i) { | 
 |     frame.missing_packets.insert(i); | 
 |   } | 
 |   logger_.OnFrameAddedToPacket(QuicFrame(&frame)); | 
 |   EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); | 
 | } | 
 |  | 
 | TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) { | 
 |   QuicAckFrame frame; | 
 |   for (QuicPacketSequenceNumber i = 0; i < 512; i += 2) { | 
 |     frame.missing_packets.insert(i); | 
 |   } | 
 |   logger_.OnFrameAddedToPacket(QuicFrame(&frame)); | 
 |   EXPECT_EQ(1u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); | 
 | } | 
 |  | 
 | TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) { | 
 |   QuicConnectionLoggerPeer::set_num_packets_received(logger_, 1); | 
 |   QuicConnectionLoggerPeer::set_largest_received_packet_sequence_number(logger_, | 
 |                                                                         2); | 
 |   EXPECT_EQ(0.5f, logger_.ReceivedPacketLossRate()); | 
 | } | 
 |  | 
 | }  // namespace test | 
 | }  // namespace net |