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

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

Issue 2489443002: Move all components/offline_pages/ files into component/offline_pages/core (Closed)
Patch Set: rebase Created 4 years 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 2015 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/archive_manager.h"
6
7 #include <algorithm>
8 #include <memory>
9 #include <set>
10 #include <vector>
11
12 #include "base/bind.h"
13 #include "base/files/file_path.h"
14 #include "base/files/file_util.h"
15 #include "base/files/scoped_temp_dir.h"
16 #include "base/test/test_simple_task_runner.h"
17 #include "base/threading/thread_task_runner_handle.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19
20 namespace offline_pages {
21
22 namespace {
23 const base::FilePath::CharType kMissingArchivePath[] = FILE_PATH_LITERAL(
24 "missing_archive.path");
25 } // namespace
26
27 enum class CallbackStatus {
28 NOT_CALLED,
29 CALLED_FALSE,
30 CALLED_TRUE,
31 };
32
33 class ArchiveManagerTest : public testing::Test {
34 public:
35 ArchiveManagerTest();
36 void SetUp() override;
37
38 void PumpLoop();
39 void ResetResults();
40
41 void ResetManager(const base::FilePath& file_path);
42 void Callback(bool result);
43 void GetAllArchivesCallback(const std::set<base::FilePath>& archive_paths);
44 void GetStorageStatsCallback(
45 const ArchiveManager::StorageStats& storage_sizes);
46
47 ArchiveManager* manager() { return manager_.get(); }
48 const base::FilePath& temp_path() const { return temp_dir_.GetPath(); }
49 CallbackStatus callback_status() const { return callback_status_; }
50 const std::set<base::FilePath>& last_archive_paths() const {
51 return last_archvie_paths_;
52 }
53 ArchiveManager::StorageStats last_storage_sizes() const {
54 return last_storage_sizes_;
55 }
56
57 private:
58 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
59 base::ThreadTaskRunnerHandle task_runner_handle_;
60 base::ScopedTempDir temp_dir_;
61
62 std::unique_ptr<ArchiveManager> manager_;
63 CallbackStatus callback_status_;
64 std::set<base::FilePath> last_archvie_paths_;
65 ArchiveManager::StorageStats last_storage_sizes_;
66 };
67
68 ArchiveManagerTest::ArchiveManagerTest()
69 : task_runner_(new base::TestSimpleTaskRunner),
70 task_runner_handle_(task_runner_),
71 callback_status_(CallbackStatus::NOT_CALLED),
72 last_storage_sizes_({0, 0}) {}
73
74 void ArchiveManagerTest::SetUp() {
75 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
76 ResetManager(temp_dir_.GetPath());
77 }
78
79 void ArchiveManagerTest::PumpLoop() {
80 task_runner_->RunUntilIdle();
81 }
82
83 void ArchiveManagerTest::ResetResults() {
84 callback_status_ = CallbackStatus::NOT_CALLED;
85 last_archvie_paths_.clear();
86 }
87
88 void ArchiveManagerTest::ResetManager(const base::FilePath& file_path) {
89 manager_.reset(
90 new ArchiveManager(file_path, base::ThreadTaskRunnerHandle::Get()));
91 }
92
93 void ArchiveManagerTest::Callback(bool result) {
94 callback_status_ =
95 result ? CallbackStatus::CALLED_TRUE : CallbackStatus::CALLED_FALSE;
96 }
97
98 void ArchiveManagerTest::GetAllArchivesCallback(
99 const std::set<base::FilePath>& archive_paths) {
100 last_archvie_paths_ = archive_paths;
101 }
102
103 void ArchiveManagerTest::GetStorageStatsCallback(
104 const ArchiveManager::StorageStats& storage_sizes) {
105 last_storage_sizes_ = storage_sizes;
106 }
107
108 TEST_F(ArchiveManagerTest, EnsureArchivesDirCreated) {
109 base::FilePath archive_dir =
110 temp_path().Append(FILE_PATH_LITERAL("test_path"));
111 ResetManager(archive_dir);
112 EXPECT_FALSE(base::PathExists(archive_dir));
113
114 // Ensure archives dir exists, when it doesn't.
115 manager()->EnsureArchivesDirCreated(
116 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this), true));
117 PumpLoop();
118 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
119 EXPECT_TRUE(base::PathExists(archive_dir));
120
121 // Try again when the file already exists.
122 ResetResults();
123 manager()->EnsureArchivesDirCreated(
124 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this), true));
125 PumpLoop();
126 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
127 EXPECT_TRUE(base::PathExists(archive_dir));
128 }
129
130 TEST_F(ArchiveManagerTest, ExistsArchive) {
131 base::FilePath archive_path = temp_path().Append(kMissingArchivePath);
132 manager()->ExistsArchive(
133 archive_path,
134 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this)));
135 PumpLoop();
136 EXPECT_EQ(CallbackStatus::CALLED_FALSE, callback_status());
137
138 ResetResults();
139 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path));
140
141 manager()->ExistsArchive(
142 archive_path,
143 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this)));
144 PumpLoop();
145 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
146 }
147
148 TEST_F(ArchiveManagerTest, DeleteMultipleArchives) {
149 base::FilePath archive_path_1;
150 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_1));
151 base::FilePath archive_path_2;
152 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_2));
153 base::FilePath archive_path_3;
154 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_3));
155
156 std::vector<base::FilePath> archive_paths = {archive_path_1, archive_path_2};
157
158 manager()->DeleteMultipleArchives(
159 archive_paths,
160 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this)));
161 PumpLoop();
162 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
163 EXPECT_FALSE(base::PathExists(archive_path_1));
164 EXPECT_FALSE(base::PathExists(archive_path_2));
165 EXPECT_TRUE(base::PathExists(archive_path_3));
166 }
167
168 TEST_F(ArchiveManagerTest, DeleteMultipleArchivesSomeDoNotExist) {
169 base::FilePath archive_path_1 = temp_path().Append(kMissingArchivePath);
170 base::FilePath archive_path_2;
171 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_2));
172 base::FilePath archive_path_3;
173 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_3));
174
175 std::vector<base::FilePath> archive_paths = {archive_path_1, archive_path_2};
176
177 EXPECT_FALSE(base::PathExists(archive_path_1));
178
179 manager()->DeleteMultipleArchives(
180 archive_paths,
181 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this)));
182 PumpLoop();
183 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
184 EXPECT_FALSE(base::PathExists(archive_path_1));
185 EXPECT_FALSE(base::PathExists(archive_path_2));
186 EXPECT_TRUE(base::PathExists(archive_path_3));
187 }
188
189 TEST_F(ArchiveManagerTest, DeleteMultipleArchivesNoneExist) {
190 base::FilePath archive_path_1 = temp_path().Append(kMissingArchivePath);
191 base::FilePath archive_path_2 = temp_path().Append(FILE_PATH_LITERAL(
192 "other_missing_file.mhtml"));
193 base::FilePath archive_path_3;
194 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_3));
195
196 std::vector<base::FilePath> archive_paths = {archive_path_1, archive_path_2};
197
198 EXPECT_FALSE(base::PathExists(archive_path_1));
199 EXPECT_FALSE(base::PathExists(archive_path_2));
200
201 manager()->DeleteMultipleArchives(
202 archive_paths,
203 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this)));
204 PumpLoop();
205 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
206 EXPECT_FALSE(base::PathExists(archive_path_1));
207 EXPECT_FALSE(base::PathExists(archive_path_2));
208 EXPECT_TRUE(base::PathExists(archive_path_3));
209 }
210
211 TEST_F(ArchiveManagerTest, DeleteArchive) {
212 base::FilePath archive_path;
213 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path));
214
215 manager()->DeleteArchive(
216 archive_path,
217 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this)));
218 PumpLoop();
219 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
220 EXPECT_FALSE(base::PathExists(archive_path));
221 }
222
223 TEST_F(ArchiveManagerTest, DeleteArchiveThatDoesNotExist) {
224 base::FilePath archive_path = temp_path().Append(kMissingArchivePath);
225 EXPECT_FALSE(base::PathExists(archive_path));
226
227 manager()->DeleteArchive(
228 archive_path,
229 base::Bind(&ArchiveManagerTest::Callback, base::Unretained(this)));
230 PumpLoop();
231 EXPECT_EQ(CallbackStatus::CALLED_TRUE, callback_status());
232 EXPECT_FALSE(base::PathExists(archive_path));
233 }
234
235 TEST_F(ArchiveManagerTest, GetAllArchives) {
236 base::FilePath archive_path_1;
237 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_1));
238 base::FilePath archive_path_2;
239 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_2));
240 base::FilePath archive_path_3;
241 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_3));
242 std::vector<base::FilePath> expected_paths{archive_path_1, archive_path_2,
243 archive_path_3};
244 std::sort(expected_paths.begin(), expected_paths.end());
245
246 manager()->GetAllArchives(base::Bind(
247 &ArchiveManagerTest::GetAllArchivesCallback, base::Unretained(this)));
248 PumpLoop();
249 ASSERT_EQ(3UL, last_archive_paths().size());
250 std::vector<base::FilePath> actual_paths(last_archive_paths().begin(),
251 last_archive_paths().end());
252 // Comparing one to one works because last_archive_paths set is sorted.
253 // Because some windows bots provide abbreviated path (e.g. chrome-bot becomes
254 // CHROME~2), this test only focuses on file name.
255 EXPECT_EQ(expected_paths[0].BaseName(), actual_paths[0].BaseName());
256 EXPECT_EQ(expected_paths[1].BaseName(), actual_paths[1].BaseName());
257 EXPECT_EQ(expected_paths[2].BaseName(), actual_paths[2].BaseName());
258 }
259
260 TEST_F(ArchiveManagerTest, GetStorageStats) {
261 base::FilePath archive_path_1;
262 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_1));
263 base::FilePath archive_path_2;
264 EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_path(), &archive_path_2));
265
266 manager()->GetStorageStats(base::Bind(
267 &ArchiveManagerTest::GetStorageStatsCallback, base::Unretained(this)));
268 PumpLoop();
269 EXPECT_GT(last_storage_sizes().free_disk_space, 0);
270 EXPECT_EQ(last_storage_sizes().total_archives_size,
271 base::ComputeDirectorySize(temp_path()));
272 }
273
274 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/archive_manager.cc ('k') | components/offline_pages/background/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698