blob: 1965a0c78e24744bcb07858ae34ad17eac6b1994 [file] [log] [blame]
Thieu Le48e6d6d2011-12-06 00:40:27 +00001// Copyright (c) 2011 The Chromium OS 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 "shill/metrics.h"
6
7#include <chromeos/dbus/service_constants.h>
8#include <metrics/metrics_library_mock.h>
9#include <metrics/timer.h>
10
11#include "shill/mock_service.h"
12#include "shill/mock_wifi_service.h"
13#include "shill/property_store_unittest.h"
14
15using testing::_;
16using testing::Ge;
17using testing::Return;
18using testing::Test;
19
20namespace shill {
21
22class MetricsTest : public PropertyStoreTest {
23 public:
24 MetricsTest()
25 : service_(new MockService(control_interface(),
26 dispatcher(),
27 manager())),
28 wifi_(new WiFi(control_interface(),
29 dispatcher(),
30 manager(),
31 "wlan0",
32 "000102030405",
33 0)),
34 wifi_service_(new MockWiFiService(control_interface(),
35 dispatcher(),
36 manager(),
37 wifi_,
38 ssid_,
39 flimflam::kModeManaged,
40 flimflam::kSecurityNone,
41 false)) {
42 }
43
44 virtual ~MetricsTest() {}
45
46 virtual void SetUp() {
47 metrics_.set_library(&library_);
48 service_->set_metrics(&metrics_);
49 wifi_service_->set_metrics(&metrics_);
50 }
51
52 protected:
53 Metrics metrics_; // This must be destroyed after service_ and wifi_service_
54 MetricsLibraryMock library_;
55 scoped_refptr<MockService> service_;
56 WiFiRefPtr wifi_;
57 const std::vector<uint8_t> ssid_;
58 scoped_refptr<MockWiFiService> wifi_service_;
59};
60
61TEST_F(MetricsTest, TimeToConfig) {
62 EXPECT_CALL(library_, SendToUMA("Network.Shill.Unknown.TimeToConfig",
63 Ge(0),
64 Metrics::kTimerHistogramMinMilliseconds,
65 Metrics::kTimerHistogramMaxMilliseconds,
66 Metrics::kTimerHistogramNumBuckets));
67 metrics_.RegisterService(service_);
68 metrics_.NotifyServiceStateChanged(service_, Service::kStateConfiguring);
69 metrics_.NotifyServiceStateChanged(service_, Service::kStateReady);
70}
71
72TEST_F(MetricsTest, TimeToPortal) {
73 EXPECT_CALL(library_, SendToUMA("Network.Shill.Unknown.TimeToPortal",
74 Ge(0),
75 Metrics::kTimerHistogramMinMilliseconds,
76 Metrics::kTimerHistogramMaxMilliseconds,
77 Metrics::kTimerHistogramNumBuckets));
78 metrics_.RegisterService(service_);
79 metrics_.NotifyServiceStateChanged(service_, Service::kStateReady);
80 metrics_.NotifyServiceStateChanged(service_, Service::kStatePortal);
81}
82
83TEST_F(MetricsTest, TimeToOnline) {
84 EXPECT_CALL(library_, SendToUMA("Network.Shill.Unknown.TimeToOnline",
85 Ge(0),
86 Metrics::kTimerHistogramMinMilliseconds,
87 Metrics::kTimerHistogramMaxMilliseconds,
88 Metrics::kTimerHistogramNumBuckets));
89 metrics_.RegisterService(service_);
90 metrics_.NotifyServiceStateChanged(service_, Service::kStateReady);
91 metrics_.NotifyServiceStateChanged(service_, Service::kStateOnline);
92}
93
94TEST_F(MetricsTest, ServiceFailure) {
95 EXPECT_CALL(*service_.get(), failure())
96 .WillRepeatedly(Return(Service::kFailureBadCredentials));
97 EXPECT_CALL(library_, SendEnumToUMA(Metrics::kMetricNetworkServiceErrors,
98 Service::kFailureBadCredentials,
99 Metrics::kMetricNetworkServiceErrorsMax));
100 metrics_.RegisterService(service_);
101 metrics_.NotifyServiceStateChanged(service_, Service::kStateFailure);
102}
103
104TEST_F(MetricsTest, WiFiServiceTimeToJoin) {
105 EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.TimeToJoin",
106 Ge(0),
107 Metrics::kTimerHistogramMinMilliseconds,
108 Metrics::kTimerHistogramMaxMilliseconds,
109 Metrics::kTimerHistogramNumBuckets));
110 metrics_.RegisterService(wifi_service_);
111 metrics_.NotifyServiceStateChanged(wifi_service_, Service::kStateAssociating);
112 metrics_.NotifyServiceStateChanged(wifi_service_, Service::kStateConfiguring);
113}
114
Thieu Lead1ec2c2012-01-05 23:39:48 +0000115TEST_F(MetricsTest, WiFiServicePostReady) {
Thieu Le48e6d6d2011-12-06 00:40:27 +0000116 EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.Channel",
117 Metrics::kWiFiChannel2412,
118 Metrics::kMetricNetworkChannelMax));
Thieu Lead1ec2c2012-01-05 23:39:48 +0000119 EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.PhyMode",
120 Metrics::kWiFiNetworkPhyMode11a,
121 Metrics::kWiFiNetworkPhyModeMax));
122 EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.Security",
123 Metrics::kWiFiSecurityWep,
124 Metrics::kWiFiSecurityMax));
Thieu Le48e6d6d2011-12-06 00:40:27 +0000125 wifi_service_->frequency_ = 2412;
Thieu Lead1ec2c2012-01-05 23:39:48 +0000126 wifi_service_->physical_mode_ = Metrics::kWiFiNetworkPhyMode11a;
127 wifi_service_->security_ = flimflam::kSecurityWep;
Thieu Le48e6d6d2011-12-06 00:40:27 +0000128 metrics_.RegisterService(wifi_service_);
129 metrics_.NotifyServiceStateChanged(wifi_service_, Service::kStateReady);
130}
131
132TEST_F(MetricsTest, FrequencyToChannel) {
133 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(2411));
134 EXPECT_EQ(Metrics::kWiFiChannel2412, metrics_.WiFiFrequencyToChannel(2412));
135 EXPECT_EQ(Metrics::kWiFiChannel2472, metrics_.WiFiFrequencyToChannel(2472));
136 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(2473));
137 EXPECT_EQ(Metrics::kWiFiChannel2484, metrics_.WiFiFrequencyToChannel(2484));
138 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5169));
139 EXPECT_EQ(Metrics::kWiFiChannel5170, metrics_.WiFiFrequencyToChannel(5170));
140 EXPECT_EQ(Metrics::kWiFiChannel5190, metrics_.WiFiFrequencyToChannel(5190));
141 EXPECT_EQ(Metrics::kWiFiChannel5180, metrics_.WiFiFrequencyToChannel(5180));
142 EXPECT_EQ(Metrics::kWiFiChannel5200, metrics_.WiFiFrequencyToChannel(5200));
143 EXPECT_EQ(Metrics::kWiFiChannel5230, metrics_.WiFiFrequencyToChannel(5230));
144 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5231));
145 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5239));
146 EXPECT_EQ(Metrics::kWiFiChannel5240, metrics_.WiFiFrequencyToChannel(5240));
147 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5241));
148 EXPECT_EQ(Metrics::kWiFiChannel5320, metrics_.WiFiFrequencyToChannel(5320));
149 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5321));
150 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5499));
151 EXPECT_EQ(Metrics::kWiFiChannel5500, metrics_.WiFiFrequencyToChannel(5500));
152 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5501));
153 EXPECT_EQ(Metrics::kWiFiChannel5700, metrics_.WiFiFrequencyToChannel(5700));
154 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5701));
155 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5744));
156 EXPECT_EQ(Metrics::kWiFiChannel5745, metrics_.WiFiFrequencyToChannel(5745));
157 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5746));
158 EXPECT_EQ(Metrics::kWiFiChannel5825, metrics_.WiFiFrequencyToChannel(5825));
159 EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5826));
160}
161
162} // namespace shill