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