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

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 rch comments Created 4 years, 9 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 <stddef.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
17 namespace base {
18 class TimeDelta;
19 }
20
12 namespace net { 21 namespace net {
13 namespace test { 22 namespace test {
14 23
24 class TestSocketPerformanceWatcherFactory
25 : public SocketPerformanceWatcherFactory {
26 public:
27 TestSocketPerformanceWatcherFactory()
28 : packets_missing_(0),
29 packets_received_in_order_(0),
30 packets_received_out_of_order_(0) {}
31
32 ~TestSocketPerformanceWatcherFactory() override {}
33
34 scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
35 const Protocol protocol) override {
36 if (protocol != PROTOCOL_QUIC) {
37 NOTIMPLEMENTED();
38 }
39 return scoped_ptr<SocketPerformanceWatcher>(
40 new SocketPerformanceWatcher(protocol, this));
41 }
42
43 void OnUpdatedRTTAvailable(const Protocol protocol,
44 const base::TimeDelta& rtt) override {}
45
46 void OnIncrementalPacketCountAvailable(
47 Protocol protocol,
48 size_t packets_missing,
49 size_t packets_received_in_order,
50 size_t packets_received_out_of_order) override {
51 if (protocol != PROTOCOL_QUIC) {
52 NOTIMPLEMENTED();
53 }
54 packets_missing_ = packets_missing;
55 packets_received_in_order_ = packets_received_in_order;
56 packets_received_out_of_order_ = packets_received_out_of_order;
57 }
58
59 void VerifyAndResetPacketCounts(size_t packets_missing,
60 size_t packets_received_in_order,
61 size_t packets_received_out_of_order) {
62 EXPECT_EQ(packets_missing, packets_missing_);
63 EXPECT_EQ(packets_received_in_order, packets_received_in_order_);
64 EXPECT_EQ(packets_received_out_of_order, packets_received_out_of_order_);
65 packets_missing_ = 0;
66 packets_received_in_order_ = 0;
67 packets_received_out_of_order_ = 0;
68 }
69
70 private:
71 size_t packets_missing_;
72 size_t packets_received_in_order_;
73 size_t packets_received_out_of_order_;
74 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory);
75 };
76
15 class QuicConnectionLoggerPeer { 77 class QuicConnectionLoggerPeer {
16 public: 78 public:
17 static size_t num_truncated_acks_sent(const QuicConnectionLogger& logger) { 79 static size_t num_truncated_acks_sent(const QuicConnectionLogger* logger) {
18 return logger.num_truncated_acks_sent_; 80 return logger->num_truncated_acks_sent_;
19 } 81 }
20 82
21 static void set_num_packets_received(QuicConnectionLogger& logger, 83 static void set_num_packets_received(QuicConnectionLogger* logger,
22 int value) { 84 int value) {
23 logger.num_packets_received_ = value; 85 logger->num_packets_received_ = value;
24 } 86 }
25 87
26 static void set_largest_received_packet_number(QuicConnectionLogger& logger, 88 static void set_largest_received_packet_number(QuicConnectionLogger* logger,
27 int value) { 89 int value) {
28 logger.largest_received_packet_number_ = value; 90 logger->largest_received_packet_number_ = value;
91 }
92
93 static void ReportPacketCounts(
94 QuicConnectionLogger* logger,
95 size_t previous_largest_received_packet_number) {
96 logger->ReportIncrementalPacketCounts(
97 previous_largest_received_packet_number);
29 } 98 }
30 }; 99 };
31 100
32 class QuicConnectionLoggerTest : public ::testing::Test { 101 class QuicConnectionLoggerTest : public ::testing::Test {
33 protected: 102 protected:
34 QuicConnectionLoggerTest() 103 QuicConnectionLoggerTest()
35 : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)), 104 : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)) {
36 logger_(&session_, 105 logger_.reset(new QuicConnectionLogger(
37 "CONNECTION_UNKNOWN", 106 &session_, "CONNECTION_UNKNOWN",
38 /*socket_performance_watcher=*/nullptr, 107 socket_performance_watcher_factory_.CreateSocketPerformanceWatcher(
39 net_log_) {} 108 SocketPerformanceWatcherFactory::PROTOCOL_QUIC),
109 net_log_));
110 }
40 111
41 BoundNetLog net_log_; 112 BoundNetLog net_log_;
42 MockConnectionHelper helper_; 113 MockConnectionHelper helper_;
114 TestSocketPerformanceWatcherFactory socket_performance_watcher_factory_;
43 MockQuicSpdySession session_; 115 MockQuicSpdySession session_;
44 QuicConnectionLogger logger_; 116 scoped_ptr<QuicConnectionLogger> logger_;
45 }; 117 };
46 118
47 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) { 119 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) {
48 QuicAckFrame frame; 120 QuicAckFrame frame;
49 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 121 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
50 EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 122 EXPECT_EQ(0u,
123 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
51 124
52 for (QuicPacketNumber i = 0; i < 256; ++i) { 125 for (QuicPacketNumber i = 0; i < 256; ++i) {
53 frame.missing_packets.Add(i); 126 frame.missing_packets.Add(i);
54 } 127 }
55 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 128 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
56 EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 129 EXPECT_EQ(0u,
130 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
57 } 131 }
58 132
59 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) { 133 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) {
60 QuicAckFrame frame; 134 QuicAckFrame frame;
61 for (QuicPacketNumber i = 0; i < 512; i += 2) { 135 for (QuicPacketNumber i = 0; i < 512; i += 2) {
62 frame.missing_packets.Add(i); 136 frame.missing_packets.Add(i);
63 } 137 }
64 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 138 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
65 EXPECT_EQ(1u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 139 EXPECT_EQ(1u,
140 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
66 } 141 }
67 142
68 TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) { 143 TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) {
69 QuicConnectionLoggerPeer::set_num_packets_received(logger_, 1); 144 QuicConnectionLoggerPeer::set_num_packets_received(logger_.get(), 1);
70 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_, 2); 145 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
71 EXPECT_EQ(0.5f, logger_.ReceivedPacketLossRate()); 146 2);
147 EXPECT_EQ(0.5f, logger_->ReceivedPacketLossRate());
148 }
149
150 TEST_F(QuicConnectionLoggerTest, ReportIncrementalPacketCounts) {
151 // Expecting packet 10. Received packet 10.
152 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
153 10);
154 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 9);
155 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 1, 0);
156
157 // Expecting packet 11. Received packet 12.
158 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
159 12);
160 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 10);
161 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(1, 1, 0);
162
163 // Expecting packet 13. Received packet with sequence number less than 13.
164 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
165 12);
166 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 12);
167 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 0, 1);
72 } 168 }
73 169
74 } // namespace test 170 } // namespace test
75 } // namespace net 171 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698