| Index: components/browser_watcher/postmortem_report_collector_unittest.cc
|
| diff --git a/components/browser_watcher/postmortem_report_collector_unittest.cc b/components/browser_watcher/postmortem_report_collector_unittest.cc
|
| index ae241e37a5d4ab882d00f94882933a0ab6779318..0e74e7e70a4554a6a9292388339dda60aa0696d7 100644
|
| --- a/components/browser_watcher/postmortem_report_collector_unittest.cc
|
| +++ b/components/browser_watcher/postmortem_report_collector_unittest.cc
|
| @@ -107,16 +107,20 @@ class MockCrashReportDatabase : public CrashReportDatabase {
|
| CrashReportDatabase::OperationStatus(const UUID& uuid));
|
| };
|
|
|
| -// Used for testing CollectAndSubmitForUpload.
|
| +// Used for testing CollectAndSubmitAllPendingReports.
|
| class MockPostmortemReportCollector : public PostmortemReportCollector {
|
| public:
|
| MockPostmortemReportCollector()
|
| - : PostmortemReportCollector(kProductName, kVersionNumber, kChannelName) {}
|
| + : PostmortemReportCollector(kProductName,
|
| + kVersionNumber,
|
| + kChannelName,
|
| + nullptr) {}
|
|
|
| // A function that returns a unique_ptr cannot be mocked, so mock a function
|
| // that returns a raw pointer instead.
|
| - CollectionStatus Collect(const base::FilePath& debug_state_file,
|
| - std::unique_ptr<StabilityReport>* report) override {
|
| + CollectionStatus CollectOneReport(
|
| + const base::FilePath& debug_state_file,
|
| + std::unique_ptr<StabilityReport>* report) override {
|
| DCHECK_NE(nullptr, report);
|
| report->reset(CollectRaw(debug_state_file));
|
| return SUCCESS;
|
| @@ -135,6 +139,12 @@ class MockPostmortemReportCollector : public PostmortemReportCollector {
|
| base::PlatformFile minidump_file));
|
| };
|
|
|
| +class MockSystemSessionAnalyzer : public SystemSessionAnalyzer {
|
| + public:
|
| + MockSystemSessionAnalyzer() : SystemSessionAnalyzer(10U) {}
|
| + MOCK_METHOD1(IsSessionUnclean, Status(base::Time timestamp));
|
| +};
|
| +
|
| // Checks if two proto messages are the same based on their serializations. Note
|
| // this only works if serialization is deterministic, which is not guaranteed.
|
| // In practice, serialization is deterministic (even for protocol buffers with
|
| @@ -156,7 +166,8 @@ MATCHER_P(EqualsProto, message, "") {
|
|
|
| } // namespace
|
|
|
| -class PostmortemReportCollectorCollectAndSubmitTest : public testing::Test {
|
| +class PostmortemReportCollectorCollectAndSubmitAllPendingReportsTest
|
| + : public testing::Test {
|
| public:
|
| void SetUp() override {
|
| testing::Test::SetUp();
|
| @@ -219,22 +230,22 @@ class PostmortemReportCollectorCollectAndSubmitTest : public testing::Test {
|
| CrashReportDatabase::NewReport crashpad_report_;
|
| };
|
|
|
| -TEST_F(PostmortemReportCollectorCollectAndSubmitTest,
|
| - CollectAndSubmitForUpload) {
|
| +TEST_F(PostmortemReportCollectorCollectAndSubmitAllPendingReportsTest,
|
| + CollectAndSubmitAllPendingReports) {
|
| EXPECT_CALL(database_, FinishedWritingCrashReport(&crashpad_report_, _))
|
| .Times(1)
|
| .WillOnce(Return(CrashReportDatabase::kNoError));
|
|
|
| // Run the test.
|
| - int success_cnt = collector_.CollectAndSubmitForUpload(
|
| + int success_cnt = collector_.CollectAndSubmitAllPendingReports(
|
| debug_file_.DirName(), debug_file_pattern_, no_excluded_files_,
|
| &database_);
|
| ASSERT_EQ(1, success_cnt);
|
| ASSERT_FALSE(base::PathExists(debug_file_));
|
| }
|
|
|
| -TEST_F(PostmortemReportCollectorCollectAndSubmitTest,
|
| - CollectAndSubmitForUploadStuckFile) {
|
| +TEST_F(PostmortemReportCollectorCollectAndSubmitAllPendingReportsTest,
|
| + CollectAndSubmitAllPendingReportsStuckFile) {
|
| // Open the stability debug file to prevent its deletion.
|
| base::ScopedFILE file(base::OpenFile(debug_file_, "w"));
|
| ASSERT_NE(file.get(), nullptr);
|
| @@ -245,7 +256,7 @@ TEST_F(PostmortemReportCollectorCollectAndSubmitTest,
|
| .WillOnce(Return(CrashReportDatabase::kNoError));
|
|
|
| // Run the test.
|
| - int success_cnt = collector_.CollectAndSubmitForUpload(
|
| + int success_cnt = collector_.CollectAndSubmitAllPendingReports(
|
| debug_file_.DirName(), debug_file_pattern_, no_excluded_files_,
|
| &database_);
|
| ASSERT_EQ(0, success_cnt);
|
| @@ -285,7 +296,7 @@ TEST(PostmortemReportCollectorTest, GetDebugStateFilePaths) {
|
| }
|
|
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| EXPECT_THAT(
|
| collector.GetDebugStateFilePaths(
|
| temp_dir.GetPath(), FILE_PATH_LITERAL("foo*.pma"), excluded_paths),
|
| @@ -305,10 +316,10 @@ TEST(PostmortemReportCollectorTest, CollectEmptyFile) {
|
|
|
| // Validate collection: an empty file cannot suppport an analyzer.
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| std::unique_ptr<StabilityReport> report;
|
| ASSERT_EQ(PostmortemReportCollector::ANALYZER_CREATION_FAILED,
|
| - collector.Collect(file_path, &report));
|
| + collector.CollectOneReport(file_path, &report));
|
| }
|
|
|
| TEST(PostmortemReportCollectorTest, CollectRandomFile) {
|
| @@ -332,10 +343,10 @@ TEST(PostmortemReportCollectorTest, CollectRandomFile) {
|
| // Validate collection: random content appears as though there is not
|
| // stability data.
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| std::unique_ptr<StabilityReport> report;
|
| ASSERT_EQ(PostmortemReportCollector::DEBUG_FILE_NO_DATA,
|
| - collector.Collect(file_path, &report));
|
| + collector.CollectOneReport(file_path, &report));
|
| }
|
|
|
| namespace {
|
| @@ -459,10 +470,10 @@ TEST_F(PostmortemReportCollectorCollectionTest, CollectSuccess) {
|
|
|
| // Validate collection returns the expected report.
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| std::unique_ptr<StabilityReport> report;
|
| ASSERT_EQ(PostmortemReportCollector::SUCCESS,
|
| - collector.Collect(debug_file_path(), &report));
|
| + collector.CollectOneReport(debug_file_path(), &report));
|
| ASSERT_NE(nullptr, report);
|
|
|
| // Validate the report.
|
| @@ -558,10 +569,10 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
|
|
|
| // Collect the stability report.
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| std::unique_ptr<StabilityReport> report;
|
| ASSERT_EQ(PostmortemReportCollector::SUCCESS,
|
| - collector.Collect(debug_file_path(), &report));
|
| + collector.CollectOneReport(debug_file_path(), &report));
|
| ASSERT_NE(nullptr, report);
|
|
|
| // Validate the report's log content.
|
| @@ -590,10 +601,10 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
|
|
|
| // Collect the stability report.
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| std::unique_ptr<StabilityReport> report;
|
| ASSERT_EQ(PostmortemReportCollector::SUCCESS,
|
| - collector.Collect(debug_file_path(), &report));
|
| + collector.CollectOneReport(debug_file_path(), &report));
|
| ASSERT_NE(nullptr, report);
|
|
|
| // Validate the report's user data.
|
| @@ -661,10 +672,10 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
|
|
|
| // Collect the stability report.
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| std::unique_ptr<StabilityReport> report;
|
| ASSERT_EQ(PostmortemReportCollector::SUCCESS,
|
| - collector.Collect(debug_file_path(), &report));
|
| + collector.CollectOneReport(debug_file_path(), &report));
|
| ASSERT_NE(nullptr, report);
|
|
|
| // Validate the report's experiment and global data.
|
| @@ -704,10 +715,10 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
|
|
|
| // Collect the stability report.
|
| PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| - kChannelName);
|
| + kChannelName, nullptr);
|
| std::unique_ptr<StabilityReport> report;
|
| ASSERT_EQ(PostmortemReportCollector::SUCCESS,
|
| - collector.Collect(debug_file_path(), &report));
|
| + collector.CollectOneReport(debug_file_path(), &report));
|
| ASSERT_NE(nullptr, report);
|
|
|
| // Validate the report's modules content.
|
| @@ -729,4 +740,29 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
|
| EXPECT_EQ(!module_info.is_loaded, collected_module.is_unloaded());
|
| }
|
|
|
| +TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
|
| + SystemStateTest) {
|
| + // Setup.
|
| + GlobalActivityTracker::CreateWithFile(debug_file_path(), kMemorySize, 0ULL,
|
| + "", 3);
|
| + ActivityUserData& global_data = GlobalActivityTracker::Get()->global_data();
|
| + global_data.SetInt(kStabilityStartTimestamp, 12345LL);
|
| +
|
| + // Collect.
|
| + MockSystemSessionAnalyzer analyzer;
|
| + EXPECT_CALL(analyzer,
|
| + IsSessionUnclean(base::Time::FromInternalValue(12345LL)))
|
| + .Times(1)
|
| + .WillOnce(Return(SystemSessionAnalyzer::CLEAN));
|
| + PostmortemReportCollector collector(kProductName, kVersionNumber,
|
| + kChannelName, &analyzer);
|
| + std::unique_ptr<StabilityReport> report;
|
| + ASSERT_EQ(PostmortemReportCollector::SUCCESS,
|
| + collector.CollectOneReport(debug_file_path(), &report));
|
| + ASSERT_NE(nullptr, report);
|
| +
|
| + // Validate the report.
|
| + ASSERT_EQ(SystemState::CLEAN, report->system_state().session_state());
|
| +}
|
| +
|
| } // namespace browser_watcher
|
|
|