| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/socket_stream/socket_stream_metrics.h" | |
| 6 | |
| 7 #include "base/basictypes.h" | |
| 8 #include "base/memory/scoped_ptr.h" | |
| 9 #include "base/metrics/histogram.h" | |
| 10 #include "base/metrics/histogram_samples.h" | |
| 11 #include "base/metrics/statistics_recorder.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | |
| 13 #include "testing/platform_test.h" | |
| 14 #include "url/gurl.h" | |
| 15 | |
| 16 using base::Histogram; | |
| 17 using base::HistogramBase; | |
| 18 using base::HistogramSamples; | |
| 19 using base::StatisticsRecorder; | |
| 20 | |
| 21 namespace net { | |
| 22 | |
| 23 TEST(SocketStreamMetricsTest, ProtocolType) { | |
| 24 // First we'll preserve the original values. We need to do this | |
| 25 // as histograms can get affected by other tests. In particular, | |
| 26 // SocketStreamTest and WebSocketTest can affect the histograms. | |
| 27 scoped_ptr<HistogramSamples> original; | |
| 28 HistogramBase* histogram = | |
| 29 StatisticsRecorder::FindHistogram("Net.SocketStream.ProtocolType"); | |
| 30 if (histogram) { | |
| 31 original = histogram->SnapshotSamples(); | |
| 32 } | |
| 33 | |
| 34 SocketStreamMetrics unknown(GURL("unknown://www.example.com/")); | |
| 35 SocketStreamMetrics ws1(GURL("ws://www.example.com/")); | |
| 36 SocketStreamMetrics ws2(GURL("ws://www.example.com/")); | |
| 37 SocketStreamMetrics wss1(GURL("wss://www.example.com/")); | |
| 38 SocketStreamMetrics wss2(GURL("wss://www.example.com/")); | |
| 39 SocketStreamMetrics wss3(GURL("wss://www.example.com/")); | |
| 40 | |
| 41 histogram = | |
| 42 StatisticsRecorder::FindHistogram("Net.SocketStream.ProtocolType"); | |
| 43 ASSERT_TRUE(histogram != NULL); | |
| 44 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 45 | |
| 46 scoped_ptr<HistogramSamples> samples(histogram->SnapshotSamples()); | |
| 47 if (original.get()) { | |
| 48 samples->Subtract(*original); // Cancel the original values. | |
| 49 } | |
| 50 EXPECT_EQ(1, samples->GetCount(SocketStreamMetrics::PROTOCOL_UNKNOWN)); | |
| 51 EXPECT_EQ(2, samples->GetCount(SocketStreamMetrics::PROTOCOL_WEBSOCKET)); | |
| 52 EXPECT_EQ(3, | |
| 53 samples->GetCount(SocketStreamMetrics::PROTOCOL_WEBSOCKET_SECURE)); | |
| 54 } | |
| 55 | |
| 56 TEST(SocketStreamMetricsTest, ConnectionType) { | |
| 57 // First we'll preserve the original values. | |
| 58 scoped_ptr<HistogramSamples> original; | |
| 59 HistogramBase* histogram = | |
| 60 StatisticsRecorder::FindHistogram("Net.SocketStream.ConnectionType"); | |
| 61 if (histogram) { | |
| 62 original = histogram->SnapshotSamples(); | |
| 63 } | |
| 64 | |
| 65 SocketStreamMetrics metrics(GURL("ws://www.example.com/")); | |
| 66 for (int i = 0; i < 1; ++i) | |
| 67 metrics.OnStartConnection(); | |
| 68 for (int i = 0; i < 2; ++i) | |
| 69 metrics.OnCountConnectionType(SocketStreamMetrics::TUNNEL_CONNECTION); | |
| 70 for (int i = 0; i < 3; ++i) | |
| 71 metrics.OnCountConnectionType(SocketStreamMetrics::SOCKS_CONNECTION); | |
| 72 for (int i = 0; i < 4; ++i) | |
| 73 metrics.OnCountConnectionType(SocketStreamMetrics::SSL_CONNECTION); | |
| 74 | |
| 75 | |
| 76 histogram = | |
| 77 StatisticsRecorder::FindHistogram("Net.SocketStream.ConnectionType"); | |
| 78 ASSERT_TRUE(histogram != NULL); | |
| 79 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 80 | |
| 81 scoped_ptr<HistogramSamples> samples(histogram->SnapshotSamples()); | |
| 82 if (original.get()) { | |
| 83 samples->Subtract(*original); // Cancel the original values. | |
| 84 } | |
| 85 EXPECT_EQ(1, samples->GetCount(SocketStreamMetrics::ALL_CONNECTIONS)); | |
| 86 EXPECT_EQ(2, samples->GetCount(SocketStreamMetrics::TUNNEL_CONNECTION)); | |
| 87 EXPECT_EQ(3, samples->GetCount(SocketStreamMetrics::SOCKS_CONNECTION)); | |
| 88 EXPECT_EQ(4, samples->GetCount(SocketStreamMetrics::SSL_CONNECTION)); | |
| 89 } | |
| 90 | |
| 91 TEST(SocketStreamMetricsTest, WireProtocolType) { | |
| 92 // First we'll preserve the original values. | |
| 93 scoped_ptr<HistogramSamples> original; | |
| 94 HistogramBase* histogram = | |
| 95 StatisticsRecorder::FindHistogram("Net.SocketStream.WireProtocolType"); | |
| 96 if (histogram) { | |
| 97 original = histogram->SnapshotSamples(); | |
| 98 } | |
| 99 | |
| 100 SocketStreamMetrics metrics(GURL("ws://www.example.com/")); | |
| 101 for (int i = 0; i < 3; ++i) | |
| 102 metrics.OnCountWireProtocolType( | |
| 103 SocketStreamMetrics::WIRE_PROTOCOL_WEBSOCKET); | |
| 104 for (int i = 0; i < 7; ++i) | |
| 105 metrics.OnCountWireProtocolType(SocketStreamMetrics::WIRE_PROTOCOL_SPDY); | |
| 106 | |
| 107 histogram = | |
| 108 StatisticsRecorder::FindHistogram("Net.SocketStream.WireProtocolType"); | |
| 109 ASSERT_TRUE(histogram != NULL); | |
| 110 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 111 | |
| 112 scoped_ptr<HistogramSamples> samples(histogram->SnapshotSamples()); | |
| 113 if (original.get()) { | |
| 114 samples->Subtract(*original); // Cancel the original values. | |
| 115 } | |
| 116 EXPECT_EQ(3, samples->GetCount(SocketStreamMetrics::WIRE_PROTOCOL_WEBSOCKET)); | |
| 117 EXPECT_EQ(7, samples->GetCount(SocketStreamMetrics::WIRE_PROTOCOL_SPDY)); | |
| 118 } | |
| 119 | |
| 120 TEST(SocketStreamMetricsTest, OtherNumbers) { | |
| 121 // First we'll preserve the original values. | |
| 122 int64 original_received_bytes = 0; | |
| 123 int64 original_received_counts = 0; | |
| 124 int64 original_sent_bytes = 0; | |
| 125 int64 original_sent_counts = 0; | |
| 126 | |
| 127 scoped_ptr<HistogramSamples> original; | |
| 128 | |
| 129 HistogramBase* histogram = | |
| 130 StatisticsRecorder::FindHistogram("Net.SocketStream.ReceivedBytes"); | |
| 131 if (histogram) { | |
| 132 original = histogram->SnapshotSamples(); | |
| 133 original_received_bytes = original->sum(); | |
| 134 } | |
| 135 histogram = | |
| 136 StatisticsRecorder::FindHistogram("Net.SocketStream.ReceivedCounts"); | |
| 137 if (histogram) { | |
| 138 original = histogram->SnapshotSamples(); | |
| 139 original_received_counts = original->sum(); | |
| 140 } | |
| 141 histogram = | |
| 142 StatisticsRecorder::FindHistogram("Net.SocketStream.SentBytes"); | |
| 143 if (histogram) { | |
| 144 original = histogram->SnapshotSamples(); | |
| 145 original_sent_bytes = original->sum(); | |
| 146 } | |
| 147 histogram = | |
| 148 StatisticsRecorder::FindHistogram("Net.SocketStream.SentCounts"); | |
| 149 if (histogram) { | |
| 150 original = histogram->SnapshotSamples(); | |
| 151 original_sent_counts = original->sum(); | |
| 152 } | |
| 153 | |
| 154 SocketStreamMetrics metrics(GURL("ws://www.example.com/")); | |
| 155 metrics.OnWaitConnection(); | |
| 156 metrics.OnStartConnection(); | |
| 157 metrics.OnConnected(); | |
| 158 metrics.OnRead(1); | |
| 159 metrics.OnRead(10); | |
| 160 metrics.OnWrite(2); | |
| 161 metrics.OnWrite(20); | |
| 162 metrics.OnWrite(200); | |
| 163 metrics.OnClose(); | |
| 164 | |
| 165 scoped_ptr<HistogramSamples> samples; | |
| 166 | |
| 167 // ConnectionLatency. | |
| 168 histogram = | |
| 169 StatisticsRecorder::FindHistogram("Net.SocketStream.ConnectionLatency"); | |
| 170 ASSERT_TRUE(histogram != NULL); | |
| 171 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 172 // We don't check the contents of the histogram as it's time sensitive. | |
| 173 | |
| 174 // ConnectionEstablish. | |
| 175 histogram = | |
| 176 StatisticsRecorder::FindHistogram("Net.SocketStream.ConnectionEstablish"); | |
| 177 ASSERT_TRUE(histogram != NULL); | |
| 178 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 179 // We don't check the contents of the histogram as it's time sensitive. | |
| 180 | |
| 181 // Duration. | |
| 182 histogram = | |
| 183 StatisticsRecorder::FindHistogram("Net.SocketStream.Duration"); | |
| 184 ASSERT_TRUE(histogram != NULL); | |
| 185 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 186 // We don't check the contents of the histogram as it's time sensitive. | |
| 187 | |
| 188 // ReceivedBytes. | |
| 189 histogram = | |
| 190 StatisticsRecorder::FindHistogram("Net.SocketStream.ReceivedBytes"); | |
| 191 ASSERT_TRUE(histogram != NULL); | |
| 192 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 193 samples = histogram->SnapshotSamples(); | |
| 194 EXPECT_EQ(11, samples->sum() - original_received_bytes); // 11 bytes read. | |
| 195 | |
| 196 // ReceivedCounts. | |
| 197 histogram = | |
| 198 StatisticsRecorder::FindHistogram("Net.SocketStream.ReceivedCounts"); | |
| 199 ASSERT_TRUE(histogram != NULL); | |
| 200 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 201 samples = histogram->SnapshotSamples(); | |
| 202 EXPECT_EQ(2, samples->sum() - original_received_counts); // 2 read requests. | |
| 203 | |
| 204 // SentBytes. | |
| 205 histogram = | |
| 206 StatisticsRecorder::FindHistogram("Net.SocketStream.SentBytes"); | |
| 207 ASSERT_TRUE(histogram != NULL); | |
| 208 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 209 samples = histogram->SnapshotSamples(); | |
| 210 EXPECT_EQ(222, samples->sum() - original_sent_bytes); // 222 bytes sent. | |
| 211 | |
| 212 // SentCounts. | |
| 213 histogram = | |
| 214 StatisticsRecorder::FindHistogram("Net.SocketStream.SentCounts"); | |
| 215 ASSERT_TRUE(histogram != NULL); | |
| 216 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); | |
| 217 samples = histogram->SnapshotSamples(); | |
| 218 EXPECT_EQ(3, samples->sum() - original_sent_counts); // 3 write requests. | |
| 219 } | |
| 220 | |
| 221 } // namespace net | |
| OLD | NEW |