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

Side by Side Diff: webkit/fileapi/file_system_origin_database_unittest.cc

Issue 12163003: Add FilePath to base namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <algorithm> 5 #include <algorithm>
6 #include <functional> 6 #include <functional>
7 #include <limits> 7 #include <limits>
8 #include <string> 8 #include <string>
9 9
10 #include "base/file_path.h" 10 #include "base/file_path.h"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/files/scoped_temp_dir.h" 12 #include "base/files/scoped_temp_dir.h"
13 #include "base/platform_file.h" 13 #include "base/platform_file.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/leveldatabase/src/db/filename.h" 16 #include "third_party/leveldatabase/src/db/filename.h"
17 #include "third_party/leveldatabase/src/include/leveldb/db.h" 17 #include "third_party/leveldatabase/src/include/leveldb/db.h"
18 #include "webkit/fileapi/file_system_database_test_helper.h" 18 #include "webkit/fileapi/file_system_database_test_helper.h"
19 #include "webkit/fileapi/file_system_origin_database.h" 19 #include "webkit/fileapi/file_system_origin_database.h"
20 #include "webkit/fileapi/file_system_util.h" 20 #include "webkit/fileapi/file_system_util.h"
21 21
22 namespace fileapi { 22 namespace fileapi {
23 23
24 namespace { 24 namespace {
25 const FilePath::CharType kFileSystemDirName[] = 25 const base::FilePath::CharType kFileSystemDirName[] =
26 FILE_PATH_LITERAL("File System"); 26 FILE_PATH_LITERAL("File System");
27 const FilePath::CharType kOriginDatabaseName[] = FILE_PATH_LITERAL("Origins"); 27 const base::FilePath::CharType kOriginDatabaseName[] = FILE_PATH_LITERAL("Origin s");
28 } // namespace 28 } // namespace
29 29
30 TEST(FileSystemOriginDatabaseTest, BasicTest) { 30 TEST(FileSystemOriginDatabaseTest, BasicTest) {
31 base::ScopedTempDir dir; 31 base::ScopedTempDir dir;
32 ASSERT_TRUE(dir.CreateUniqueTempDir()); 32 ASSERT_TRUE(dir.CreateUniqueTempDir());
33 const FilePath kFSDir = dir.path().Append(kFileSystemDirName); 33 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
34 EXPECT_FALSE(file_util::PathExists(kFSDir)); 34 EXPECT_FALSE(file_util::PathExists(kFSDir));
35 EXPECT_TRUE(file_util::CreateDirectory(kFSDir)); 35 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
36 36
37 FileSystemOriginDatabase database(kFSDir); 37 FileSystemOriginDatabase database(kFSDir);
38 std::string origin("origin"); 38 std::string origin("origin");
39 39
40 EXPECT_FALSE(database.HasOriginPath(origin)); 40 EXPECT_FALSE(database.HasOriginPath(origin));
41 // Double-check to make sure that had no side effects. 41 // Double-check to make sure that had no side effects.
42 EXPECT_FALSE(database.HasOriginPath(origin)); 42 EXPECT_FALSE(database.HasOriginPath(origin));
43 43
44 FilePath path0; 44 base::FilePath path0;
45 FilePath path1; 45 base::FilePath path1;
46 46
47 // Empty strings aren't valid origins. 47 // Empty strings aren't valid origins.
48 EXPECT_FALSE(database.GetPathForOrigin(std::string(), &path0)); 48 EXPECT_FALSE(database.GetPathForOrigin(std::string(), &path0));
49 49
50 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 50 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
51 EXPECT_TRUE(database.HasOriginPath(origin)); 51 EXPECT_TRUE(database.HasOriginPath(origin));
52 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 52 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
53 EXPECT_FALSE(path0.empty()); 53 EXPECT_FALSE(path0.empty());
54 EXPECT_FALSE(path1.empty()); 54 EXPECT_FALSE(path1.empty());
55 EXPECT_EQ(path0, path1); 55 EXPECT_EQ(path0, path1);
56 56
57 EXPECT_TRUE(file_util::PathExists(kFSDir.Append(kOriginDatabaseName))); 57 EXPECT_TRUE(file_util::PathExists(kFSDir.Append(kOriginDatabaseName)));
58 } 58 }
59 59
60 TEST(FileSystemOriginDatabaseTest, TwoPathTest) { 60 TEST(FileSystemOriginDatabaseTest, TwoPathTest) {
61 base::ScopedTempDir dir; 61 base::ScopedTempDir dir;
62 ASSERT_TRUE(dir.CreateUniqueTempDir()); 62 ASSERT_TRUE(dir.CreateUniqueTempDir());
63 const FilePath kFSDir = dir.path().Append(kFileSystemDirName); 63 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
64 EXPECT_FALSE(file_util::PathExists(kFSDir)); 64 EXPECT_FALSE(file_util::PathExists(kFSDir));
65 EXPECT_TRUE(file_util::CreateDirectory(kFSDir)); 65 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
66 66
67 FileSystemOriginDatabase database(kFSDir); 67 FileSystemOriginDatabase database(kFSDir);
68 std::string origin0("origin0"); 68 std::string origin0("origin0");
69 std::string origin1("origin1"); 69 std::string origin1("origin1");
70 70
71 EXPECT_FALSE(database.HasOriginPath(origin0)); 71 EXPECT_FALSE(database.HasOriginPath(origin0));
72 EXPECT_FALSE(database.HasOriginPath(origin1)); 72 EXPECT_FALSE(database.HasOriginPath(origin1));
73 73
74 FilePath path0; 74 base::FilePath path0;
75 FilePath path1; 75 base::FilePath path1;
76 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0)); 76 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0));
77 EXPECT_TRUE(database.HasOriginPath(origin0)); 77 EXPECT_TRUE(database.HasOriginPath(origin0));
78 EXPECT_FALSE(database.HasOriginPath(origin1)); 78 EXPECT_FALSE(database.HasOriginPath(origin1));
79 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1)); 79 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1));
80 EXPECT_TRUE(database.HasOriginPath(origin1)); 80 EXPECT_TRUE(database.HasOriginPath(origin1));
81 EXPECT_FALSE(path0.empty()); 81 EXPECT_FALSE(path0.empty());
82 EXPECT_FALSE(path1.empty()); 82 EXPECT_FALSE(path1.empty());
83 EXPECT_NE(path0, path1); 83 EXPECT_NE(path0, path1);
84 84
85 EXPECT_TRUE(file_util::PathExists(kFSDir.Append(kOriginDatabaseName))); 85 EXPECT_TRUE(file_util::PathExists(kFSDir.Append(kOriginDatabaseName)));
86 } 86 }
87 87
88 TEST(FileSystemOriginDatabaseTest, DropDatabaseTest) { 88 TEST(FileSystemOriginDatabaseTest, DropDatabaseTest) {
89 base::ScopedTempDir dir; 89 base::ScopedTempDir dir;
90 ASSERT_TRUE(dir.CreateUniqueTempDir()); 90 ASSERT_TRUE(dir.CreateUniqueTempDir());
91 const FilePath kFSDir = dir.path().Append(kFileSystemDirName); 91 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
92 EXPECT_FALSE(file_util::PathExists(kFSDir)); 92 EXPECT_FALSE(file_util::PathExists(kFSDir));
93 EXPECT_TRUE(file_util::CreateDirectory(kFSDir)); 93 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
94 94
95 FileSystemOriginDatabase database(kFSDir); 95 FileSystemOriginDatabase database(kFSDir);
96 std::string origin("origin"); 96 std::string origin("origin");
97 97
98 EXPECT_FALSE(database.HasOriginPath(origin)); 98 EXPECT_FALSE(database.HasOriginPath(origin));
99 99
100 FilePath path0; 100 base::FilePath path0;
101 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 101 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
102 EXPECT_TRUE(database.HasOriginPath(origin)); 102 EXPECT_TRUE(database.HasOriginPath(origin));
103 EXPECT_FALSE(path0.empty()); 103 EXPECT_FALSE(path0.empty());
104 104
105 EXPECT_TRUE(file_util::PathExists(kFSDir.Append(kOriginDatabaseName))); 105 EXPECT_TRUE(file_util::PathExists(kFSDir.Append(kOriginDatabaseName)));
106 106
107 database.DropDatabase(); 107 database.DropDatabase();
108 108
109 FilePath path1; 109 base::FilePath path1;
110 EXPECT_TRUE(database.HasOriginPath(origin)); 110 EXPECT_TRUE(database.HasOriginPath(origin));
111 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 111 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
112 EXPECT_FALSE(path1.empty()); 112 EXPECT_FALSE(path1.empty());
113 EXPECT_EQ(path0, path1); 113 EXPECT_EQ(path0, path1);
114 } 114 }
115 115
116 TEST(FileSystemOriginDatabaseTest, DeleteOriginTest) { 116 TEST(FileSystemOriginDatabaseTest, DeleteOriginTest) {
117 base::ScopedTempDir dir; 117 base::ScopedTempDir dir;
118 ASSERT_TRUE(dir.CreateUniqueTempDir()); 118 ASSERT_TRUE(dir.CreateUniqueTempDir());
119 const FilePath kFSDir = dir.path().Append(kFileSystemDirName); 119 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
120 EXPECT_FALSE(file_util::PathExists(kFSDir)); 120 EXPECT_FALSE(file_util::PathExists(kFSDir));
121 EXPECT_TRUE(file_util::CreateDirectory(kFSDir)); 121 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
122 122
123 FileSystemOriginDatabase database(kFSDir); 123 FileSystemOriginDatabase database(kFSDir);
124 std::string origin("origin"); 124 std::string origin("origin");
125 125
126 EXPECT_FALSE(database.HasOriginPath(origin)); 126 EXPECT_FALSE(database.HasOriginPath(origin));
127 EXPECT_TRUE(database.RemovePathForOrigin(origin)); 127 EXPECT_TRUE(database.RemovePathForOrigin(origin));
128 128
129 FilePath path0; 129 base::FilePath path0;
130 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 130 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
131 EXPECT_TRUE(database.HasOriginPath(origin)); 131 EXPECT_TRUE(database.HasOriginPath(origin));
132 EXPECT_FALSE(path0.empty()); 132 EXPECT_FALSE(path0.empty());
133 133
134 EXPECT_TRUE(database.RemovePathForOrigin(origin)); 134 EXPECT_TRUE(database.RemovePathForOrigin(origin));
135 EXPECT_FALSE(database.HasOriginPath(origin)); 135 EXPECT_FALSE(database.HasOriginPath(origin));
136 136
137 FilePath path1; 137 base::FilePath path1;
138 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 138 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
139 EXPECT_FALSE(path1.empty()); 139 EXPECT_FALSE(path1.empty());
140 EXPECT_NE(path0, path1); 140 EXPECT_NE(path0, path1);
141 } 141 }
142 142
143 TEST(FileSystemOriginDatabaseTest, ListOriginsTest) { 143 TEST(FileSystemOriginDatabaseTest, ListOriginsTest) {
144 base::ScopedTempDir dir; 144 base::ScopedTempDir dir;
145 ASSERT_TRUE(dir.CreateUniqueTempDir()); 145 ASSERT_TRUE(dir.CreateUniqueTempDir());
146 const FilePath kFSDir = dir.path().Append(kFileSystemDirName); 146 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
147 EXPECT_FALSE(file_util::PathExists(kFSDir)); 147 EXPECT_FALSE(file_util::PathExists(kFSDir));
148 EXPECT_TRUE(file_util::CreateDirectory(kFSDir)); 148 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
149 149
150 std::vector<FileSystemOriginDatabase::OriginRecord> origins; 150 std::vector<FileSystemOriginDatabase::OriginRecord> origins;
151 151
152 FileSystemOriginDatabase database(kFSDir); 152 FileSystemOriginDatabase database(kFSDir);
153 EXPECT_TRUE(database.ListAllOrigins(&origins)); 153 EXPECT_TRUE(database.ListAllOrigins(&origins));
154 EXPECT_TRUE(origins.empty()); 154 EXPECT_TRUE(origins.empty());
155 origins.clear(); 155 origins.clear();
156 156
157 std::string origin0("origin0"); 157 std::string origin0("origin0");
158 std::string origin1("origin1"); 158 std::string origin1("origin1");
159 159
160 EXPECT_FALSE(database.HasOriginPath(origin0)); 160 EXPECT_FALSE(database.HasOriginPath(origin0));
161 EXPECT_FALSE(database.HasOriginPath(origin1)); 161 EXPECT_FALSE(database.HasOriginPath(origin1));
162 162
163 FilePath path0; 163 base::FilePath path0;
164 FilePath path1; 164 base::FilePath path1;
165 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0)); 165 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0));
166 EXPECT_TRUE(database.ListAllOrigins(&origins)); 166 EXPECT_TRUE(database.ListAllOrigins(&origins));
167 EXPECT_EQ(origins.size(), 1UL); 167 EXPECT_EQ(origins.size(), 1UL);
168 EXPECT_EQ(origins[0].origin, origin0); 168 EXPECT_EQ(origins[0].origin, origin0);
169 EXPECT_EQ(origins[0].path, path0); 169 EXPECT_EQ(origins[0].path, path0);
170 origins.clear(); 170 origins.clear();
171 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1)); 171 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1));
172 EXPECT_TRUE(database.ListAllOrigins(&origins)); 172 EXPECT_TRUE(database.ListAllOrigins(&origins));
173 EXPECT_EQ(origins.size(), 2UL); 173 EXPECT_EQ(origins.size(), 2UL);
174 if (origins[0].origin == origin0) { 174 if (origins[0].origin == origin0) {
(...skipping 10 matching lines...) Expand all
185 185
186 TEST(FileSystemOriginDatabaseTest, DatabaseRecoveryTest) { 186 TEST(FileSystemOriginDatabaseTest, DatabaseRecoveryTest) {
187 // Checks if FileSystemOriginDatabase properly handles database corruption. 187 // Checks if FileSystemOriginDatabase properly handles database corruption.
188 // In this test, we'll register some origins to the origin database, then 188 // In this test, we'll register some origins to the origin database, then
189 // corrupt database and its log file. 189 // corrupt database and its log file.
190 // After repairing, the origin database should be consistent even when some 190 // After repairing, the origin database should be consistent even when some
191 // entries lost. 191 // entries lost.
192 192
193 base::ScopedTempDir dir; 193 base::ScopedTempDir dir;
194 ASSERT_TRUE(dir.CreateUniqueTempDir()); 194 ASSERT_TRUE(dir.CreateUniqueTempDir());
195 const FilePath kFSDir = dir.path().Append(kFileSystemDirName); 195 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
196 const FilePath kDBDir = kFSDir.Append(kOriginDatabaseName); 196 const base::FilePath kDBDir = kFSDir.Append(kOriginDatabaseName);
197 EXPECT_FALSE(file_util::PathExists(kFSDir)); 197 EXPECT_FALSE(file_util::PathExists(kFSDir));
198 EXPECT_TRUE(file_util::CreateDirectory(kFSDir)); 198 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
199 199
200 const std::string kOrigins[] = { 200 const std::string kOrigins[] = {
201 "foo.example.com", 201 "foo.example.com",
202 "bar.example.com", 202 "bar.example.com",
203 "baz.example.com", 203 "baz.example.com",
204 "hoge.example.com", 204 "hoge.example.com",
205 "fuga.example.com", 205 "fuga.example.com",
206 }; 206 };
207 207
208 scoped_ptr<FileSystemOriginDatabase> database( 208 scoped_ptr<FileSystemOriginDatabase> database(
209 new FileSystemOriginDatabase(kFSDir)); 209 new FileSystemOriginDatabase(kFSDir));
210 for (size_t i = 0; i < arraysize(kOrigins); ++i) { 210 for (size_t i = 0; i < arraysize(kOrigins); ++i) {
211 FilePath path; 211 base::FilePath path;
212 EXPECT_FALSE(database->HasOriginPath(kOrigins[i])); 212 EXPECT_FALSE(database->HasOriginPath(kOrigins[i]));
213 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path)); 213 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path));
214 EXPECT_FALSE(path.empty()); 214 EXPECT_FALSE(path.empty());
215 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path)); 215 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path));
216 216
217 if (i != 1) 217 if (i != 1)
218 EXPECT_TRUE(file_util::CreateDirectory(kFSDir.Append(path))); 218 EXPECT_TRUE(file_util::CreateDirectory(kFSDir.Append(path)));
219 } 219 }
220 database.reset(); 220 database.reset();
221 221
222 const FilePath kGarbageDir = kFSDir.AppendASCII("foo"); 222 const base::FilePath kGarbageDir = kFSDir.AppendASCII("foo");
223 const FilePath kGarbageFile = kGarbageDir.AppendASCII("bar"); 223 const base::FilePath kGarbageFile = kGarbageDir.AppendASCII("bar");
224 EXPECT_TRUE(file_util::CreateDirectory(kGarbageDir)); 224 EXPECT_TRUE(file_util::CreateDirectory(kGarbageDir));
225 bool created = false; 225 bool created = false;
226 base::PlatformFileError error; 226 base::PlatformFileError error;
227 base::PlatformFile file = base::CreatePlatformFile( 227 base::PlatformFile file = base::CreatePlatformFile(
228 kGarbageFile, 228 kGarbageFile,
229 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, 229 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE,
230 &created, &error); 230 &created, &error);
231 EXPECT_EQ(base::PLATFORM_FILE_OK, error); 231 EXPECT_EQ(base::PLATFORM_FILE_OK, error);
232 EXPECT_TRUE(created); 232 EXPECT_TRUE(created);
233 EXPECT_TRUE(base::ClosePlatformFile(file)); 233 EXPECT_TRUE(base::ClosePlatformFile(file));
234 234
235 // Corrupt database itself and last log entry to drop last 1 database 235 // Corrupt database itself and last log entry to drop last 1 database
236 // operation. The database should detect the corruption and should recover 236 // operation. The database should detect the corruption and should recover
237 // its consistency after recovery. 237 // its consistency after recovery.
238 CorruptDatabase(kDBDir, leveldb::kDescriptorFile, 238 CorruptDatabase(kDBDir, leveldb::kDescriptorFile,
239 0, std::numeric_limits<size_t>::max()); 239 0, std::numeric_limits<size_t>::max());
240 CorruptDatabase(kDBDir, leveldb::kLogFile, -1, 1); 240 CorruptDatabase(kDBDir, leveldb::kLogFile, -1, 1);
241 241
242 FilePath path; 242 base::FilePath path;
243 database.reset(new FileSystemOriginDatabase(kFSDir)); 243 database.reset(new FileSystemOriginDatabase(kFSDir));
244 std::vector<FileSystemOriginDatabase::OriginRecord> origins_in_db; 244 std::vector<FileSystemOriginDatabase::OriginRecord> origins_in_db;
245 EXPECT_TRUE(database->ListAllOrigins(&origins_in_db)); 245 EXPECT_TRUE(database->ListAllOrigins(&origins_in_db));
246 246
247 // Expect all but last added origin will be repaired back, and kOrigins[1] 247 // Expect all but last added origin will be repaired back, and kOrigins[1]
248 // should be dropped due to absence of backing directory. 248 // should be dropped due to absence of backing directory.
249 EXPECT_EQ(arraysize(kOrigins) - 2, origins_in_db.size()); 249 EXPECT_EQ(arraysize(kOrigins) - 2, origins_in_db.size());
250 250
251 const std::string kOrigin("piyo.example.org"); 251 const std::string kOrigin("piyo.example.org");
252 EXPECT_FALSE(database->HasOriginPath(kOrigin)); 252 EXPECT_FALSE(database->HasOriginPath(kOrigin));
253 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path)); 253 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path));
254 EXPECT_FALSE(path.empty()); 254 EXPECT_FALSE(path.empty());
255 EXPECT_TRUE(database->HasOriginPath(kOrigin)); 255 EXPECT_TRUE(database->HasOriginPath(kOrigin));
256 256
257 EXPECT_FALSE(file_util::PathExists(kGarbageFile)); 257 EXPECT_FALSE(file_util::PathExists(kGarbageFile));
258 EXPECT_FALSE(file_util::PathExists(kGarbageDir)); 258 EXPECT_FALSE(file_util::PathExists(kGarbageDir));
259 } 259 }
260 260
261 } // namespace fileapi 261 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/fileapi/file_system_origin_database.cc ('k') | webkit/fileapi/file_system_quota_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698