| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "minios/metrics_reporter.h" | |
| #include <memory> | |
| #include <utility> | |
| #include <gmock/gmock.h> | |
| #include <gtest/gtest.h> | |
| #include <base/files/file_path.h> | |
| #include <base/files/scoped_temp_dir.h> | |
| #include <metrics/metrics_library_mock.h> | |
| using ::testing::_; | |
| using ::testing::StrictMock; | |
| namespace minios { | |
| class MetricsReporterTest : public ::testing::Test { | |
| protected: | |
| std::unique_ptr<MetricsLibraryMock> metrics_library_mock_ = | |
| std::make_unique<StrictMock<MetricsLibraryMock>>(); | |
| MetricsLibraryMock* metrics_library_mock_ptr_ = metrics_library_mock_.get(); | |
| base::FilePath stateful_path_; | |
| std::unique_ptr<MetricsReporter> reporter_; | |
| }; | |
| TEST_F(MetricsReporterTest, ReportNBRComplete) { | |
| base::ScopedTempDir temp_dir; | |
| ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| reporter_ = std::make_unique<MetricsReporter>( | |
| std::move(metrics_library_mock_), temp_dir.GetPath()); | |
| EXPECT_CALL( | |
| *metrics_library_mock_ptr_, | |
| SetOutputFile(temp_dir.GetPath().value() + "/" + kEventsFile.value())); | |
| EXPECT_CALL(*metrics_library_mock_ptr_, | |
| SendEnumToUMA(kRecoveryReason, kRecoveryReasonCode_NBR, | |
| kRecoveryReasonCode_MAX)); | |
| EXPECT_CALL(*metrics_library_mock_ptr_, | |
| SendToUMA(kRecoveryDurationMinutes, _, /*min=*/0, | |
| kRecoveryDurationMinutes_MAX, | |
| kRecoveryDurationMinutes_Buckets)); | |
| reporter_->ReportNBRComplete(); | |
| } | |
| TEST_F(MetricsReporterTest, ReportNBRCompleteFailToMountStateful) { | |
| reporter_ = std::make_unique<MetricsReporter>( | |
| std::move(metrics_library_mock_), base::FilePath{"/unmounted_dir"}); | |
| reporter_->ReportNBRComplete(); | |
| } | |
| } // namespace minios |