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

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: \ 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->ReportPacketCounts(previous_largest_received_packet_number);
29 } 97 }
30 }; 98 };
31 99
32 class QuicConnectionLoggerTest : public ::testing::Test { 100 class QuicConnectionLoggerTest : public ::testing::Test {
33 protected: 101 protected:
34 QuicConnectionLoggerTest() 102 QuicConnectionLoggerTest()
35 : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)), 103 : session_(new MockConnection(&helper_, Perspective::IS_CLIENT)) {
36 logger_(&session_, 104 logger_.reset(new QuicConnectionLogger(
37 "CONNECTION_UNKNOWN", 105 &session_, "CONNECTION_UNKNOWN",
38 /*socket_performance_watcher=*/nullptr, 106 socket_performance_watcher_factory_.CreateSocketPerformanceWatcher(
39 net_log_) {} 107 SocketPerformanceWatcherFactory::PROTOCOL_QUIC),
108 net_log_));
109 }
40 110
41 BoundNetLog net_log_; 111 BoundNetLog net_log_;
42 MockConnectionHelper helper_; 112 MockConnectionHelper helper_;
113 TestSocketPerformanceWatcherFactory socket_performance_watcher_factory_;
43 MockQuicSpdySession session_; 114 MockQuicSpdySession session_;
44 QuicConnectionLogger logger_; 115 scoped_ptr<QuicConnectionLogger> logger_;
45 }; 116 };
46 117
47 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) { 118 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSentNotChanged) {
48 QuicAckFrame frame; 119 QuicAckFrame frame;
49 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 120 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
50 EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 121 EXPECT_EQ(0u,
122 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
51 123
52 for (QuicPacketNumber i = 0; i < 256; ++i) { 124 for (QuicPacketNumber i = 0; i < 256; ++i) {
53 frame.missing_packets.Add(i); 125 frame.missing_packets.Add(i);
54 } 126 }
55 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 127 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
56 EXPECT_EQ(0u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 128 EXPECT_EQ(0u,
129 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
57 } 130 }
58 131
59 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) { 132 TEST_F(QuicConnectionLoggerTest, TruncatedAcksSent) {
60 QuicAckFrame frame; 133 QuicAckFrame frame;
61 for (QuicPacketNumber i = 0; i < 512; i += 2) { 134 for (QuicPacketNumber i = 0; i < 512; i += 2) {
62 frame.missing_packets.Add(i); 135 frame.missing_packets.Add(i);
63 } 136 }
64 logger_.OnFrameAddedToPacket(QuicFrame(&frame)); 137 logger_->OnFrameAddedToPacket(QuicFrame(&frame));
65 EXPECT_EQ(1u, QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_)); 138 EXPECT_EQ(1u,
139 QuicConnectionLoggerPeer::num_truncated_acks_sent(logger_.get()));
66 } 140 }
67 141
68 TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) { 142 TEST_F(QuicConnectionLoggerTest, ReceivedPacketLossRate) {
69 QuicConnectionLoggerPeer::set_num_packets_received(logger_, 1); 143 QuicConnectionLoggerPeer::set_num_packets_received(logger_.get(), 1);
70 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_, 2); 144 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
71 EXPECT_EQ(0.5f, logger_.ReceivedPacketLossRate()); 145 2);
146 EXPECT_EQ(0.5f, logger_->ReceivedPacketLossRate());
147 }
148
149 TEST_F(QuicConnectionLoggerTest, ReportIncrementalPacketCounts) {
150 // Expecting packet 10. Received packet 10.
151 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
152 10);
153 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 9);
154 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 1, 0);
155
156 // Expecting packet 11. Received packet 12.
157 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
158 12);
159 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 10);
160 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(1, 1, 0);
161
162 // Expecting packet 13. Received packet with sequence number less than 13.
163 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
164 12);
165 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 12);
166 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 0, 1);
72 } 167 }
73 168
74 } // namespace test 169 } // namespace test
75 } // namespace net 170 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698