1// Copyright (c) 2009 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 "base/basictypes.h" 6#include "base/histogram.h" 7#include "googleurl/src/gurl.h" 8#include "net/socket_stream/socket_stream_metrics.h" 9#include "testing/gtest/include/gtest/gtest.h" 10#include "testing/platform_test.h" 11 12namespace net { 13 14TEST(SocketStreamMetricsTest, Initialize) { 15 if (!StatisticsRecorder::WasStarted()) { 16 // Create the recorder if not yet started, as SocketStreamMetrics 17 // relys on the StatisticsRecorder to be present. This is useful when 18 // tests are run with --gtest_filter='SocketStreamMetricsTest*'. 19 static StatisticsRecorder *recorder = NULL; 20 recorder = new StatisticsRecorder; 21 } 22} 23 24TEST(SocketStreamMetricsTest, ProtocolType) { 25 scoped_refptr<Histogram> histogram; 26 27 // First we'll preserve the original values. We need to do this 28 // as histograms can get affected by other tests. In particular, 29 // SocketStreamTest and WebSocketTest can affect the histograms. 30 Histogram::SampleSet original; 31 if (StatisticsRecorder::FindHistogram( 32 "Net.SocketStream.ProtocolType", &histogram)) { 33 histogram->SnapshotSample(&original); 34 } 35 36 SocketStreamMetrics unknown(GURL("unknown://www.example.com/")); 37 SocketStreamMetrics ws1(GURL("ws://www.example.com/")); 38 SocketStreamMetrics ws2(GURL("ws://www.example.com/")); 39 SocketStreamMetrics wss1(GURL("wss://www.example.com/")); 40 SocketStreamMetrics wss2(GURL("wss://www.example.com/")); 41 SocketStreamMetrics wss3(GURL("wss://www.example.com/")); 42 43 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 44 "Net.SocketStream.ProtocolType", &histogram)); 45 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 46 47 Histogram::SampleSet sample; 48 histogram->SnapshotSample(&sample); 49 original.Resize(*histogram); // Ensure |original| size is same as |sample|. 50 sample.Subtract(original); // Cancel the original values. 51 EXPECT_EQ(1, sample.counts(SocketStreamMetrics::PROTOCOL_UNKNOWN)); 52 EXPECT_EQ(2, sample.counts(SocketStreamMetrics::PROTOCOL_WEBSOCKET)); 53 EXPECT_EQ(3, sample.counts(SocketStreamMetrics::PROTOCOL_WEBSOCKET_SECURE)); 54} 55 56TEST(SocketStreamMetricsTest, ConnectionType) { 57 scoped_refptr<Histogram> histogram; 58 59 // First we'll preserve the original values. 60 Histogram::SampleSet original; 61 if (StatisticsRecorder::FindHistogram( 62 "Net.SocketStream.ConnectionType", &histogram)) { 63 histogram->SnapshotSample(&original); 64 } 65 66 SocketStreamMetrics metrics(GURL("ws://www.example.com/")); 67 for (int i = 0; i < 1; ++i) 68 metrics.OnStartConnection(); 69 for (int i = 0; i < 2; ++i) 70 metrics.OnTunnelProxy(); 71 for (int i = 0; i < 3; ++i) 72 metrics.OnSOCKSProxy(); 73 for (int i = 0; i < 4; ++i) 74 metrics.OnSSLConnection(); 75 76 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 77 "Net.SocketStream.ConnectionType", &histogram)); 78 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 79 80 Histogram::SampleSet sample; 81 histogram->SnapshotSample(&sample); 82 original.Resize(*histogram); 83 sample.Subtract(original); 84 EXPECT_EQ(1, sample.counts(SocketStreamMetrics::ALL_CONNECTIONS)); 85 EXPECT_EQ(2, sample.counts(SocketStreamMetrics::TUNNEL_CONNECTION)); 86 EXPECT_EQ(3, sample.counts(SocketStreamMetrics::SOCKS_CONNECTION)); 87 EXPECT_EQ(4, sample.counts(SocketStreamMetrics::SSL_CONNECTION)); 88} 89 90TEST(SocketStreamMetricsTest, OtherNumbers) { 91 scoped_refptr<Histogram> histogram; 92 93 // First we'll preserve the original values. 94 int64 original_received_bytes = 0; 95 int64 original_received_counts = 0; 96 int64 original_sent_bytes = 0; 97 int64 original_sent_counts = 0; 98 99 Histogram::SampleSet original; 100 if (StatisticsRecorder::FindHistogram( 101 "Net.SocketStream.ReceivedBytes", &histogram)) { 102 histogram->SnapshotSample(&original); 103 original_received_bytes = original.sum(); 104 } 105 if (StatisticsRecorder::FindHistogram( 106 "Net.SocketStream.ReceivedCounts", &histogram)) { 107 histogram->SnapshotSample(&original); 108 original_received_counts = original.sum(); 109 } 110 if (StatisticsRecorder::FindHistogram( 111 "Net.SocketStream.SentBytes", &histogram)) { 112 histogram->SnapshotSample(&original); 113 original_sent_bytes = original.sum(); 114 } 115 if (StatisticsRecorder::FindHistogram( 116 "Net.SocketStream.SentCounts", &histogram)) { 117 histogram->SnapshotSample(&original); 118 original_sent_counts = original.sum(); 119 } 120 121 SocketStreamMetrics metrics(GURL("ws://www.example.com/")); 122 metrics.OnWaitConnection(); 123 metrics.OnStartConnection(); 124 metrics.OnConnected(); 125 metrics.OnRead(1); 126 metrics.OnRead(10); 127 metrics.OnWrite(2); 128 metrics.OnWrite(20); 129 metrics.OnWrite(200); 130 metrics.OnClose(); 131 132 Histogram::SampleSet sample; 133 134 // ConnectionLatency. 135 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 136 "Net.SocketStream.ConnectionLatency", &histogram)); 137 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 138 // We don't check the contents of the histogram as it's time sensitive. 139 140 // ConnectionEstablish. 141 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 142 "Net.SocketStream.ConnectionEstablish", &histogram)); 143 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 144 // We don't check the contents of the histogram as it's time sensitive. 145 146 // Duration. 147 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 148 "Net.SocketStream.Duration", &histogram)); 149 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 150 // We don't check the contents of the histogram as it's time sensitive. 151 152 // ReceivedBytes. 153 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 154 "Net.SocketStream.ReceivedBytes", &histogram)); 155 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 156 histogram->SnapshotSample(&sample); 157 EXPECT_EQ(11, sample.sum() - original_received_bytes); // 11 bytes read. 158 159 // ReceivedCounts. 160 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 161 "Net.SocketStream.ReceivedCounts", &histogram)); 162 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 163 histogram->SnapshotSample(&sample); 164 EXPECT_EQ(2, sample.sum() - original_received_counts); // 2 read requests. 165 166 // SentBytes. 167 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 168 "Net.SocketStream.SentBytes", &histogram)); 169 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 170 histogram->SnapshotSample(&sample); 171 EXPECT_EQ(222, sample.sum() - original_sent_bytes); // 222 bytes sent. 172 173 // SentCounts. 174 ASSERT_TRUE(StatisticsRecorder::FindHistogram( 175 "Net.SocketStream.SentCounts", &histogram)); 176 EXPECT_EQ(Histogram::kUmaTargetedHistogramFlag, histogram->flags()); 177 histogram->SnapshotSample(&sample); 178 EXPECT_EQ(3, sample.sum() - original_sent_counts); // 3 write requests. 179} 180 181} // namespace net 182