Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Unified Diff: components/browser_watcher/postmortem_report_collector_unittest.cc

Issue 2715903003: Bound the impact of system instability on chrome instability. (Closed)
Patch Set: record start timestamp, analysis metric, make log scrape lazy Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..b29272e5c9eda0091c82305dd867e67c4f266038 100644
--- a/components/browser_watcher/postmortem_report_collector_unittest.cc
+++ b/components/browser_watcher/postmortem_report_collector_unittest.cc
@@ -111,7 +111,10 @@ class MockCrashReportDatabase : public CrashReportDatabase {
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.
@@ -135,6 +138,12 @@ class MockPostmortemReportCollector : public PostmortemReportCollector {
base::PlatformFile minidump_file));
};
+class MockSystemSessionAnalyzer : public SystemSessionAnalyzer {
+ public:
+ MockSystemSessionAnalyzer() : SystemSessionAnalyzer(nullptr) {}
+ 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
@@ -285,7 +294,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,7 +314,7 @@ 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));
@@ -332,7 +341,7 @@ 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));
@@ -459,7 +468,7 @@ 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));
@@ -558,7 +567,7 @@ 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));
@@ -590,7 +599,7 @@ 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));
@@ -661,7 +670,7 @@ 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));
@@ -704,7 +713,7 @@ 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));
@@ -729,4 +738,30 @@ 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.
+ std::unique_ptr<MockSystemSessionAnalyzer> analyzer(
+ new MockSystemSessionAnalyzer());
+ EXPECT_CALL(*analyzer,
+ IsSessionUnclean(base::Time::FromInternalValue(12345LL)))
+ .Times(1)
+ .WillOnce(Return(SystemSessionAnalyzer::CLEAN));
+ PostmortemReportCollector collector(kProductName, kVersionNumber,
+ kChannelName, std::move(analyzer));
+ std::unique_ptr<StabilityReport> report;
+ ASSERT_EQ(PostmortemReportCollector::SUCCESS,
+ collector.Collect(debug_file_path(), &report));
+ ASSERT_NE(nullptr, report);
+
+ // Validate the report.
+ ASSERT_EQ(SystemState::CLEAN, report->system_state().session_state());
+}
+
} // namespace browser_watcher

Powered by Google App Engine
This is Rietveld 408576698