| OLD | NEW |
| 1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 #include "client/crash_report_database.h" | 15 #include "client/crash_report_database.h" |
| 16 | 16 |
| 17 #include <sys/stat.h> | 17 #include <sys/stat.h> |
| 18 | 18 |
| 19 #include "build/build_config.h" |
| 20 #include "client/settings.h" |
| 19 #include "gtest/gtest.h" | 21 #include "gtest/gtest.h" |
| 20 #include "util/file/file_io.h" | 22 #include "util/file/file_io.h" |
| 21 #include "util/test/errors.h" | 23 #include "util/test/errors.h" |
| 22 #include "util/test/scoped_temp_dir.h" | 24 #include "util/test/scoped_temp_dir.h" |
| 23 | 25 |
| 24 namespace crashpad { | 26 namespace crashpad { |
| 25 namespace test { | 27 namespace test { |
| 26 namespace { | 28 namespace { |
| 27 | 29 |
| 28 bool FileExistsAtPath(const base::FilePath& path) { | 30 bool FileExistsAtPath(const base::FilePath& path) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 EXPECT_EQ(CrashReportDatabase::kNoError, | 69 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 68 db_->FinishedWritingCrashReport(new_report, &uuid)); | 70 db_->FinishedWritingCrashReport(new_report, &uuid)); |
| 69 | 71 |
| 70 EXPECT_EQ(CrashReportDatabase::kNoError, | 72 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 71 db_->LookUpCrashReport(uuid, report)); | 73 db_->LookUpCrashReport(uuid, report)); |
| 72 ExpectPreparedCrashReport(*report); | 74 ExpectPreparedCrashReport(*report); |
| 73 ASSERT_TRUE(FileExistsAtPath(report->file_path)); | 75 ASSERT_TRUE(FileExistsAtPath(report->file_path)); |
| 74 } | 76 } |
| 75 | 77 |
| 76 void UploadReport(const UUID& uuid, bool successful, const std::string& id) { | 78 void UploadReport(const UUID& uuid, bool successful, const std::string& id) { |
| 79 #if !defined(OS_WIN) |
| 80 // Enable when ported to Windows. |
| 81 // https://code.google.com/p/crashpad/issues/detail?id=13 |
| 82 Settings* const settings = db_->GetSettings(); |
| 83 ASSERT_TRUE(settings); |
| 84 time_t times[2]; |
| 85 ASSERT_TRUE(settings->GetLastUploadAttemptTime(×[0])); |
| 86 #endif |
| 87 |
| 77 const CrashReportDatabase::Report* report = nullptr; | 88 const CrashReportDatabase::Report* report = nullptr; |
| 78 ASSERT_EQ(CrashReportDatabase::kNoError, | 89 ASSERT_EQ(CrashReportDatabase::kNoError, |
| 79 db_->GetReportForUploading(uuid, &report)); | 90 db_->GetReportForUploading(uuid, &report)); |
| 80 EXPECT_NE(UUID(), report->uuid); | 91 EXPECT_NE(UUID(), report->uuid); |
| 81 EXPECT_FALSE(report->file_path.empty()); | 92 EXPECT_FALSE(report->file_path.empty()); |
| 82 EXPECT_TRUE(FileExistsAtPath(report->file_path)) | 93 EXPECT_TRUE(FileExistsAtPath(report->file_path)) |
| 83 << report->file_path.value(); | 94 << report->file_path.value(); |
| 84 EXPECT_GT(report->creation_time, 0); | 95 EXPECT_GT(report->creation_time, 0); |
| 85 EXPECT_EQ(CrashReportDatabase::kNoError, | 96 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 86 db_->RecordUploadAttempt(report, successful, id)); | 97 db_->RecordUploadAttempt(report, successful, id)); |
| 98 |
| 99 #if !defined(OS_WIN) |
| 100 // Enable when ported to Windows. |
| 101 // https://code.google.com/p/crashpad/issues/detail?id=13 |
| 102 ASSERT_TRUE(settings->GetLastUploadAttemptTime(×[1])); |
| 103 EXPECT_NE(times[1], 0); |
| 104 EXPECT_GE(times[1], times[0]); |
| 105 #endif |
| 87 } | 106 } |
| 88 | 107 |
| 89 void ExpectPreparedCrashReport(const CrashReportDatabase::Report& report) { | 108 void ExpectPreparedCrashReport(const CrashReportDatabase::Report& report) { |
| 90 EXPECT_NE(UUID(), report.uuid); | 109 EXPECT_NE(UUID(), report.uuid); |
| 91 EXPECT_FALSE(report.file_path.empty()); | 110 EXPECT_FALSE(report.file_path.empty()); |
| 92 EXPECT_TRUE(FileExistsAtPath(report.file_path)) << report.file_path.value(); | 111 EXPECT_TRUE(FileExistsAtPath(report.file_path)) << report.file_path.value(); |
| 93 EXPECT_TRUE(report.id.empty()); | 112 EXPECT_TRUE(report.id.empty()); |
| 94 EXPECT_GT(report.creation_time, 0); | 113 EXPECT_GT(report.creation_time, 0); |
| 95 EXPECT_FALSE(report.uploaded); | 114 EXPECT_FALSE(report.uploaded); |
| 96 EXPECT_EQ(0, report.last_upload_attempt_time); | 115 EXPECT_EQ(0, report.last_upload_attempt_time); |
| 97 EXPECT_EQ(0, report.upload_attempts); | 116 EXPECT_EQ(0, report.upload_attempts); |
| 98 } | 117 } |
| 99 | 118 |
| 100 void RelocateDatabase() { | 119 void RelocateDatabase() { |
| 101 ResetDatabase(); | 120 ResetDatabase(); |
| 102 temp_dir_.Rename(); | 121 temp_dir_.Rename(); |
| 103 SetUp(); | 122 SetUp(); |
| 104 } | 123 } |
| 105 | 124 |
| 106 private: | 125 private: |
| 107 ScopedTempDir temp_dir_; | 126 ScopedTempDir temp_dir_; |
| 108 scoped_ptr<CrashReportDatabase> db_; | 127 scoped_ptr<CrashReportDatabase> db_; |
| 109 | 128 |
| 110 DISALLOW_COPY_AND_ASSIGN(CrashReportDatabaseTest); | 129 DISALLOW_COPY_AND_ASSIGN(CrashReportDatabaseTest); |
| 111 }; | 130 }; |
| 112 | 131 |
| 113 TEST_F(CrashReportDatabaseTest, Initialize) { | 132 TEST_F(CrashReportDatabaseTest, Initialize) { |
| 114 // Initialize the database for the first time, creating it. | 133 // Initialize the database for the first time, creating it. |
| 115 EXPECT_TRUE(db()); | 134 ASSERT_TRUE(db()); |
| 135 |
| 136 #if !defined(OS_WIN) |
| 137 // Enable when ported to Windows. |
| 138 // https://code.google.com/p/crashpad/issues/detail?id=13 |
| 139 Settings* settings = db()->GetSettings(); |
| 140 |
| 141 UUID client_ids[2]; |
| 142 ASSERT_TRUE(settings->GetClientID(&client_ids[0])); |
| 143 EXPECT_NE(client_ids[0], UUID()); |
| 144 |
| 145 time_t last_upload_attempt_time; |
| 146 ASSERT_TRUE(settings->GetLastUploadAttemptTime(&last_upload_attempt_time)); |
| 147 EXPECT_EQ(0, last_upload_attempt_time); |
| 148 #endif |
| 116 | 149 |
| 117 // Close and reopen the database at the same path. | 150 // Close and reopen the database at the same path. |
| 118 ResetDatabase(); | 151 ResetDatabase(); |
| 119 EXPECT_FALSE(db()); | 152 EXPECT_FALSE(db()); |
| 120 auto db = CrashReportDatabase::Initialize(path()); | 153 auto db = CrashReportDatabase::Initialize(path()); |
| 121 ASSERT_TRUE(db); | 154 ASSERT_TRUE(db); |
| 122 | 155 |
| 156 #if !defined(OS_WIN) |
| 157 // Enable when ported to Windows. |
| 158 // https://code.google.com/p/crashpad/issues/detail?id=13 |
| 159 settings = db->GetSettings(); |
| 160 |
| 161 ASSERT_TRUE(settings->GetClientID(&client_ids[1])); |
| 162 EXPECT_EQ(client_ids[0], client_ids[1]); |
| 163 |
| 164 ASSERT_TRUE(settings->GetLastUploadAttemptTime(&last_upload_attempt_time)); |
| 165 EXPECT_EQ(0, last_upload_attempt_time); |
| 166 #endif |
| 167 |
| 123 std::vector<CrashReportDatabase::Report> reports; | 168 std::vector<CrashReportDatabase::Report> reports; |
| 124 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetPendingReports(&reports)); | 169 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetPendingReports(&reports)); |
| 125 EXPECT_TRUE(reports.empty()); | 170 EXPECT_TRUE(reports.empty()); |
| 126 reports.clear(); | 171 reports.clear(); |
| 127 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetCompletedReports(&reports)); | 172 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetCompletedReports(&reports)); |
| 128 EXPECT_TRUE(reports.empty()); | 173 EXPECT_TRUE(reports.empty()); |
| 129 } | 174 } |
| 130 | 175 |
| 131 TEST_F(CrashReportDatabaseTest, NewCrashReport) { | 176 TEST_F(CrashReportDatabaseTest, NewCrashReport) { |
| 132 CrashReportDatabase::NewReport* new_report; | 177 CrashReportDatabase::NewReport* new_report; |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 << ErrnoMessage("unlink"); | 513 << ErrnoMessage("unlink"); |
| 469 #endif | 514 #endif |
| 470 | 515 |
| 471 EXPECT_EQ(CrashReportDatabase::kReportNotFound, | 516 EXPECT_EQ(CrashReportDatabase::kReportNotFound, |
| 472 db()->LookUpCrashReport(uuid, &report)); | 517 db()->LookUpCrashReport(uuid, &report)); |
| 473 } | 518 } |
| 474 | 519 |
| 475 } // namespace | 520 } // namespace |
| 476 } // namespace test | 521 } // namespace test |
| 477 } // namespace crashpad | 522 } // namespace crashpad |
| OLD | NEW |