| Index: components/upload_list/upload_list_unittest.cc
|
| diff --git a/components/upload_list/upload_list_unittest.cc b/components/upload_list/upload_list_unittest.cc
|
| index 1e3e5c42e7716761fdad7fafec6f17e848b54772..431797ae5d4f17e0dafcf6d4cdb644d1bdf96db0 100644
|
| --- a/components/upload_list/upload_list_unittest.cc
|
| +++ b/components/upload_list/upload_list_unittest.cc
|
| @@ -9,9 +9,13 @@
|
| #include <string>
|
|
|
| #include "base/files/file_path.h"
|
| +#include "base/files/file_util.h"
|
| +#include "base/files/scoped_temp_dir.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/run_loop.h"
|
| #include "base/strings/string_number_conversions.h"
|
| -#include "base/threading/sequenced_worker_pool.h"
|
| +#include "base/test/sequenced_worker_pool_owner.h"
|
| #include "base/time/time.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -22,7 +26,45 @@ const char kTestUploadId[] = "0123456789abcdef";
|
| const char kTestLocalID[] = "fedcba9876543210";
|
| const char kTestCaptureTime[] = "2345678901";
|
|
|
| -} // namespace
|
| +class UploadListTest : public testing::Test,
|
| + public UploadList::Delegate {
|
| + public:
|
| + UploadListTest() : worker_pool_owner_(1, "UploadListTest") {}
|
| +
|
| + void SetUp() override {
|
| + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| + }
|
| +
|
| + void WriteUploadLog(const std::string& log_data) {
|
| + ASSERT_GT(base::WriteFile(log_path(), log_data.c_str(), log_data.size()),
|
| + 0);
|
| + }
|
| +
|
| + void WaitForUploadList() {
|
| + base::RunLoop run_loop;
|
| + quit_closure_ = run_loop.QuitClosure();
|
| + run_loop.Run();
|
| + }
|
| +
|
| + // UploadList::Delegate:
|
| + void OnUploadListAvailable() override {
|
| + ASSERT_FALSE(quit_closure_.is_null());
|
| + quit_closure_.Run();
|
| + }
|
| +
|
| + const scoped_refptr<base::SequencedWorkerPool> worker_pool() {
|
| + return worker_pool_owner_.pool();
|
| + }
|
| + base::FilePath log_path() {
|
| + return temp_dir_.path().Append(FILE_PATH_LITERAL("uploads.log"));
|
| + }
|
| +
|
| + private:
|
| + base::MessageLoop message_loop_;
|
| + base::ScopedTempDir temp_dir_;
|
| + base::SequencedWorkerPoolOwner worker_pool_owner_;
|
| + base::Closure quit_closure_;
|
| +};
|
|
|
| // These tests test that UploadList can parse a vector of log entry strings of
|
| // various formats to a vector of UploadInfo objects. See the UploadList
|
| @@ -30,100 +72,112 @@ const char kTestCaptureTime[] = "2345678901";
|
|
|
| // Test log entry string with upload time and upload ID.
|
| // This is the format that crash reports are stored in.
|
| -TEST(UploadListTest, ParseUploadTimeUploadId) {
|
| +TEST_F(UploadListTest, ParseUploadTimeUploadId) {
|
| std::string test_entry = kTestUploadTime;
|
| test_entry += ",";
|
| test_entry.append(kTestUploadId);
|
| + WriteUploadLog(test_entry);
|
|
|
| scoped_refptr<UploadList> upload_list =
|
| - new UploadList(nullptr, base::FilePath(), nullptr);
|
| + new UploadList(this, log_path(), worker_pool());
|
|
|
| - std::vector<std::string> log_entries;
|
| - log_entries.push_back(test_entry);
|
| - upload_list->ParseLogEntries(log_entries);
|
| + upload_list->LoadUploadListAsynchronously();
|
| + WaitForUploadList();
|
|
|
| - EXPECT_EQ(1u, upload_list->uploads_.size());
|
| - double time_double = upload_list->uploads_[0].upload_time.ToDoubleT();
|
| + std::vector<UploadList::UploadInfo> uploads;
|
| + upload_list->GetUploads(999, &uploads);
|
| +
|
| + EXPECT_EQ(1u, uploads.size());
|
| + double time_double = uploads[0].upload_time.ToDoubleT();
|
| EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| - EXPECT_STREQ(kTestUploadId, upload_list->uploads_[0].upload_id.c_str());
|
| - EXPECT_STREQ("", upload_list->uploads_[0].local_id.c_str());
|
| - time_double = upload_list->uploads_[0].capture_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestUploadId, uploads[0].upload_id.c_str());
|
| + EXPECT_STREQ("", uploads[0].local_id.c_str());
|
| + time_double = uploads[0].capture_time.ToDoubleT();
|
| EXPECT_STREQ("0", base::DoubleToString(time_double).c_str());
|
| }
|
|
|
| // Test log entry string with upload time, upload ID and local ID.
|
| // This is the old format that WebRTC logs were stored in.
|
| -TEST(UploadListTest, ParseUploadTimeUploadIdLocalId) {
|
| +TEST_F(UploadListTest, ParseUploadTimeUploadIdLocalId) {
|
| std::string test_entry = kTestUploadTime;
|
| test_entry += ",";
|
| test_entry.append(kTestUploadId);
|
| test_entry += ",";
|
| test_entry.append(kTestLocalID);
|
| + WriteUploadLog(test_entry);
|
|
|
| scoped_refptr<UploadList> upload_list =
|
| - new UploadList(nullptr, base::FilePath(), nullptr);
|
| + new UploadList(this, log_path(), worker_pool());
|
| +
|
| + upload_list->LoadUploadListAsynchronously();
|
| + WaitForUploadList();
|
|
|
| - std::vector<std::string> log_entries;
|
| - log_entries.push_back(test_entry);
|
| - upload_list->ParseLogEntries(log_entries);
|
| + std::vector<UploadList::UploadInfo> uploads;
|
| + upload_list->GetUploads(999, &uploads);
|
|
|
| - EXPECT_EQ(1u, upload_list->uploads_.size());
|
| - double time_double = upload_list->uploads_[0].upload_time.ToDoubleT();
|
| + EXPECT_EQ(1u, uploads.size());
|
| + double time_double = uploads[0].upload_time.ToDoubleT();
|
| EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| - EXPECT_STREQ(kTestUploadId, upload_list->uploads_[0].upload_id.c_str());
|
| - EXPECT_STREQ(kTestLocalID, upload_list->uploads_[0].local_id.c_str());
|
| - time_double = upload_list->uploads_[0].capture_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestUploadId, uploads[0].upload_id.c_str());
|
| + EXPECT_STREQ(kTestLocalID, uploads[0].local_id.c_str());
|
| + time_double = uploads[0].capture_time.ToDoubleT();
|
| EXPECT_STREQ("0", base::DoubleToString(time_double).c_str());
|
| }
|
|
|
| // Test log entry string with upload time, upload ID and capture time.
|
| // This is the format that WebRTC logs that only have been uploaded only are
|
| // stored in.
|
| -TEST(UploadListTest, ParseUploadTimeUploadIdCaptureTime) {
|
| +TEST_F(UploadListTest, ParseUploadTimeUploadIdCaptureTime) {
|
| std::string test_entry = kTestUploadTime;
|
| test_entry += ",";
|
| test_entry.append(kTestUploadId);
|
| test_entry += ",,";
|
| test_entry.append(kTestCaptureTime);
|
| + WriteUploadLog(test_entry);
|
|
|
| scoped_refptr<UploadList> upload_list =
|
| - new UploadList(nullptr, base::FilePath(), nullptr);
|
| + new UploadList(this, log_path(), worker_pool());
|
|
|
| - std::vector<std::string> log_entries;
|
| - log_entries.push_back(test_entry);
|
| - upload_list->ParseLogEntries(log_entries);
|
| + upload_list->LoadUploadListAsynchronously();
|
| + WaitForUploadList();
|
|
|
| - EXPECT_EQ(1u, upload_list->uploads_.size());
|
| - double time_double = upload_list->uploads_[0].upload_time.ToDoubleT();
|
| + std::vector<UploadList::UploadInfo> uploads;
|
| + upload_list->GetUploads(999, &uploads);
|
| +
|
| + EXPECT_EQ(1u, uploads.size());
|
| + double time_double = uploads[0].upload_time.ToDoubleT();
|
| EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| - EXPECT_STREQ(kTestUploadId, upload_list->uploads_[0].upload_id.c_str());
|
| - EXPECT_STREQ("", upload_list->uploads_[0].local_id.c_str());
|
| - time_double = upload_list->uploads_[0].capture_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestUploadId, uploads[0].upload_id.c_str());
|
| + EXPECT_STREQ("", uploads[0].local_id.c_str());
|
| + time_double = uploads[0].capture_time.ToDoubleT();
|
| EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str());
|
| }
|
|
|
| // Test log entry string with local ID and capture time.
|
| // This is the format that WebRTC logs that only are stored locally are stored
|
| // in.
|
| -TEST(UploadListTest, ParseLocalIdCaptureTime) {
|
| +TEST_F(UploadListTest, ParseLocalIdCaptureTime) {
|
| std::string test_entry = ",,";
|
| test_entry.append(kTestLocalID);
|
| test_entry += ",";
|
| test_entry.append(kTestCaptureTime);
|
| + WriteUploadLog(test_entry);
|
|
|
| scoped_refptr<UploadList> upload_list =
|
| - new UploadList(nullptr, base::FilePath(), nullptr);
|
| + new UploadList(this, log_path(), worker_pool());
|
| +
|
| + upload_list->LoadUploadListAsynchronously();
|
| + WaitForUploadList();
|
|
|
| - std::vector<std::string> log_entries;
|
| - log_entries.push_back(test_entry);
|
| - upload_list->ParseLogEntries(log_entries);
|
| + std::vector<UploadList::UploadInfo> uploads;
|
| + upload_list->GetUploads(999, &uploads);
|
|
|
| - EXPECT_EQ(1u, upload_list->uploads_.size());
|
| - double time_double = upload_list->uploads_[0].upload_time.ToDoubleT();
|
| + EXPECT_EQ(1u, uploads.size());
|
| + double time_double = uploads[0].upload_time.ToDoubleT();
|
| EXPECT_STREQ("0", base::DoubleToString(time_double).c_str());
|
| - EXPECT_STREQ("", upload_list->uploads_[0].upload_id.c_str());
|
| - EXPECT_STREQ(kTestLocalID, upload_list->uploads_[0].local_id.c_str());
|
| - time_double = upload_list->uploads_[0].capture_time.ToDoubleT();
|
| + EXPECT_STREQ("", uploads[0].upload_id.c_str());
|
| + EXPECT_STREQ(kTestLocalID, uploads[0].local_id.c_str());
|
| + time_double = uploads[0].capture_time.ToDoubleT();
|
| EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str());
|
| }
|
|
|
| @@ -131,7 +185,7 @@ TEST(UploadListTest, ParseLocalIdCaptureTime) {
|
| // time.
|
| // This is the format that WebRTC logs that are stored locally and have been
|
| // uploaded are stored in.
|
| -TEST(UploadListTest, ParseUploadTimeUploadIdLocalIdCaptureTime) {
|
| +TEST_F(UploadListTest, ParseUploadTimeUploadIdLocalIdCaptureTime) {
|
| std::string test_entry = kTestUploadTime;
|
| test_entry += ",";
|
| test_entry.append(kTestUploadId);
|
| @@ -139,24 +193,61 @@ TEST(UploadListTest, ParseUploadTimeUploadIdLocalIdCaptureTime) {
|
| test_entry.append(kTestLocalID);
|
| test_entry += ",";
|
| test_entry.append(kTestCaptureTime);
|
| + WriteUploadLog(test_entry);
|
|
|
| scoped_refptr<UploadList> upload_list =
|
| - new UploadList(nullptr, base::FilePath(), nullptr);
|
| + new UploadList(this, log_path(), worker_pool());
|
| +
|
| + upload_list->LoadUploadListAsynchronously();
|
| + WaitForUploadList();
|
|
|
| - std::vector<std::string> log_entries;
|
| - log_entries.push_back(test_entry);
|
| - upload_list->ParseLogEntries(log_entries);
|
| + std::vector<UploadList::UploadInfo> uploads;
|
| + upload_list->GetUploads(999, &uploads);
|
|
|
| - EXPECT_EQ(1u, upload_list->uploads_.size());
|
| - double time_double = upload_list->uploads_[0].upload_time.ToDoubleT();
|
| + EXPECT_EQ(1u, uploads.size());
|
| + double time_double = uploads[0].upload_time.ToDoubleT();
|
| EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| - EXPECT_STREQ(kTestUploadId, upload_list->uploads_[0].upload_id.c_str());
|
| - EXPECT_STREQ(kTestLocalID, upload_list->uploads_[0].local_id.c_str());
|
| - time_double = upload_list->uploads_[0].capture_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestUploadId, uploads[0].upload_id.c_str());
|
| + EXPECT_STREQ(kTestLocalID, uploads[0].local_id.c_str());
|
| + time_double = uploads[0].capture_time.ToDoubleT();
|
| EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str());
|
| }
|
|
|
| -TEST(UploadListTest, ParseMultipleEntries) {
|
| +TEST_F(UploadListTest, ParseMultipleEntries) {
|
| + std::string test_entry;
|
| + for (int i = 1; i <= 4; ++i) {
|
| + test_entry.append(kTestUploadTime);
|
| + test_entry += ",";
|
| + test_entry.append(kTestUploadId);
|
| + test_entry += ",";
|
| + test_entry.append(kTestLocalID);
|
| + test_entry += ",";
|
| + test_entry.append(kTestCaptureTime);
|
| + test_entry += "\n";
|
| + }
|
| + WriteUploadLog(test_entry);
|
| +
|
| + scoped_refptr<UploadList> upload_list =
|
| + new UploadList(this, log_path(), worker_pool());
|
| +
|
| + upload_list->LoadUploadListAsynchronously();
|
| + WaitForUploadList();
|
| +
|
| + std::vector<UploadList::UploadInfo> uploads;
|
| + upload_list->GetUploads(999, &uploads);
|
| +
|
| + EXPECT_EQ(4u, uploads.size());
|
| + for (size_t i = 0; i < uploads.size(); ++i) {
|
| + double time_double = uploads[i].upload_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| + EXPECT_STREQ(kTestUploadId, uploads[i].upload_id.c_str());
|
| + EXPECT_STREQ(kTestLocalID, uploads[i].local_id.c_str());
|
| + time_double = uploads[i].capture_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str());
|
| + }
|
| +}
|
| +
|
| +TEST_F(UploadListTest, SimultaneousAccess) {
|
| std::string test_entry = kTestUploadTime;
|
| test_entry += ",";
|
| test_entry.append(kTestUploadId);
|
| @@ -164,33 +255,30 @@ TEST(UploadListTest, ParseMultipleEntries) {
|
| test_entry.append(kTestLocalID);
|
| test_entry += ",";
|
| test_entry.append(kTestCaptureTime);
|
| + WriteUploadLog(test_entry);
|
|
|
| scoped_refptr<UploadList> upload_list =
|
| - new UploadList(nullptr, base::FilePath(), nullptr);
|
| -
|
| - // 1 entry.
|
| - std::vector<std::string> log_entries;
|
| - log_entries.push_back(test_entry);
|
| - upload_list->ParseLogEntries(log_entries);
|
| - EXPECT_EQ(1u, upload_list->uploads_.size());
|
| - double time_double = upload_list->uploads_[0].upload_time.ToDoubleT();
|
| - EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| - EXPECT_STREQ(kTestUploadId, upload_list->uploads_[0].upload_id.c_str());
|
| - EXPECT_STREQ(kTestLocalID, upload_list->uploads_[0].local_id.c_str());
|
| - time_double = upload_list->uploads_[0].capture_time.ToDoubleT();
|
| - EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str());
|
| + new UploadList(this, log_path(), worker_pool());
|
|
|
| - // Add 3 more entries.
|
| - log_entries.push_back(test_entry);
|
| - log_entries.push_back(test_entry);
|
| - upload_list->ParseLogEntries(log_entries);
|
| - EXPECT_EQ(4u, upload_list->uploads_.size());
|
| - for (size_t i = 0; i < upload_list->uploads_.size(); ++i) {
|
| - time_double = upload_list->uploads_[i].upload_time.ToDoubleT();
|
| - EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| - EXPECT_STREQ(kTestUploadId, upload_list->uploads_[i].upload_id.c_str());
|
| - EXPECT_STREQ(kTestLocalID, upload_list->uploads_[i].local_id.c_str());
|
| - time_double = upload_list->uploads_[i].capture_time.ToDoubleT();
|
| - EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str());
|
| + for (int i = 1; i <= 20; ++i) {
|
| + upload_list->LoadUploadListAsynchronously();
|
| + }
|
| + WaitForUploadList();
|
| + upload_list->ClearDelegate();
|
| +
|
| + std::vector<UploadList::UploadInfo> uploads;
|
| + for (int i = 1; i <= 4; ++i) {
|
| + uploads.clear();
|
| + upload_list->GetUploads(999, &uploads);
|
| }
|
| +
|
| + EXPECT_EQ(1u, uploads.size());
|
| + double time_double = uploads[0].upload_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestUploadTime, base::DoubleToString(time_double).c_str());
|
| + EXPECT_STREQ(kTestUploadId, uploads[0].upload_id.c_str());
|
| + EXPECT_STREQ(kTestLocalID, uploads[0].local_id.c_str());
|
| + time_double = uploads[0].capture_time.ToDoubleT();
|
| + EXPECT_STREQ(kTestCaptureTime, base::DoubleToString(time_double).c_str());
|
| }
|
| +
|
| +} // namespace
|
|
|