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

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, Rebased 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 <stddef.h>
8 #include <stdint.h>
9
10 #include "base/macros.h"
11 #include "base/memory/scoped_ptr.h"
7 #include "net/base/socket_performance_watcher.h" 12 #include "net/base/socket_performance_watcher.h"
13 #include "net/base/socket_performance_watcher_factory.h"
8 #include "net/quic/quic_protocol.h" 14 #include "net/quic/quic_protocol.h"
9 #include "net/quic/test_tools/quic_test_utils.h" 15 #include "net/quic/test_tools/quic_test_utils.h"
10 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
11 17
18 namespace base {
19 class TimeDelta;
20 }
21
12 namespace net { 22 namespace net {
13 namespace test { 23 namespace test {
14 24
25 class TestSocketPerformanceWatcherFactory
26 : public SocketPerformanceWatcherFactory {
27 public:
28 TestSocketPerformanceWatcherFactory()
29 : packets_lost_(0),
30 packets_received_in_order_(0),
31 packets_received_out_of_order_(0) {}
32
33 ~TestSocketPerformanceWatcherFactory() override {}
34
35 scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
36 const Protocol protocol) override {
37 if (protocol != PROTOCOL_QUIC) {
38 NOTIMPLEMENTED();
39 }
40 return scoped_ptr<SocketPerformanceWatcher>(
41 new SocketPerformanceWatcher(protocol, this));
42 }
43
44 void OnUpdatedRTTAvailable(const Protocol protocol,
45 const base::TimeDelta& rtt) override {}
46
47 void OnUpdatedPacketCountAvailable(
48 Protocol protocol,
49 size_t packets_lost,
50 size_t packets_received_in_order,
51 size_t packets_received_out_of_order) override {
52 if (protocol != PROTOCOL_QUIC) {
53 NOTIMPLEMENTED();
54 }
55 packets_lost_ = packets_lost;
56 packets_received_in_order_ = packets_received_in_order;
57 packets_received_out_of_order_ = packets_received_out_of_order;
58 }
59
60 void VerifyAndResetPacketCounts(size_t packets_lost,
61 size_t packets_received_in_order,
62 size_t packets_received_out_of_order) {
63 EXPECT_EQ(packets_lost, packets_lost_);
64 EXPECT_EQ(packets_received_in_order, packets_received_in_order_);
65 EXPECT_EQ(packets_received_out_of_order, packets_received_out_of_order_);
66 packets_lost_ = 0;
67 packets_received_in_order_ = 0;
68 packets_received_out_of_order_ = 0;
69 }
70
71 private:
72 size_t packets_lost_;
73 size_t packets_received_in_order_;
74 size_t packets_received_out_of_order_;
75 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory);
76 };
77
15 class QuicConnectionLoggerPeer { 78 class QuicConnectionLoggerPeer {
16 public: 79 public:
17 static size_t num_truncated_acks_sent(const QuicConnectionLogger& logger) { 80 static size_t num_truncated_acks_sent(const QuicConnectionLogger* logger) {
18 return logger.num_truncated_acks_sent_; 81 return logger->num_truncated_acks_sent_;
19 } 82 }
20 83
21 static void set_num_packets_received(QuicConnectionLogger& logger, 84 static void set_num_packets_received(QuicConnectionLogger* logger,
22 int value) { 85 int value) {
23 logger.num_packets_received_ = value; 86 logger->num_packets_received_ = value;
24 } 87 }
25 88
26 static void set_largest_received_packet_number(QuicConnectionLogger& logger, 89 static void set_largest_received_packet_number(QuicConnectionLogger* logger,
27 int value) { 90 int value) {
28 logger.largest_received_packet_number_ = value; 91 logger->largest_received_packet_number_ = value;
92 }
93
94 static void ReportPacketCounts(
95 QuicConnectionLogger* logger,
96 size_t previous_largest_received_packet_number) {
97 logger->ReportPacketCounts(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 // Tests that packet counts reported to the socket performance watcher are
151 // computed correctly.
152 TEST_F(QuicConnectionLoggerTest, ReportUplinkPacketCounts) {
153 // Expecting packet 10. Received packet 10.
154 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
155 10);
156 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 9);
157 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 1, 0);
158
159 // Expecting packet 11. Received packet 12.
160 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
161 12);
162 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 10);
163 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(1, 1, 0);
164
165 // Expecting packet 13. Received packet with sequence number less than 13.
166 QuicConnectionLoggerPeer::set_largest_received_packet_number(logger_.get(),
167 12);
168 QuicConnectionLoggerPeer::ReportPacketCounts(logger_.get(), 12);
169 socket_performance_watcher_factory_.VerifyAndResetPacketCounts(0, 0, 1);
72 } 170 }
73 171
74 } // namespace test 172 } // namespace test
75 } // namespace net 173 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698