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

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

Powered by Google App Engine
This is Rietveld 408576698