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

Unified Diff: components/browser_watcher/postmortem_report_collector_unittest.cc

Issue 2715903003: Bound the impact of system instability on chrome instability. (Closed)
Patch Set: Address Siggi's comments Created 3 years, 9 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..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

Powered by Google App Engine
This is Rietveld 408576698