metrics_reporter_omaha_unittest.cc revision 98333a8a1aa7c8197b350b113a9912baab4a051f
198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// 298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// Copyright (C) 2017 The Android Open Source Project 398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// 498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// Licensed under the Apache License, Version 2.0 (the "License"); 598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// you may not use this file except in compliance with the License. 698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// You may obtain a copy of the License at 798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// 898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// http://www.apache.org/licenses/LICENSE-2.0 998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// 1098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// Unless required by applicable law or agreed to in writing, software 1198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// distributed under the License is distributed on an "AS IS" BASIS, 1298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// See the License for the specific language governing permissions and 1498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// limitations under the License. 1598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu// 1698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 1798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include "update_engine/metrics_reporter_omaha.h" 1898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 1998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include <memory> 2098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include <string> 2198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 2298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include <base/time/time.h> 2398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include <gmock/gmock.h> 2498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include <gtest/gtest.h> 2598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include <metrics/metrics_library_mock.h> 2698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 2798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include "update_engine/common/fake_clock.h" 2898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include "update_engine/common/fake_prefs.h" 2998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu#include "update_engine/fake_system_state.h" 3098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 3198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xuusing base::TimeDelta; 3298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xuusing testing::AnyNumber; 3398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xuusing testing::_; 3498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 3598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xunamespace chromeos_update_engine { 3698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xuclass MetricsReporterOmahaTest : public ::testing::Test { 3798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu protected: 3898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu MetricsReporterOmahaTest() = default; 3998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 4098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // Reset the metrics_lib_ to a mock library. 4198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu void SetUp() override { 4298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu mock_metrics_lib_ = new testing::NiceMock<MetricsLibraryMock>(); 4398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.metrics_lib_.reset(mock_metrics_lib_); 4498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu } 4598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 4698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu testing::NiceMock<MetricsLibraryMock>* mock_metrics_lib_; 4798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu MetricsReporterOmaha reporter_; 4898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu}; 4998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 5098333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportDailyMetrics) { 5198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu TimeDelta age = TimeDelta::FromDays(10); 5298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 5398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricDailyOSAgeDays, _, _, _, _)) 5498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 5598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 5698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportDailyMetrics(age); 5798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 5898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 5998333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportUpdateCheckMetrics) { 6098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu FakeSystemState fake_system_state; 6198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu FakeClock fake_clock; 6298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu FakePrefs fake_prefs; 6398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 6498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // We need to execute the report twice to test the time since last report. 6598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_system_state.set_clock(&fake_clock); 6698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_system_state.set_prefs(&fake_prefs); 6798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetWallclockTime(base::Time::FromInternalValue(1000000)); 6898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetMonotonicTime(base::Time::FromInternalValue(1000000)); 6998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 7098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::CheckResult result = metrics::CheckResult::kUpdateAvailable; 7198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::CheckReaction reaction = metrics::CheckReaction::kIgnored; 7298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::DownloadErrorCode error_code = 7398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::DownloadErrorCode::kHttpStatus200; 7498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 7598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 7698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 7798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricCheckResult, static_cast<int>(result), _)) 7898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 7998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 8098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA( 8198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricCheckReaction, static_cast<int>(reaction), _)) 8298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 8398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 8498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendSparseToUMA(metrics::kMetricCheckDownloadErrorCode, 8598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>(error_code))) 8698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 8798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 8898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 8998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 9098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricCheckTimeSinceLastCheckMinutes, 1, _, _, _)) 9198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 9298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 9398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 9498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 9598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricCheckTimeSinceLastCheckUptimeMinutes, 1, _, _, _)) 9698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 9798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 9898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportUpdateCheckMetrics( 9998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu &fake_system_state, result, reaction, error_code); 10098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 10198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // Advance the clock by 1 minute and report the same metrics again. 10298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetWallclockTime(base::Time::FromInternalValue(61000000)); 10398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetMonotonicTime(base::Time::FromInternalValue(61000000)); 10498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportUpdateCheckMetrics( 10598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu &fake_system_state, result, reaction, error_code); 10698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 10798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 10898333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, 10998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu ReportAbnormallyTerminatedUpdateAttemptMetrics) { 11098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 11198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricAttemptResult, 11298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>( 11398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::AttemptResult::kAbnormalTermination), 11498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 11598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 11698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 11798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportAbnormallyTerminatedUpdateAttemptMetrics(); 11898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 11998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 12098333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportUpdateAttemptMetrics) { 12198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu FakeSystemState fake_system_state; 12298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu FakeClock fake_clock; 12398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu FakePrefs fake_prefs; 12498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 12598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_system_state.set_clock(&fake_clock); 12698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_system_state.set_prefs(&fake_prefs); 12798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetWallclockTime(base::Time::FromInternalValue(1000000)); 12898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetMonotonicTime(base::Time::FromInternalValue(1000000)); 12998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 13098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int attempt_number = 1; 13198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu PayloadType payload_type = kPayloadTypeFull; 13298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu TimeDelta duration = TimeDelta::FromMinutes(1000); 13398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu TimeDelta duration_uptime = TimeDelta::FromMinutes(1000); 13498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 13598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int64_t payload_size = 100 * kNumBytesInOneMiB; 13698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int64_t payload_bytes_downloaded = 200 * kNumBytesInOneMiB; 13798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int64_t payload_download_speed_bps = 100 * 1000; 13898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu DownloadSource download_source = kDownloadSourceHttpServer; 13998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::AttemptResult attempt_result = 14098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::AttemptResult::kInternalError; 14198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu ErrorCode internal_error_code = ErrorCode::kDownloadInvalidMetadataSignature; 14298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::DownloadErrorCode payload_download_error_code = 14398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::DownloadErrorCode::kDownloadError; 14498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::ConnectionType connection_type = metrics::ConnectionType::kCellular; 14598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 14698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 14798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricAttemptNumber, attempt_number, _, _, _)) 14898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 14998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 15098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricAttemptPayloadType, 15198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>(payload_type), 15298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 15398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 15498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 15598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricAttemptDurationMinutes, 15698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu duration.InMinutes(), 15798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 15898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 15998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 16098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 16198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 16298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricAttemptDurationUptimeMinutes, 16398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu duration_uptime.InMinutes(), 16498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 16598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 16698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 16798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 16898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 16998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // Check the report of payload download metrics. 17098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 17198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricAttemptPayloadSizeMiB, 100, _, _, _)) 17298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 17398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 17498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 17598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricAttemptPayloadBytesDownloadedMiB, 200, _, _, _)) 17698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 17798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 17898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 17998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricAttemptPayloadDownloadSpeedKBps, 100, _, _, _)) 18098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 18198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 18298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricAttemptDownloadSource, 18398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>(download_source), 18498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 18598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 18698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 18798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // Check the report of attempt result. 18898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 18998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 19098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA( 19198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricAttemptResult, static_cast<int>(attempt_result), _)) 19298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 19398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 19498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricAttemptInternalErrorCode, 19598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>(internal_error_code), 19698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 19798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 19898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 19998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendSparseToUMA(metrics::kMetricAttemptDownloadErrorCode, 20098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>(payload_download_error_code))) 20198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 20298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 20398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // Check the duration between two reports. 20498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 20598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 20698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricAttemptTimeSinceLastAttemptMinutes, 1, _, _, _)) 20798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 20898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 20998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 21098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 21198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricAttemptTimeSinceLastAttemptUptimeMinutes, 1, _, _, _)) 21298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 21398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 21498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 21598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricAttemptConnectionType, 21698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>(connection_type), 21798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 21898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(2); 21998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 22098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportUpdateAttemptMetrics(&fake_system_state, 22198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu attempt_number, 22298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_type, 22398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu duration, 22498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu duration_uptime, 22598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_size, 22698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_bytes_downloaded, 22798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_download_speed_bps, 22898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu download_source, 22998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu attempt_result, 23098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu internal_error_code, 23198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_download_error_code, 23298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu connection_type); 23398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 23498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // Advance the clock by 1 minute and report the same metrics again. 23598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetWallclockTime(base::Time::FromInternalValue(61000000)); 23698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu fake_clock.SetMonotonicTime(base::Time::FromInternalValue(61000000)); 23798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportUpdateAttemptMetrics(&fake_system_state, 23898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu attempt_number, 23998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_type, 24098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu duration, 24198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu duration_uptime, 24298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_size, 24398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_bytes_downloaded, 24498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_download_speed_bps, 24598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu download_source, 24698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu attempt_result, 24798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu internal_error_code, 24898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_download_error_code, 24998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu connection_type); 25098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 25198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 25298333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportSuccessfulUpdateMetrics) { 25398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int attempt_count = 3; 25498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int updates_abandoned_count = 2; 25598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu PayloadType payload_type = kPayloadTypeDelta; 25698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int64_t payload_size = 200 * kNumBytesInOneMiB; 25798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int64_t num_bytes_downloaded[kNumDownloadSources] = {}; 25898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // 200MiB payload downloaded from HttpsServer. 25998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu num_bytes_downloaded[0] = 200 * kNumBytesInOneMiB; 26098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int download_overhead_percentage = 20; 26198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu TimeDelta total_duration = TimeDelta::FromMinutes(30); 26298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int reboot_count = 2; 26398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int url_switch_count = 2; 26498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 26598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 26698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 26798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricSuccessfulUpdatePayloadSizeMiB, 200, _, _, _)) 26898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 26998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 27098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // Check the report to both BytesDownloadedMiBHttpsServer and 27198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu // BytesDownloadedMiB 27298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu std::string DownloadedMiBMetric = 27398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricSuccessfulUpdateBytesDownloadedMiB; 27498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu DownloadedMiBMetric += "HttpsServer"; 27598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, SendToUMA(DownloadedMiBMetric, 200, _, _, _)) 27698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 27798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 27898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 27998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 28098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricSuccessfulUpdateBytesDownloadedMiB, 200, _, _, _)) 28198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 28298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 28398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 28498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 28598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 28698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricSuccessfulUpdateDownloadSourcesUsed, 1, _, _, _)) 28798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 28898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 28998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 29098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricSuccessfulUpdateDownloadOverheadPercentage, 29198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 20, 29298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 29398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 29498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)); 29598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 29698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 29798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricSuccessfulUpdateUrlSwitchCount, 29898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu url_switch_count, 29998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 30098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 30198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 30298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 30398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 30498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 30598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 30698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricSuccessfulUpdateTotalDurationMinutes, 30, _, _, _)) 30798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 30898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 30998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 31098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 31198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricSuccessfulUpdateRebootCount, reboot_count, _, _, _)) 31298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 31398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 31498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA( 31598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricSuccessfulUpdatePayloadType, payload_type, _)) 31698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 31798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 31898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 31998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 32098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricSuccessfulUpdateAttemptCount, attempt_count, _, _, _)) 32198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 32298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 32398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricSuccessfulUpdateUpdatesAbandonedCount, 32498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu updates_abandoned_count, 32598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 32698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _, 32798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 32898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 32998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 33098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportSuccessfulUpdateMetrics(attempt_count, 33198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu updates_abandoned_count, 33298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_type, 33398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu payload_size, 33498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu num_bytes_downloaded, 33598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu download_overhead_percentage, 33698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu total_duration, 33798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reboot_count, 33898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu url_switch_count); 33998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 34098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 34198333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportRollbackMetrics) { 34298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::RollbackResult result = metrics::RollbackResult::kSuccess; 34398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 34498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA( 34598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricRollbackResult, static_cast<int>(result), _)) 34698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 34798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 34898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportRollbackMetrics(result); 34998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 35098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 35198333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportCertificateCheckMetrics) { 35298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu ServerToCheck server_to_check = ServerToCheck::kUpdate; 35398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu CertificateCheckResult result = CertificateCheckResult::kValid; 35498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL(*mock_metrics_lib_, 35598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricCertificateCheckUpdateCheck, 35698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu static_cast<int>(result), 35798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu _)) 35898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 35998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 36098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportCertificateCheckMetrics(server_to_check, result); 36198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 36298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 36398333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportFailedUpdateCount) { 36498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int target_attempt = 3; 36598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 36698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 36798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA(metrics::kMetricFailedUpdateCount, target_attempt, _, _, _)) 36898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 36998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 37098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportFailedUpdateCount(target_attempt); 37198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 37298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 37398333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportTimeToReboot) { 37498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int time_to_reboot_minutes = 1000; 37598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 37698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 37798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendToUMA( 37898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu metrics::kMetricTimeToRebootMinutes, time_to_reboot_minutes, _, _, _)) 37998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 38098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 38198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportTimeToReboot(time_to_reboot_minutes); 38298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 38398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 38498333a8a1aa7c8197b350b113a9912baab4a051fTianjie XuTEST_F(MetricsReporterOmahaTest, ReportInstallDateProvisioningSource) { 38598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int source = 2; 38698333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu int max = 5; 38798333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu EXPECT_CALL( 38898333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu *mock_metrics_lib_, 38998333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu SendEnumToUMA(metrics::kMetricInstallDateProvisioningSource, source, max)) 39098333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu .Times(1); 39198333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 39298333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu reporter_.ReportInstallDateProvisioningSource(source, max); 39398333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} 39498333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu 39598333a8a1aa7c8197b350b113a9912baab4a051fTianjie Xu} // namespace chromeos_update_engine 396