Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: components/offline_pages/offline_page_storage_manager_unittest.cc

Issue 2006923005: [Offline Pages] Two-step expiration in storage manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more comments, commit ready. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/offline_pages/offline_page_storage_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include <map>
9 #include <vector>
8 10
9 #include "base/bind.h" 11 #include "base/bind.h"
10 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
11 #include "base/test/simple_test_clock.h" 13 #include "base/test/simple_test_clock.h"
12 #include "base/time/time.h" 14 #include "base/time/time.h"
13 #include "components/offline_pages/archive_manager.h" 15 #include "components/offline_pages/archive_manager.h"
14 #include "components/offline_pages/client_policy_controller.h" 16 #include "components/offline_pages/client_policy_controller.h"
15 #include "components/offline_pages/offline_page_item.h" 17 #include "components/offline_pages/offline_page_item.h"
16 #include "components/offline_pages/offline_page_storage_manager.h" 18 #include "components/offline_pages/offline_page_storage_manager.h"
17 #include "components/offline_pages/offline_page_types.h" 19 #include "components/offline_pages/offline_page_types.h"
18 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
19 21
20 using LifetimePolicy = offline_pages::LifetimePolicy; 22 using LifetimePolicy = offline_pages::LifetimePolicy;
21 using ClearStorageResult = 23 using ClearStorageResult =
22 offline_pages::OfflinePageStorageManager::ClearStorageResult; 24 offline_pages::OfflinePageStorageManager::ClearStorageResult;
23 using StorageStats = offline_pages::ArchiveManager::StorageStats; 25 using StorageStats = offline_pages::ArchiveManager::StorageStats;
24 26
25 namespace offline_pages { 27 namespace offline_pages {
26 28
27 namespace { 29 namespace {
28 const char kBookmarkNamespace[] = "bookmark"; 30 const char kBookmarkNamespace[] = "bookmark";
29 const char kLastNNamespace[] = "last_n"; 31 const char kLastNNamespace[] = "last_n";
30 const GURL kTestUrl("http://example.com"); 32 const GURL kTestUrl("http://example.com");
31 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("/data"); 33 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("/data");
32 const int64_t kTestFileSize = 500 * (1 << 10); 34 const int64_t kTestFileSize = 500 * (1 << 10);
33 const int64_t kFreeSpaceNormal = 100 * (1 << 20); 35 const int64_t kFreeSpaceNormal = 100 * (1 << 20);
34 36
35 enum TestOptions { 37 enum TestOptions {
36 DEFAULT = 1 << 0, 38 DEFAULT = 1 << 0,
37 DELETE_FAILURE = 1 << 1, 39 EXPIRE_FAILURE = 1 << 1,
40 DELETE_FAILURE = 1 << 2,
41 EXPIRE_AND_DELETE_FAILURES = EXPIRE_FAILURE | DELETE_FAILURE,
38 }; 42 };
39 43
40 struct PageSettings { 44 struct PageSettings {
41 std::string name_space; 45 std::string name_space;
42 int fresh_pages_count; 46 int fresh_pages_count;
43 int expired_pages_count; 47 int expired_pages_count;
44 }; 48 };
45 } // namespace 49 } // namespace
46 50
47 class StorageManagerTestClient : public OfflinePageStorageManager::Client { 51 class StorageManagerTestClient : public OfflinePageStorageManager::Client {
48 public: 52 public:
49 StorageManagerTestClient(std::vector<PageSettings> page_settings, 53 StorageManagerTestClient(std::vector<PageSettings> page_settings,
50 base::SimpleTestClock* clock, 54 base::SimpleTestClock* clock,
51 TestOptions options = TestOptions::DEFAULT) 55 TestOptions options = TestOptions::DEFAULT)
52 : policy_controller_(new ClientPolicyController()), 56 : policy_controller_(new ClientPolicyController()),
53 clock_(clock), 57 clock_(clock),
54 options_(options), 58 options_(options),
55 next_offline_id_(0) { 59 next_offline_id_(0) {
56 for (const auto& setting : page_settings) 60 for (const auto& setting : page_settings)
57 AddPages(setting); 61 AddPages(setting);
58 } 62 }
59 63
60 ~StorageManagerTestClient() override; 64 ~StorageManagerTestClient() override;
61 65
62 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override { 66 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override {
63 callback.Run(pages_); 67 MultipleOfflinePageItemResult pages;
68 for (const auto& id_page_pair : pages_)
69 pages.push_back(id_page_pair.second);
70 callback.Run(pages);
64 } 71 }
65 72
66 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids, 73 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids,
67 const DeletePageCallback& callback) override; 74 const DeletePageCallback& callback) override;
75
76 void ExpirePages(const std::vector<int64_t>& offline_ids,
77 const base::Time& expiration_time,
78 const base::Callback<void(bool)>& callback) override;
79
68 void AddPages(const PageSettings& setting); 80 void AddPages(const PageSettings& setting);
69 81
82 const std::vector<OfflinePageItem>& GetRemovedPages() {
83 return removed_pages_;
84 }
85
70 int64_t GetTotalSize() const; 86 int64_t GetTotalSize() const;
71 87
72 base::SimpleTestClock* clock() { return clock_; } 88 base::SimpleTestClock* clock() { return clock_; }
73 89
74 private: 90 private:
91 std::map<int64_t, OfflinePageItem> pages_;
75 92
76 std::vector<OfflinePageItem> pages_; 93 std::vector<OfflinePageItem> removed_pages_;
77 94
78 std::unique_ptr<ClientPolicyController> policy_controller_; 95 std::unique_ptr<ClientPolicyController> policy_controller_;
79 96
80 base::SimpleTestClock* clock_; 97 base::SimpleTestClock* clock_;
81 98
82 TestOptions options_; 99 TestOptions options_;
83 100
84 int64_t next_offline_id_; 101 int64_t next_offline_id_;
85 }; 102 };
86 103
104 void StorageManagerTestClient::ExpirePages(
105 const std::vector<int64_t>& offline_ids,
106 const base::Time& expiration_time,
107 const base::Callback<void(bool)>& callback) {
108 for (const auto id : offline_ids)
109 pages_.at(id).expiration_time = expiration_time;
110 if (options_ & TestOptions::EXPIRE_FAILURE) {
111 callback.Run(false);
112 return;
113 }
114 callback.Run(true);
115 }
116
87 void StorageManagerTestClient::DeletePagesByOfflineId( 117 void StorageManagerTestClient::DeletePagesByOfflineId(
88 const std::vector<int64_t>& offline_ids, 118 const std::vector<int64_t>& offline_ids,
89 const DeletePageCallback& callback) { 119 const DeletePageCallback& callback) {
90 if (options_ & TestOptions::DELETE_FAILURE) { 120 if (options_ & TestOptions::DELETE_FAILURE) {
91 callback.Run(DeletePageResult::STORE_FAILURE); 121 callback.Run(DeletePageResult::STORE_FAILURE);
92 return; 122 return;
93 } 123 }
94 std::set<int64_t> s(offline_ids.begin(), offline_ids.end()); 124 for (const auto id : offline_ids) {
95 pages_.erase(std::remove_if(pages_.begin(), pages_.end(), 125 removed_pages_.push_back(pages_.at(id));
96 [&s](const OfflinePageItem& page) -> bool { 126 pages_.erase(id);
97 return s.count(page.offline_id) != 0; 127 }
98 }),
99 pages_.end());
100 callback.Run(DeletePageResult::SUCCESS); 128 callback.Run(DeletePageResult::SUCCESS);
101 } 129 }
102 130
103 int64_t StorageManagerTestClient::GetTotalSize() const { 131 int64_t StorageManagerTestClient::GetTotalSize() const {
104 int64_t res = 0; 132 int64_t res = 0;
105 for (const auto& page : pages_) 133 for (const auto& id_page_pair : pages_) {
106 res += page.file_size; 134 if (!id_page_pair.second.IsExpired())
135 res += id_page_pair.second.file_size;
136 }
107 return res; 137 return res;
108 } 138 }
109 139
110 StorageManagerTestClient::~StorageManagerTestClient() {} 140 StorageManagerTestClient::~StorageManagerTestClient() {}
111 141
112 void StorageManagerTestClient::AddPages(const PageSettings& setting) { 142 void StorageManagerTestClient::AddPages(const PageSettings& setting) {
113 std::string name_space = setting.name_space; 143 std::string name_space = setting.name_space;
114 int fresh_pages_count = setting.fresh_pages_count; 144 int fresh_pages_count = setting.fresh_pages_count;
115 int expired_pages_count = setting.expired_pages_count; 145 int expired_pages_count = setting.expired_pages_count;
116 base::Time now = clock()->Now(); 146 base::Time now = clock()->Now();
117 // Fresh pages. 147 // Fresh pages.
118 for (int i = 0; i < fresh_pages_count; i++) { 148 for (int i = 0; i < fresh_pages_count; i++) {
119 OfflinePageItem page = 149 OfflinePageItem page =
120 OfflinePageItem(kTestUrl, next_offline_id_, 150 OfflinePageItem(kTestUrl, next_offline_id_,
121 ClientId(name_space, std::to_string(next_offline_id_)), 151 ClientId(name_space, std::to_string(next_offline_id_)),
122 base::FilePath(kFilePath), kTestFileSize); 152 base::FilePath(kFilePath), kTestFileSize);
153 page.last_access_time = now;
154 pages_[next_offline_id_] = page;
123 next_offline_id_++; 155 next_offline_id_++;
124 page.last_access_time = now;
125 pages_.push_back(page);
126 } 156 }
127 // Expired pages. 157 // Expired pages.
128 for (int i = 0; i < expired_pages_count; i++) { 158 for (int i = 0; i < expired_pages_count; i++) {
129 OfflinePageItem page = 159 OfflinePageItem page =
130 OfflinePageItem(kTestUrl, next_offline_id_, 160 OfflinePageItem(kTestUrl, next_offline_id_,
131 ClientId(name_space, std::to_string(next_offline_id_)), 161 ClientId(name_space, std::to_string(next_offline_id_)),
132 base::FilePath(kFilePath), kTestFileSize); 162 base::FilePath(kFilePath), kTestFileSize);
133 next_offline_id_++;
134 page.last_access_time = now - 163 page.last_access_time = now -
135 policy_controller_->GetPolicy(name_space) 164 policy_controller_->GetPolicy(name_space)
136 .lifetime_policy.expiration_period; 165 .lifetime_policy.expiration_period;
137 pages_.push_back(page); 166 pages_[next_offline_id_] = page;
167 next_offline_id_++;
138 } 168 }
139 } 169 }
140 170
141 class TestArchiveManager : public ArchiveManager { 171 class TestArchiveManager : public ArchiveManager {
142 public: 172 public:
143 explicit TestArchiveManager(StorageStats stats) : stats_(stats) {} 173 explicit TestArchiveManager(StorageStats stats) : stats_(stats) {}
144 174
145 void GetStorageStats(const base::Callback< 175 void GetStorageStats(const base::Callback<
146 void(const ArchiveManager::StorageStats& storage_stats)>& 176 void(const ArchiveManager::StorageStats& storage_stats)>&
147 callback) const override { 177 callback) const override {
148 callback.Run(stats_); 178 callback.Run(stats_);
149 } 179 }
150 180
151 void SetValues(ArchiveManager::StorageStats stats) { stats_ = stats; } 181 void SetValues(ArchiveManager::StorageStats stats) { stats_ = stats; }
152 182
153 private: 183 private:
154 StorageStats stats_; 184 StorageStats stats_;
155 }; 185 };
156 186
157 class OfflinePageStorageManagerTest : public testing::Test { 187 class OfflinePageStorageManagerTest : public testing::Test {
158 public: 188 public:
159 OfflinePageStorageManagerTest(); 189 OfflinePageStorageManagerTest();
160 OfflinePageStorageManager* manager() { return manager_.get(); } 190 OfflinePageStorageManager* manager() { return manager_.get(); }
161 StorageManagerTestClient* test_client() { return client_.get(); } 191 StorageManagerTestClient* client() { return client_.get(); }
162 ClientPolicyController* policy_controller() { 192 ClientPolicyController* policy_controller() {
163 return policy_controller_.get(); 193 return policy_controller_.get();
164 } 194 }
165 TestArchiveManager* test_archive_manager() { return archive_manager_.get(); } 195 TestArchiveManager* test_archive_manager() { return archive_manager_.get(); }
166 void OnPagesCleared(int pages_cleared_count, ClearStorageResult result); 196 void OnPagesCleared(size_t pages_cleared_count, ClearStorageResult result);
167 void Initialize(const std::vector<PageSettings>& settings, 197 void Initialize(const std::vector<PageSettings>& settings,
168 StorageStats stats = {kFreeSpaceNormal, 0}, 198 StorageStats stats = {kFreeSpaceNormal, 0},
169 TestOptions options = TestOptions::DEFAULT); 199 TestOptions options = TestOptions::DEFAULT);
170 void TryClearPages(); 200 void TryClearPages();
171 201
172 // testing::Test 202 // testing::Test
173 void TearDown() override; 203 void TearDown() override;
174 204
175 base::SimpleTestClock* clock() { return clock_; } 205 base::SimpleTestClock* clock() { return clock_; }
176 int last_cleared_page_count() const { return last_cleared_page_count_; } 206 int last_cleared_page_count() const {
207 return static_cast<int>(last_cleared_page_count_);
208 }
177 int total_cleared_times() const { return total_cleared_times_; } 209 int total_cleared_times() const { return total_cleared_times_; }
178 ClearStorageResult last_clear_storage_result() const { 210 ClearStorageResult last_clear_storage_result() const {
179 return last_clear_storage_result_; 211 return last_clear_storage_result_;
180 } 212 }
181 213
182 private: 214 private:
183 std::unique_ptr<OfflinePageStorageManager> manager_; 215 std::unique_ptr<OfflinePageStorageManager> manager_;
184 std::unique_ptr<StorageManagerTestClient> client_; 216 std::unique_ptr<StorageManagerTestClient> client_;
185 std::unique_ptr<ClientPolicyController> policy_controller_; 217 std::unique_ptr<ClientPolicyController> policy_controller_;
186 std::unique_ptr<TestArchiveManager> archive_manager_; 218 std::unique_ptr<TestArchiveManager> archive_manager_;
187 219
188 base::SimpleTestClock* clock_; 220 base::SimpleTestClock* clock_;
189 221
190 int last_cleared_page_count_; 222 size_t last_cleared_page_count_;
191 int total_cleared_times_; 223 int total_cleared_times_;
192 ClearStorageResult last_clear_storage_result_; 224 ClearStorageResult last_clear_storage_result_;
193 }; 225 };
194 226
195 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest() 227 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest()
196 : policy_controller_(new ClientPolicyController()), 228 : policy_controller_(new ClientPolicyController()),
197 last_cleared_page_count_(0), 229 last_cleared_page_count_(0),
198 total_cleared_times_(0), 230 total_cleared_times_(0),
199 last_clear_storage_result_(ClearStorageResult::SUCCESS) {} 231 last_clear_storage_result_(ClearStorageResult::SUCCESS) {}
200 232
(...skipping 20 matching lines...) Expand all
221 void OfflinePageStorageManagerTest::TryClearPages() { 253 void OfflinePageStorageManagerTest::TryClearPages() {
222 manager()->ClearPagesIfNeeded(base::Bind( 254 manager()->ClearPagesIfNeeded(base::Bind(
223 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); 255 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this)));
224 } 256 }
225 257
226 void OfflinePageStorageManagerTest::TearDown() { 258 void OfflinePageStorageManagerTest::TearDown() {
227 manager_.reset(); 259 manager_.reset();
228 client_.reset(); 260 client_.reset();
229 } 261 }
230 262
231 void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count, 263 void OfflinePageStorageManagerTest::OnPagesCleared(size_t pages_cleared_count,
232 ClearStorageResult result) { 264 ClearStorageResult result) {
233 last_cleared_page_count_ = pages_cleared_count; 265 last_cleared_page_count_ = pages_cleared_count;
234 total_cleared_times_++; 266 total_cleared_times_++;
235 last_clear_storage_result_ = result; 267 last_clear_storage_result_ = result;
236 } 268 }
237 269
238 TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) { 270 TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) {
239 Initialize(std::vector<PageSettings>( 271 Initialize(std::vector<PageSettings>(
240 {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}})); 272 {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}}));
241 clock()->Advance(base::TimeDelta::FromMinutes(30)); 273 clock()->Advance(base::TimeDelta::FromMinutes(30));
242 TryClearPages(); 274 TryClearPages();
243 EXPECT_EQ(2, last_cleared_page_count()); 275 EXPECT_EQ(2, last_cleared_page_count());
244 EXPECT_EQ(1, total_cleared_times()); 276 EXPECT_EQ(1, total_cleared_times());
245 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 277 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
278 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
246 } 279 }
247 280
248 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) { 281 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) {
249 Initialize(std::vector<PageSettings>( 282 Initialize(std::vector<PageSettings>(
250 {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}})); 283 {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}}));
251 clock()->Advance(base::TimeDelta::FromMinutes(30)); 284 clock()->Advance(base::TimeDelta::FromMinutes(30));
252 TryClearPages(); 285 TryClearPages();
253 EXPECT_EQ(45, last_cleared_page_count()); 286 EXPECT_EQ(45, last_cleared_page_count());
254 EXPECT_EQ(1, total_cleared_times()); 287 EXPECT_EQ(1, total_cleared_times());
255 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 288 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
289 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
256 } 290 }
257 291
258 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) { 292 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) {
259 Initialize(std::vector<PageSettings>( 293 Initialize(std::vector<PageSettings>(
260 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}), 294 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}),
261 {500 * (1 << 20), 0}); 295 {500 * (1 << 20), 0});
262 clock()->Advance(base::TimeDelta::FromMinutes(30)); 296 clock()->Advance(base::TimeDelta::FromMinutes(30));
263 TryClearPages(); 297 TryClearPages();
264 int last_n_page_limit = policy_controller() 298 int last_n_page_limit = static_cast<int>(policy_controller()
265 ->GetPolicy(kLastNNamespace) 299 ->GetPolicy(kLastNNamespace)
266 .lifetime_policy.page_limit; 300 .lifetime_policy.page_limit);
267 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); 301 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count());
268 EXPECT_EQ(1, total_cleared_times()); 302 EXPECT_EQ(1, total_cleared_times());
269 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 303 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
304 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
270 } 305 }
271 306
272 TEST_F(OfflinePageStorageManagerTest, TestDeletionFailed) { 307 TEST_F(OfflinePageStorageManagerTest, TestDeletionFailed) {
273 Initialize(std::vector<PageSettings>( 308 Initialize(std::vector<PageSettings>(
274 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}}), 309 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}}),
275 {kFreeSpaceNormal, 0}, TestOptions::DELETE_FAILURE); 310 {kFreeSpaceNormal, 0}, TestOptions::DELETE_FAILURE);
276 TryClearPages(); 311 TryClearPages();
277 EXPECT_EQ(20, last_cleared_page_count()); 312 EXPECT_EQ(20, last_cleared_page_count());
278 EXPECT_EQ(1, total_cleared_times()); 313 EXPECT_EQ(1, total_cleared_times());
279 EXPECT_EQ(ClearStorageResult::DELETE_FAILURE, last_clear_storage_result()); 314 EXPECT_EQ(ClearStorageResult::DELETE_FAILURE, last_clear_storage_result());
315 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
316 }
317
318 TEST_F(OfflinePageStorageManagerTest, TestRemoveFromStoreFailure) {
319 Initialize(std::vector<PageSettings>({{kBookmarkNamespace, 10, 10}}), {0, 0},
320 TestOptions::EXPIRE_FAILURE);
321 clock()->Advance(base::TimeDelta::FromMinutes(30));
322 TryClearPages();
323 EXPECT_EQ(10, last_cleared_page_count());
324 EXPECT_EQ(1, total_cleared_times());
325 EXPECT_EQ(ClearStorageResult::EXPIRE_FAILURE, last_clear_storage_result());
326 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
327 }
328
329 TEST_F(OfflinePageStorageManagerTest, TestBothFailure) {
330 Initialize(std::vector<PageSettings>({{kBookmarkNamespace, 10, 10}}), {0, 0},
331 TestOptions::EXPIRE_AND_DELETE_FAILURES);
332 clock()->Advance(base::TimeDelta::FromMinutes(30));
333 TryClearPages();
334 EXPECT_EQ(ClearStorageResult::EXPIRE_AND_DELETE_FAILURES,
335 last_clear_storage_result());
280 } 336 }
281 337
282 TEST_F(OfflinePageStorageManagerTest, TestStorageTimeInterval) { 338 TEST_F(OfflinePageStorageManagerTest, TestStorageTimeInterval) {
283 Initialize(std::vector<PageSettings>( 339 Initialize(std::vector<PageSettings>(
284 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}})); 340 {{kBookmarkNamespace, 10, 10}, {kLastNNamespace, 10, 10}}));
285 clock()->Advance(base::TimeDelta::FromMinutes(30)); 341 clock()->Advance(base::TimeDelta::FromMinutes(30));
286 TryClearPages(); 342 TryClearPages();
287 EXPECT_EQ(20, last_cleared_page_count()); 343 EXPECT_EQ(20, last_cleared_page_count());
288 EXPECT_EQ(1, total_cleared_times()); 344 EXPECT_EQ(1, total_cleared_times());
289 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 345 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
346 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
290 347
291 // Advance clock so we go over the gap, but no expired pages. 348 // Advance clock so we go over the gap, but no expired pages.
292 clock()->Advance(kClearStorageInterval + base::TimeDelta::FromHours(1)); 349 clock()->Advance(kClearStorageInterval + base::TimeDelta::FromMinutes(1));
293 TryClearPages(); 350 TryClearPages();
294 EXPECT_EQ(0, last_cleared_page_count()); 351 EXPECT_EQ(0, last_cleared_page_count());
295 EXPECT_EQ(2, total_cleared_times()); 352 EXPECT_EQ(2, total_cleared_times());
296 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 353 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
354 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
297 355
298 // Advance clock so we are still in the gap, should be unnecessary. 356 // Advance clock so we are still in the gap, should be unnecessary.
299 clock()->Advance(kClearStorageInterval - base::TimeDelta::FromHours(1)); 357 clock()->Advance(kClearStorageInterval - base::TimeDelta::FromMinutes(1));
300 TryClearPages(); 358 TryClearPages();
301 EXPECT_EQ(0, last_cleared_page_count()); 359 EXPECT_EQ(0, last_cleared_page_count());
302 EXPECT_EQ(3, total_cleared_times()); 360 EXPECT_EQ(3, total_cleared_times());
303 EXPECT_EQ(ClearStorageResult::UNNECESSARY, last_clear_storage_result()); 361 EXPECT_EQ(ClearStorageResult::UNNECESSARY, last_clear_storage_result());
362 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
363 }
364
365 TEST_F(OfflinePageStorageManagerTest, TestTwoStepExpiration) {
366 Initialize(std::vector<PageSettings>({{kBookmarkNamespace, 10, 10}}));
367 clock()->Advance(base::TimeDelta::FromMinutes(30));
368 TryClearPages();
369 EXPECT_EQ(10, last_cleared_page_count());
370 EXPECT_EQ(1, total_cleared_times());
371 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
372 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
373
374 clock()->Advance(kRemovePageItemInterval + base::TimeDelta::FromDays(1));
375 TryClearPages();
376 EXPECT_EQ(10, last_cleared_page_count());
377 EXPECT_EQ(2, total_cleared_times());
378 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
379 EXPECT_EQ(10, static_cast<int>(client()->GetRemovedPages().size()));
304 } 380 }
305 381
306 TEST_F(OfflinePageStorageManagerTest, TestClearMultipleTimes) { 382 TEST_F(OfflinePageStorageManagerTest, TestClearMultipleTimes) {
307 Initialize(std::vector<PageSettings>( 383 Initialize(std::vector<PageSettings>(
308 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}), 384 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}),
309 {500 * (1 << 20), 0}); 385 {500 * (1 << 20), 0});
310 clock()->Advance(base::TimeDelta::FromMinutes(30)); 386 clock()->Advance(base::TimeDelta::FromMinutes(30));
311 LifetimePolicy policy = 387 LifetimePolicy policy =
312 policy_controller()->GetPolicy(kLastNNamespace).lifetime_policy; 388 policy_controller()->GetPolicy(kLastNNamespace).lifetime_policy;
313 int last_n_page_limit = policy.page_limit; 389 int last_n_page_limit = static_cast<int>(policy.page_limit);
314 390
315 TryClearPages(); 391 TryClearPages();
316 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count()); 392 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count());
317 EXPECT_EQ(1, total_cleared_times()); 393 EXPECT_EQ(1, total_cleared_times());
318 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 394 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
395 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
319 396
320 // Advance the clock by expiration period of last_n namespace, should be 397 // Advance the clock by expiration period of last_n namespace, should be
321 // deleting all pages left in the namespace. 398 // expiring all pages left in the namespace.
322 clock()->Advance(policy.expiration_period); 399 clock()->Advance(policy.expiration_period);
323 TryClearPages(); 400 TryClearPages();
324 EXPECT_EQ(last_n_page_limit, last_cleared_page_count()); 401 EXPECT_EQ(last_n_page_limit, last_cleared_page_count());
325 EXPECT_EQ(2, total_cleared_times()); 402 EXPECT_EQ(2, total_cleared_times());
326 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 403 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
404 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
327 405
328 // Only 1 ms passes and no changes in pages, so no need to clear page. 406 // Only 1 ms passes and no changes in pages, so no need to clear page.
329 clock()->Advance(base::TimeDelta::FromMilliseconds(1)); 407 clock()->Advance(base::TimeDelta::FromMilliseconds(1));
330 TryClearPages(); 408 TryClearPages();
331 EXPECT_EQ(0, last_cleared_page_count()); 409 EXPECT_EQ(0, last_cleared_page_count());
332 EXPECT_EQ(3, total_cleared_times()); 410 EXPECT_EQ(3, total_cleared_times());
333 EXPECT_EQ(ClearStorageResult::UNNECESSARY, last_clear_storage_result()); 411 EXPECT_EQ(ClearStorageResult::UNNECESSARY, last_clear_storage_result());
412 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
334 413
335 // Adding more fresh pages to make it go over limit. 414 // Adding more fresh pages to make it go over limit.
336 clock()->Advance(base::TimeDelta::FromMinutes(5)); 415 clock()->Advance(base::TimeDelta::FromMinutes(5));
337 test_client()->AddPages({kBookmarkNamespace, 400, 0}); 416 client()->AddPages({kBookmarkNamespace, 400, 0});
338 int64_t total_size_before = test_client()->GetTotalSize(); 417 int64_t total_size_before = client()->GetTotalSize();
339 test_archive_manager()->SetValues({300 * (1 << 20), total_size_before}); 418 int64_t available_space = 300 * (1 << 20); // 300 MB
419 test_archive_manager()->SetValues({available_space, total_size_before});
420 EXPECT_GE(total_size_before,
421 kOfflinePageStorageLimit * (available_space + total_size_before));
340 TryClearPages(); 422 TryClearPages();
341 EXPECT_LE(total_size_before * kOfflinePageStorageClearThreshold, 423 EXPECT_LE(total_size_before * kOfflinePageStorageClearThreshold,
342 test_client()->GetTotalSize()); 424 client()->GetTotalSize());
343 EXPECT_EQ(4, total_cleared_times()); 425 EXPECT_EQ(4, total_cleared_times());
344 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 426 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
427 EXPECT_EQ(0, static_cast<int>(client()->GetRemovedPages().size()));
428 int expired_page_count = last_cleared_page_count();
345 429
346 // After more days, all pages should be expired and deleted. 430 // After more days, all pages should be expired and .
347 clock()->Advance(base::TimeDelta::FromDays(30)); 431 clock()->Advance(kRemovePageItemInterval + base::TimeDelta::FromDays(1));
348 TryClearPages(); 432 TryClearPages();
349 EXPECT_EQ(0, test_client()->GetTotalSize()); 433 EXPECT_EQ(0, client()->GetTotalSize());
350 EXPECT_EQ(5, total_cleared_times()); 434 EXPECT_EQ(5, total_cleared_times());
351 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result()); 435 EXPECT_EQ(ClearStorageResult::SUCCESS, last_clear_storage_result());
436 // Number of removed pages should be the ones expired above and all the pages
437 // initially created for last_n namespace.
438 EXPECT_EQ(expired_page_count + 101,
439 static_cast<int>(client()->GetRemovedPages().size()));
352 } 440 }
353 441
354 } // namespace offline_pages 442 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/offline_page_storage_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698