Index: client/crash_report_database_test.cc |
diff --git a/client/crash_report_database_test.cc b/client/crash_report_database_test.cc |
index db0b7d1eb7458c4dc97566dfc98a938bb848ea8f..f875f77a99c21dab58a2ed518cc2c2f010962be9 100644 |
--- a/client/crash_report_database_test.cc |
+++ b/client/crash_report_database_test.cc |
@@ -18,6 +18,7 @@ |
#include "gtest/gtest.h" |
#include "util/file/file_io.h" |
+#include "util/test/errors.h" |
#include "util/test/scoped_temp_dir.h" |
namespace crashpad { |
@@ -36,38 +37,28 @@ bool FileExistsAtPath(const base::FilePath& path) { |
#endif |
} |
-void CreateFile(const base::FilePath& path) { |
- FileHandle handle = LoggingOpenFileForWrite(path, |
- FileWriteMode::kCreateOrFail, |
- FilePermissions::kWorldReadable); |
-#if defined(OS_POSIX) |
- ASSERT_GE(handle, 0); |
-#elif defined(OS_WIN) |
- ASSERT_NE(handle, nullptr); |
-#endif |
- ASSERT_TRUE( |
- LoggingWriteFile(handle, path.value().c_str(), path.value().length())); |
- ASSERT_TRUE(LoggingCloseFile(handle)); |
-} |
- |
class CrashReportDatabaseTest : public testing::Test { |
+ public: |
+ CrashReportDatabaseTest() { |
+ } |
+ |
protected: |
// testing::Test: |
void SetUp() override { |
db_ = CrashReportDatabase::Initialize(path()); |
- ASSERT_TRUE(db_.get()); |
+ ASSERT_TRUE(db_); |
} |
void ResetDatabase() { |
db_.reset(); |
} |
- CrashReportDatabase* db() const { return db_.get(); } |
+ CrashReportDatabase* db() { return db_.get(); } |
const base::FilePath& path() const { return temp_dir_.path(); } |
void CreateCrashReport(CrashReportDatabase::Report* report) { |
- CrashReportDatabase::NewReport* new_report; |
- EXPECT_EQ(CrashReportDatabase::kNoError, |
+ CrashReportDatabase::NewReport* new_report = nullptr; |
+ ASSERT_EQ(CrashReportDatabase::kNoError, |
db_->PrepareNewCrashReport(&new_report)); |
const char kTest[] = "test"; |
ASSERT_TRUE(LoggingWriteFile(new_report->handle, kTest, sizeof(kTest))); |
@@ -84,9 +75,8 @@ class CrashReportDatabaseTest : public testing::Test { |
void UploadReport(const UUID& uuid, bool successful, const std::string& id) { |
const CrashReportDatabase::Report* report = nullptr; |
- EXPECT_EQ(CrashReportDatabase::kNoError, |
+ ASSERT_EQ(CrashReportDatabase::kNoError, |
db_->GetReportForUploading(uuid, &report)); |
- EXPECT_TRUE(report); |
EXPECT_NE(UUID(), report->uuid); |
EXPECT_FALSE(report->file_path.empty()); |
EXPECT_TRUE(FileExistsAtPath(report->file_path)) |
@@ -116,6 +106,8 @@ class CrashReportDatabaseTest : public testing::Test { |
private: |
ScopedTempDir temp_dir_; |
scoped_ptr<CrashReportDatabase> db_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CrashReportDatabaseTest); |
}; |
TEST_F(CrashReportDatabaseTest, Initialize) { |
@@ -126,11 +118,12 @@ TEST_F(CrashReportDatabaseTest, Initialize) { |
ResetDatabase(); |
EXPECT_FALSE(db()); |
auto db = CrashReportDatabase::Initialize(path()); |
- EXPECT_TRUE(db.get()); |
+ ASSERT_TRUE(db); |
std::vector<const CrashReportDatabase::Report> reports; |
EXPECT_EQ(CrashReportDatabase::kNoError, db->GetPendingReports(&reports)); |
EXPECT_TRUE(reports.empty()); |
+ reports.clear(); |
EXPECT_EQ(CrashReportDatabase::kNoError, db->GetCompletedReports(&reports)); |
EXPECT_TRUE(reports.empty()); |
} |
@@ -162,8 +155,8 @@ TEST_F(CrashReportDatabaseTest, NewCrashReport) { |
} |
TEST_F(CrashReportDatabaseTest, ErrorWritingCrashReport) { |
- CrashReportDatabase::NewReport* new_report; |
- EXPECT_EQ(CrashReportDatabase::kNoError, |
+ CrashReportDatabase::NewReport* new_report = nullptr; |
+ ASSERT_EQ(CrashReportDatabase::kNoError, |
db()->PrepareNewCrashReport(&new_report)); |
base::FilePath new_report_path = new_report->path; |
EXPECT_TRUE(FileExistsAtPath(new_report_path)) << new_report_path.value(); |
@@ -187,7 +180,7 @@ TEST_F(CrashReportDatabaseTest, LookUpCrashReport) { |
db()->LookUpCrashReport(uuid, &report)); |
EXPECT_EQ(uuid, report.uuid); |
EXPECT_NE(std::string::npos, report.file_path.value().find(path().value())); |
- EXPECT_EQ("", report.id); |
+ EXPECT_EQ(std::string(), report.id); |
EXPECT_FALSE(report.uploaded); |
EXPECT_EQ(0, report.last_upload_attempt_time); |
EXPECT_EQ(0, report.upload_attempts); |
@@ -215,11 +208,10 @@ TEST_F(CrashReportDatabaseTest, RecordUploadAttempt) { |
CreateCrashReport(&reports[2]); |
// Record two attempts: one successful, one not. |
- UploadReport(reports[1].uuid, false, ""); |
+ UploadReport(reports[1].uuid, false, std::string()); |
UploadReport(reports[2].uuid, true, "abc123"); |
std::vector<CrashReportDatabase::Report> query(3); |
- |
EXPECT_EQ(CrashReportDatabase::kNoError, |
db()->LookUpCrashReport(reports[0].uuid, &query[0])); |
EXPECT_EQ(CrashReportDatabase::kNoError, |
@@ -227,8 +219,8 @@ TEST_F(CrashReportDatabaseTest, RecordUploadAttempt) { |
EXPECT_EQ(CrashReportDatabase::kNoError, |
db()->LookUpCrashReport(reports[2].uuid, &query[2])); |
- EXPECT_EQ("", query[0].id); |
- EXPECT_EQ("", query[1].id); |
+ EXPECT_EQ(std::string(), query[0].id); |
+ EXPECT_EQ(std::string(), query[1].id); |
EXPECT_EQ("abc123", query[2].id); |
EXPECT_FALSE(query[0].uploaded); |
@@ -244,7 +236,7 @@ TEST_F(CrashReportDatabaseTest, RecordUploadAttempt) { |
EXPECT_EQ(1, query[2].upload_attempts); |
// Attempt to upload and fail again. |
- UploadReport(reports[1].uuid, false, ""); |
+ UploadReport(reports[1].uuid, false, std::string()); |
time_t report_2_upload_time = query[2].last_upload_attempt_time; |
@@ -339,10 +331,8 @@ TEST_F(CrashReportDatabaseTest, GetCompletedAndNotUploadedReports) { |
EXPECT_GT(completed[0].last_upload_attempt_time, 0); |
EXPECT_EQ(1, completed[0].upload_attempts); |
- const CrashReportDatabase::Report completed_report_1 = completed[0]; |
- |
// Fail to upload one report. |
- UploadReport(report_2_uuid, false, ""); |
+ UploadReport(report_2_uuid, false, std::string()); |
pending.clear(); |
EXPECT_EQ(CrashReportDatabase::kNoError, |
@@ -437,7 +427,7 @@ TEST_F(CrashReportDatabaseTest, DuelingUploads) { |
EXPECT_FALSE(upload_report_2); |
EXPECT_EQ(CrashReportDatabase::kNoError, |
- db()->RecordUploadAttempt(upload_report, true, "")); |
+ db()->RecordUploadAttempt(upload_report, true, std::string())); |
} |
TEST_F(CrashReportDatabaseTest, MoveDatabase) { |
@@ -458,6 +448,30 @@ TEST_F(CrashReportDatabaseTest, MoveDatabase) { |
EXPECT_TRUE(FileExistsAtPath(report.file_path)) << report.file_path.value(); |
} |
+TEST_F(CrashReportDatabaseTest, ReportRemoved) { |
+ CrashReportDatabase::NewReport* new_report; |
+ EXPECT_EQ(CrashReportDatabase::kNoError, |
+ db()->PrepareNewCrashReport(&new_report)); |
+ EXPECT_TRUE(FileExistsAtPath(new_report->path)) << new_report->path.value(); |
+ UUID uuid; |
+ EXPECT_EQ(CrashReportDatabase::kNoError, |
+ db()->FinishedWritingCrashReport(new_report, &uuid)); |
+ |
+ CrashReportDatabase::Report report; |
+ EXPECT_EQ(CrashReportDatabase::kNoError, |
+ db()->LookUpCrashReport(uuid, &report)); |
+ |
+#if defined(OS_WIN) |
+ EXPECT_EQ(0, _wunlink(report.file_path.value().c_str())); |
+#else |
+ EXPECT_EQ(0, unlink(report.file_path.value().c_str())) |
+ << ErrnoMessage("unlink"); |
+#endif |
+ |
+ EXPECT_EQ(CrashReportDatabase::kReportNotFound, |
+ db()->LookUpCrashReport(uuid, &report)); |
+} |
+ |
} // namespace |
} // namespace test |
} // namespace crashpad |