Index: third_party/crashpad/crashpad/client/crash_report_database_test.cc |
diff --git a/third_party/crashpad/crashpad/client/crash_report_database_test.cc b/third_party/crashpad/crashpad/client/crash_report_database_test.cc |
index 90a95aa4cb72eb71d9ae0ea4a3f29b248e403476..200619d2fa618037fe1aa989bd081b2822a6b4ee 100644 |
--- a/third_party/crashpad/crashpad/client/crash_report_database_test.cc |
+++ b/third_party/crashpad/crashpad/client/crash_report_database_test.cc |
@@ -94,6 +94,7 @@ class CrashReportDatabaseTest : public testing::Test { |
EXPECT_FALSE(report.uploaded); |
EXPECT_EQ(0, report.last_upload_attempt_time); |
EXPECT_EQ(0, report.upload_attempts); |
+ EXPECT_FALSE(report.upload_explicitly_requested); |
} |
void RelocateDatabase() { |
@@ -102,6 +103,16 @@ class CrashReportDatabaseTest : public testing::Test { |
SetUp(); |
} |
+ CrashReportDatabase::OperationStatus RequestUpload(const UUID& uuid) { |
+ CrashReportDatabase::OperationStatus os = db()->RequestUpload(uuid); |
+ |
+ CrashReportDatabase::Report report; |
+ EXPECT_EQ(CrashReportDatabase::kNoError, |
+ db_->LookUpCrashReport(uuid, &report)); |
+ |
+ return os; |
+ } |
+ |
private: |
ScopedTempDir temp_dir_; |
std::unique_ptr<CrashReportDatabase> db_; |
@@ -220,6 +231,7 @@ TEST_F(CrashReportDatabaseTest, LookUpCrashReport) { |
EXPECT_FALSE(report.uploaded); |
EXPECT_EQ(0, report.last_upload_attempt_time); |
EXPECT_EQ(0, report.upload_attempts); |
+ EXPECT_FALSE(report.upload_explicitly_requested); |
} |
UploadReport(uuid, true, "test"); |
@@ -234,6 +246,7 @@ TEST_F(CrashReportDatabaseTest, LookUpCrashReport) { |
EXPECT_TRUE(report.uploaded); |
EXPECT_NE(0, report.last_upload_attempt_time); |
EXPECT_EQ(1, report.upload_attempts); |
+ EXPECT_FALSE(report.upload_explicitly_requested); |
} |
} |
@@ -585,6 +598,72 @@ TEST_F(CrashReportDatabaseTest, ReadEmptyDatabase) { |
CreateCrashReport(&report2); |
} |
+TEST_F(CrashReportDatabaseTest, RequestUpload) { |
+ std::vector<CrashReportDatabase::Report> reports(2); |
+ CreateCrashReport(&reports[0]); |
+ CreateCrashReport(&reports[1]); |
+ |
+ const UUID& report_0_uuid = reports[0].uuid; |
+ const UUID& report_1_uuid = reports[1].uuid; |
+ |
+ // Skipped report gets back to pending state after RequestUpload is called. |
+ EXPECT_EQ(CrashReportDatabase::kNoError, |
+ db()->SkipReportUpload(report_1_uuid)); |
+ |
+ std::vector<CrashReportDatabase::Report> pending_reports; |
+ CrashReportDatabase::OperationStatus os = |
+ db()->GetPendingReports(&pending_reports); |
+ EXPECT_EQ(CrashReportDatabase::kNoError, os); |
+ ASSERT_EQ(1u, pending_reports.size()); |
+ EXPECT_EQ(pending_reports[0].uuid, report_0_uuid); |
+ |
+ pending_reports.clear(); |
+ EXPECT_EQ(CrashReportDatabase::kNoError, RequestUpload(report_1_uuid)); |
+ os = db()->GetPendingReports(&pending_reports); |
+ EXPECT_EQ(CrashReportDatabase::kNoError, os); |
+ ASSERT_EQ(2u, pending_reports.size()); |
+ |
+ // Check individual reports. |
+ const CrashReportDatabase::Report* expicitly_requested_report; |
+ const CrashReportDatabase::Report* pending_report; |
+ if (pending_reports[0].uuid == report_0_uuid) { |
+ pending_report = &pending_reports[0]; |
+ expicitly_requested_report = &pending_reports[1]; |
+ } else { |
+ pending_report = &pending_reports[1]; |
+ expicitly_requested_report = &pending_reports[0]; |
+ } |
+ |
+ EXPECT_EQ(report_0_uuid, pending_report->uuid); |
+ EXPECT_FALSE(pending_report->upload_explicitly_requested); |
+ |
+ EXPECT_EQ(report_1_uuid, expicitly_requested_report->uuid); |
+ EXPECT_TRUE(expicitly_requested_report->upload_explicitly_requested); |
+ |
+ // Explicitly requested reports will not have upload_explicitly_requested bit |
+ // after getting skipped. |
+ EXPECT_EQ(CrashReportDatabase::kNoError, |
+ db()->SkipReportUpload(report_1_uuid)); |
+ CrashReportDatabase::Report report; |
+ EXPECT_EQ(CrashReportDatabase::kNoError, |
+ db()->LookUpCrashReport(report_1_uuid, &report)); |
+ EXPECT_FALSE(report.upload_explicitly_requested); |
+ |
+ // Pending report gets correctly affected after RequestUpload is called. |
+ pending_reports.clear(); |
+ EXPECT_EQ(CrashReportDatabase::kNoError, RequestUpload(report_0_uuid)); |
+ os = db()->GetPendingReports(&pending_reports); |
+ EXPECT_EQ(CrashReportDatabase::kNoError, os); |
+ EXPECT_EQ(1u, pending_reports.size()); |
+ EXPECT_EQ(pending_reports[0].uuid, report_0_uuid); |
+ EXPECT_TRUE(pending_reports[0].upload_explicitly_requested); |
+ |
+ // Already uploaded report cannot be requested for the new upload. |
+ UploadReport(report_0_uuid, true, "1"); |
+ EXPECT_EQ(CrashReportDatabase::kCannotRequestUpload, |
+ RequestUpload(report_0_uuid)); |
+} |
+ |
} // namespace |
} // namespace test |
} // namespace crashpad |