Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/offline_pages/offline_page_storage_manager.h" | 5 #include "components/offline_pages/offline_page_storage_manager.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 11 #include "base/test/simple_test_clock.h" | 11 #include "base/test/simple_test_clock.h" |
| 12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 13 #include "components/offline_pages/archive_manager.h" | |
| 13 #include "components/offline_pages/client_policy_controller.h" | 14 #include "components/offline_pages/client_policy_controller.h" |
| 14 #include "components/offline_pages/offline_page_item.h" | 15 #include "components/offline_pages/offline_page_item.h" |
| 15 #include "components/offline_pages/offline_page_storage_manager.h" | 16 #include "components/offline_pages/offline_page_storage_manager.h" |
| 16 #include "components/offline_pages/offline_page_types.h" | 17 #include "components/offline_pages/offline_page_types.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 20 using LifetimePolicy = offline_pages::LifetimePolicy; | |
| 21 using StorageClearResult = | |
| 22 offline_pages::OfflinePageStorageManager::StorageClearResult; | |
| 23 using StorageStats = offline_pages::ArchiveManager::StorageStats; | |
| 24 | |
| 19 namespace offline_pages { | 25 namespace offline_pages { |
| 20 | 26 |
| 21 namespace { | 27 namespace { |
| 22 const char kBookmarkNamespace[] = "bookmark"; | 28 const char kBookmarkNamespace[] = "bookmark"; |
| 23 const char kLastNNamespace[] = "last_n"; | 29 const char kLastNNamespace[] = "last_n"; |
| 24 const GURL kTestUrl("http://example.com"); | 30 const GURL kTestUrl("http://example.com"); |
| 25 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("TEST_FILEPATH"); | 31 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("/data"); |
| 26 const int64_t kTestFileSize = 876543LL; | 32 const int64_t kTestFileSize = 500 * (1 << 10); |
| 33 const int64_t kFreeSpaceNormal = 100 * (1 << 20); | |
| 27 | 34 |
| 28 enum TestOptions { | 35 enum TestOptions { |
| 29 DEFAULT = 1 << 0, | 36 DEFAULT = 1 << 0, |
| 30 DELETE_FAILED = 1 << 1, | 37 DELETE_FAILURE = 1 << 1, |
| 31 }; | 38 }; |
| 32 | 39 |
| 33 struct PageSettings { | 40 struct PageSettings { |
| 34 std::string name_space; | 41 std::string name_space; |
| 35 int fresh_pages_count; | 42 int fresh_pages_count; |
| 36 int expired_pages_count; | 43 int expired_pages_count; |
| 37 }; | 44 }; |
| 38 } // namespace | 45 } // namespace |
| 39 | 46 |
| 40 class StorageManagerTestClient : public OfflinePageStorageManager::Client { | 47 class StorageManagerTestClient : public OfflinePageStorageManager::Client { |
| 41 public: | 48 public: |
| 42 StorageManagerTestClient(std::vector<PageSettings> page_settings, | 49 StorageManagerTestClient(std::vector<PageSettings> page_settings, |
| 43 base::SimpleTestClock* clock, | 50 base::SimpleTestClock* clock, |
| 44 TestOptions options = TestOptions::DEFAULT) | 51 TestOptions options = TestOptions::DEFAULT) |
| 45 : policy_controller_(new ClientPolicyController()), | 52 : policy_controller_(new ClientPolicyController()), |
| 46 clock_(clock), | 53 clock_(clock), |
| 47 options_(options), | 54 options_(options), |
| 48 next_offline_id_(0) { | 55 next_offline_id_(0) { |
| 49 for (const auto& setting : page_settings) | 56 for (const auto& setting : page_settings) |
| 50 AddPages(setting); | 57 AddPages(setting); |
| 51 } | 58 } |
| 52 | 59 |
| 53 ~StorageManagerTestClient() override; | 60 ~StorageManagerTestClient() override; |
| 54 | 61 |
| 55 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override { | 62 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override { |
| 56 callback.Run(pages_); | 63 callback.Run(pages_); |
| 57 } | 64 } |
| 58 | 65 |
| 59 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids, | 66 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids, |
| 60 const DeletePageCallback& callback) override { | 67 const DeletePageCallback& callback) override; |
| 61 if (options_ & TestOptions::DELETE_FAILED) { | 68 void AddPages(const PageSettings& setting); |
| 62 callback.Run(DeletePageResult::STORE_FAILURE); | 69 |
| 63 } else { | 70 int64_t GetTotalSize() const; |
| 64 callback.Run(DeletePageResult::SUCCESS); | |
| 65 } | |
| 66 } | |
| 67 | 71 |
| 68 base::SimpleTestClock* clock() { return clock_; } | 72 base::SimpleTestClock* clock() { return clock_; } |
| 69 | 73 |
| 70 private: | 74 private: |
| 71 void AddPages(const PageSettings& setting); | |
| 72 | 75 |
| 73 std::vector<OfflinePageItem> pages_; | 76 std::vector<OfflinePageItem> pages_; |
| 74 | 77 |
| 75 std::unique_ptr<ClientPolicyController> policy_controller_; | 78 std::unique_ptr<ClientPolicyController> policy_controller_; |
| 76 | 79 |
| 77 base::SimpleTestClock* clock_; | 80 base::SimpleTestClock* clock_; |
| 78 | 81 |
| 79 TestOptions options_; | 82 TestOptions options_; |
| 80 | 83 |
| 81 int64_t next_offline_id_; | 84 int64_t next_offline_id_; |
| 82 }; | 85 }; |
|
fgorski
2016/05/19 04:14:22
nit: empty line
romax
2016/05/19 18:34:43
Done.
| |
| 86 void StorageManagerTestClient::DeletePagesByOfflineId( | |
| 87 const std::vector<int64_t>& offline_ids, | |
| 88 const DeletePageCallback& callback) { | |
| 89 if (options_ & TestOptions::DELETE_FAILURE) { | |
| 90 callback.Run(DeletePageResult::STORE_FAILURE); | |
|
fgorski
2016/05/19 04:14:23
consider putting return; here, skipping else
romax
2016/05/19 18:34:42
Done.
| |
| 91 } else { | |
| 92 std::set<int64_t> s(offline_ids.begin(), offline_ids.end()); | |
| 93 pages_.erase(std::remove_if(pages_.begin(), pages_.end(), | |
| 94 [&s](const OfflinePageItem& page) -> bool { | |
| 95 return s.count(page.offline_id) != 0; | |
| 96 }), | |
| 97 pages_.end()); | |
| 98 callback.Run(DeletePageResult::SUCCESS); | |
| 99 } | |
| 100 } | |
|
fgorski
2016/05/19 04:14:22
nit: empty line
romax
2016/05/19 18:34:42
Done.
| |
| 101 int64_t StorageManagerTestClient::GetTotalSize() const { | |
| 102 int64_t res = 0; | |
| 103 for (const auto& page : pages_) | |
| 104 res += page.file_size; | |
| 105 return res; | |
| 106 } | |
| 83 | 107 |
| 84 StorageManagerTestClient::~StorageManagerTestClient() {} | 108 StorageManagerTestClient::~StorageManagerTestClient() {} |
| 85 | 109 |
| 86 void StorageManagerTestClient::AddPages(const PageSettings& setting) { | 110 void StorageManagerTestClient::AddPages(const PageSettings& setting) { |
| 87 std::string name_space = setting.name_space; | 111 std::string name_space = setting.name_space; |
| 88 int fresh_pages_count = setting.fresh_pages_count; | 112 int fresh_pages_count = setting.fresh_pages_count; |
| 89 int expired_pages_count = setting.expired_pages_count; | 113 int expired_pages_count = setting.expired_pages_count; |
| 90 base::Time now = clock()->Now(); | 114 base::Time now = clock()->Now(); |
| 91 // Fresh pages. | 115 // Fresh pages. |
| 92 for (int i = 0; i < fresh_pages_count; i++) { | 116 for (int i = 0; i < fresh_pages_count; i++) { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 105 ClientId(name_space, std::to_string(next_offline_id_)), | 129 ClientId(name_space, std::to_string(next_offline_id_)), |
| 106 base::FilePath(kFilePath), kTestFileSize); | 130 base::FilePath(kFilePath), kTestFileSize); |
| 107 next_offline_id_++; | 131 next_offline_id_++; |
| 108 page.last_access_time = now - | 132 page.last_access_time = now - |
| 109 policy_controller_->GetPolicy(name_space) | 133 policy_controller_->GetPolicy(name_space) |
| 110 .lifetime_policy.expiration_period; | 134 .lifetime_policy.expiration_period; |
| 111 pages_.push_back(page); | 135 pages_.push_back(page); |
| 112 } | 136 } |
| 113 } | 137 } |
| 114 | 138 |
| 139 class TestArchiveManager : public ArchiveManager { | |
| 140 public: | |
| 141 TestArchiveManager(StorageStats stats) | |
|
fgorski
2016/05/19 04:14:22
mark explicit
romax
2016/05/19 18:34:42
Done.
| |
| 142 : free_space_(stats.free_disk_space), | |
| 143 total_size_(stats.total_archives_size) {} | |
| 144 | |
| 145 void GetStorageStats(const base::Callback< | |
| 146 void(const ArchiveManager::StorageStats& storage_stats)>& | |
| 147 callback) const override { | |
| 148 callback.Run({free_space_, total_size_}); | |
| 149 } | |
| 150 | |
| 151 void SetValues(ArchiveManager::StorageStats stats) { | |
| 152 free_space_ = stats.free_disk_space; | |
| 153 total_size_ = stats.total_archives_size; | |
| 154 } | |
| 155 | |
| 156 private: | |
| 157 int64_t free_space_; | |
|
fgorski
2016/05/19 04:14:22
Simply Stats stats_; ?
romax
2016/05/19 18:34:43
Done.
| |
| 158 int64_t total_size_; | |
| 159 }; | |
| 160 | |
| 115 class OfflinePageStorageManagerTest : public testing::Test { | 161 class OfflinePageStorageManagerTest : public testing::Test { |
| 116 public: | 162 public: |
| 117 OfflinePageStorageManagerTest(); | 163 OfflinePageStorageManagerTest(); |
| 118 OfflinePageStorageManager* manager() { return manager_.get(); } | 164 OfflinePageStorageManager* manager() { return manager_.get(); } |
| 119 OfflinePageStorageManager::Client* client() { return client_.get(); } | 165 StorageManagerTestClient* test_client() { return client_.get(); } |
| 120 ClientPolicyController* policy_controller() { | 166 ClientPolicyController* policy_controller() { |
| 121 return policy_controller_.get(); | 167 return policy_controller_.get(); |
| 122 } | 168 } |
| 123 void OnPagesCleared(int pages_cleared_count, DeletePageResult result); | 169 TestArchiveManager* test_archive_manager() { return archive_manager_.get(); } |
| 170 void OnPagesCleared(int pages_cleared_count, StorageClearResult result); | |
| 124 void Initialize(const std::vector<PageSettings>& settings, | 171 void Initialize(const std::vector<PageSettings>& settings, |
| 172 StorageStats stats = {kFreeSpaceNormal, 0}, | |
| 125 TestOptions options = TestOptions::DEFAULT); | 173 TestOptions options = TestOptions::DEFAULT); |
| 174 void TryClearPages(); | |
| 126 | 175 |
| 127 // testing::Test | 176 // testing::Test |
| 128 void TearDown() override; | 177 void TearDown() override; |
| 129 | 178 |
| 130 base::SimpleTestClock* clock() { return clock_; } | 179 base::SimpleTestClock* clock() { return clock_; } |
| 131 int last_cleared_page_count() const { return last_cleared_page_count_; } | 180 int last_cleared_page_count() const { return last_cleared_page_count_; } |
| 132 DeletePageResult last_delete_page_result() const { | 181 int total_cleared_times() const { return total_cleared_times_; } |
| 133 return last_delete_page_result_; | 182 StorageClearResult last_storage_clear_result() const { |
| 183 return last_storage_clear_result_; | |
| 134 } | 184 } |
| 135 | 185 |
| 136 private: | 186 private: |
| 137 std::unique_ptr<OfflinePageStorageManager> manager_; | 187 std::unique_ptr<OfflinePageStorageManager> manager_; |
| 138 std::unique_ptr<OfflinePageStorageManager::Client> client_; | 188 std::unique_ptr<StorageManagerTestClient> client_; |
| 139 std::unique_ptr<ClientPolicyController> policy_controller_; | 189 std::unique_ptr<ClientPolicyController> policy_controller_; |
| 190 std::unique_ptr<TestArchiveManager> archive_manager_; | |
| 140 | 191 |
| 141 base::SimpleTestClock* clock_; | 192 base::SimpleTestClock* clock_; |
| 142 | 193 |
| 143 int last_cleared_page_count_; | 194 int last_cleared_page_count_; |
| 144 DeletePageResult last_delete_page_result_; | 195 int total_cleared_times_; |
| 196 StorageClearResult last_storage_clear_result_; | |
| 145 }; | 197 }; |
| 146 | 198 |
| 147 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest() | 199 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest() |
| 148 : policy_controller_(new ClientPolicyController()), | 200 : policy_controller_(new ClientPolicyController()), |
| 149 last_cleared_page_count_(0), | 201 last_cleared_page_count_(0), |
| 150 last_delete_page_result_(DeletePageResult::SUCCESS) {} | 202 total_cleared_times_(0), |
| 203 last_storage_clear_result_(StorageClearResult::SUCCESS) {} | |
| 151 | 204 |
| 152 void OfflinePageStorageManagerTest::Initialize( | 205 void OfflinePageStorageManagerTest::Initialize( |
| 153 const std::vector<PageSettings>& page_settings, | 206 const std::vector<PageSettings>& page_settings, |
| 207 StorageStats stats, | |
| 154 TestOptions options) { | 208 TestOptions options) { |
| 155 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock()); | 209 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock()); |
| 156 clock_ = clock.get(); | 210 clock_ = clock.get(); |
| 157 clock_->SetNow(base::Time::Now()); | 211 clock_->SetNow(base::Time::Now()); |
| 158 client_.reset(new StorageManagerTestClient(page_settings, clock_, options)); | 212 client_.reset(new StorageManagerTestClient(page_settings, clock_, options)); |
| 159 manager_.reset(new OfflinePageStorageManager(client(), policy_controller())); | 213 |
| 214 if (stats.free_disk_space == 0) | |
| 215 stats.free_disk_space = kFreeSpaceNormal; | |
| 216 if (stats.total_archives_size == 0) { | |
| 217 stats.total_archives_size = client_->GetTotalSize(); | |
| 218 } | |
| 219 archive_manager_.reset(new TestArchiveManager(stats)); | |
| 220 manager_.reset(new OfflinePageStorageManager( | |
| 221 client_.get(), policy_controller(), archive_manager_.get())); | |
| 160 manager_->SetClockForTesting(std::move(clock)); | 222 manager_->SetClockForTesting(std::move(clock)); |
| 161 } | 223 } |
| 162 | 224 |
| 225 void OfflinePageStorageManagerTest::TryClearPages() { | |
| 226 manager()->ClearPagesIfNeeded(base::Bind( | |
| 227 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); | |
| 228 } | |
| 229 | |
| 163 void OfflinePageStorageManagerTest::TearDown() { | 230 void OfflinePageStorageManagerTest::TearDown() { |
| 164 manager_.reset(); | 231 manager_.reset(); |
| 165 client_.reset(); | 232 client_.reset(); |
| 166 } | 233 } |
| 167 | 234 |
| 168 void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count, | 235 void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count, |
| 169 DeletePageResult result) { | 236 StorageClearResult result) { |
| 170 last_cleared_page_count_ = pages_cleared_count; | 237 last_cleared_page_count_ = pages_cleared_count; |
| 171 last_delete_page_result_ = result; | 238 total_cleared_times_++; |
| 239 last_storage_clear_result_ = result; | |
| 172 } | 240 } |
| 173 | 241 |
| 174 TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) { | 242 TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) { |
| 175 Initialize(std::vector<PageSettings>( | 243 Initialize(std::vector<PageSettings>( |
| 176 {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}})); | 244 {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}})); |
| 177 clock()->Advance(base::TimeDelta::FromMinutes(30)); | 245 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 178 manager()->ClearPagesIfNeeded(base::Bind( | 246 TryClearPages(); |
| 179 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); | |
| 180 EXPECT_EQ(2, last_cleared_page_count()); | 247 EXPECT_EQ(2, last_cleared_page_count()); |
| 181 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); | 248 EXPECT_EQ(1, total_cleared_times()); |
| 249 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 182 } | 250 } |
| 183 | 251 |
| 184 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) { | 252 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) { |
| 185 Initialize(std::vector<PageSettings>( | 253 Initialize(std::vector<PageSettings>( |
| 186 {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}})); | 254 {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}})); |
| 187 clock()->Advance(base::TimeDelta::FromMinutes(30)); | 255 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 188 manager()->ClearPagesIfNeeded(base::Bind( | 256 TryClearPages(); |
| 189 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); | |
| 190 EXPECT_EQ(45, last_cleared_page_count()); | 257 EXPECT_EQ(45, last_cleared_page_count()); |
| 191 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); | 258 EXPECT_EQ(1, total_cleared_times()); |
| 259 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 192 } | 260 } |
| 193 | 261 |
| 194 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) { | 262 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) { |
| 195 Initialize(std::vector<PageSettings>( | 263 Initialize(std::vector<PageSettings>( |
| 196 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}})); | 264 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}), |
| 197 clock()->Advance(base::TimeDelta::FromMinutes(30)); | 265 {500 * (1 << 20), 0}); |
| 198 manager()->ClearPagesIfNeeded(base::Bind( | 266 clock()->Advance(base::TimeDelta::FromMinutes(30)); |
| 199 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); | 267 TryClearPages(); |
| 200 int last_n_page_limit = policy_controller() | 268 int last_n_page_limit = policy_controller() |
| 201 ->GetPolicy(kLastNNamespace) | 269 ->GetPolicy(kLastNNamespace) |
| 202 .lifetime_policy.page_limit; | 270 .lifetime_policy.page_limit; |
| 203 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); | 271 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); |
| 204 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); | 272 EXPECT_EQ(1, total_cleared_times()); |
| 205 } | 273 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); |
| 274 } | |
| 275 | |
| 276 TEST_F(OfflinePageStorageManagerTest, TestDeletionFailed) { | |
| 277 Initialize(std::vector<PageSettings>( | |
| 278 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}}), | |
| 279 {kFreeSpaceNormal, 0}, TestOptions::DELETE_FAILURE); | |
| 280 TryClearPages(); | |
| 281 EXPECT_EQ(20, last_cleared_page_count()); | |
| 282 EXPECT_EQ(1, total_cleared_times()); | |
| 283 EXPECT_EQ(StorageClearResult::DELETE_FAILURE, last_storage_clear_result()); | |
| 284 } | |
| 285 | |
| 286 TEST_F(OfflinePageStorageManagerTest, TestStorageTimeInterval) { | |
| 287 Initialize(std::vector<PageSettings>( | |
| 288 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}})); | |
| 289 clock()->Advance(base::TimeDelta::FromMinutes(30)); | |
| 290 TryClearPages(); | |
| 291 EXPECT_EQ(20, last_cleared_page_count()); | |
| 292 EXPECT_EQ(1, total_cleared_times()); | |
| 293 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 294 | |
| 295 // Advance clock so we go over the gap, but no expired pages. | |
| 296 clock()->Advance(kClearStorageInterval + base::TimeDelta::FromHours(1)); | |
| 297 TryClearPages(); | |
| 298 EXPECT_EQ(0, last_cleared_page_count()); | |
| 299 EXPECT_EQ(2, total_cleared_times()); | |
| 300 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 301 | |
| 302 // Advance clock so we are still in the gap, should be unnecessary. | |
| 303 clock()->Advance(kClearStorageInterval - base::TimeDelta::FromHours(1)); | |
| 304 TryClearPages(); | |
| 305 EXPECT_EQ(0, last_cleared_page_count()); | |
| 306 EXPECT_EQ(3, total_cleared_times()); | |
| 307 EXPECT_EQ(StorageClearResult::UNNECESSARY, last_storage_clear_result()); | |
| 308 } | |
| 309 | |
| 310 TEST_F(OfflinePageStorageManagerTest, TestClearMultipleTimes) { | |
| 311 Initialize(std::vector<PageSettings>( | |
| 312 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}), | |
| 313 {500 * (1 << 20), 0}); | |
| 314 clock()->Advance(base::TimeDelta::FromMinutes(30)); | |
| 315 LifetimePolicy policy = | |
| 316 policy_controller()->GetPolicy(kLastNNamespace).lifetime_policy; | |
| 317 int last_n_page_limit = policy.page_limit; | |
| 318 | |
| 319 TryClearPages(); | |
| 320 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); | |
| 321 EXPECT_EQ(1, total_cleared_times()); | |
| 322 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 323 | |
| 324 // Advance the clock by expiration period of last_n namespace, should be | |
| 325 // deleting all pages left in the namespace. | |
| 326 clock()->Advance(policy.expiration_period); | |
| 327 TryClearPages(); | |
| 328 EXPECT_EQ(last_n_page_limit, last_cleared_page_count()); | |
| 329 EXPECT_EQ(2, total_cleared_times()); | |
| 330 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 331 | |
| 332 // Only 1 ms passes and no changes in pages, so no need to clear page. | |
| 333 clock()->Advance(base::TimeDelta::FromMilliseconds(1)); | |
| 334 TryClearPages(); | |
| 335 EXPECT_EQ(0, last_cleared_page_count()); | |
| 336 EXPECT_EQ(3, total_cleared_times()); | |
| 337 EXPECT_EQ(StorageClearResult::UNNECESSARY, last_storage_clear_result()); | |
| 338 | |
| 339 // Adding more fresh pages to make it go over limit. | |
| 340 clock()->Advance(base::TimeDelta::FromMinutes(5)); | |
| 341 test_client()->AddPages({kBookmarkNamespace, 400, 0}); | |
| 342 int64_t total_size_before = test_client()->GetTotalSize(); | |
| 343 test_archive_manager()->SetValues({300 * (1 << 20), total_size_before}); | |
| 344 TryClearPages(); | |
| 345 EXPECT_LE(total_size_before * kOfflinePageStorageClearThreshold, | |
| 346 test_client()->GetTotalSize()); | |
| 347 EXPECT_EQ(4, total_cleared_times()); | |
| 348 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 349 | |
| 350 // After more days, all pages should be expired and deleted. | |
| 351 clock()->Advance(base::TimeDelta::FromDays(30)); | |
| 352 TryClearPages(); | |
| 353 EXPECT_EQ(0, test_client()->GetTotalSize()); | |
| 354 EXPECT_EQ(5, total_cleared_times()); | |
| 355 EXPECT_EQ(StorageClearResult::SUCCESS, last_storage_clear_result()); | |
| 356 } | |
| 357 | |
| 206 } // namespace offline_pages | 358 } // namespace offline_pages |
| OLD | NEW |