Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: net/quic/quic_connection_logger_unittest.cc

Issue 1672513002: Expose packet loss counts from QUIC to NetworkQualityEstimator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed bengr comments Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_connection_logger.h" 5 #include "net/quic/quic_connection_logger.h"
6 6
7 #include <stdint.h>
8
9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h"
7 #include "net/base/socket_performance_watcher.h" 11 #include "net/base/socket_performance_watcher.h"
12 #include "net/base/socket_performance_watcher_factory.h"
8 #include "net/quic/quic_protocol.h" 13 #include "net/quic/quic_protocol.h"
9 #include "net/quic/test_tools/quic_test_utils.h" 14 #include "net/quic/test_tools/quic_test_utils.h"
10 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
11 16
12 namespace net { 17 namespace net {
13 namespace test { 18 namespace test {
14 19
20 class TestSocketPerformanceWatcherFactory
21 : public SocketPerformanceWatcherFactory {
22 public:
23 TestSocketPerformanceWatcherFactory()
24 : num_packets_lost_(0),
25 num_packets_received_in_order_(0),
26 num_packets_received_not_in_order_(0) {}
27
28 ~TestSocketPerformanceWatcherFactory() override {}
29
30 scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
31 const Protocol protocol) override {
32 if (protocol != PROTOCOL_QUIC) {
33 NOTIMPLEMENTED();
34 }
35 return scoped_ptr<SocketPerformanceWatcher>(
36 new SocketPerformanceWatcher(protocol, this));
37 }
38
39 void OnUpdatedRTTAvailable(const Protocol protocol,
40 const base::TimeDelta& rtt) override {}
41
42 void OnUpdatedPacketCountAvailable(
43 Protocol protocol,
44 uint64_t num_packets_lost,
45 uint64_t num_packets_received_in_order,
46 uint64_t num_packets_received_not_in_order) override {
47 if (protocol != PROTOCOL_QUIC) {
48 NOTIMPLEMENTED();
49 }
50 num_packets_lost_ = num_packets_lost;
51 num_packets_received_in_order_ = num_packets_received_in_order;
52 num_packets_received_not_in_order_ = num_packets_received_not_in_order;
53 }
54
55 void VerifyAndResetPacketCounts(uint64_t num_packets_lost,
56 uint64_t num_packets_received_in_order,
57 uint64_t num_packets_received_not_in_order) {
58 EXPECT_EQ(num_packets_lost, num_packets_lost_);
59 EXPECT_EQ(num_packets_received_in_order, num_packets_received_in_order_);
60 EXPECT_EQ(num_packets_received_not_in_order,
61 num_packets_received_not_in_order_);
62 num_packets_lost_ = 0;
63 num_packets_received_in_order_ = 0;
64 num_packets_received_not_in_order_ = 0;
65 }
66
67 private:
68 uint64_t num_packets_lost_;
69 uint64_t num_packets_received_in_order_;
70 uint64_t num_packets_received_not_in_order_;
71 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory);
72 };
73
15 class QuicConnectionLoggerPeer { 74 class QuicConnectionLoggerPeer {
16 public: 75 public:
17 static size_t num_truncated_acks_sent(const QuicConnectionLogger& logger) { 76 static size_t num_truncated_acks_sent(const QuicConnectionLogger* logger) {
18 return logger.num_truncated_acks_sent_; 77 return logger->num_truncated_acks_sent_;
19 } 78 }
20 79
21 static void set_num_packets_received(QuicConnectionLogger& logger, 80 static void set_num_packets_received(QuicConnectionLogger* logger,
22 int value) { 81 int value) {
23 logger.num_packets_received_ = value; 82 logger->num_packets_received_ = value;
24 } 83 }
25 84
26 static void set_largest_received_packet_number(QuicConnectionLogger& logger, 85 static void set_largest_received_packet_number(QuicConnectionLogger* logger,
27 int value) { 86 int value) {
28 logger.largest_received_packet_number_ = value; 87 logger->largest_received_packet_number_ = value;
88 }
89
90 static void ReportPacketCounts(
91 QuicConnectionLogger* logger,
92 size_t previous_largest_received_packet_number) {
93 logger->ReportPacketCounts(previous_largest_received_packet_number);
29 } 94 }
30 }; 95 };
31 96
32 class QuicConnectionLoggerTest : public ::testing::Test { 97 class QuicConnectionLoggerTest : public ::testing::Test {
33 protected: 98 protected:
34 QuicConnectionLoggerTest() 99 QuicConnectionLoggerTest()
35 : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)), 100 : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)) {
36 logger_(&session_, 101 logger_.reset(new QuicConnectionLogger(
37 "CONNECTION_UNKNOWN", 102 &session_, "CONNECTION_UNKNOWN",
38 /*socket_performance_watcher=*/nullptr, 103 socket_performance_watcher_factory_.CreateSocketPerformanceWatcher(
39 net_log_) {} 104 SocketPerformanceWatcherFactory::PROTOCOL_QUIC),
105 net_log_));
106 }
40 107
41 BoundNetLog net_log_; 108 BoundNetLog net_log_;
42 MockConnectionHelper helper_; 109 MockConnectionHelper helper_;
110 TestSocketPerformanceWatcherFactory socket_performance_watcher_factory_;
43 MockQuicSpdySession session_; 111 MockQuicSpdySession session_;
44 QuicConnectionLogger logger_; 112 scoped_ptr<QuicConnectionLogger> logger_;
45 }; 113 };
46 114
47 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) { 115 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) {
48 QuicAckFrame frame; 116 QuicAckFrame frame;
49 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 117 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
50 EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 118 EXPECT_EQ(0u,
119 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
51 120
52 for (QuicPacketNumber i = 0; i < 256; ++i) { 121 for (QuicPacketNumber i = 0; i < 256; ++i) {
53 frame.missing_packets.Add(i); 122 frame.missing_packets.Add(i);
54 } 123 }
55 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 124 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
56 EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 125 EXPECT_EQ(0u,
126 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
57 } 127 }
58 128
59 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) { 129 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) {
60 QuicAckFrame frame; 130 QuicAckFrame frame;
61 for (QuicPacketNumber i = 0; i < 512; i += 2) { 131 for (QuicPacketNumber i = 0; i < 512; i += 2) {
62 frame.missing_packets.Add(i); 132 frame.missing_packets.Add(i);
63 } 133 }
64 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 134 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
65 EXPECT_EQ(1u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 135 EXPECT_EQ(1u,
136 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
66 } 137 }
67 138
68 TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) { 139 TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) {
69 QuicConnectionLoggerPeer::set_num_packets_received(logger_, 1); 140 QuicConnectionLoggerPeer::set_num_packets_received(logger_.get(), 1);
70 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_, 2); 141 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
71 EXPECT_EQ(0.5f, logger_.ReceivedPacketLossRate()); 142 2);
143 EXPECT_EQ(0.5f, logger_->ReceivedPacketLossRate());
144 }
145
146 // Tests that packet counts reported to the socket performance watcher are
147 // computed correctly.
148 TEST_F(QuicConnectionLoggerTest, ReportUplinkPacketCounts) {
149 // Expecting packet 10. Received packet 10.
150 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
151 10);
152 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 9);
153 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 1, 0);
154
155 // Expecting packet 11. Received packet 12.
156 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
157 12);
158 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 10);
159 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(1, 1, 0);
160
161 // Expecting packet 13. Received packet with sequence number less than 13.
162 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
163 12);
164 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 12);
165 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 0, 1);
72 } 166 }
73 167
74 } // namespace test 168 } // namespace test
75 } // namespace net 169 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698