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

Side by Side Diff: components/offline_pages/core/cached_offline_page_utils_unittest.cc

Issue 2860573004: [Offline Pages] Add cached offline page utils and show usage in settings. (Closed)
Patch Set: Created 3 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/offline_pages/core/cached_offline_page_utils.h"
6
7 #include <stdint.h>
8 #include <map>
9 #include <vector>
10
11 #include "base/bind.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/test/simple_test_clock.h"
14 #include "base/time/time.h"
15 #include "components/offline_pages/core/client_policy_controller.h"
16 #include "components/offline_pages/core/offline_page_item.h"
17 #include "components/offline_pages/core/offline_page_model_query.h"
18 #include "components/offline_pages/core/offline_page_types.h"
19 #include "components/offline_pages/core/stub_offline_page_model.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 namespace offline_pages {
23
24 namespace {
25 // Constants for test OfflinePageItems.
26 const char kTemporaryNamespace[] = "temporary_namespace";
27 const char kPersistentNamespace[] = "persistent_namespace";
28 const GURL kTestUrl("http://foo.com/bar.html");
29 const GURL kTestUrl2("http://bar.com/foo)");
30 const int64_t kOfflineId1 = 1234LL;
31 const int64_t kOfflineId2 = 5678LL;
32 const int64_t kOfflineId3 = 42LL;
33 const ClientId kTempClientId1(kTemporaryNamespace, "1234");
34 const ClientId kTempClientId2(kTemporaryNamespace, "5678");
35 const ClientId kPersistentClientId(kPersistentNamespace, "42");
36 const int64_t kTestFileSize1 = 131415LL;
37 const int64_t kTestFileSize2 = 666666LL;
38 const base::FilePath kTestFilePath =
39 base::FilePath(FILE_PATH_LITERAL("file_path"));
40 } // namespace
41
42 class CachedOfflinePageTestModel : public StubOfflinePageModel {
43 public:
44 CachedOfflinePageTestModel();
45 ~CachedOfflinePageTestModel() override;
46
47 void GetPagesMatchingQuery(
48 std::unique_ptr<OfflinePageModelQuery> query,
49 const MultipleOfflinePageItemCallback& callback) override;
50 void DeletePagesMatchingQuery(std::unique_ptr<OfflinePageModelQuery> query,
51 const DeletePageCallback& callback) override;
52 void GetAllPages(const MultipleOfflinePageItemCallback& callback) override;
53
54 ClientPolicyController* GetPolicyController() override;
55
56 void AddOfflinePage(const OfflinePageItem& page);
57
58 private:
59 std::map<int64_t, OfflinePageItem> offline_pages_;
60 std::unique_ptr<ClientPolicyController> policy_controller_;
61 };
62
63 CachedOfflinePageTestModel::CachedOfflinePageTestModel()
64 : policy_controller_(new ClientPolicyController()) {
65 // Adds the policies for test namespaces.
66 policy_controller_->AddPolicyForTest(
67 kTemporaryNamespace,
68 OfflinePageClientPolicyBuilder(kTemporaryNamespace,
69 LifetimePolicy::LifetimeType::TEMPORARY,
70 kUnlimitedPages, kUnlimitedPages));
71 policy_controller_->AddPolicyForTest(
72 kPersistentNamespace,
73 OfflinePageClientPolicyBuilder(kPersistentNamespace,
74 LifetimePolicy::LifetimeType::PERSISTENT,
75 kUnlimitedPages, kUnlimitedPages)
76 .SetIsRemovedOnCacheReset(false));
77 }
78
79 CachedOfflinePageTestModel::~CachedOfflinePageTestModel() {}
80
81 void CachedOfflinePageTestModel::GetPagesMatchingQuery(
82 std::unique_ptr<OfflinePageModelQuery> query,
83 const MultipleOfflinePageItemCallback& callback) {
84 std::vector<OfflinePageItem> result;
85 for (const auto& page : offline_pages_) {
86 if (query->Matches(page.second))
87 result.push_back(page.second);
88 }
89 callback.Run(result);
90 }
91
92 void CachedOfflinePageTestModel::DeletePagesMatchingQuery(
93 std::unique_ptr<OfflinePageModelQuery> query,
94 const DeletePageCallback& callback) {
95 auto iter = offline_pages_.begin();
96 while (iter != offline_pages_.end()) {
97 if (query->Matches(iter->second))
98 iter = offline_pages_.erase(iter);
99 else
100 ++iter;
101 }
102 callback.Run(DeletePageResult::SUCCESS);
103 }
104
105 void CachedOfflinePageTestModel::GetAllPages(
106 const MultipleOfflinePageItemCallback& callback) {
107 MultipleOfflinePageItemResult result;
carlosk 2017/05/03 18:13:52 nit: use either MultipleOfflinePageItemResult (her
romax 2017/05/03 19:46:22 Done.
108 for (const auto& page : offline_pages_)
109 result.push_back(page.second);
110 callback.Run(result);
111 }
112
113 ClientPolicyController* CachedOfflinePageTestModel::GetPolicyController() {
114 return policy_controller_.get();
115 }
116
117 void CachedOfflinePageTestModel::AddOfflinePage(const OfflinePageItem& page) {
118 offline_pages_[page.offline_id] = page;
119 }
120
121 class CachedOfflinePageUtilsTest
122 : public testing::Test,
123 public base::SupportsWeakPtr<CachedOfflinePageUtilsTest> {
124 public:
125 CachedOfflinePageUtilsTest();
126
127 // testing::Test
128 void SetUp() override;
129 void TearDown() override;
130
131 void AddPage(const GURL& url,
132 const int64_t offline_id,
133 const ClientId& client_id,
134 const base::FilePath& path,
135 const int64_t file_size,
136 const base::Time& creation_time);
137 MultipleOfflinePageItemResult GetAllPages();
138
139 void OnSizeCalculated(int64_t size);
140 void OnDeleteDone(DeletePageResult result);
141 void OnGetMultipleOfflinePageItemsResult(
142 MultipleOfflinePageItemResult* storage,
143 const MultipleOfflinePageItemResult& result);
144
145 OfflinePageModel* model() { return model_.get(); }
146 base::SimpleTestClock* clock() { return clock_.get(); }
147
148 int64_t last_cache_size() { return last_cache_size_; }
149
150 private:
151 std::unique_ptr<CachedOfflinePageTestModel> model_;
152 std::unique_ptr<base::SimpleTestClock> clock_;
153 int64_t last_cache_size_;
154 DeletePageResult last_delete_result_;
155 };
156
157 CachedOfflinePageUtilsTest::CachedOfflinePageUtilsTest()
158 : model_(new CachedOfflinePageTestModel),
159 clock_(new base::SimpleTestClock()),
160 last_cache_size_(0) {}
161
162 void CachedOfflinePageUtilsTest::SetUp() {
163 clock_->SetNow(base::Time::Now());
164 }
165
166 void CachedOfflinePageUtilsTest::TearDown() {
167 model_.reset();
168 clock_.reset();
169 }
170
171 void CachedOfflinePageUtilsTest::AddPage(const GURL& url,
172 const int64_t offline_id,
173 const ClientId& client_id,
174 const base::FilePath& path,
175 const int64_t file_size,
176 const base::Time& creation_time) {
177 OfflinePageItem page(url, offline_id, client_id, path, file_size,
178 creation_time);
179 model_->AddOfflinePage(page);
180 }
181
182 MultipleOfflinePageItemResult CachedOfflinePageUtilsTest::GetAllPages() {
183 MultipleOfflinePageItemResult result;
184 model()->GetAllPages(base::Bind(
185 &CachedOfflinePageUtilsTest::OnGetMultipleOfflinePageItemsResult,
186 AsWeakPtr(), base::Unretained(&result)));
187 return result;
188 }
189
190 void CachedOfflinePageUtilsTest::OnSizeCalculated(int64_t size) {
191 last_cache_size_ = size;
192 }
193
194 void CachedOfflinePageUtilsTest::OnDeleteDone(DeletePageResult result) {
195 last_delete_result_ = result;
196 }
197
198 void CachedOfflinePageUtilsTest::OnGetMultipleOfflinePageItemsResult(
199 MultipleOfflinePageItemResult* storage,
200 const MultipleOfflinePageItemResult& result) {
201 *storage = result;
202 }
203
204 TEST_F(CachedOfflinePageUtilsTest, TestGetCachedOfflinePageSizeBetween) {
205 // Time 00:00:00.
206 AddPage(kTestUrl, kOfflineId1, kTempClientId1, kTestFilePath, kTestFileSize1,
207 clock()->Now());
208 // time 02:00:00.
209 clock()->Advance(base::TimeDelta::FromHours(2));
210 AddPage(kTestUrl, kOfflineId2, kPersistentClientId, kTestFilePath,
211 kTestFileSize1, clock()->Now());
212 // time 03:00:00.
213 clock()->Advance(base::TimeDelta::FromHours(3));
carlosk 2017/05/03 18:13:52 Advance adds time to the current "now". So this is
romax 2017/05/03 19:46:22 Done.
214 AddPage(kTestUrl2, kOfflineId3, kTempClientId2, kTestFilePath, kTestFileSize2,
215 clock()->Now());
carlosk 2017/05/03 18:13:52 I'd also suggest adding an ulterior temporary entr
romax 2017/05/03 19:46:22 Done.
216
217 // Get size from 01:00:00 till now. Only kOfflineId3 will be calculated.
218 CachedOfflinePageUtils::GetCachedOfflinePageSizeBetween(
219 model(),
220 base::Bind(&CachedOfflinePageUtilsTest::OnSizeCalculated, AsWeakPtr()),
221 clock()->Now() - base::TimeDelta::FromHours(2), clock()->Now());
carlosk 2017/05/03 18:13:52 Given how Advance works this begin time will not i
romax 2017/05/03 19:46:22 Acknowledged.
222 EXPECT_EQ(last_cache_size(), kTestFileSize2);
223 }
224
225 TEST_F(CachedOfflinePageUtilsTest, TestDeleteCachedOfflinePage) {
226 // Time 00:00:00.
227 AddPage(kTestUrl, kOfflineId1, kTempClientId1, kTestFilePath, kTestFileSize1,
228 clock()->Now());
229 // time 02:00:00.
230 clock()->Advance(base::TimeDelta::FromHours(2));
231 AddPage(kTestUrl, kOfflineId2, kPersistentClientId, kTestFilePath,
232 kTestFileSize1, clock()->Now());
233 // time 03:00:00.
234 clock()->Advance(base::TimeDelta::FromHours(3));
235 AddPage(kTestUrl2, kOfflineId3, kTempClientId2, kTestFilePath, kTestFileSize2,
236 clock()->Now());
237 ASSERT_EQ(3UL, GetAllPages().size());
carlosk 2017/05/03 18:13:52 As the test pages used in all current tests are th
romax 2017/05/03 19:46:22 Done.
238
239 // Delete cached offlin pages, and there will be one left.
carlosk 2017/05/03 18:13:52 /offlin/offline/s
romax 2017/05/03 19:46:22 Done.
240 CachedOfflinePageUtils::DeleteCachedOfflinePage(
241 model(),
242 base::Bind(&CachedOfflinePageUtilsTest::OnDeleteDone, AsWeakPtr()));
243 EXPECT_EQ(1UL, GetAllPages().size());
244 }
245 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698