1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2012 The Android Open Source Project
3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License.
6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at
7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software
11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and
14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License.
15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
1648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
1748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le#include "shill/metrics.h"
1848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
1926fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le#include <string>
208a5322984f2d81bcbfd8d44c59747a11bd9b904bAlex Vakulenko#include <vector>
2126fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le
22289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#if defined(__ANDROID__)
23289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#include <dbus/service_constants.h>
24289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#else
2548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le#include <chromeos/dbus/service_constants.h>
26289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#endif  // __ANDROID__
2748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le#include <metrics/metrics_library_mock.h>
28a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le#include <metrics/timer_mock.h>
2948e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
306c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le#include "shill/mock_control.h"
316c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le#include "shill/mock_event_dispatcher.h"
3294cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal#include "shill/mock_log.h"
336c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le#include "shill/mock_manager.h"
3448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le#include "shill/mock_service.h"
351a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu
361a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#if !defined(DISABLE_WIFI)
371a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#include "shill/mock_eap_credentials.h"
38d6a8b519e3057f52313e502f502a4819a942e089Ben Chan#include "shill/wifi/mock_wifi_service.h"
391a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#endif  // DISABLE_WIFI
4048e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
4126fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Leusing std::string;
4226fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le
4348e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Leusing testing::_;
44b84ba34aec59d083980d840fb845a3e2bea893cbThieu Leusing testing::DoAll;
4548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Leusing testing::Ge;
46b84ba34aec59d083980d840fb845a3e2bea893cbThieu Leusing testing::Mock;
4748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Leusing testing::Return;
48b84ba34aec59d083980d840fb845a3e2bea893cbThieu Leusing testing::SetArgumentPointee;
4948e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Leusing testing::Test;
5048e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
5148e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Lenamespace shill {
5248e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
536c1e3bbca64d642cb30ed9952203626942bc1451Thieu Leclass MetricsTest : public Test {
5448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le public:
5548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  MetricsTest()
566c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le      : manager_(&control_interface_,
576c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le                 &dispatcher_,
58bad1c10ffd2d4ac14f7bd9f4ef6a8982e711f566mukesh agrawal                 &metrics_),
596c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le        metrics_(&dispatcher_),
601a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#if !defined(DISABLE_WIFI)
61cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal        open_wifi_service_(new MockWiFiService(&control_interface_,
62cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                               &dispatcher_,
63cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                               &metrics_,
64cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                               &manager_,
65cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                               manager_.wifi_provider(),
66cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                               ssid_,
67923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                               kModeManaged,
68923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                               kSecurityNone,
69cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                               false)),
70cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal        wep_wifi_service_(new MockWiFiService(&control_interface_,
71cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              &dispatcher_,
72cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              &metrics_,
73cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              &manager_,
74cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              manager_.wifi_provider(),
75cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              ssid_,
76923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                              kModeManaged,
77923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                              kSecurityWep,
78cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              false)),
79cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal        eap_wifi_service_(new MockWiFiService(&control_interface_,
80cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              &dispatcher_,
81cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              &metrics_,
82cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              &manager_,
83cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              manager_.wifi_provider(),
84cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              ssid_,
85923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                              kModeManaged,
86923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                              kSecurity8021x,
87cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                              false)),
881a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu        eap_(new MockEapCredentials()),
891a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#endif  // DISABLE_WIFI
901a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu        service_(new MockService(&control_interface_,
911a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu                                 &dispatcher_,
921a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu                                 &metrics_,
931a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu                                 &manager_)) {}
9448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
9548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  virtual ~MetricsTest() {}
9648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
9748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  virtual void SetUp() {
9848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le    metrics_.set_library(&library_);
991a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#if !defined(DISABLE_WIFI)
100cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal    eap_wifi_service_->eap_.reset(eap_);  // Passes ownership.
1011a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#endif  // DISABLE_WIFI
10258f0b6dbd71f52c3abdac91aed44024a35bc4898Darin Petkov    metrics_.collect_bootstats_ = false;
10348e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  }
10448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
10548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le protected:
106e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  void ExpectCommonPostReady(Metrics::WiFiApMode ap_mode,
107e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                             Metrics::WiFiChannel channel,
108b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                             Metrics::WiFiNetworkPhyMode mode,
10923b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                             Metrics::WiFiSecurity security,
11023b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                             int signal_strength) {
111e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart    EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.ApMode",
112e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                        ap_mode,
113e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                        Metrics::kWiFiApModeMax));
114b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le    EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.Channel",
115b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                        channel,
116b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                        Metrics::kMetricNetworkChannelMax));
117b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le    EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.PhyMode",
118b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                        mode,
119b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                        Metrics::kWiFiNetworkPhyModeMax));
120b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le    EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.Security",
121b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                        security,
122b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                        Metrics::kWiFiSecurityMax));
12323b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart    EXPECT_CALL(library_,
12423b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                SendToUMA("Network.Shill.Wifi.SignalStrength",
12523b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                          signal_strength,
12623b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                          Metrics::kMetricNetworkSignalStrengthMin,
12723b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                          Metrics::kMetricNetworkSignalStrengthMax,
12823b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                          Metrics::kMetricNetworkSignalStrengthNumBuckets));
129b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  }
130b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le
1316c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le  MockControl control_interface_;
1326c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le  MockEventDispatcher dispatcher_;
1336c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le  MockManager manager_;
134cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  Metrics metrics_;  // This must be destroyed after all |service_|s.
13548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  MetricsLibraryMock library_;
1361a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#if !defined(DISABLE_WIFI)
13748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  const std::vector<uint8_t> ssid_;
138cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  scoped_refptr<MockWiFiService> open_wifi_service_;
139cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  scoped_refptr<MockWiFiService> wep_wifi_service_;
140cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  scoped_refptr<MockWiFiService> eap_wifi_service_;
1413b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  MockEapCredentials* eap_;  // Owned by |eap_wifi_service_|.
1421a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#endif  // DISABLE_WIFI
1431a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu  scoped_refptr<MockService> service_;
14448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le};
14548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
14648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu LeTEST_F(MetricsTest, TimeToConfig) {
14748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Unknown.TimeToConfig",
14848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Ge(0),
149a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMin,
150a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMax,
15148e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Metrics::kTimerHistogramNumBuckets));
1527ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*service_, Service::kStateConfiguring);
1537ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*service_, Service::kStateConnected);
15448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}
15548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
15648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu LeTEST_F(MetricsTest, TimeToPortal) {
15748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Unknown.TimeToPortal",
15848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Ge(0),
159a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMin,
160a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMax,
16148e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Metrics::kTimerHistogramNumBuckets));
1627ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*service_, Service::kStateConnected);
1637ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*service_, Service::kStatePortal);
16448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}
16548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
16648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu LeTEST_F(MetricsTest, TimeToOnline) {
16748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Unknown.TimeToOnline",
16848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Ge(0),
169a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMin,
170a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMax,
17148e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Metrics::kTimerHistogramNumBuckets));
1727ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*service_, Service::kStateConnected);
1737ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*service_, Service::kStateOnline);
17448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}
17548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
17648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu LeTEST_F(MetricsTest, ServiceFailure) {
1777ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  EXPECT_CALL(*service_, failure())
178f2d609103916861ea8a9377ef93a72cc998bdf80Paul Stewart      .WillRepeatedly(Return(Service::kFailureBadPassphrase));
17927df364826f6f8ac5eb36b8e62f2960516cf9b1bPeter Qiu  EXPECT_CALL(library_,
18027df364826f6f8ac5eb36b8e62f2960516cf9b1bPeter Qiu      SendEnumToUMA(Metrics::kMetricNetworkServiceErrors,
18127df364826f6f8ac5eb36b8e62f2960516cf9b1bPeter Qiu                    Metrics::kNetworkServiceErrorBadPassphrase,
18227df364826f6f8ac5eb36b8e62f2960516cf9b1bPeter Qiu                    Metrics::kNetworkServiceErrorMax));
1837ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*service_, Service::kStateFailure);
18448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}
18548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
1861a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#if !defined(DISABLE_WIFI)
18748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu LeTEST_F(MetricsTest, WiFiServiceTimeToJoin) {
18848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.TimeToJoin",
18948e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Ge(0),
190a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMin,
191a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramMillisecondsMax,
19248e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le                                  Metrics::kTimerHistogramNumBuckets));
1937ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*open_wifi_service_,
194cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                     Service::kStateAssociating);
1957ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*open_wifi_service_,
196cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                     Service::kStateConfiguring);
19748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}
19848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
199ad1ec2c02af19d65b1302db59a1cebb1c9465516Thieu LeTEST_F(MetricsTest, WiFiServicePostReady) {
200b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  base::TimeDelta non_zero_time_delta = base::TimeDelta::FromMilliseconds(1);
2013b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerMock* mock_time_resume_to_ready_timer =
202b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le      new chromeos_metrics::TimerMock;
203b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  metrics_.set_time_resume_to_ready_timer(mock_time_resume_to_ready_timer);
204b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le
20523b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart  const int kStrength = -42;
206e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  ExpectCommonPostReady(Metrics::kWiFiApModeManaged,
207e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        Metrics::kWiFiChannel2412,
208b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                        Metrics::kWiFiNetworkPhyMode11a,
20923b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                        Metrics::kWiFiSecurityWep,
21023b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                        -kStrength);
211b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.TimeResumeToReady",
212b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                  _, _, _, _)).Times(0);
21321f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart  EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.EapOuterProtocol",
21421f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart                                       _, _)).Times(0);
21521f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart  EXPECT_CALL(library_, SendEnumToUMA("Network.Shill.Wifi.EapInnerProtocol",
21621f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart                                      _, _)).Times(0);
217cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  wep_wifi_service_->frequency_ = 2412;
218cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  wep_wifi_service_->physical_mode_ = Metrics::kWiFiNetworkPhyMode11a;
219cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  wep_wifi_service_->raw_signal_strength_ = kStrength;
2207ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*wep_wifi_service_,
221cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                     Service::kStateConnected);
222b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  Mock::VerifyAndClearExpectations(&library_);
223b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le
224b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  // Simulate a system suspend, resume and an AP reconnect.
225e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  ExpectCommonPostReady(Metrics::kWiFiApModeManaged,
226e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        Metrics::kWiFiChannel2412,
227b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                        Metrics::kWiFiNetworkPhyMode11a,
22823b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                        Metrics::kWiFiSecurityWep,
22923b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                        -kStrength);
230b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.TimeResumeToReady",
231b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                  Ge(0),
232b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                  Metrics::kTimerHistogramMillisecondsMin,
233b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                  Metrics::kTimerHistogramMillisecondsMax,
234b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                  Metrics::kTimerHistogramNumBuckets));
235b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  EXPECT_CALL(*mock_time_resume_to_ready_timer, GetElapsedTime(_)).
236b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le      WillOnce(DoAll(SetArgumentPointee<0>(non_zero_time_delta), Return(true)));
237fac0953b10f3c13f47ecd588c0f9a0382bc32776Daniel Erat  metrics_.NotifySuspendDone();
2387ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*wep_wifi_service_,
239cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                     Service::kStateConnected);
240b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  Mock::VerifyAndClearExpectations(&library_);
241b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  Mock::VerifyAndClearExpectations(mock_time_resume_to_ready_timer);
242b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le
243b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  // Make sure subsequent connects do not count towards TimeResumeToReady.
244e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  ExpectCommonPostReady(Metrics::kWiFiApModeManaged,
245e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        Metrics::kWiFiChannel2412,
246b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                        Metrics::kWiFiNetworkPhyMode11a,
24723b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                        Metrics::kWiFiSecurityWep,
24823b393ab3d44c0c3a95c30078978cab53b50c9f2Paul Stewart                        -kStrength);
249b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.TimeResumeToReady",
250b84ba34aec59d083980d840fb845a3e2bea893cbThieu Le                                  _, _, _, _)).Times(0);
2517ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*wep_wifi_service_,
252cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                     Service::kStateConnected);
25348e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}
25448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
25521f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul StewartTEST_F(MetricsTest, WiFiServicePostReadyEAP) {
25621f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart  const int kStrength = -42;
257e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  ExpectCommonPostReady(Metrics::kWiFiApModeManaged,
258e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        Metrics::kWiFiChannel2412,
25921f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart                        Metrics::kWiFiNetworkPhyMode11a,
26021f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart                        Metrics::kWiFiSecurity8021x,
26121f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart                        -kStrength);
262cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  eap_wifi_service_->frequency_ = 2412;
263cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  eap_wifi_service_->physical_mode_ = Metrics::kWiFiNetworkPhyMode11a;
264cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal  eap_wifi_service_->raw_signal_strength_ = kStrength;
265c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart  EXPECT_CALL(*eap_, OutputConnectionMetrics(&metrics_, Technology::kWifi));
2667ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*eap_wifi_service_,
267cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal                                     Service::kStateConnected);
26821f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart}
26921f4096b66e7d16f211942fb2c27bd3a7ad0859ePaul Stewart
270e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul StewartTEST_F(MetricsTest, WiFiServicePostReadyAdHoc) {
271e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  auto adhoc_wifi_service(
272e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart      make_scoped_refptr(new MockWiFiService(&control_interface_,
273e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                             &dispatcher_,
274e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                             &metrics_,
275e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                             &manager_,
276e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                             manager_.wifi_provider(),
277e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                             ssid_,
278923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                             kModeAdhoc,
279923a5025a5e1138b052cbeffa60ea387d479696fBen Chan                                             kSecurityNone,
280e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                             false)));
281e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  const int kStrength = -42;
282e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  ExpectCommonPostReady(Metrics::kWiFiApModeAdHoc,
283e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        Metrics::kWiFiChannel2412,
284e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        Metrics::kWiFiNetworkPhyMode11b,
285e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        Metrics::kWiFiSecurityNone,
286e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                        -kStrength);
287e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  adhoc_wifi_service->frequency_ = 2412;
288e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  adhoc_wifi_service->physical_mode_ = Metrics::kWiFiNetworkPhyMode11b;
289e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart  adhoc_wifi_service->raw_signal_strength_ = kStrength;
2907ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceStateChanged(*adhoc_wifi_service,
291e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart                                     Service::kStateConnected);
292e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart}
2931a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu#endif  // DISABLE_WIFI
294e4cedde9ce9b21d2317e50cf267be31b1d6c279bPaul Stewart
29548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu LeTEST_F(MetricsTest, FrequencyToChannel) {
29648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(2411));
29748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel2412, metrics_.WiFiFrequencyToChannel(2412));
29848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel2472, metrics_.WiFiFrequencyToChannel(2472));
29948e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(2473));
30048e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel2484, metrics_.WiFiFrequencyToChannel(2484));
30148e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5169));
30248e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5170, metrics_.WiFiFrequencyToChannel(5170));
30348e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5190, metrics_.WiFiFrequencyToChannel(5190));
30448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5180, metrics_.WiFiFrequencyToChannel(5180));
30548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5200, metrics_.WiFiFrequencyToChannel(5200));
30648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5230, metrics_.WiFiFrequencyToChannel(5230));
30748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5231));
30848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5239));
30948e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5240, metrics_.WiFiFrequencyToChannel(5240));
31048e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5241));
31148e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5320, metrics_.WiFiFrequencyToChannel(5320));
31248e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5321));
31348e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5499));
31448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5500, metrics_.WiFiFrequencyToChannel(5500));
31548e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5501));
31648e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5700, metrics_.WiFiFrequencyToChannel(5700));
31748e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5701));
31848e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5744));
31948e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5745, metrics_.WiFiFrequencyToChannel(5745));
32048e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5746));
32148e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannel5825, metrics_.WiFiFrequencyToChannel(5825));
32248e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le  EXPECT_EQ(Metrics::kWiFiChannelUndef, metrics_.WiFiFrequencyToChannel(5826));
32348e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}
32448e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le
325a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu LeTEST_F(MetricsTest, TimeOnlineTimeToDrop) {
3263b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerMock* mock_time_online_timer =
327a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le      new chromeos_metrics::TimerMock;
328a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  metrics_.set_time_online_timer(mock_time_online_timer);
3293b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerMock* mock_time_to_drop_timer =
330a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le      new chromeos_metrics::TimerMock;
331a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  metrics_.set_time_to_drop_timer(mock_time_to_drop_timer);
3321a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu  scoped_refptr<MockService> wifi_service =
3331a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu      new MockService(&control_interface_, &dispatcher_, &metrics_, &manager_);
3347ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  EXPECT_CALL(*service_, technology()).
335a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le      WillOnce(Return(Technology::kEthernet));
3361a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu  EXPECT_CALL(*wifi_service, technology()).
3371a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu      WillOnce(Return(Technology::kWifi));
338a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Ethernet.TimeOnline",
339a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Ge(0),
340a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeOnlineSecondsMin,
341a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeOnlineSecondsMax,
342a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramNumBuckets));
343a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(library_, SendToUMA(Metrics::kMetricTimeToDropSeconds,
344a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Ge(0),
345a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeToDropSecondsMin,
346a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeToDropSecondsMax,
347a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramNumBuckets)).Times(0);
348a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(*mock_time_online_timer, Start()).Times(2);
349a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(*mock_time_to_drop_timer, Start());
3500951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko  metrics_.NotifyDefaultServiceChanged(service_.get());
3511a72f5444e077ed21b8e085b17d7f9f1bc44fa5ePeter Qiu  metrics_.NotifyDefaultServiceChanged(wifi_service.get());
352a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le
353a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(*mock_time_online_timer, Start());
354a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(*mock_time_to_drop_timer, Start()).Times(0);
355a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.TimeOnline",
356a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Ge(0),
357a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeOnlineSecondsMin,
358a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeOnlineSecondsMax,
359a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramNumBuckets));
360a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le  EXPECT_CALL(library_, SendToUMA(Metrics::kMetricTimeToDropSeconds,
361a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Ge(0),
362a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeToDropSecondsMin,
363a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kMetricTimeToDropSecondsMax,
364a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le                                  Metrics::kTimerHistogramNumBuckets));
365cc225ef3b77b5e098cc12c661a947e1737480777Ben Chan  metrics_.NotifyDefaultServiceChanged(nullptr);
366a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le}
367a20cbc2864edf5491cfa1fa240ba83c30b8a483cThieu Le
36867370f6ebe6757f55249f6e87f4a96922d0c4518Thieu LeTEST_F(MetricsTest, Disconnect) {
3697ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  EXPECT_CALL(*service_, technology()).
37067370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le      WillRepeatedly(Return(Technology::kWifi));
3717ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  EXPECT_CALL(*service_, explicitly_disconnected()).
37267370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le      WillOnce(Return(false));
37367370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.Disconnect",
37467370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  false,
37567370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  Metrics::kMetricDisconnectMin,
37667370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  Metrics::kMetricDisconnectMax,
37767370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  Metrics::kMetricDisconnectNumBuckets));
3787ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceDisconnect(*service_);
37967370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le
3807ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  EXPECT_CALL(*service_, explicitly_disconnected()).
38167370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le      WillOnce(Return(true));
38267370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le  EXPECT_CALL(library_, SendToUMA("Network.Shill.Wifi.Disconnect",
38367370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  true,
38467370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  Metrics::kMetricDisconnectMin,
38567370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  Metrics::kMetricDisconnectMax,
38667370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le                                  Metrics::kMetricDisconnectNumBuckets));
3877ac610b7edc059fbcc378cdac9ca235975470563Wade Guthrie  metrics_.NotifyServiceDisconnect(*service_);
38867370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le}
38967370f6ebe6757f55249f6e87f4a96922d0c4518Thieu Le
39085e050b4923878a57aec1415314d2b39ff233e00Thieu LeTEST_F(MetricsTest, PortalDetectionResultToEnum) {
3913d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  ConnectivityTrial::Result trial_result(ConnectivityTrial::kPhaseDNS,
3923d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein                                ConnectivityTrial::kStatusFailure);
3933d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  PortalDetector::Result result(trial_result, 0, true);
3943d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein
39585e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultDNSFailure,
39685e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
39785e050b4923878a57aec1415314d2b39ff233e00Thieu Le
3983d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseDNS;
3993d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusTimeout;
40085e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultDNSTimeout,
40185e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
40285e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4033d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseConnection;
4043d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusFailure;
40585e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultConnectionFailure,
40685e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
40785e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4083d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseConnection;
4093d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusTimeout;
41085e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultConnectionTimeout,
41185e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
41285e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4133d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseHTTP;
4143d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusFailure;
41585e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultHTTPFailure,
41685e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
41785e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4183d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseHTTP;
4193d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusTimeout;
42085e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultHTTPTimeout,
42185e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
42285e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4233d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseContent;
4243d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusSuccess;
42585e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultSuccess,
42685e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
42785e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4283d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseContent;
4293d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusFailure;
43085e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultContentFailure,
43185e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
43285e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4333d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseContent;
4343d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusTimeout;
43585e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultContentTimeout,
43685e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
43785e050b4923878a57aec1415314d2b39ff233e00Thieu Le
4383d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.phase = ConnectivityTrial::kPhaseUnknown;
4393d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  result.trial_result.status = ConnectivityTrial::kStatusFailure;
44085e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_EQ(Metrics::kPortalResultUnknown,
44185e050b4923878a57aec1415314d2b39ff233e00Thieu Le            Metrics::PortalDetectionResultToEnum(result));
44285e050b4923878a57aec1415314d2b39ff233e00Thieu Le}
44385e050b4923878a57aec1415314d2b39ff233e00Thieu Le
444cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu LeTEST_F(MetricsTest, TimeToConnect) {
445cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le  EXPECT_CALL(library_,
446cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le      SendToUMA("Network.Shill.Cellular.TimeToConnect",
447cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le                Ge(0),
448cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le                Metrics::kMetricTimeToConnectMillisecondsMin,
449cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le                Metrics::kMetricTimeToConnectMillisecondsMax,
450cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le                Metrics::kMetricTimeToConnectMillisecondsNumBuckets));
451cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le  const int kInterfaceIndex = 1;
452cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
4537cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  metrics_.NotifyDeviceConnectStarted(kInterfaceIndex, false);
454cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le  metrics_.NotifyDeviceConnectFinished(kInterfaceIndex);
455cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le}
456cdb5a2112e71c68b094eaaf32dfb0ec295b6fc76Thieu Le
457a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu LeTEST_F(MetricsTest, TimeToDisable) {
458a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le  EXPECT_CALL(library_,
459a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le      SendToUMA("Network.Shill.Cellular.TimeToDisable",
460a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le                Ge(0),
461a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le                Metrics::kMetricTimeToDisableMillisecondsMin,
462a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le                Metrics::kMetricTimeToDisableMillisecondsMax,
463a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le                Metrics::kMetricTimeToDisableMillisecondsNumBuckets));
464a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le  const int kInterfaceIndex = 1;
465a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
466a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le  metrics_.NotifyDeviceDisableStarted(kInterfaceIndex);
467a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le  metrics_.NotifyDeviceDisableFinished(kInterfaceIndex);
468a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le}
469a2519bfa1b13957ce0466d353fcbc1be5ad80e13Thieu Le
470ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu LeTEST_F(MetricsTest, TimeToEnable) {
471ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le  EXPECT_CALL(library_,
472ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le      SendToUMA("Network.Shill.Cellular.TimeToEnable",
473ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le                Ge(0),
474ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le                Metrics::kMetricTimeToEnableMillisecondsMin,
475ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le                Metrics::kMetricTimeToEnableMillisecondsMax,
476ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le                Metrics::kMetricTimeToEnableMillisecondsNumBuckets));
477ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le  const int kInterfaceIndex = 1;
478ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
479ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le  metrics_.NotifyDeviceEnableStarted(kInterfaceIndex);
480ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le  metrics_.NotifyDeviceEnableFinished(kInterfaceIndex);
481ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le}
482ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le
483c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu LeTEST_F(MetricsTest, TimeToInitialize) {
484c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le  EXPECT_CALL(library_,
485c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le      SendToUMA("Network.Shill.Cellular.TimeToInitialize",
486c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le                Ge(0),
487c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le                Metrics::kMetricTimeToInitializeMillisecondsMin,
488c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le                Metrics::kMetricTimeToInitializeMillisecondsMax,
489c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le                Metrics::kMetricTimeToInitializeMillisecondsNumBuckets));
490c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le  const int kInterfaceIndex = 1;
491c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
492c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le  metrics_.NotifyDeviceInitialized(kInterfaceIndex);
493c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le}
494c8078a6c44d0e30b71642856ef46e0cf6c5edb46Thieu Le
49518c1107512ccd6ff8460246f690fbffbdc381979Thieu LeTEST_F(MetricsTest, TimeToScan) {
49618c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  EXPECT_CALL(library_,
49718c1107512ccd6ff8460246f690fbffbdc381979Thieu Le      SendToUMA("Network.Shill.Cellular.TimeToScan",
49818c1107512ccd6ff8460246f690fbffbdc381979Thieu Le                Ge(0),
49918c1107512ccd6ff8460246f690fbffbdc381979Thieu Le                Metrics::kMetricTimeToScanMillisecondsMin,
50018c1107512ccd6ff8460246f690fbffbdc381979Thieu Le                Metrics::kMetricTimeToScanMillisecondsMax,
50118c1107512ccd6ff8460246f690fbffbdc381979Thieu Le                Metrics::kMetricTimeToScanMillisecondsNumBuckets));
50218c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  const int kInterfaceIndex = 1;
50318c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
50418c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  metrics_.NotifyDeviceScanStarted(kInterfaceIndex);
50518c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  metrics_.NotifyDeviceScanFinished(kInterfaceIndex);
50618c1107512ccd6ff8460246f690fbffbdc381979Thieu Le}
50718c1107512ccd6ff8460246f690fbffbdc381979Thieu Le
50844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade GuthrieTEST_F(MetricsTest, TimeToScanAndConnect) {
50944f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(library_,
51044f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      SendToUMA("Network.Shill.Wifi.TimeToScan",
51144f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Ge(0),
51244f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsMin,
51344f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsMax,
51444f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsNumBuckets));
51544f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  const int kInterfaceIndex = 1;
51644f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.RegisterDevice(kInterfaceIndex, Technology::kWifi);
51744f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.NotifyDeviceScanStarted(kInterfaceIndex);
51844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.NotifyDeviceScanFinished(kInterfaceIndex);
51944f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie
52044f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(library_,
52144f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      SendToUMA("Network.Shill.Wifi.TimeToConnect",
52244f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Ge(0),
52344f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToConnectMillisecondsMin,
52444f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToConnectMillisecondsMax,
52544f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToConnectMillisecondsNumBuckets));
52644f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(library_,
52744f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      SendToUMA("Network.Shill.Wifi.TimeToScanAndConnect",
52844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Ge(0),
52944f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsMin,
53044f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsMax +
53144f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                    Metrics::kMetricTimeToConnectMillisecondsMax,
53244f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsNumBuckets +
53344f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                    Metrics::kMetricTimeToConnectMillisecondsNumBuckets));
53444f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.NotifyDeviceConnectStarted(kInterfaceIndex, false);
53544f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.NotifyDeviceConnectFinished(kInterfaceIndex);
53644f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie}
53744f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie
53844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade GuthrieTEST_F(MetricsTest, SpontaneousConnect) {
53944f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  const int kInterfaceIndex = 1;
54044f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.RegisterDevice(kInterfaceIndex, Technology::kWifi);
54144f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(library_,
54244f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      SendToUMA("Network.Shill.Wifi.TimeToConnect",
54344f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Ge(0),
54444f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToConnectMillisecondsMin,
54544f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToConnectMillisecondsMax,
54644f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToConnectMillisecondsNumBuckets)).Times(0);
54744f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(library_,
54844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      SendToUMA("Network.Shill.Wifi.TimeToScanAndConnect",
54944f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Ge(0),
55044f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsMin,
55144f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsMax +
55244f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                    Metrics::kMetricTimeToConnectMillisecondsMax,
55344f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                Metrics::kMetricTimeToScanMillisecondsNumBuckets +
55444f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                    Metrics::kMetricTimeToConnectMillisecondsNumBuckets)).
55544f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      Times(0);
55644f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  // This simulates a connection that is not scan-based.
55744f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.NotifyDeviceConnectFinished(kInterfaceIndex);
55844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie}
55944f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie
56044f290d07875cd3a6dc21c36ed0364a6ac5c31faWade GuthrieTEST_F(MetricsTest, ResetConnectTimer) {
56144f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  const int kInterfaceIndex = 1;
56244f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.RegisterDevice(kInterfaceIndex, Technology::kWifi);
5633b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerReporterMock* mock_scan_timer =
56444f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      new chromeos_metrics::TimerReporterMock;
56544f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.set_time_to_scan_timer(kInterfaceIndex, mock_scan_timer);
5663b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerReporterMock* mock_connect_timer =
56744f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      new chromeos_metrics::TimerReporterMock;
56844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.set_time_to_connect_timer(kInterfaceIndex, mock_connect_timer);
5693b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerReporterMock* mock_scan_connect_timer =
57044f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie      new chromeos_metrics::TimerReporterMock;
57144f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.set_time_to_scan_connect_timer(kInterfaceIndex,
57244f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie                                          mock_scan_connect_timer);
57344f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(*mock_scan_timer, Reset()).Times(0);
57444f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(*mock_connect_timer, Reset());
57544f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  EXPECT_CALL(*mock_scan_connect_timer, Reset());
57644f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie  metrics_.ResetConnectTimer(kInterfaceIndex);
57744f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie}
57844f290d07875cd3a6dc21c36ed0364a6ac5c31faWade Guthrie
579091c41cdbfbd0ffc4908d3231de88d48c345f52eWade GuthrieTEST_F(MetricsTest, TimeToScanNoStart) {
580091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie  EXPECT_CALL(library_,
581091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie      SendToUMA("Network.Shill.Cellular.TimeToScan", _, _, _, _)).Times(0);
582091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie  const int kInterfaceIndex = 1;
583091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
584091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie  metrics_.NotifyDeviceScanFinished(kInterfaceIndex);
585091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie}
586091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie
58718c1107512ccd6ff8460246f690fbffbdc381979Thieu LeTEST_F(MetricsTest, TimeToScanIgnore) {
58818c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  // Make sure TimeToScan is not sent if the elapsed time exceeds the max
58918c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  // value.  This simulates the case where the device is in an area with no
59018c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  // service.
59118c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  const int kInterfaceIndex = 1;
59218c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
59318c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  base::TimeDelta large_time_delta =
59418c1107512ccd6ff8460246f690fbffbdc381979Thieu Le      base::TimeDelta::FromMilliseconds(
59518c1107512ccd6ff8460246f690fbffbdc381979Thieu Le          Metrics::kMetricTimeToScanMillisecondsMax + 1);
5963b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerReporterMock* mock_time_to_scan_timer =
59718c1107512ccd6ff8460246f690fbffbdc381979Thieu Le      new chromeos_metrics::TimerReporterMock;
59818c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  metrics_.set_time_to_scan_timer(kInterfaceIndex, mock_time_to_scan_timer);
599091c41cdbfbd0ffc4908d3231de88d48c345f52eWade Guthrie  EXPECT_CALL(*mock_time_to_scan_timer, Stop()).WillOnce(Return(true));
60018c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  EXPECT_CALL(*mock_time_to_scan_timer, GetElapsedTime(_)).
60118c1107512ccd6ff8460246f690fbffbdc381979Thieu Le      WillOnce(DoAll(SetArgumentPointee<0>(large_time_delta), Return(true)));
60218c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  EXPECT_CALL(library_, SendToUMA(_, _, _, _, _)).Times(0);
60318c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  metrics_.NotifyDeviceScanStarted(kInterfaceIndex);
60418c1107512ccd6ff8460246f690fbffbdc381979Thieu Le  metrics_.NotifyDeviceScanFinished(kInterfaceIndex);
60518c1107512ccd6ff8460246f690fbffbdc381979Thieu Le}
60618c1107512ccd6ff8460246f690fbffbdc381979Thieu Le
60708757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh PrabhuTEST_F(MetricsTest, Cellular3GPPRegistrationDelayedDropPosted) {
60808757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu  EXPECT_CALL(library_,
60908757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu      SendEnumToUMA(Metrics::kMetricCellular3GPPRegistrationDelayedDrop,
61008757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu                    Metrics::kCellular3GPPRegistrationDelayedDropPosted,
61108757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu                    Metrics::kCellular3GPPRegistrationDelayedDropMax));
61208757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu  metrics_.Notify3GPPRegistrationDelayedDropPosted();
61308757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu  Mock::VerifyAndClearExpectations(&library_);
61408757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu
61508757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu  EXPECT_CALL(library_,
61608757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu      SendEnumToUMA(Metrics::kMetricCellular3GPPRegistrationDelayedDrop,
61708757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu                    Metrics::kCellular3GPPRegistrationDelayedDropCanceled,
61808757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu                    Metrics::kCellular3GPPRegistrationDelayedDropMax));
61908757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu  metrics_.Notify3GPPRegistrationDelayedDropCanceled();
62008757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu}
62108757aa8221a55004d3ab0a6405c8e0113554fa7Prathmesh Prabhu
6227cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu LeTEST_F(MetricsTest, CellularAutoConnect) {
6237cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  EXPECT_CALL(library_,
6247cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le      SendToUMA("Network.Shill.Cellular.TimeToConnect",
6257cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Ge(0),
6267cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricTimeToConnectMillisecondsMin,
6277cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricTimeToConnectMillisecondsMax,
6287cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricTimeToConnectMillisecondsNumBuckets));
6297cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  EXPECT_CALL(library_,
6307cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le      SendToUMA(Metrics::kMetricCellularAutoConnectTotalTime,
6317cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Ge(0),
6327cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricCellularAutoConnectTotalTimeMin,
6337cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricCellularAutoConnectTotalTimeMax,
6347cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricCellularAutoConnectTotalTimeNumBuckets));
6357cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  EXPECT_CALL(library_,
6367cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le      SendToUMA(Metrics::kMetricCellularAutoConnectTries,
6377cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                2,
6387cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricCellularAutoConnectTriesMin,
6397cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricCellularAutoConnectTriesMax,
6407cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le                Metrics::kMetricCellularAutoConnectTriesNumBuckets));
6417cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  const int kInterfaceIndex = 1;
6427cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
6437cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  metrics_.NotifyDeviceConnectStarted(kInterfaceIndex, true);
6447cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  metrics_.NotifyDeviceConnectStarted(kInterfaceIndex, true);
6457cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le  metrics_.NotifyDeviceConnectFinished(kInterfaceIndex);
6467cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le}
6477cf36b0cbc1e382fb714cf412d100c9f7ad86c09Thieu Le
64826fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu LeTEST_F(MetricsTest, CellularDrop) {
6493b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  const char* kUMATechnologyStrings[] = {
650923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnology1Xrtt,
651923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyEdge,
652923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyEvdo,
653923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyGprs,
654923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyGsm,
655923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyHspa,
656923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyHspaPlus,
657923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyLte,
658923a5025a5e1138b052cbeffa60ea387d479696fBen Chan      kNetworkTechnologyUmts,
65926fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le      "Unknown" };
66026fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le
6617fab89734d88724a288e96a9996b15548c5294c7Ben Chan  const uint16_t signal_strength = 100;
6626c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le  const int kInterfaceIndex = 1;
6636c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
66426fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le  for (size_t index = 0; index < arraysize(kUMATechnologyStrings); ++index) {
66526fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le    EXPECT_CALL(library_,
66626fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le        SendEnumToUMA(Metrics::kMetricCellularDrop,
66726fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le                      index,
66826fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le                      Metrics::kCellularDropTechnologyMax));
66926fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le    EXPECT_CALL(library_,
67026fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le        SendToUMA(Metrics::kMetricCellularSignalStrengthBeforeDrop,
67126fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le                  signal_strength,
67226fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le                  Metrics::kMetricCellularSignalStrengthBeforeDropMin,
67326fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le                  Metrics::kMetricCellularSignalStrengthBeforeDropMax,
67426fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le                  Metrics::kMetricCellularSignalStrengthBeforeDropNumBuckets));
67509e0811c0d54facab2874cfac8b3563005220c2bmukesh agrawal    metrics_.NotifyCellularDeviceDrop(kUMATechnologyStrings[index],
67626fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le                                      signal_strength);
67726fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le    Mock::VerifyAndClearExpectations(&library_);
67826fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le  }
67926fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le}
68026fc01b466ef193b91f4d38d13ccf32b1aa60756Thieu Le
681b7aa5f705211f5a0e5ee8f2389f4592cace3011eThieu LeTEST_F(MetricsTest, CellularDeviceFailure) {
68290259aacb47485f30a6f26796300fc069905772fBertrand SIMONNET  EXPECT_CALL(library_, SendEnumToUMA(Metrics::kMetricCellularFailure,
68390259aacb47485f30a6f26796300fc069905772fBertrand SIMONNET                                      Metrics::kMetricCellularConnectionFailure,
68490259aacb47485f30a6f26796300fc069905772fBertrand SIMONNET                                      Metrics::kMetricCellularMaxFailure));
68590259aacb47485f30a6f26796300fc069905772fBertrand SIMONNET  metrics_.NotifyCellularDeviceConnectionFailure();
686b7aa5f705211f5a0e5ee8f2389f4592cace3011eThieu Le}
687b7aa5f705211f5a0e5ee8f2389f4592cace3011eThieu Le
68891fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu LeTEST_F(MetricsTest, CellularOutOfCreditsReason) {
68991fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  EXPECT_CALL(library_,
69091fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le      SendEnumToUMA(Metrics::kMetricCellularOutOfCreditsReason,
69191fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le                    Metrics::kCellularOutOfCreditsReasonConnectDisconnectLoop,
69291fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le                    Metrics::kCellularOutOfCreditsReasonMax));
69391fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  metrics_.NotifyCellularOutOfCredits(
69491fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le      Metrics::kCellularOutOfCreditsReasonConnectDisconnectLoop);
69591fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  Mock::VerifyAndClearExpectations(&library_);
69691fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le
69791fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  EXPECT_CALL(library_,
69891fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le      SendEnumToUMA(Metrics::kMetricCellularOutOfCreditsReason,
69991fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le                    Metrics::kCellularOutOfCreditsReasonTxCongested,
70091fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le                    Metrics::kCellularOutOfCreditsReasonMax));
70191fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  metrics_.NotifyCellularOutOfCredits(
70291fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le      Metrics::kCellularOutOfCreditsReasonTxCongested);
70391fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  Mock::VerifyAndClearExpectations(&library_);
70491fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le
70591fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  EXPECT_CALL(library_,
70691fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le      SendEnumToUMA(Metrics::kMetricCellularOutOfCreditsReason,
70791fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le                    Metrics::kCellularOutOfCreditsReasonElongatedTimeWait,
70891fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le                    Metrics::kCellularOutOfCreditsReasonMax));
70991fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le  metrics_.NotifyCellularOutOfCredits(
71091fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le      Metrics::kCellularOutOfCreditsReasonElongatedTimeWait);
71191fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le}
71291fccf6ff2ee20d77905ce71a7e9815b2e2c02d7Thieu Le
7135133b71eaa00535739ebbddd8a8f31cd8fcf33a8Thieu LeTEST_F(MetricsTest, CorruptedProfile) {
7145133b71eaa00535739ebbddd8a8f31cd8fcf33a8Thieu Le  EXPECT_CALL(library_, SendEnumToUMA(Metrics::kMetricCorruptedProfile,
7155133b71eaa00535739ebbddd8a8f31cd8fcf33a8Thieu Le                                      Metrics::kCorruptedProfile,
7165133b71eaa00535739ebbddd8a8f31cd8fcf33a8Thieu Le                                      Metrics::kCorruptedProfileMax));
7175133b71eaa00535739ebbddd8a8f31cd8fcf33a8Thieu Le  metrics_.NotifyCorruptedProfile();
7185133b71eaa00535739ebbddd8a8f31cd8fcf33a8Thieu Le}
7195133b71eaa00535739ebbddd8a8f31cd8fcf33a8Thieu Le
72094cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawalTEST_F(MetricsTest, Logging) {
72194cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  NiceScopedMockLog log;
72294cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const int kVerboseLevel5 = -5;
72394cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  ScopeLogger::GetInstance()->EnableScopesByName("+metrics");
72494cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  ScopeLogger::GetInstance()->set_verbose_level(-kVerboseLevel5);
72594cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal
72694cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const string kEnumName("fake-enum");
72794cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const int kEnumValue = 1;
72894cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const int kEnumMax = 12;
72994cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  EXPECT_CALL(log, Log(kVerboseLevel5, _,
730c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein                       "(metrics) Sending enum fake-enum with value 1."));
73194cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  EXPECT_CALL(library_, SendEnumToUMA(kEnumName, kEnumValue, kEnumMax));
73294cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  metrics_.SendEnumToUMA(kEnumName, kEnumValue, kEnumMax);
73394cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal
73494cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const string kMetricName("fake-metric");
73594cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const int kMetricValue = 2;
73694cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const int kHistogramMin = 0;
73794cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const int kHistogramMax = 100;
73894cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  const int kHistogramBuckets = 10;
73994cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  EXPECT_CALL(log, Log(kVerboseLevel5, _,
740c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein                       "(metrics) Sending metric fake-metric with value 2."));
74194cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  EXPECT_CALL(library_, SendToUMA(kMetricName, kMetricValue, kHistogramMin,
74294cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal                                  kHistogramMax, kHistogramBuckets));
74394cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  metrics_.SendToUMA(kMetricName, kMetricValue,
74494cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal                     kHistogramMin, kHistogramMax, kHistogramBuckets);
74594cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal
74694cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  ScopeLogger::GetInstance()->EnableScopesByName("-metrics");
74794cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal  ScopeLogger::GetInstance()->set_verbose_level(0);
74894cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal}
74994cde5868317c2f874f97cf9a31ad147c8058109mukesh agrawal
75039d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter QiuTEST_F(MetricsTest, NotifyServicesOnSameNetwork) {
75139d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu  EXPECT_CALL(library_,
75239d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu      SendToUMA(Metrics::kMetricServicesOnSameNetwork,
75339d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu                1,
75439d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu                Metrics::kMetricServicesOnSameNetworkMin,
75539d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu                Metrics::kMetricServicesOnSameNetworkMax,
75639d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu                Metrics::kMetricServicesOnSameNetworkNumBuckets));
75739d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu  metrics_.NotifyServicesOnSameNetwork(1);
75839d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu}
75939d4af0d78ed7c91bc52c5882877989f8d4fed5dPeter Qiu
760e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter QiuTEST_F(MetricsTest, NotifyUserInitiatedEvent) {
761e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter Qiu  EXPECT_CALL(library_,
762e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter Qiu      SendEnumToUMA(Metrics::kMetricUserInitiatedEvents,
763e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter Qiu                    Metrics::kUserInitiatedEventWifiScan,
764e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter Qiu                    Metrics::kUserInitiatedEventMax));
765e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter Qiu  metrics_.NotifyUserInitiatedEvent(Metrics::kUserInitiatedEventWifiScan);
766e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter Qiu}
767e783f1c2004e35db6eff036e5d7b3a5b99b724ffPeter Qiu
7688e43058d862502b49c769742f6d5e61e28286254Peter QiuTEST_F(MetricsTest, NotifyWifiTxBitrate) {
7698e43058d862502b49c769742f6d5e61e28286254Peter Qiu  EXPECT_CALL(library_,
7708e43058d862502b49c769742f6d5e61e28286254Peter Qiu      SendToUMA(Metrics::kMetricWifiTxBitrate,
7718e43058d862502b49c769742f6d5e61e28286254Peter Qiu                1,
7728e43058d862502b49c769742f6d5e61e28286254Peter Qiu                Metrics::kMetricWifiTxBitrateMin,
7738e43058d862502b49c769742f6d5e61e28286254Peter Qiu                Metrics::kMetricWifiTxBitrateMax,
7748e43058d862502b49c769742f6d5e61e28286254Peter Qiu                Metrics::kMetricWifiTxBitrateNumBuckets));
7758e43058d862502b49c769742f6d5e61e28286254Peter Qiu  metrics_.NotifyWifiTxBitrate(1);
7768e43058d862502b49c769742f6d5e61e28286254Peter Qiu}
7778e43058d862502b49c769742f6d5e61e28286254Peter Qiu
778dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter QiuTEST_F(MetricsTest, NotifyUserInitiatedConnectionResult) {
779dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu  EXPECT_CALL(library_,
780dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu      SendEnumToUMA(Metrics::kMetricWifiUserInitiatedConnectionResult,
781dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu                    Metrics::kUserInitiatedConnectionResultSuccess,
782dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu                    Metrics::kUserInitiatedConnectionResultMax));
783dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu  metrics_.NotifyUserInitiatedConnectionResult(
784dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu      Metrics::kMetricWifiUserInitiatedConnectionResult,
785dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu      Metrics::kUserInitiatedConnectionResultSuccess);
786dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu}
787dc4e099103a56f0427ed0969fea2c46c88ab2e9ePeter Qiu
788b9256f3d485e4c6c5c301a0aa00554059473b41dPeter QiuTEST_F(MetricsTest, NotifyFallbackDNSTestResult) {
789b9256f3d485e4c6c5c301a0aa00554059473b41dPeter Qiu  EXPECT_CALL(library_,
790f18e7717c642dcfd6b4dbe1f01f50e2d9671f5cePeter Qiu      SendEnumToUMA("Network.Shill.Wifi.FallbackDNSTestResult",
791f18e7717c642dcfd6b4dbe1f01f50e2d9671f5cePeter Qiu                    Metrics::kFallbackDNSTestResultSuccess,
792f18e7717c642dcfd6b4dbe1f01f50e2d9671f5cePeter Qiu                    Metrics::kFallbackDNSTestResultMax));
793f18e7717c642dcfd6b4dbe1f01f50e2d9671f5cePeter Qiu  metrics_.NotifyFallbackDNSTestResult(Technology::kWifi,
794f18e7717c642dcfd6b4dbe1f01f50e2d9671f5cePeter Qiu                                       Metrics::kFallbackDNSTestResultSuccess);
795b9256f3d485e4c6c5c301a0aa00554059473b41dPeter Qiu}
796b9256f3d485e4c6c5c301a0aa00554059473b41dPeter Qiu
797dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter QiuTEST_F(MetricsTest, NotifyNetworkProblemDetected) {
798dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu  EXPECT_CALL(library_,
799dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu      SendEnumToUMA("Network.Shill.Wifi.NetworkProblemDetected",
800dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu                    Metrics::kNetworkProblemDNSFailure,
801dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu                    Metrics::kNetworkProblemMax));
802dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu  metrics_.NotifyNetworkProblemDetected(Technology::kWifi,
803dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu                                        Metrics::kNetworkProblemDNSFailure);
804dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu}
805dc335f81a9d0ffe8efd02a96d3cd17399a06e61ePeter Qiu
8063bdf1abfba480415a4714108e615649f422197e0Paul StewartTEST_F(MetricsTest, NotifyDhcpClientStatus) {
8073bdf1abfba480415a4714108e615649f422197e0Paul Stewart  EXPECT_CALL(library_,
808a72a79ca06e42b537a7785a00303c5af11d3f768Paul Stewart      SendEnumToUMA("Network.Shill.DHCPClientStatus",
8093bdf1abfba480415a4714108e615649f422197e0Paul Stewart                    Metrics::kDhcpClientStatusReboot,
8103bdf1abfba480415a4714108e615649f422197e0Paul Stewart                    Metrics::kDhcpClientStatusMax));
8113bdf1abfba480415a4714108e615649f422197e0Paul Stewart  metrics_.NotifyDhcpClientStatus(Metrics::kDhcpClientStatusReboot);
8123bdf1abfba480415a4714108e615649f422197e0Paul Stewart}
8133bdf1abfba480415a4714108e615649f422197e0Paul Stewart
8149f5159e07028a01e1353d68bc19da9817a6785fePeter QiuTEST_F(MetricsTest, DeregisterDevice) {
8159f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu  const int kInterfaceIndex = 1;
8169f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu  metrics_.RegisterDevice(kInterfaceIndex, Technology::kCellular);
8179f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu
8189f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu  EXPECT_CALL(library_,
8199f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu      SendEnumToUMA("Network.Shill.DeviceRemovedEvent",
8209f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu                    Metrics::kDeviceTechnologyTypeCellular,
8219f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu                    Metrics::kDeviceTechnologyTypeMax));
8229f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu  metrics_.DeregisterDevice(kInterfaceIndex);
8239f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu}
8249f5159e07028a01e1353d68bc19da9817a6785fePeter Qiu
8251964b5de186ef06fa89a78b27c3a112686bc36f7Samuel TanTEST_F(MetricsTest, NotifyWakeOnWiFiFeaturesEnabledState) {
8261964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  const Metrics::WakeOnWiFiFeaturesEnabledState state =
8271964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan      Metrics::kWakeOnWiFiFeaturesEnabledStateNone;
8281964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  EXPECT_CALL(
8291964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan      library_,
8301964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan      SendEnumToUMA("Network.Shill.WiFi.WakeOnWiFiFeaturesEnabledState", state,
8311964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan                    Metrics::kWakeOnWiFiFeaturesEnabledStateMax));
8321964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  metrics_.NotifyWakeOnWiFiFeaturesEnabledState(state);
8331964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan}
8341964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan
8351964b5de186ef06fa89a78b27c3a112686bc36f7Samuel TanTEST_F(MetricsTest, NotifyVerifyWakeOnWiFiSettingsResult) {
8361964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  const Metrics::VerifyWakeOnWiFiSettingsResult result =
8371964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan      Metrics::kVerifyWakeOnWiFiSettingsResultSuccess;
8381964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  EXPECT_CALL(
8391964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan      library_,
8401964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan      SendEnumToUMA("Network.Shill.WiFi.VerifyWakeOnWiFiSettingsResult", result,
8411964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan                    Metrics::kVerifyWakeOnWiFiSettingsResultMax));
8421964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  metrics_.NotifyVerifyWakeOnWiFiSettingsResult(result);
8431964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan}
8441964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan
8451964b5de186ef06fa89a78b27c3a112686bc36f7Samuel TanTEST_F(MetricsTest, NotifyConnectedToServiceAfterWake) {
8461964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  const Metrics::WiFiConnectionStatusAfterWake status =
8471964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan      Metrics::kWiFiConnetionStatusAfterWakeOnWiFiEnabledWakeConnected;
8481964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  EXPECT_CALL(library_,
8491964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan              SendEnumToUMA("Network.Shill.WiFi.WiFiConnectionStatusAfterWake",
8501964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan                            status, Metrics::kWiFiConnetionStatusAfterWakeMax));
8511964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan  metrics_.NotifyConnectedToServiceAfterWake(status);
8521964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan}
8531964b5de186ef06fa89a78b27c3a112686bc36f7Samuel Tan
854c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel TanTEST_F(MetricsTest, NotifyWakeOnWiFiThrottled) {
855c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  EXPECT_FALSE(metrics_.wake_on_wifi_throttled_);
856c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  metrics_.NotifyWakeOnWiFiThrottled();
857c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  EXPECT_TRUE(metrics_.wake_on_wifi_throttled_);
858c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan}
859c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan
860c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel TanTEST_F(MetricsTest, NotifySuspendWithWakeOnWiFiEnabledDone) {
861c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  const Metrics::WakeOnWiFiThrottled result_true =
862c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan      Metrics::kWakeOnWiFiThrottledTrue;
863c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  metrics_.wake_on_wifi_throttled_ = true;
864c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  EXPECT_CALL(library_,
865c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan              SendEnumToUMA("Network.Shill.WiFi.WakeOnWiFiThrottled",
866c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan                            result_true, Metrics::kWakeOnWiFiThrottledMax));
867c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  metrics_.NotifySuspendWithWakeOnWiFiEnabledDone();
868c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan
869c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  const Metrics::WakeOnWiFiThrottled result_false =
870c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan      Metrics::kWakeOnWiFiThrottledFalse;
871c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  metrics_.wake_on_wifi_throttled_ = false;
872c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  EXPECT_CALL(library_,
873c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan              SendEnumToUMA("Network.Shill.WiFi.WakeOnWiFiThrottled",
874c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan                            result_false, Metrics::kWakeOnWiFiThrottledMax));
875c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan  metrics_.NotifySuspendWithWakeOnWiFiEnabledDone();
876c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan}
877c36b410afd8d68a5ced58b3a937aa4efdde2aa7dSamuel Tan
878a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifySuspendActionsCompleted_Success) {
879a49334304182db378741214a1a82e47351c3fddbSamuel Tan  base::TimeDelta non_zero_time_delta = base::TimeDelta::FromMilliseconds(1);
8803b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerMock* mock_time_suspend_actions_timer =
881a49334304182db378741214a1a82e47351c3fddbSamuel Tan      new chromeos_metrics::TimerMock;
882a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.set_time_suspend_actions_timer(mock_time_suspend_actions_timer);
883a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.wake_reason_received_ = true;
884a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_suspend_actions_timer, GetElapsedTime(_))
885a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(
886a49334304182db378741214a1a82e47351c3fddbSamuel Tan          DoAll(SetArgumentPointee<0>(non_zero_time_delta), Return(true)));
887a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_suspend_actions_timer, HasStarted())
888a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(Return(true));
889a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(library_,
890a49334304182db378741214a1a82e47351c3fddbSamuel Tan              SendToUMA(Metrics::kMetricSuspendActionTimeTaken,
891a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        non_zero_time_delta.InMilliseconds(),
892a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        Metrics::kMetricSuspendActionTimeTakenMillisecondsMin,
893a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        Metrics::kMetricSuspendActionTimeTakenMillisecondsMax,
894a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        Metrics::kTimerHistogramNumBuckets));
895a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(library_, SendEnumToUMA(Metrics::kMetricSuspendActionResult,
896a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kSuspendActionResultSuccess,
897a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kSuspendActionResultMax));
898a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifySuspendActionsCompleted(true);
899a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_FALSE(metrics_.wake_reason_received_);
900a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
901a49334304182db378741214a1a82e47351c3fddbSamuel Tan
902a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifySuspendActionsCompleted_Failure) {
903a49334304182db378741214a1a82e47351c3fddbSamuel Tan  base::TimeDelta non_zero_time_delta = base::TimeDelta::FromMilliseconds(1);
9043b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerMock* mock_time_suspend_actions_timer =
905a49334304182db378741214a1a82e47351c3fddbSamuel Tan      new chromeos_metrics::TimerMock;
906a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.set_time_suspend_actions_timer(mock_time_suspend_actions_timer);
907a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.wake_reason_received_ = true;
908a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_suspend_actions_timer, GetElapsedTime(_))
909a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(
910a49334304182db378741214a1a82e47351c3fddbSamuel Tan          DoAll(SetArgumentPointee<0>(non_zero_time_delta), Return(true)));
911a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_suspend_actions_timer, HasStarted())
912a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(Return(true));
913a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(library_,
914a49334304182db378741214a1a82e47351c3fddbSamuel Tan              SendToUMA(Metrics::kMetricSuspendActionTimeTaken,
915a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        non_zero_time_delta.InMilliseconds(),
916a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        Metrics::kMetricSuspendActionTimeTakenMillisecondsMin,
917a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        Metrics::kMetricSuspendActionTimeTakenMillisecondsMax,
918a49334304182db378741214a1a82e47351c3fddbSamuel Tan                        Metrics::kTimerHistogramNumBuckets));
919a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(library_, SendEnumToUMA(Metrics::kMetricSuspendActionResult,
920a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kSuspendActionResultFailure,
921a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kSuspendActionResultMax));
922a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifySuspendActionsCompleted(false);
923a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_FALSE(metrics_.wake_reason_received_);
924a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
925a49334304182db378741214a1a82e47351c3fddbSamuel Tan
926a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifyDarkResumeActionsCompleted_Success) {
927a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.num_scan_results_expected_in_dark_resume_ = 0;
928a49334304182db378741214a1a82e47351c3fddbSamuel Tan  base::TimeDelta non_zero_time_delta = base::TimeDelta::FromMilliseconds(1);
9293b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerMock* mock_time_dark_resume_actions_timer =
930a49334304182db378741214a1a82e47351c3fddbSamuel Tan      new chromeos_metrics::TimerMock;
931a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.set_time_dark_resume_actions_timer(
932a49334304182db378741214a1a82e47351c3fddbSamuel Tan      mock_time_dark_resume_actions_timer);
933a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.wake_reason_received_ = true;
934029feaca0309984367c2f824957ee250ada45a78Samuel Tan  const int non_zero_num_retries = 3;
935029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.dark_resume_scan_retries_ = non_zero_num_retries;
936a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_dark_resume_actions_timer, GetElapsedTime(_))
937a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(
938a49334304182db378741214a1a82e47351c3fddbSamuel Tan          DoAll(SetArgumentPointee<0>(non_zero_time_delta), Return(true)));
939a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_dark_resume_actions_timer, HasStarted())
940a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(Return(true));
941a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(
942a49334304182db378741214a1a82e47351c3fddbSamuel Tan      library_,
943a49334304182db378741214a1a82e47351c3fddbSamuel Tan      SendToUMA(Metrics::kMetricDarkResumeActionTimeTaken,
944a49334304182db378741214a1a82e47351c3fddbSamuel Tan                non_zero_time_delta.InMilliseconds(),
945a49334304182db378741214a1a82e47351c3fddbSamuel Tan                Metrics::kMetricDarkResumeActionTimeTakenMillisecondsMin,
946a49334304182db378741214a1a82e47351c3fddbSamuel Tan                Metrics::kMetricDarkResumeActionTimeTakenMillisecondsMax,
947a49334304182db378741214a1a82e47351c3fddbSamuel Tan                Metrics::kTimerHistogramNumBuckets));
948a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(library_, SendEnumToUMA(Metrics::kMetricDarkResumeActionResult,
949a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kDarkResumeActionResultSuccess,
950a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kDarkResumeActionResultMax));
951a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(
952a49334304182db378741214a1a82e47351c3fddbSamuel Tan      library_,
953a49334304182db378741214a1a82e47351c3fddbSamuel Tan      SendEnumToUMA(Metrics::kMetricDarkResumeUnmatchedScanResultReceived,
954a49334304182db378741214a1a82e47351c3fddbSamuel Tan                    Metrics::kDarkResumeUnmatchedScanResultsReceivedFalse,
955a49334304182db378741214a1a82e47351c3fddbSamuel Tan                    Metrics::kDarkResumeUnmatchedScanResultsReceivedMax));
956029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_CALL(library_, SendToUMA(Metrics::kMetricDarkResumeScanNumRetries,
957029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  non_zero_num_retries,
958029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  Metrics::kMetricDarkResumeScanNumRetriesMin,
959029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  Metrics::kMetricDarkResumeScanNumRetriesMax,
960029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  Metrics::kTimerHistogramNumBuckets));
961a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifyDarkResumeActionsCompleted(true);
962a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_FALSE(metrics_.wake_reason_received_);
963a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
964a49334304182db378741214a1a82e47351c3fddbSamuel Tan
965a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifyDarkResumeActionsCompleted_Failure) {
966a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.num_scan_results_expected_in_dark_resume_ = 0;
967a49334304182db378741214a1a82e47351c3fddbSamuel Tan  base::TimeDelta non_zero_time_delta = base::TimeDelta::FromMilliseconds(1);
9683b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart  chromeos_metrics::TimerMock* mock_time_dark_resume_actions_timer =
969a49334304182db378741214a1a82e47351c3fddbSamuel Tan      new chromeos_metrics::TimerMock;
970a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.set_time_dark_resume_actions_timer(
971a49334304182db378741214a1a82e47351c3fddbSamuel Tan      mock_time_dark_resume_actions_timer);
972a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.wake_reason_received_ = true;
973029feaca0309984367c2f824957ee250ada45a78Samuel Tan  const int non_zero_num_retries = 3;
974029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.dark_resume_scan_retries_ = non_zero_num_retries;
975a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_dark_resume_actions_timer, GetElapsedTime(_))
976a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(
977a49334304182db378741214a1a82e47351c3fddbSamuel Tan          DoAll(SetArgumentPointee<0>(non_zero_time_delta), Return(true)));
978a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(*mock_time_dark_resume_actions_timer, HasStarted())
979a49334304182db378741214a1a82e47351c3fddbSamuel Tan      .WillOnce(Return(true));
980a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(
981a49334304182db378741214a1a82e47351c3fddbSamuel Tan      library_,
982a49334304182db378741214a1a82e47351c3fddbSamuel Tan      SendToUMA(Metrics::kMetricDarkResumeActionTimeTaken,
983a49334304182db378741214a1a82e47351c3fddbSamuel Tan                non_zero_time_delta.InMilliseconds(),
984a49334304182db378741214a1a82e47351c3fddbSamuel Tan                Metrics::kMetricDarkResumeActionTimeTakenMillisecondsMin,
985a49334304182db378741214a1a82e47351c3fddbSamuel Tan                Metrics::kMetricDarkResumeActionTimeTakenMillisecondsMax,
986a49334304182db378741214a1a82e47351c3fddbSamuel Tan                Metrics::kTimerHistogramNumBuckets));
987a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(library_, SendEnumToUMA(Metrics::kMetricDarkResumeActionResult,
988a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kDarkResumeActionResultFailure,
989a49334304182db378741214a1a82e47351c3fddbSamuel Tan                                      Metrics::kDarkResumeActionResultMax));
990a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_CALL(
991a49334304182db378741214a1a82e47351c3fddbSamuel Tan      library_,
992a49334304182db378741214a1a82e47351c3fddbSamuel Tan      SendEnumToUMA(Metrics::kMetricDarkResumeUnmatchedScanResultReceived,
993a49334304182db378741214a1a82e47351c3fddbSamuel Tan                    Metrics::kDarkResumeUnmatchedScanResultsReceivedFalse,
994a49334304182db378741214a1a82e47351c3fddbSamuel Tan                    Metrics::kDarkResumeUnmatchedScanResultsReceivedMax));
995029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_CALL(library_, SendToUMA(Metrics::kMetricDarkResumeScanNumRetries,
996029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  non_zero_num_retries,
997029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  Metrics::kMetricDarkResumeScanNumRetriesMin,
998029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  Metrics::kMetricDarkResumeScanNumRetriesMax,
999029feaca0309984367c2f824957ee250ada45a78Samuel Tan                                  Metrics::kTimerHistogramNumBuckets));
1000a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifyDarkResumeActionsCompleted(false);
1001a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_FALSE(metrics_.wake_reason_received_);
1002a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
1003a49334304182db378741214a1a82e47351c3fddbSamuel Tan
1004a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifySuspendActionsStarted) {
1005a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.time_suspend_actions_timer->Stop();
1006a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.wake_on_wifi_throttled_ = true;
1007a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifySuspendActionsStarted();
1008a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_TRUE(metrics_.time_suspend_actions_timer->HasStarted());
1009a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_FALSE(metrics_.wake_on_wifi_throttled_);
1010a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
1011a49334304182db378741214a1a82e47351c3fddbSamuel Tan
1012a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifyDarkResumeActionsStarted) {
1013a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.time_dark_resume_actions_timer->Stop();
1014a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.num_scan_results_expected_in_dark_resume_ = 2;
1015029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.dark_resume_scan_retries_ = 3;
1016a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifyDarkResumeActionsStarted();
1017a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_TRUE(metrics_.time_dark_resume_actions_timer->HasStarted());
1018a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_EQ(0, metrics_.num_scan_results_expected_in_dark_resume_);
1019029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_EQ(0, metrics_.dark_resume_scan_retries_);
1020a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
1021a49334304182db378741214a1a82e47351c3fddbSamuel Tan
1022a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifyDarkResumeInitiateScan) {
1023a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.num_scan_results_expected_in_dark_resume_ = 0;
1024a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifyDarkResumeInitiateScan();
1025a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_EQ(1, metrics_.num_scan_results_expected_in_dark_resume_);
1026a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
1027a49334304182db378741214a1a82e47351c3fddbSamuel Tan
1028a49334304182db378741214a1a82e47351c3fddbSamuel TanTEST_F(MetricsTest, NotifyDarkResumeScanResultsReceived) {
1029a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.num_scan_results_expected_in_dark_resume_ = 1;
1030a49334304182db378741214a1a82e47351c3fddbSamuel Tan  metrics_.NotifyDarkResumeScanResultsReceived();
1031a49334304182db378741214a1a82e47351c3fddbSamuel Tan  EXPECT_EQ(0, metrics_.num_scan_results_expected_in_dark_resume_);
1032a49334304182db378741214a1a82e47351c3fddbSamuel Tan}
1033a49334304182db378741214a1a82e47351c3fddbSamuel Tan
1034029feaca0309984367c2f824957ee250ada45a78Samuel TanTEST_F(MetricsTest, NotifyDarkResumeScanRetry) {
1035029feaca0309984367c2f824957ee250ada45a78Samuel Tan  const int initial_num_retries = 2;
1036029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.dark_resume_scan_retries_ = initial_num_retries;
1037029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.NotifyDarkResumeScanRetry();
1038029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_EQ(initial_num_retries + 1, metrics_.dark_resume_scan_retries_);
1039029feaca0309984367c2f824957ee250ada45a78Samuel Tan}
1040029feaca0309984367c2f824957ee250ada45a78Samuel Tan
1041029feaca0309984367c2f824957ee250ada45a78Samuel TanTEST_F(MetricsTest, NotifyBeforeSuspendActions_InDarkResume) {
1042029feaca0309984367c2f824957ee250ada45a78Samuel Tan  const bool in_dark_resume = true;
1043029feaca0309984367c2f824957ee250ada45a78Samuel Tan  bool is_connected;
1044029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.dark_resume_scan_retries_ = 1;
1045029feaca0309984367c2f824957ee250ada45a78Samuel Tan
1046029feaca0309984367c2f824957ee250ada45a78Samuel Tan  is_connected = true;
1047029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_CALL(library_,
1048029feaca0309984367c2f824957ee250ada45a78Samuel Tan              SendEnumToUMA(Metrics::kMetricDarkResumeScanRetryResult,
1049029feaca0309984367c2f824957ee250ada45a78Samuel Tan                            Metrics::kDarkResumeScanRetryResultConnected,
1050029feaca0309984367c2f824957ee250ada45a78Samuel Tan                            Metrics::kDarkResumeScanRetryResultMax));
1051029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.NotifyBeforeSuspendActions(is_connected, in_dark_resume);
1052029feaca0309984367c2f824957ee250ada45a78Samuel Tan
1053029feaca0309984367c2f824957ee250ada45a78Samuel Tan  is_connected = false;
1054029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_CALL(library_,
1055029feaca0309984367c2f824957ee250ada45a78Samuel Tan              SendEnumToUMA(Metrics::kMetricDarkResumeScanRetryResult,
1056029feaca0309984367c2f824957ee250ada45a78Samuel Tan                            Metrics::kDarkResumeScanRetryResultNotConnected,
1057029feaca0309984367c2f824957ee250ada45a78Samuel Tan                            Metrics::kDarkResumeScanRetryResultMax));
1058029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.NotifyBeforeSuspendActions(is_connected, in_dark_resume);
1059029feaca0309984367c2f824957ee250ada45a78Samuel Tan}
1060029feaca0309984367c2f824957ee250ada45a78Samuel Tan
1061029feaca0309984367c2f824957ee250ada45a78Samuel TanTEST_F(MetricsTest, NotifyBeforeSuspendActions_NotInDarkResume) {
1062029feaca0309984367c2f824957ee250ada45a78Samuel Tan  const bool in_dark_resume = false;
1063029feaca0309984367c2f824957ee250ada45a78Samuel Tan  bool is_connected;
1064029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.dark_resume_scan_retries_ = 1;
1065029feaca0309984367c2f824957ee250ada45a78Samuel Tan
1066029feaca0309984367c2f824957ee250ada45a78Samuel Tan  is_connected = true;
1067029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_CALL(library_, SendEnumToUMA(_, _, _)).Times(0);
1068029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.NotifyBeforeSuspendActions(is_connected, in_dark_resume);
1069029feaca0309984367c2f824957ee250ada45a78Samuel Tan
1070029feaca0309984367c2f824957ee250ada45a78Samuel Tan  is_connected = false;
1071029feaca0309984367c2f824957ee250ada45a78Samuel Tan  EXPECT_CALL(library_, SendEnumToUMA(_, _, _)).Times(0);
1072029feaca0309984367c2f824957ee250ada45a78Samuel Tan  metrics_.NotifyBeforeSuspendActions(is_connected, in_dark_resume);
1073029feaca0309984367c2f824957ee250ada45a78Samuel Tan}
1074029feaca0309984367c2f824957ee250ada45a78Samuel Tan
1075d1c7166402c414a851da721c2a3aaec713c25badSamuel TanTEST_F(MetricsTest, NotifyConnectionDiagnosticsIssue_Success) {
1076d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan  const string& issue = ConnectionDiagnostics::kIssueIPCollision;
1077d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan  EXPECT_CALL(library_,
1078d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan              SendEnumToUMA(Metrics::kMetricConnectionDiagnosticsIssue,
1079d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan                            Metrics::kConnectionDiagnosticsIssueIPCollision,
1080d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan                            Metrics::kConnectionDiagnosticsIssueMax));
1081d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan  metrics_.NotifyConnectionDiagnosticsIssue(issue);
1082d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan}
1083d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan
1084d1c7166402c414a851da721c2a3aaec713c25badSamuel TanTEST_F(MetricsTest, NotifyConnectionDiagnosticsIssue_Failure) {
1085d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan  const string& invalid_issue = "Invalid issue string.";
1086d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan  EXPECT_CALL(library_, SendEnumToUMA(_, _, _)).Times(0);
1087d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan  metrics_.NotifyConnectionDiagnosticsIssue(invalid_issue);
1088d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan}
1089d1c7166402c414a851da721c2a3aaec713c25badSamuel Tan
109085e050b4923878a57aec1415314d2b39ff233e00Thieu Le#ifndef NDEBUG
109185e050b4923878a57aec1415314d2b39ff233e00Thieu Le
109285e050b4923878a57aec1415314d2b39ff233e00Thieu Letypedef MetricsTest MetricsDeathTest;
109385e050b4923878a57aec1415314d2b39ff233e00Thieu Le
109485e050b4923878a57aec1415314d2b39ff233e00Thieu LeTEST_F(MetricsDeathTest, PortalDetectionResultToEnumDNSSuccess) {
10953d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  PortalDetector::Result result(
10963d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein      ConnectivityTrial::Result(ConnectivityTrial::kPhaseDNS,
10973d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein                                ConnectivityTrial::kStatusSuccess),
10983d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein      0, true);
109985e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_DEATH(Metrics::PortalDetectionResultToEnum(result),
110085e050b4923878a57aec1415314d2b39ff233e00Thieu Le               "Final result status 1 is not allowed in the DNS phase");
110185e050b4923878a57aec1415314d2b39ff233e00Thieu Le}
110285e050b4923878a57aec1415314d2b39ff233e00Thieu Le
110385e050b4923878a57aec1415314d2b39ff233e00Thieu LeTEST_F(MetricsDeathTest, PortalDetectionResultToEnumConnectionSuccess) {
11043d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  PortalDetector::Result result(
11053d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein      ConnectivityTrial::Result(ConnectivityTrial::kPhaseConnection,
11063d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein                                ConnectivityTrial::kStatusSuccess),
11073d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein      0, true);
110885e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_DEATH(Metrics::PortalDetectionResultToEnum(result),
110985e050b4923878a57aec1415314d2b39ff233e00Thieu Le               "Final result status 1 is not allowed in the Connection phase");
111085e050b4923878a57aec1415314d2b39ff233e00Thieu Le}
111185e050b4923878a57aec1415314d2b39ff233e00Thieu Le
111285e050b4923878a57aec1415314d2b39ff233e00Thieu LeTEST_F(MetricsDeathTest, PortalDetectionResultToEnumHTTPSuccess) {
11133d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein  PortalDetector::Result result(
11143d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein      ConnectivityTrial::Result(ConnectivityTrial::kPhaseHTTP,
11153d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein                                ConnectivityTrial::kStatusSuccess),
11163d49ea435a59436f762c2cc5e750ff27ece0d3c5Rebecca Silberstein      0, true);
111785e050b4923878a57aec1415314d2b39ff233e00Thieu Le  EXPECT_DEATH(Metrics::PortalDetectionResultToEnum(result),
111885e050b4923878a57aec1415314d2b39ff233e00Thieu Le               "Final result status 1 is not allowed in the HTTP phase");
111985e050b4923878a57aec1415314d2b39ff233e00Thieu Le}
112085e050b4923878a57aec1415314d2b39ff233e00Thieu Le
112185e050b4923878a57aec1415314d2b39ff233e00Thieu Le#endif  // NDEBUG
112285e050b4923878a57aec1415314d2b39ff233e00Thieu Le
112348e6d6d0ec0f90d9b2206f60c1ff2a825c5ce9c1Thieu Le}  // namespace shill
1124