Chromium Code Reviews| Index: components/offline_pages/offline_page_storage_manager_unittest.cc |
| diff --git a/components/offline_pages/offline_page_storage_manager_unittest.cc b/components/offline_pages/offline_page_storage_manager_unittest.cc |
| index d1e0621f0fe6091e5c4a1782b307a3c7e194ceb9..b4f1cf8c6797e03a44f96e96f37213d82bb51a18 100644 |
| --- a/components/offline_pages/offline_page_storage_manager_unittest.cc |
| +++ b/components/offline_pages/offline_page_storage_manager_unittest.cc |
| @@ -18,30 +18,34 @@ |
| namespace offline_pages { |
| namespace { |
| -const char kTestClientNamespace[] = "CLIENT_NAMESPACE"; |
| +const char kBookmarkNamespace[] = "bookmark"; |
| +const char kLastNNamespace[] = "last_n"; |
| const GURL kTestUrl("http://example.com"); |
| -const GURL kTestUrl2("http://other.page.com"); |
| const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("TEST_FILEPATH"); |
| -const ClientId kTestClientId1(kTestClientNamespace, "1234"); |
| -const ClientId kTestClientId2(kTestClientNamespace, "5678"); |
| const int64_t kTestFileSize = 876543LL; |
| -const int64_t kOfflineId = 1234LL; |
| -const int64_t kOfflineId2 = 2345LL; |
| + |
| +enum TestOptions { |
| + DEFAULT = 1 << 0, |
| + DELETE_FAILED = 1 << 1, |
| +}; |
| + |
| +struct PageSettings { |
| + std::string name_space; |
| + int fresh_pages_count; |
| + int expired_pages_count; |
| +}; |
| } // namespace |
| class StorageManagerTestClient : public OfflinePageStorageManager::Client { |
| public: |
| - StorageManagerTestClient() { |
| - // Manually adding pages for the fake model. |
| - // Only the first page is expired. |
| + StorageManagerTestClient(std::vector<PageSettings> page_settings, |
| + TestOptions options = TestOptions::DEFAULT) |
| + : policy_controller_(new ClientPolicyController()), |
| + options_(options), |
| + next_offline_id_(0) { |
| pages_.clear(); |
|
fgorski
2016/05/12 14:49:32
why?
romax
2016/05/12 22:20:03
i always want to make sure it's empty... but seems
|
| - pages_.push_back(OfflinePageItem(kTestUrl, kOfflineId, kTestClientId1, |
| - base::FilePath(kFilePath), kTestFileSize)); |
| - pages_.push_back(OfflinePageItem(kTestUrl2, kOfflineId2, kTestClientId2, |
| - base::FilePath(kFilePath), kTestFileSize)); |
| - base::Time now = base::Time::Now(); |
| - pages_[0].last_access_time = now - base::TimeDelta::FromDays(10); |
| - pages_[1].last_access_time = now; |
| + for (const auto& setting : page_settings) |
| + AddPages(setting); |
| } |
| void GetAllPages(const MultipleOfflinePageItemCallback& callback) override { |
| @@ -50,23 +54,68 @@ class StorageManagerTestClient : public OfflinePageStorageManager::Client { |
| void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids, |
| const DeletePageCallback& callback) override { |
| - callback.Run(DeletePageResult::SUCCESS); |
| + if (options_ & TestOptions::DELETE_FAILED) { |
| + callback.Run(DeletePageResult::STORE_FAILURE); |
| + } else { |
| + callback.Run(DeletePageResult::SUCCESS); |
| + } |
| } |
| private: |
| + void AddPages(const PageSettings& setting); |
| + |
| std::vector<OfflinePageItem> pages_; |
| std::unique_ptr<ClientPolicyController> policy_controller_; |
| + |
| + TestOptions options_; |
| + |
| + int64_t next_offline_id_; |
| }; |
| +void StorageManagerTestClient::AddPages(const PageSettings& setting) { |
| + std::string name_space = setting.name_space; |
| + int fresh_pages_count = setting.fresh_pages_count; |
| + int expired_pages_count = setting.expired_pages_count; |
| + base::Time now = base::Time::Now(); |
| + // Fresh pages. |
| + for (int i = 0; i < fresh_pages_count; i++) { |
| + OfflinePageItem page = |
| + OfflinePageItem(kTestUrl, next_offline_id_, |
| + ClientId(name_space, std::to_string(next_offline_id_)), |
| + base::FilePath(kFilePath), kTestFileSize); |
| + next_offline_id_++; |
| + page.last_access_time = now; |
| + pages_.push_back(page); |
| + } |
| + // Expired pages. |
| + for (int i = 0; i < expired_pages_count; i++) { |
| + OfflinePageItem page = |
| + OfflinePageItem(kTestUrl, next_offline_id_, |
| + ClientId(name_space, std::to_string(next_offline_id_)), |
| + base::FilePath(kFilePath), kTestFileSize); |
| + next_offline_id_++; |
| + page.last_access_time = now - |
| + policy_controller_->GetPolicy(name_space) |
| + .lifetime_policy.expiration_period - |
| + base::TimeDelta::FromDays(1); |
| + pages_.push_back(page); |
| + } |
| +} |
| + |
| class OfflinePageStorageManagerTest : public testing::Test { |
| public: |
| OfflinePageStorageManagerTest(); |
| OfflinePageStorageManager* manager() { return manager_.get(); } |
| + OfflinePageStorageManager::Client* client() { return client_.get(); } |
| + ClientPolicyController* policy_controller() { |
| + return policy_controller_.get(); |
| + } |
| void OnPagesCleared(int pages_cleared_count, DeletePageResult result); |
| + void Init(const std::vector<PageSettings>& settings, |
| + TestOptions options = TestOptions::DEFAULT); |
| // testing::Test |
| - void SetUp() override; |
| void TearDown() override; |
| int last_cleared_page_count() const { return last_cleared_page_count_; } |
| @@ -77,19 +126,22 @@ class OfflinePageStorageManagerTest : public testing::Test { |
| private: |
| std::unique_ptr<OfflinePageStorageManager> manager_; |
| std::unique_ptr<OfflinePageStorageManager::Client> client_; |
| + std::unique_ptr<ClientPolicyController> policy_controller_; |
| int last_cleared_page_count_; |
| DeletePageResult last_delete_page_result_; |
| }; |
| OfflinePageStorageManagerTest::OfflinePageStorageManagerTest() |
| - : last_cleared_page_count_(0), |
| + : policy_controller_(new ClientPolicyController()), |
| + last_cleared_page_count_(0), |
| last_delete_page_result_(DeletePageResult::SUCCESS) {} |
| -void OfflinePageStorageManagerTest::SetUp() { |
| - client_.reset(new StorageManagerTestClient()); |
| - manager_.reset(new OfflinePageStorageManager(client_.get(), |
| - new ClientPolicyController())); |
| +void OfflinePageStorageManagerTest::Init( |
| + const std::vector<PageSettings>& page_settings, |
| + TestOptions options) { |
| + client_.reset(new StorageManagerTestClient(page_settings, options)); |
| + manager_.reset(new OfflinePageStorageManager(client(), policy_controller())); |
| } |
| void OfflinePageStorageManagerTest::TearDown() { |
| @@ -103,11 +155,33 @@ void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count, |
| last_delete_page_result_ = result; |
| } |
| -TEST_F(OfflinePageStorageManagerTest, TestClearPages) { |
| +TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) { |
| + Init(std::vector<PageSettings>( |
| + {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}})); |
|
fgorski
2016/05/12 14:49:32
nit: alignment
Run git cl format, please
romax
2016/05/12 22:20:03
this is what 'git cl format' gave me... how should
fgorski
2016/05/12 22:34:25
no, it's good if git cl format did that.
|
| manager()->ClearPagesIfNeeded(base::Bind( |
| &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); |
| - EXPECT_EQ(1, last_cleared_page_count()); |
| + EXPECT_EQ(2, last_cleared_page_count()); |
| EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); |
| } |
| +TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) { |
| + Init(std::vector<PageSettings>( |
| + {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}})); |
| + manager()->ClearPagesIfNeeded(base::Bind( |
| + &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); |
| + EXPECT_EQ(45, last_cleared_page_count()); |
| + EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); |
| +} |
| + |
| +TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) { |
| + Init(std::vector<PageSettings>( |
| + {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}})); |
| + manager()->ClearPagesIfNeeded(base::Bind( |
| + &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); |
| + int last_n_page_limit = policy_controller() |
| + ->GetPolicy(kLastNNamespace) |
| + .lifetime_policy.page_limit; |
| + EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); |
| + EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); |
| +} |
| } // namespace offline_pages |