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

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

Issue 9663021: Add database recovery for FileSystemOriginDatabase (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: deletion for directory database Created 8 years, 9 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/scoped_temp_dir.h" 10 #include "base/scoped_temp_dir.h"
11 #include "webkit/fileapi/file_system_origin_database.h" 11 #include "webkit/fileapi/file_system_origin_database.h"
12 12
13 namespace fileapi { 13 namespace fileapi {
14 14
15 namespace {
16 const char kFileSystemDirName[] = "File System";
17 const char kOriginDatabaseName[] = "Origins";
18 }
19
15 TEST(FileSystemOriginDatabaseTest, BasicTest) { 20 TEST(FileSystemOriginDatabaseTest, BasicTest) {
16 ScopedTempDir dir; 21 ScopedTempDir dir;
17 ASSERT_TRUE(dir.CreateUniqueTempDir()); 22 ASSERT_TRUE(dir.CreateUniqueTempDir());
18 const FilePath kDBFile = dir.path().AppendASCII("fsod.db"); 23 const FilePath kFSDir = dir.path().AppendASCII(kFileSystemDirName);
19 EXPECT_FALSE(file_util::PathExists(kDBFile)); 24 EXPECT_FALSE(file_util::PathExists(kFSDir));
25 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
20 26
21 FileSystemOriginDatabase database(kDBFile); 27 FileSystemOriginDatabase database(kFSDir);
22 std::string origin("origin"); 28 std::string origin("origin");
23 29
24 EXPECT_FALSE(database.HasOriginPath(origin)); 30 EXPECT_FALSE(database.HasOriginPath(origin));
25 // Double-check to make sure that had no side effects. 31 // Double-check to make sure that had no side effects.
26 EXPECT_FALSE(database.HasOriginPath(origin)); 32 EXPECT_FALSE(database.HasOriginPath(origin));
27 33
28 FilePath path0; 34 FilePath path0;
29 FilePath path1; 35 FilePath path1;
30 36
31 // Empty strings aren't valid origins. 37 // Empty strings aren't valid origins.
32 EXPECT_FALSE(database.GetPathForOrigin(std::string(), &path0)); 38 EXPECT_FALSE(database.GetPathForOrigin(std::string(), &path0));
33 39
34 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 40 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
35 EXPECT_TRUE(database.HasOriginPath(origin)); 41 EXPECT_TRUE(database.HasOriginPath(origin));
36 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 42 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
37 EXPECT_FALSE(path0.empty()); 43 EXPECT_FALSE(path0.empty());
38 EXPECT_FALSE(path1.empty()); 44 EXPECT_FALSE(path1.empty());
39 EXPECT_EQ(path0, path1); 45 EXPECT_EQ(path0, path1);
40 46
41 EXPECT_TRUE(file_util::PathExists(kDBFile)); 47 EXPECT_TRUE(file_util::PathExists(kFSDir.AppendASCII(kOriginDatabaseName)));
42 } 48 }
43 49
44 TEST(FileSystemOriginDatabaseTest, TwoPathTest) { 50 TEST(FileSystemOriginDatabaseTest, TwoPathTest) {
45 ScopedTempDir dir; 51 ScopedTempDir dir;
46 ASSERT_TRUE(dir.CreateUniqueTempDir()); 52 ASSERT_TRUE(dir.CreateUniqueTempDir());
47 const FilePath kDBFile = dir.path().AppendASCII("fsod.db"); 53 const FilePath kFSDir = dir.path().AppendASCII(kFileSystemDirName);
48 EXPECT_FALSE(file_util::PathExists(kDBFile)); 54 EXPECT_FALSE(file_util::PathExists(kFSDir));
55 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
49 56
50 FileSystemOriginDatabase database(kDBFile); 57 FileSystemOriginDatabase database(kFSDir);
51 std::string origin0("origin0"); 58 std::string origin0("origin0");
52 std::string origin1("origin1"); 59 std::string origin1("origin1");
53 60
54 EXPECT_FALSE(database.HasOriginPath(origin0)); 61 EXPECT_FALSE(database.HasOriginPath(origin0));
55 EXPECT_FALSE(database.HasOriginPath(origin1)); 62 EXPECT_FALSE(database.HasOriginPath(origin1));
56 63
57 FilePath path0; 64 FilePath path0;
58 FilePath path1; 65 FilePath path1;
59 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0)); 66 EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0));
60 EXPECT_TRUE(database.HasOriginPath(origin0)); 67 EXPECT_TRUE(database.HasOriginPath(origin0));
61 EXPECT_FALSE(database.HasOriginPath(origin1)); 68 EXPECT_FALSE(database.HasOriginPath(origin1));
62 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1)); 69 EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1));
63 EXPECT_TRUE(database.HasOriginPath(origin1)); 70 EXPECT_TRUE(database.HasOriginPath(origin1));
64 EXPECT_FALSE(path0.empty()); 71 EXPECT_FALSE(path0.empty());
65 EXPECT_FALSE(path1.empty()); 72 EXPECT_FALSE(path1.empty());
66 EXPECT_NE(path0, path1); 73 EXPECT_NE(path0, path1);
67 74
68 EXPECT_TRUE(file_util::PathExists(kDBFile)); 75 EXPECT_TRUE(file_util::PathExists(kFSDir.AppendASCII(kOriginDatabaseName)));
69 } 76 }
70 77
71 TEST(FileSystemOriginDatabaseTest, DropDatabaseTest) { 78 TEST(FileSystemOriginDatabaseTest, DropDatabaseTest) {
72 ScopedTempDir dir; 79 ScopedTempDir dir;
73 ASSERT_TRUE(dir.CreateUniqueTempDir()); 80 ASSERT_TRUE(dir.CreateUniqueTempDir());
74 const FilePath kDBFile = dir.path().AppendASCII("fsod.db"); 81 const FilePath kFSDir = dir.path().AppendASCII(kFileSystemDirName);
75 EXPECT_FALSE(file_util::PathExists(kDBFile)); 82 EXPECT_FALSE(file_util::PathExists(kFSDir));
83 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
76 84
77 FileSystemOriginDatabase database(kDBFile); 85 FileSystemOriginDatabase database(kFSDir);
78 std::string origin("origin"); 86 std::string origin("origin");
79 87
80 EXPECT_FALSE(database.HasOriginPath(origin)); 88 EXPECT_FALSE(database.HasOriginPath(origin));
81 89
82 FilePath path0; 90 FilePath path0;
83 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 91 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
84 EXPECT_TRUE(database.HasOriginPath(origin)); 92 EXPECT_TRUE(database.HasOriginPath(origin));
85 EXPECT_FALSE(path0.empty()); 93 EXPECT_FALSE(path0.empty());
86 94
87 EXPECT_TRUE(file_util::PathExists(kDBFile)); 95 EXPECT_TRUE(file_util::PathExists(kFSDir.AppendASCII(kOriginDatabaseName)));
88 96
89 database.DropDatabase(); 97 database.DropDatabase();
90 98
91 FilePath path1; 99 FilePath path1;
92 EXPECT_TRUE(database.HasOriginPath(origin)); 100 EXPECT_TRUE(database.HasOriginPath(origin));
93 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 101 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
94 EXPECT_FALSE(path1.empty()); 102 EXPECT_FALSE(path1.empty());
95 EXPECT_EQ(path0, path1); 103 EXPECT_EQ(path0, path1);
96 } 104 }
97 105
98 TEST(FileSystemOriginDatabaseTest, DeleteOriginTest) { 106 TEST(FileSystemOriginDatabaseTest, DeleteOriginTest) {
99 ScopedTempDir dir; 107 ScopedTempDir dir;
100 ASSERT_TRUE(dir.CreateUniqueTempDir()); 108 ASSERT_TRUE(dir.CreateUniqueTempDir());
101 const FilePath kDBFile = dir.path().AppendASCII("fsod.db"); 109 const FilePath kFSDir = dir.path().AppendASCII(kFileSystemDirName);
102 EXPECT_FALSE(file_util::PathExists(kDBFile)); 110 EXPECT_FALSE(file_util::PathExists(kFSDir));
111 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
103 112
104 FileSystemOriginDatabase database(kDBFile); 113 FileSystemOriginDatabase database(kFSDir);
105 std::string origin("origin"); 114 std::string origin("origin");
106 115
107 EXPECT_FALSE(database.HasOriginPath(origin)); 116 EXPECT_FALSE(database.HasOriginPath(origin));
108 EXPECT_TRUE(database.RemovePathForOrigin(origin)); 117 EXPECT_TRUE(database.RemovePathForOrigin(origin));
109 118
110 FilePath path0; 119 FilePath path0;
111 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0)); 120 EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
112 EXPECT_TRUE(database.HasOriginPath(origin)); 121 EXPECT_TRUE(database.HasOriginPath(origin));
113 EXPECT_FALSE(path0.empty()); 122 EXPECT_FALSE(path0.empty());
114 123
115 EXPECT_TRUE(database.RemovePathForOrigin(origin)); 124 EXPECT_TRUE(database.RemovePathForOrigin(origin));
116 EXPECT_FALSE(database.HasOriginPath(origin)); 125 EXPECT_FALSE(database.HasOriginPath(origin));
117 126
118 FilePath path1; 127 FilePath path1;
119 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1)); 128 EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
120 EXPECT_FALSE(path1.empty()); 129 EXPECT_FALSE(path1.empty());
121 EXPECT_NE(path0, path1); 130 EXPECT_NE(path0, path1);
122 } 131 }
123 132
124 TEST(FileSystemOriginDatabaseTest, ListOriginsTest) { 133 TEST(FileSystemOriginDatabaseTest, ListOriginsTest) {
125 ScopedTempDir dir; 134 ScopedTempDir dir;
126 ASSERT_TRUE(dir.CreateUniqueTempDir()); 135 ASSERT_TRUE(dir.CreateUniqueTempDir());
127 const FilePath kDBFile = dir.path().AppendASCII("fsod.db"); 136 const FilePath kFSDir = dir.path().AppendASCII(kFileSystemDirName);
128 EXPECT_FALSE(file_util::PathExists(kDBFile)); 137 EXPECT_FALSE(file_util::PathExists(kFSDir));
138 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
129 139
130 std::vector<FileSystemOriginDatabase::OriginRecord> origins; 140 std::vector<FileSystemOriginDatabase::OriginRecord> origins;
131 141
132 FileSystemOriginDatabase database(kDBFile); 142 FileSystemOriginDatabase database(kFSDir);
133 EXPECT_TRUE(database.ListAllOrigins(&origins)); 143 EXPECT_TRUE(database.ListAllOrigins(&origins));
134 EXPECT_TRUE(origins.empty()); 144 EXPECT_TRUE(origins.empty());
135 origins.clear(); 145 origins.clear();
136 146
137 std::string origin0("origin0"); 147 std::string origin0("origin0");
138 std::string origin1("origin1"); 148 std::string origin1("origin1");
139 149
140 EXPECT_FALSE(database.HasOriginPath(origin0)); 150 EXPECT_FALSE(database.HasOriginPath(origin0));
141 EXPECT_FALSE(database.HasOriginPath(origin1)); 151 EXPECT_FALSE(database.HasOriginPath(origin1));
142 152
(...skipping 13 matching lines...) Expand all
156 EXPECT_EQ(origins[1].origin, origin1); 166 EXPECT_EQ(origins[1].origin, origin1);
157 EXPECT_EQ(origins[1].path, path1); 167 EXPECT_EQ(origins[1].path, path1);
158 } else { 168 } else {
159 EXPECT_EQ(origins[0].origin, origin1); 169 EXPECT_EQ(origins[0].origin, origin1);
160 EXPECT_EQ(origins[0].path, path1); 170 EXPECT_EQ(origins[0].path, path1);
161 EXPECT_EQ(origins[1].origin, origin0); 171 EXPECT_EQ(origins[1].origin, origin0);
162 EXPECT_EQ(origins[1].path, path0); 172 EXPECT_EQ(origins[1].path, path0);
163 } 173 }
164 } 174 }
165 175
176 TEST(FileSystemOriginDatabaseTest, DatabaseRecoveryTest) {
ericu 2012/03/19 16:50:05 We need a test for the code that removes orphaned
tzik 2012/03/21 08:59:21 Done adding test for deletion of orphaned.
ericu 2012/03/22 03:54:17 Looks good. Can you do a repair test as well? It
tzik 2012/03/22 14:56:26 Done. Right before repairing, database has: - a d
177 ScopedTempDir dir;
178 ASSERT_TRUE(dir.CreateUniqueTempDir());
179 const FilePath kFSDir = dir.path().AppendASCII(kFileSystemDirName);
180 EXPECT_FALSE(file_util::PathExists(kFSDir));
181 EXPECT_TRUE(file_util::CreateDirectory(kFSDir));
182
183 const std::string kOrigin1("example.com");
184 {
185 FilePath path;
186 FileSystemOriginDatabase database(kFSDir);
187 EXPECT_FALSE(database.HasOriginPath(kOrigin1));
188 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path));
189 EXPECT_FALSE(path.empty());
190 EXPECT_TRUE(database.HasOriginPath(kOrigin1));
191 }
192
193 bool created = false;
194 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED;
195 base::PlatformFile file = base::CreatePlatformFile(
196 kFSDir.AppendASCII(kOriginDatabaseName).AppendASCII("CURRENT"),
197 base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_WRITE,
198 &created, &error);
199 EXPECT_EQ(base::PLATFORM_FILE_OK, error);
200 EXPECT_TRUE(created);
201 EXPECT_TRUE(base::ClosePlatformFile(file));
202
203 const std::string kOrigin2("example.org");
204 FilePath path;
205 FileSystemOriginDatabase database(kFSDir);
206 EXPECT_FALSE(database.HasOriginPath(kOrigin2));
207 EXPECT_TRUE(database.GetPathForOrigin(kOrigin2, &path));
208 EXPECT_FALSE(path.empty());
209 EXPECT_TRUE(database.HasOriginPath(kOrigin2));
210 }
211
166 } // namespace fileapi 212 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698