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

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

Issue 1970953002: [Offline Pages] Adding more expiration logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@interface
Patch Set: More comments. Created 4 years, 7 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 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/time/time.h" 12 #include "base/time/time.h"
12 #include "components/offline_pages/client_policy_controller.h" 13 #include "components/offline_pages/client_policy_controller.h"
13 #include "components/offline_pages/offline_page_item.h" 14 #include "components/offline_pages/offline_page_item.h"
14 #include "components/offline_pages/offline_page_storage_manager.h" 15 #include "components/offline_pages/offline_page_storage_manager.h"
15 #include "components/offline_pages/offline_page_types.h" 16 #include "components/offline_pages/offline_page_types.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 18
18 namespace offline_pages { 19 namespace offline_pages {
19 20
20 namespace { 21 namespace {
21 const char kTestClientNamespace[] = "CLIENT_NAMESPACE"; 22 const char kBookmarkNamespace[] = "bookmark";
23 const char kLastNNamespace[] = "last_n";
22 const GURL kTestUrl("http://example.com"); 24 const GURL kTestUrl("http://example.com");
23 const GURL kTestUrl2("http://other.page.com");
24 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("TEST_FILEPATH"); 25 const base::FilePath::CharType kFilePath[] = FILE_PATH_LITERAL("TEST_FILEPATH");
25 const ClientId kTestClientId1(kTestClientNamespace, "1234");
26 const ClientId kTestClientId2(kTestClientNamespace, "5678");
27 const int64_t kTestFileSize = 876543LL; 26 const int64_t kTestFileSize = 876543LL;
28 const int64_t kOfflineId = 1234LL; 27
29 const int64_t kOfflineId2 = 2345LL; 28 enum TestOptions {
29 DEFAULT = 1 << 0,
30 DELETE_FAILED = 1 << 1,
31 };
32
33 struct PageSettings {
34 std::string name_space;
35 int fresh_pages_count;
36 int expired_pages_count;
37 };
30 } // namespace 38 } // namespace
31 39
32 class StorageManagerTestClient : public OfflinePageStorageManager::Client { 40 class StorageManagerTestClient : public OfflinePageStorageManager::Client {
33 public: 41 public:
34 StorageManagerTestClient() { 42 StorageManagerTestClient(std::vector<PageSettings> page_settings,
35 // Manually adding pages for the fake model. 43 base::SimpleTestClock* clock,
36 // Only the first page is expired. 44 TestOptions options = TestOptions::DEFAULT)
37 pages_.clear(); 45 : policy_controller_(new ClientPolicyController()),
38 pages_.push_back(OfflinePageItem(kTestUrl, kOfflineId, kTestClientId1, 46 clock_(clock),
39 base::FilePath(kFilePath), kTestFileSize)); 47 options_(options),
40 pages_.push_back(OfflinePageItem(kTestUrl2, kOfflineId2, kTestClientId2, 48 next_offline_id_(0) {
41 base::FilePath(kFilePath), kTestFileSize)); 49 for (const auto& setting : page_settings)
42 base::Time now = base::Time::Now(); 50 AddPages(setting);
43 pages_[0].last_access_time = now - base::TimeDelta::FromDays(10);
44 pages_[1].last_access_time = now;
45 } 51 }
46 52
47 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override { 53 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override {
48 callback.Run(pages_); 54 callback.Run(pages_);
49 } 55 }
50 56
51 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids, 57 void DeletePagesByOfflineId(const std::vector<int64_t>& offline_ids,
52 const DeletePageCallback& callback) override { 58 const DeletePageCallback& callback) override {
53 callback.Run(DeletePageResult::SUCCESS); 59 if (options_ & TestOptions::DELETE_FAILED) {
60 callback.Run(DeletePageResult::STORE_FAILURE);
61 } else {
62 callback.Run(DeletePageResult::SUCCESS);
63 }
54 } 64 }
55 65
66 base::SimpleTestClock* clock() { return clock_; }
67
56 private: 68 private:
69 void AddPages(const PageSettings& setting);
70
57 std::vector<OfflinePageItem> pages_; 71 std::vector<OfflinePageItem> pages_;
58 72
59 std::unique_ptr<ClientPolicyController> policy_controller_; 73 std::unique_ptr<ClientPolicyController> policy_controller_;
74
75 base::SimpleTestClock* clock_;
76
77 TestOptions options_;
78
79 int64_t next_offline_id_;
60 }; 80 };
61 81
82 void StorageManagerTestClient::AddPages(const PageSettings& setting) {
83 std::string name_space = setting.name_space;
84 int fresh_pages_count = setting.fresh_pages_count;
85 int expired_pages_count = setting.expired_pages_count;
86 base::Time now = clock()->Now();
87 // Fresh pages.
88 for (int i = 0; i < fresh_pages_count; i++) {
89 OfflinePageItem page =
90 OfflinePageItem(kTestUrl, next_offline_id_,
91 ClientId(name_space, std::to_string(next_offline_id_)),
92 base::FilePath(kFilePath), kTestFileSize);
93 next_offline_id_++;
94 page.last_access_time = now;
95 pages_.push_back(page);
96 }
97 // Expired pages.
98 for (int i = 0; i < expired_pages_count; i++) {
99 OfflinePageItem page =
100 OfflinePageItem(kTestUrl, next_offline_id_,
101 ClientId(name_space, std::to_string(next_offline_id_)),
102 base::FilePath(kFilePath), kTestFileSize);
103 next_offline_id_++;
104 page.last_access_time = now -
105 policy_controller_->GetPolicy(name_space)
106 .lifetime_policy.expiration_period;
107 pages_.push_back(page);
108 }
109 }
110
62 class OfflinePageStorageManagerTest : public testing::Test { 111 class OfflinePageStorageManagerTest : public testing::Test {
63 public: 112 public:
64 OfflinePageStorageManagerTest(); 113 OfflinePageStorageManagerTest();
65 OfflinePageStorageManager* manager() { return manager_.get(); } 114 OfflinePageStorageManager* manager() { return manager_.get(); }
115 OfflinePageStorageManager::Client* client() { return client_.get(); }
116 ClientPolicyController* policy_controller() {
117 return policy_controller_.get();
118 }
66 void OnPagesCleared(int pages_cleared_count, DeletePageResult result); 119 void OnPagesCleared(int pages_cleared_count, DeletePageResult result);
120 void Initialize(const std::vector<PageSettings>& settings,
121 TestOptions options = TestOptions::DEFAULT);
67 122
68 // testing::Test 123 // testing::Test
69 void SetUp() override;
70 void TearDown() override; 124 void TearDown() override;
71 125
126 base::SimpleTestClock* clock() { return clock_; }
72 int last_cleared_page_count() const { return last_cleared_page_count_; } 127 int last_cleared_page_count() const { return last_cleared_page_count_; }
73 DeletePageResult last_delete_page_result() const { 128 DeletePageResult last_delete_page_result() const {
74 return last_delete_page_result_; 129 return last_delete_page_result_;
75 } 130 }
76 131
77 private: 132 private:
78 std::unique_ptr<OfflinePageStorageManager> manager_; 133 std::unique_ptr<OfflinePageStorageManager> manager_;
79 std::unique_ptr<OfflinePageStorageManager::Client> client_; 134 std::unique_ptr<OfflinePageStorageManager::Client> client_;
135 std::unique_ptr<ClientPolicyController> policy_controller_;
136
137 base::SimpleTestClock* clock_;
80 138
81 int last_cleared_page_count_; 139 int last_cleared_page_count_;
82 DeletePageResult last_delete_page_result_; 140 DeletePageResult last_delete_page_result_;
83 }; 141 };
84 142
85 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest() 143 OfflinePageStorageManagerTest::OfflinePageStorageManagerTest()
86 : last_cleared_page_count_(0), 144 : policy_controller_(new ClientPolicyController()),
145 last_cleared_page_count_(0),
87 last_delete_page_result_(DeletePageResult::SUCCESS) {} 146 last_delete_page_result_(DeletePageResult::SUCCESS) {}
88 147
89 void OfflinePageStorageManagerTest::SetUp() { 148 void OfflinePageStorageManagerTest::Initialize(
90 client_.reset(new StorageManagerTestClient()); 149 const std::vector<PageSettings>& page_settings,
91 manager_.reset(new OfflinePageStorageManager(client_.get(), 150 TestOptions options) {
92 new ClientPolicyController())); 151 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock());
152 clock_ = clock.get();
153 clock_->SetNow(base::Time::Now());
154 client_.reset(new StorageManagerTestClient(page_settings, clock_, options));
155 manager_.reset(new OfflinePageStorageManager(client(), policy_controller()));
156 manager_->SetClockForTesting(std::move(clock));
93 } 157 }
94 158
95 void OfflinePageStorageManagerTest::TearDown() { 159 void OfflinePageStorageManagerTest::TearDown() {
96 manager_.reset(); 160 manager_.reset();
97 client_.reset(); 161 client_.reset();
98 } 162 }
99 163
100 void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count, 164 void OfflinePageStorageManagerTest::OnPagesCleared(int pages_cleared_count,
101 DeletePageResult result) { 165 DeletePageResult result) {
102 last_cleared_page_count_ = pages_cleared_count; 166 last_cleared_page_count_ = pages_cleared_count;
103 last_delete_page_result_ = result; 167 last_delete_page_result_ = result;
104 } 168 }
105 169
106 TEST_F(OfflinePageStorageManagerTest, TestClearPages) { 170 TEST_F(OfflinePageStorageManagerTest, TestClearPagesLessThanLimit) {
171 Initialize(std::vector<PageSettings>(
172 {{kBookmarkNamespace, 1, 1}, {kLastNNamespace, 1, 1}}));
173 clock()->Advance(base::TimeDelta::FromMinutes(30));
107 manager()->ClearPagesIfNeeded(base::Bind( 174 manager()->ClearPagesIfNeeded(base::Bind(
108 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this))); 175 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this)));
109 EXPECT_EQ(1, last_cleared_page_count()); 176 EXPECT_EQ(2, last_cleared_page_count());
110 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result()); 177 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result());
111 } 178 }
112 179
180 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreThanLimit) {
181 Initialize(std::vector<PageSettings>(
182 {{kBookmarkNamespace, 10, 15}, {kLastNNamespace, 5, 30}}));
183 clock()->Advance(base::TimeDelta::FromMinutes(30));
184 manager()->ClearPagesIfNeeded(base::Bind(
185 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this)));
186 EXPECT_EQ(45, last_cleared_page_count());
187 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result());
188 }
189
190 TEST_F(OfflinePageStorageManagerTest, TestClearPagesMoreFreshPages) {
191 Initialize(std::vector<PageSettings>(
192 {{kBookmarkNamespace, 30, 0}, {kLastNNamespace, 100, 1}}));
193 clock()->Advance(base::TimeDelta::FromMinutes(30));
194 manager()->ClearPagesIfNeeded(base::Bind(
195 &OfflinePageStorageManagerTest::OnPagesCleared, base::Unretained(this)));
196 int last_n_page_limit = policy_controller()
197 ->GetPolicy(kLastNNamespace)
198 .lifetime_policy.page_limit;
199 EXPECT_EQ(1 + (100 - last_n_page_limit), last_cleared_page_count());
200 EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_page_result());
201 }
113 } // namespace offline_pages 202 } // 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