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

Unified Diff: components/browser_watcher/postmortem_report_collector_unittest.cc

Issue 2715903003: Bound the impact of system instability on chrome instability. (Closed)
Patch Set: Merge fixups 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 b25dcc8b5f5219a3d5ed18dad7b65708cbf9a738..14fbf72528058525558bac239f2346aed571ecb5 100644
--- a/components/browser_watcher/postmortem_report_collector_unittest.cc
+++ b/components/browser_watcher/postmortem_report_collector_unittest.cc
@@ -108,18 +108,21 @@ 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) {}
MOCK_METHOD3(GetDebugStateFilePaths,
std::vector<base::FilePath>(
const base::FilePath& debug_info_dir,
const base::FilePath::StringType& debug_file_pattern,
const std::set<base::FilePath>&));
- MOCK_METHOD2(Collect,
+ MOCK_METHOD2(CollectOneReport,
CollectionStatus(const base::FilePath&,
StabilityReport* report));
MOCK_METHOD4(WriteReportToMinidump,
@@ -129,6 +132,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
@@ -150,7 +159,8 @@ MATCHER_P(EqualsProto, message, "") {
} // namespace
-class PostmortemReportCollectorCollectAndSubmitTest : public testing::Test {
+class PostmortemReportCollectorCollectAndSubmitAllPendingReportsTest
+ : public testing::Test {
public:
void SetUp() override {
testing::Test::SetUp();
@@ -175,7 +185,7 @@ class PostmortemReportCollectorCollectAndSubmitTest : public testing::Test {
EXPECT_CALL(database_, GetSettings()).Times(1).WillOnce(Return(nullptr));
// Expect a single collection call.
- EXPECT_CALL(collector_, Collect(debug_file_, _))
+ EXPECT_CALL(collector_, CollectOneReport(debug_file_, _))
.Times(1)
.WillOnce(Return(SUCCESS));
@@ -210,22 +220,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);
@@ -236,7 +246,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);
@@ -276,7 +286,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),
@@ -296,9 +306,10 @@ TEST(PostmortemReportCollectorTest, CollectEmptyFile) {
// Validate collection: an empty file cannot suppport an analyzer.
PostmortemReportCollector collector(kProductName, kVersionNumber,
- kChannelName);
+ kChannelName, nullptr);
StabilityReport report;
- ASSERT_EQ(ANALYZER_CREATION_FAILED, collector.Collect(file_path, &report));
+ ASSERT_EQ(ANALYZER_CREATION_FAILED,
+ collector.CollectOneReport(file_path, &report));
}
TEST(PostmortemReportCollectorTest, CollectRandomFile) {
@@ -322,9 +333,9 @@ TEST(PostmortemReportCollectorTest, CollectRandomFile) {
// Validate collection: random content appears as though there is not
// stability data.
PostmortemReportCollector collector(kProductName, kVersionNumber,
- kChannelName);
+ kChannelName, nullptr);
StabilityReport report;
- ASSERT_EQ(DEBUG_FILE_NO_DATA, collector.Collect(file_path, &report));
+ ASSERT_EQ(DEBUG_FILE_NO_DATA, collector.CollectOneReport(file_path, &report));
}
namespace {
@@ -448,9 +459,9 @@ TEST_F(PostmortemReportCollectorCollectionTest, CollectSuccess) {
// Validate collection returns the expected report.
PostmortemReportCollector collector(kProductName, kVersionNumber,
- kChannelName);
+ kChannelName, nullptr);
StabilityReport report;
- ASSERT_EQ(SUCCESS, collector.Collect(debug_file_path(), &report));
+ ASSERT_EQ(SUCCESS, collector.CollectOneReport(debug_file_path(), &report));
// Validate the report.
ASSERT_EQ(1, report.process_states_size());
@@ -545,9 +556,9 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
// Collect the stability report.
PostmortemReportCollector collector(kProductName, kVersionNumber,
- kChannelName);
+ kChannelName, nullptr);
StabilityReport report;
- ASSERT_EQ(SUCCESS, collector.Collect(debug_file_path(), &report));
+ ASSERT_EQ(SUCCESS, collector.CollectOneReport(debug_file_path(), &report));
// Validate the report's log content.
ASSERT_EQ(2, report.log_messages_size());
@@ -575,9 +586,9 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
// Collect the stability report.
PostmortemReportCollector collector(kProductName, kVersionNumber,
- kChannelName);
+ kChannelName, nullptr);
StabilityReport report;
- ASSERT_EQ(SUCCESS, collector.Collect(debug_file_path(), &report));
+ ASSERT_EQ(SUCCESS, collector.CollectOneReport(debug_file_path(), &report));
// Validate the report's user data.
const auto& collected_data = report.global_data();
@@ -644,9 +655,9 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
// Collect the stability report.
PostmortemReportCollector collector(kProductName, kVersionNumber,
- kChannelName);
+ kChannelName, nullptr);
StabilityReport report;
- ASSERT_EQ(SUCCESS, collector.Collect(debug_file_path(), &report));
+ ASSERT_EQ(SUCCESS, collector.CollectOneReport(debug_file_path(), &report));
// Validate the report's experiment and global data.
ASSERT_EQ(2, report.field_trials_size());
@@ -685,9 +696,9 @@ TEST_F(PostmortemReportCollectorCollectionFromGlobalTrackerTest,
// Collect the stability report.
PostmortemReportCollector collector(kProductName, kVersionNumber,
- kChannelName);
+ kChannelName, nullptr);
StabilityReport report;
- ASSERT_EQ(SUCCESS, collector.Collect(debug_file_path(), &report));
+ ASSERT_EQ(SUCCESS, collector.CollectOneReport(debug_file_path(), &report));
// Validate the report's modules content.
ASSERT_EQ(1, report.process_states_size());
@@ -708,4 +719,27 @@ 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);
+ StabilityReport report;
+ ASSERT_EQ(SUCCESS, collector.CollectOneReport(debug_file_path(), &report));
+
+ // Validate the report.
+ ASSERT_EQ(SystemState::CLEAN, report.system_state().session_state());
+}
+
} // namespace browser_watcher
« no previous file with comments | « components/browser_watcher/postmortem_report_collector.cc ('k') | components/browser_watcher/stability_data_names.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698