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

Side by Side Diff: webkit/browser/fileapi/sandbox_origin_database_unittest.cc

Issue 145693005: [FileAPI] Replace default leveldb::Env with leveldb::MemEnv in tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: +LocalFileSyncService::Create{,ForTesting} Created 6 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 #include <vector> 9 #include <vector>
10 10
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/files/scoped_temp_dir.h" 13 #include "base/files/scoped_temp_dir.h"
14 #include "base/platform_file.h" 14 #include "base/platform_file.h"
15 #include "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/leveldatabase/src/db/filename.h" 17 #include "third_party/leveldatabase/src/db/filename.h"
18 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
18 #include "third_party/leveldatabase/src/include/leveldb/db.h" 19 #include "third_party/leveldatabase/src/include/leveldb/db.h"
20 #include "third_party/leveldatabase/src/include/leveldb/env.h"
19 #include "webkit/browser/fileapi/sandbox_database_test_helper.h" 21 #include "webkit/browser/fileapi/sandbox_database_test_helper.h"
20 #include "webkit/browser/fileapi/sandbox_origin_database.h" 22 #include "webkit/browser/fileapi/sandbox_origin_database.h"
21 #include "webkit/common/fileapi/file_system_util.h" 23 #include "webkit/common/fileapi/file_system_util.h"
22 24
23 namespace fileapi { 25 namespace fileapi {
24 26
25 namespace { 27 namespace {
26 const base::FilePath::CharType kFileSystemDirName[] = 28 const base::FilePath::CharType kFileSystemDirName[] =
27 FILE_PATH_LITERAL("File System"); 29 FILE_PATH_LITERAL("File System");
28 const base::FilePath::CharType kOriginDatabaseName[] = 30 const base::FilePath::CharType kOriginDatabaseName[] =
29 FILE_PATH_LITERAL("Origins"); 31 FILE_PATH_LITERAL("Origins");
30 } // namespace 32 } // namespace
31 33
32 TEST(SandboxOriginDatabaseTest, BasicTest) { 34 TEST(SandboxOriginDatabaseTest, BasicTest) {
33 base::ScopedTempDir dir; 35 base::ScopedTempDir dir;
34 ASSERT_TRUE(dir.CreateUniqueTempDir()); 36 ASSERT_TRUE(dir.CreateUniqueTempDir());
35 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName); 37 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
36 EXPECT_FALSE(base::PathExists(kFSDir)); 38 EXPECT_FALSE(base::PathExists(kFSDir));
37 EXPECT_TRUE(base::CreateDirectory(kFSDir)); 39 EXPECT_TRUE(base::CreateDirectory(kFSDir));
40 scoped_ptr<leveldb::Env> in_memory_env(
41 leveldb::NewMemEnv(leveldb::Env::Default()));
38 42
39 SandboxOriginDatabase database(kFSDir); 43 SandboxOriginDatabase database(kFSDir, in_memory_env.get());
40 std::string origin("origin"); 44 std::string origin("origin");
41 45
42 EXPECT_FALSE(database.HasOriginPath(origin)); 46 EXPECT_FALSE(database.HasOriginPath(origin));
43 // Double-check to make sure that had no side effects. 47 // Double-check to make sure that had no side effects.
44 EXPECT_FALSE(database.HasOriginPath(origin)); 48 EXPECT_FALSE(database.HasOriginPath(origin));
45 49
46 base::FilePath path0; 50 base::FilePath path0;
47 base::FilePath path1; 51 base::FilePath path1;
48 52
49 // Empty strings aren't valid origins. 53 // Empty strings aren't valid origins.
50 EXPECT_FALSE(database.GetPathForOrigin(std::string(), &path0)); 54 EXPECT_FALSE(database.GetPathForOrigin(std::string(), &path0));
51 55
52 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 56 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
53 EXPECT_TRUE(database.HasOriginPath(origin)); 57 EXPECT_TRUE(database.HasOriginPath(origin));
54 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 58 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
55 EXPECT_FALSE(path0.empty()); 59 EXPECT_FALSE(path0.empty());
56 EXPECT_FALSE(path1.empty()); 60 EXPECT_FALSE(path1.empty());
57 EXPECT_EQ(path0, path1); 61 EXPECT_EQ(path0, path1);
58 62
59 EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName))); 63 EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName)));
60 } 64 }
61 65
62 TEST(SandboxOriginDatabaseTest, TwoPathTest) { 66 TEST(SandboxOriginDatabaseTest, TwoPathTest) {
63 base::ScopedTempDir dir; 67 base::ScopedTempDir dir;
64 ASSERT_TRUE(dir.CreateUniqueTempDir()); 68 ASSERT_TRUE(dir.CreateUniqueTempDir());
65 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName); 69 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
66 EXPECT_FALSE(base::PathExists(kFSDir)); 70 EXPECT_FALSE(base::PathExists(kFSDir));
67 EXPECT_TRUE(base::CreateDirectory(kFSDir)); 71 EXPECT_TRUE(base::CreateDirectory(kFSDir));
72 scoped_ptr<leveldb::Env> in_memory_env(
73 leveldb::NewMemEnv(leveldb::Env::Default()));
68 74
69 SandboxOriginDatabase database(kFSDir); 75 SandboxOriginDatabase database(kFSDir, in_memory_env.get());
70 std::string origin0("origin0"); 76 std::string origin0("origin0");
71 std::string origin1("origin1"); 77 std::string origin1("origin1");
72 78
73 EXPECT_FALSE(database.HasOriginPath(origin0)); 79 EXPECT_FALSE(database.HasOriginPath(origin0));
74 EXPECT_FALSE(database.HasOriginPath(origin1)); 80 EXPECT_FALSE(database.HasOriginPath(origin1));
75 81
76 base::FilePath path0; 82 base::FilePath path0;
77 base::FilePath path1; 83 base::FilePath path1;
78 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0)); 84 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0));
79 EXPECT_TRUE(database.HasOriginPath(origin0)); 85 EXPECT_TRUE(database.HasOriginPath(origin0));
80 EXPECT_FALSE(database.HasOriginPath(origin1)); 86 EXPECT_FALSE(database.HasOriginPath(origin1));
81 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1)); 87 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1));
82 EXPECT_TRUE(database.HasOriginPath(origin1)); 88 EXPECT_TRUE(database.HasOriginPath(origin1));
83 EXPECT_FALSE(path0.empty()); 89 EXPECT_FALSE(path0.empty());
84 EXPECT_FALSE(path1.empty()); 90 EXPECT_FALSE(path1.empty());
85 EXPECT_NE(path0, path1); 91 EXPECT_NE(path0, path1);
86 92
87 EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName))); 93 EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName)));
88 } 94 }
89 95
90 TEST(SandboxOriginDatabaseTest, DropDatabaseTest) { 96 TEST(SandboxOriginDatabaseTest, DropDatabaseTest) {
91 base::ScopedTempDir dir; 97 base::ScopedTempDir dir;
92 ASSERT_TRUE(dir.CreateUniqueTempDir()); 98 ASSERT_TRUE(dir.CreateUniqueTempDir());
93 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName); 99 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
94 EXPECT_FALSE(base::PathExists(kFSDir)); 100 EXPECT_FALSE(base::PathExists(kFSDir));
95 EXPECT_TRUE(base::CreateDirectory(kFSDir)); 101 EXPECT_TRUE(base::CreateDirectory(kFSDir));
102 scoped_ptr<leveldb::Env> in_memory_env(
103 leveldb::NewMemEnv(leveldb::Env::Default()));
96 104
97 SandboxOriginDatabase database(kFSDir); 105 SandboxOriginDatabase database(kFSDir, in_memory_env.get());
98 std::string origin("origin"); 106 std::string origin("origin");
99 107
100 EXPECT_FALSE(database.HasOriginPath(origin)); 108 EXPECT_FALSE(database.HasOriginPath(origin));
101 109
102 base::FilePath path0; 110 base::FilePath path0;
103 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 111 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
104 EXPECT_TRUE(database.HasOriginPath(origin)); 112 EXPECT_TRUE(database.HasOriginPath(origin));
105 EXPECT_FALSE(path0.empty()); 113 EXPECT_FALSE(path0.empty());
106 114
107 EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName))); 115 EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName)));
108 116
109 database.DropDatabase(); 117 database.DropDatabase();
110 118
111 base::FilePath path1; 119 base::FilePath path1;
112 EXPECT_TRUE(database.HasOriginPath(origin)); 120 EXPECT_TRUE(database.HasOriginPath(origin));
113 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 121 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
114 EXPECT_FALSE(path1.empty()); 122 EXPECT_FALSE(path1.empty());
115 EXPECT_EQ(path0, path1); 123 EXPECT_EQ(path0, path1);
116 } 124 }
117 125
118 TEST(SandboxOriginDatabaseTest, DeleteOriginTest) { 126 TEST(SandboxOriginDatabaseTest, DeleteOriginTest) {
119 base::ScopedTempDir dir; 127 base::ScopedTempDir dir;
120 ASSERT_TRUE(dir.CreateUniqueTempDir()); 128 ASSERT_TRUE(dir.CreateUniqueTempDir());
121 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName); 129 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
122 EXPECT_FALSE(base::PathExists(kFSDir)); 130 EXPECT_FALSE(base::PathExists(kFSDir));
123 EXPECT_TRUE(base::CreateDirectory(kFSDir)); 131 EXPECT_TRUE(base::CreateDirectory(kFSDir));
132 scoped_ptr<leveldb::Env> in_memory_env(
133 leveldb::NewMemEnv(leveldb::Env::Default()));
124 134
125 SandboxOriginDatabase database(kFSDir); 135 SandboxOriginDatabase database(kFSDir, in_memory_env.get());
126 std::string origin("origin"); 136 std::string origin("origin");
127 137
128 EXPECT_FALSE(database.HasOriginPath(origin)); 138 EXPECT_FALSE(database.HasOriginPath(origin));
129 EXPECT_TRUE(database.RemovePathForOrigin(origin)); 139 EXPECT_TRUE(database.RemovePathForOrigin(origin));
130 140
131 base::FilePath path0; 141 base::FilePath path0;
132 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 142 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
133 EXPECT_TRUE(database.HasOriginPath(origin)); 143 EXPECT_TRUE(database.HasOriginPath(origin));
134 EXPECT_FALSE(path0.empty()); 144 EXPECT_FALSE(path0.empty());
135 145
136 EXPECT_TRUE(database.RemovePathForOrigin(origin)); 146 EXPECT_TRUE(database.RemovePathForOrigin(origin));
137 EXPECT_FALSE(database.HasOriginPath(origin)); 147 EXPECT_FALSE(database.HasOriginPath(origin));
138 148
139 base::FilePath path1; 149 base::FilePath path1;
140 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 150 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
141 EXPECT_FALSE(path1.empty()); 151 EXPECT_FALSE(path1.empty());
142 EXPECT_NE(path0, path1); 152 EXPECT_NE(path0, path1);
143 } 153 }
144 154
145 TEST(SandboxOriginDatabaseTest, ListOriginsTest) { 155 TEST(SandboxOriginDatabaseTest, ListOriginsTest) {
146 base::ScopedTempDir dir; 156 base::ScopedTempDir dir;
147 ASSERT_TRUE(dir.CreateUniqueTempDir()); 157 ASSERT_TRUE(dir.CreateUniqueTempDir());
148 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName); 158 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
149 EXPECT_FALSE(base::PathExists(kFSDir)); 159 EXPECT_FALSE(base::PathExists(kFSDir));
150 EXPECT_TRUE(base::CreateDirectory(kFSDir)); 160 EXPECT_TRUE(base::CreateDirectory(kFSDir));
161 scoped_ptr<leveldb::Env> in_memory_env(
162 leveldb::NewMemEnv(leveldb::Env::Default()));
151 163
152 std::vector<SandboxOriginDatabase::OriginRecord> origins; 164 std::vector<SandboxOriginDatabase::OriginRecord> origins;
153 165
154 SandboxOriginDatabase database(kFSDir); 166 SandboxOriginDatabase database(kFSDir, in_memory_env.get());
155 EXPECT_TRUE(database.ListAllOrigins(&origins)); 167 EXPECT_TRUE(database.ListAllOrigins(&origins));
156 EXPECT_TRUE(origins.empty()); 168 EXPECT_TRUE(origins.empty());
157 origins.clear(); 169 origins.clear();
158 170
159 std::string origin0("origin0"); 171 std::string origin0("origin0");
160 std::string origin1("origin1"); 172 std::string origin1("origin1");
161 173
162 EXPECT_FALSE(database.HasOriginPath(origin0)); 174 EXPECT_FALSE(database.HasOriginPath(origin0));
163 EXPECT_FALSE(database.HasOriginPath(origin1)); 175 EXPECT_FALSE(database.HasOriginPath(origin1));
164 176
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 213
202 const std::string kOrigins[] = { 214 const std::string kOrigins[] = {
203 "foo.example.com", 215 "foo.example.com",
204 "bar.example.com", 216 "bar.example.com",
205 "baz.example.com", 217 "baz.example.com",
206 "hoge.example.com", 218 "hoge.example.com",
207 "fuga.example.com", 219 "fuga.example.com",
208 }; 220 };
209 221
210 scoped_ptr<SandboxOriginDatabase> database( 222 scoped_ptr<SandboxOriginDatabase> database(
211 new SandboxOriginDatabase(kFSDir)); 223 new SandboxOriginDatabase(kFSDir, NULL));
212 for (size_t i = 0; i < arraysize(kOrigins); ++i) { 224 for (size_t i = 0; i < arraysize(kOrigins); ++i) {
213 base::FilePath path; 225 base::FilePath path;
214 EXPECT_FALSE(database->HasOriginPath(kOrigins[i])); 226 EXPECT_FALSE(database->HasOriginPath(kOrigins[i]));
215 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path)); 227 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path));
216 EXPECT_FALSE(path.empty()); 228 EXPECT_FALSE(path.empty());
217 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path)); 229 EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path));
218 230
219 if (i != 1) 231 if (i != 1)
220 EXPECT_TRUE(base::CreateDirectory(kFSDir.Append(path))); 232 EXPECT_TRUE(base::CreateDirectory(kFSDir.Append(path)));
221 } 233 }
(...skipping 13 matching lines...) Expand all
235 EXPECT_TRUE(base::ClosePlatformFile(file)); 247 EXPECT_TRUE(base::ClosePlatformFile(file));
236 248
237 // Corrupt database itself and last log entry to drop last 1 database 249 // Corrupt database itself and last log entry to drop last 1 database
238 // operation. The database should detect the corruption and should recover 250 // operation. The database should detect the corruption and should recover
239 // its consistency after recovery. 251 // its consistency after recovery.
240 CorruptDatabase(kDBDir, leveldb::kDescriptorFile, 252 CorruptDatabase(kDBDir, leveldb::kDescriptorFile,
241 0, std::numeric_limits<size_t>::max()); 253 0, std::numeric_limits<size_t>::max());
242 CorruptDatabase(kDBDir, leveldb::kLogFile, -1, 1); 254 CorruptDatabase(kDBDir, leveldb::kLogFile, -1, 1);
243 255
244 base::FilePath path; 256 base::FilePath path;
245 database.reset(new SandboxOriginDatabase(kFSDir)); 257 database.reset(new SandboxOriginDatabase(kFSDir, NULL));
246 std::vector<SandboxOriginDatabase::OriginRecord> origins_in_db; 258 std::vector<SandboxOriginDatabase::OriginRecord> origins_in_db;
247 EXPECT_TRUE(database->ListAllOrigins(&origins_in_db)); 259 EXPECT_TRUE(database->ListAllOrigins(&origins_in_db));
248 260
249 // Expect all but last added origin will be repaired back, and kOrigins[1] 261 // Expect all but last added origin will be repaired back, and kOrigins[1]
250 // should be dropped due to absence of backing directory. 262 // should be dropped due to absence of backing directory.
251 EXPECT_EQ(arraysize(kOrigins) - 2, origins_in_db.size()); 263 EXPECT_EQ(arraysize(kOrigins) - 2, origins_in_db.size());
252 264
253 const std::string kOrigin("piyo.example.org"); 265 const std::string kOrigin("piyo.example.org");
254 EXPECT_FALSE(database->HasOriginPath(kOrigin)); 266 EXPECT_FALSE(database->HasOriginPath(kOrigin));
255 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path)); 267 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path));
(...skipping 20 matching lines...) Expand all
276 ASSERT_TRUE(dir.CreateUniqueTempDir()); 288 ASSERT_TRUE(dir.CreateUniqueTempDir());
277 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName); 289 const base::FilePath kFSDir = dir.path().Append(kFileSystemDirName);
278 const base::FilePath kDBDir = kFSDir.Append(kOriginDatabaseName); 290 const base::FilePath kDBDir = kFSDir.Append(kOriginDatabaseName);
279 EXPECT_FALSE(base::PathExists(kFSDir)); 291 EXPECT_FALSE(base::PathExists(kFSDir));
280 EXPECT_TRUE(base::CreateDirectory(kFSDir)); 292 EXPECT_TRUE(base::CreateDirectory(kFSDir));
281 293
282 const std::string kOrigin = "foo.example.com"; 294 const std::string kOrigin = "foo.example.com";
283 base::FilePath path; 295 base::FilePath path;
284 296
285 scoped_ptr<SandboxOriginDatabase> database( 297 scoped_ptr<SandboxOriginDatabase> database(
286 new SandboxOriginDatabase(kFSDir)); 298 new SandboxOriginDatabase(kFSDir, NULL));
287 EXPECT_FALSE(database->HasOriginPath(kOrigin)); 299 EXPECT_FALSE(database->HasOriginPath(kOrigin));
288 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path)); 300 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path));
289 EXPECT_FALSE(path.empty()); 301 EXPECT_FALSE(path.empty());
290 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path)); 302 EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path));
291 EXPECT_TRUE(base::CreateDirectory(kFSDir.Append(path))); 303 EXPECT_TRUE(base::CreateDirectory(kFSDir.Append(path)));
292 database.reset(); 304 database.reset();
293 305
294 DeleteDatabaseFile(kDBDir, kLevelDBFileTypes[i]); 306 DeleteDatabaseFile(kDBDir, kLevelDBFileTypes[i]);
295 307
296 database.reset(new SandboxOriginDatabase(kFSDir)); 308 database.reset(new SandboxOriginDatabase(kFSDir, NULL));
297 std::vector<SandboxOriginDatabase::OriginRecord> origins_in_db; 309 std::vector<SandboxOriginDatabase::OriginRecord> origins_in_db;
298 EXPECT_TRUE(database->ListAllOrigins(&origins_in_db)); 310 EXPECT_TRUE(database->ListAllOrigins(&origins_in_db));
299 311
300 const std::string kOrigin2("piyo.example.org"); 312 const std::string kOrigin2("piyo.example.org");
301 EXPECT_FALSE(database->HasOriginPath(kOrigin2)); 313 EXPECT_FALSE(database->HasOriginPath(kOrigin2));
302 EXPECT_TRUE(database->GetPathForOrigin(kOrigin2, &path)); 314 EXPECT_TRUE(database->GetPathForOrigin(kOrigin2, &path));
303 EXPECT_FALSE(path.empty()); 315 EXPECT_FALSE(path.empty());
304 EXPECT_TRUE(database->HasOriginPath(kOrigin2)); 316 EXPECT_TRUE(database->HasOriginPath(kOrigin2));
305 } 317 }
306 } 318 }
307 319
308 } // namespace fileapi 320 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698