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

Side by Side Diff: content/browser/fileapi/sandbox_prioritized_origin_database_unittest.cc

Issue 2775383003: Move some fileapi tests next to the files they cover. (Closed)
Patch Set: Created 3 years, 8 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
(Empty)
1 // Copyright 2014 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 "base/files/file_util.h"
6 #include "base/files/scoped_temp_dir.h"
7 #include "storage/browser/fileapi/sandbox_origin_database.h"
8 #include "storage/browser/fileapi/sandbox_prioritized_origin_database.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 using storage::SandboxOriginDatabase;
12 using storage::SandboxOriginDatabaseInterface;
13 using storage::SandboxPrioritizedOriginDatabase;
14
15 namespace content {
16
17 TEST(SandboxPrioritizedOriginDatabaseTest, BasicTest) {
18 base::ScopedTempDir dir;
19 base::FilePath path;
20 ASSERT_TRUE(dir.CreateUniqueTempDir());
21
22 const std::string kOrigin1("origin1");
23 const std::string kOrigin2("origin2");
24
25 SandboxPrioritizedOriginDatabase database(dir.GetPath(), NULL);
26
27 // Set the kOrigin1 as a parimary origin.
28 EXPECT_TRUE(database.InitializePrimaryOrigin(kOrigin1));
29
30 // Add two origins.
31 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path));
32 EXPECT_TRUE(database.GetPathForOrigin(kOrigin2, &path));
33
34 // Verify them.
35 EXPECT_TRUE(database.HasOriginPath(kOrigin1));
36 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path));
37 EXPECT_FALSE(path.empty());
38 EXPECT_TRUE(database.HasOriginPath(kOrigin2));
39 EXPECT_TRUE(database.GetPathForOrigin(kOrigin2, &path));
40 EXPECT_FALSE(path.empty());
41
42 std::vector<SandboxOriginDatabaseInterface::OriginRecord> origins;
43 database.ListAllOrigins(&origins);
44 ASSERT_EQ(2U, origins.size());
45 EXPECT_TRUE(origins[0].origin == kOrigin1 ||
46 origins[1].origin == kOrigin1);
47 EXPECT_TRUE(origins[0].origin == kOrigin2 ||
48 origins[1].origin == kOrigin2);
49 EXPECT_NE(origins[0].path, origins[1].path);
50
51 // Try remove path for kOrigin1.
52 database.RemovePathForOrigin(kOrigin1);
53
54 // Verify the removal.
55 EXPECT_FALSE(database.HasOriginPath(kOrigin1));
56 EXPECT_TRUE(database.HasOriginPath(kOrigin2));
57 database.ListAllOrigins(&origins);
58 ASSERT_EQ(1U, origins.size());
59 EXPECT_EQ(kOrigin2, origins[0].origin);
60
61 // Try remove path for kOrigin2.
62 database.RemovePathForOrigin(kOrigin2);
63
64 // Verify the removal.
65 EXPECT_FALSE(database.HasOriginPath(kOrigin1));
66 EXPECT_FALSE(database.HasOriginPath(kOrigin2));
67 database.ListAllOrigins(&origins);
68 EXPECT_TRUE(origins.empty());
69 }
70
71 TEST(SandboxPrioritizedOriginDatabaseTest, SetPrimaryLaterTest) {
72 base::ScopedTempDir dir;
73 base::FilePath path;
74 ASSERT_TRUE(dir.CreateUniqueTempDir());
75
76 const std::string kOrigin1("origin1");
77 const std::string kOrigin2("origin2");
78
79 SandboxPrioritizedOriginDatabase database(dir.GetPath(), NULL);
80
81 EXPECT_TRUE(database.GetPrimaryOrigin().empty());
82
83 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path));
84 EXPECT_TRUE(database.GetPathForOrigin(kOrigin2, &path));
85
86 // Set the kOrigin1 as a parimary origin.
87 EXPECT_TRUE(database.InitializePrimaryOrigin(kOrigin1));
88 EXPECT_EQ(kOrigin1, database.GetPrimaryOrigin());
89
90 // Regardless of whether it is initialized as primary or not
91 // they should just work.
92 EXPECT_TRUE(database.HasOriginPath(kOrigin1));
93 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path));
94 EXPECT_FALSE(path.empty());
95 EXPECT_TRUE(database.HasOriginPath(kOrigin2));
96 EXPECT_TRUE(database.GetPathForOrigin(kOrigin2, &path));
97 EXPECT_FALSE(path.empty());
98 }
99
100 TEST(SandboxPrioritizedOriginDatabaseTest, LostPrimaryOriginFileTest) {
101 base::ScopedTempDir dir;
102 base::FilePath path;
103 ASSERT_TRUE(dir.CreateUniqueTempDir());
104
105 const std::string kOrigin1("origin1");
106 const std::string kData("foo");
107
108 SandboxPrioritizedOriginDatabase database(dir.GetPath(), NULL);
109
110 EXPECT_TRUE(database.GetPrimaryOrigin().empty());
111
112 // Set the kOrigin1 as a parimary origin.
113 EXPECT_TRUE(database.InitializePrimaryOrigin(kOrigin1));
114 EXPECT_EQ(kOrigin1, database.GetPrimaryOrigin());
115
116 // Make sure it works.
117 EXPECT_TRUE(database.HasOriginPath(kOrigin1));
118 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path));
119
120 // Reset the database.
121 database.DropDatabase();
122
123 // kOrigin1 should still be marked as primary.
124 EXPECT_TRUE(database.HasOriginPath(kOrigin1));
125 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path));
126
127 // Corrupt the primary origin file.
128 base::WriteFile(database.primary_origin_file(), kData.data(), kData.size());
129
130 // Reset the database.
131 database.DropDatabase();
132
133 // kOrigin1 is no longer marked as primary, and unfortunately we fail
134 // to find the data for the origin.
135 EXPECT_FALSE(database.HasOriginPath(kOrigin1));
136 }
137
138 TEST(SandboxPrioritizedOriginDatabaseTest, MigrationTest) {
139 base::ScopedTempDir dir;
140 ASSERT_TRUE(dir.CreateUniqueTempDir());
141
142 const std::string kOrigin1("origin1");
143 const std::string kOrigin2("origin2");
144 const std::string kFakeDirectoryData1("0123456789");
145 const std::string kFakeDirectoryData2("abcde");
146 base::FilePath old_dir_db_path1, old_dir_db_path2;
147 base::FilePath path1, path2;
148
149 // Initialize the directory with two origins using the regular
150 // SandboxOriginDatabase.
151 {
152 SandboxOriginDatabase database_old(dir.GetPath(), NULL);
153 base::FilePath old_db_path = database_old.GetDatabasePath();
154 EXPECT_FALSE(base::PathExists(old_db_path));
155
156 // Initialize paths for kOrigin1 and kOrigin2.
157 EXPECT_TRUE(database_old.GetPathForOrigin(kOrigin1, &path1));
158 EXPECT_FALSE(path1.empty());
159 EXPECT_TRUE(database_old.GetPathForOrigin(kOrigin2, &path2));
160 EXPECT_FALSE(path2.empty());
161
162 EXPECT_TRUE(base::DirectoryExists(old_db_path));
163
164 // Populate the origin directory with some fake data.
165 old_dir_db_path1 = dir.GetPath().Append(path1);
166 ASSERT_TRUE(base::CreateDirectory(old_dir_db_path1));
167 EXPECT_EQ(static_cast<int>(kFakeDirectoryData1.size()),
168 base::WriteFile(old_dir_db_path1.AppendASCII("dummy"),
169 kFakeDirectoryData1.data(),
170 kFakeDirectoryData1.size()));
171 old_dir_db_path2 = dir.GetPath().Append(path2);
172 ASSERT_TRUE(base::CreateDirectory(old_dir_db_path2));
173 EXPECT_EQ(static_cast<int>(kFakeDirectoryData2.size()),
174 base::WriteFile(old_dir_db_path2.AppendASCII("dummy"),
175 kFakeDirectoryData2.data(),
176 kFakeDirectoryData2.size()));
177 }
178
179 // Re-open the directory using sandboxPrioritizedOriginDatabase.
180 SandboxPrioritizedOriginDatabase database(dir.GetPath(), NULL);
181
182 // Set the kOrigin1 as a parimary origin.
183 // (Trying to initialize another origin should fail).
184 EXPECT_TRUE(database.InitializePrimaryOrigin(kOrigin1));
185 EXPECT_FALSE(database.InitializePrimaryOrigin(kOrigin2));
186
187 EXPECT_EQ(kOrigin1, database.GetPrimaryOrigin());
188
189 // Regardless of whether the origin is registered as primary or not
190 // it should just work.
191 EXPECT_TRUE(database.HasOriginPath(kOrigin1));
192 EXPECT_TRUE(database.GetPathForOrigin(kOrigin1, &path1));
193 EXPECT_TRUE(database.HasOriginPath(kOrigin2));
194 EXPECT_TRUE(database.GetPathForOrigin(kOrigin2, &path2));
195
196 // The directory content must be kept (or migrated if necessary) as well.
197 std::string origin_db_data;
198 base::FilePath dir_db_path = dir.GetPath().Append(path1);
199 EXPECT_TRUE(base::PathExists(dir_db_path.AppendASCII("dummy")));
200 EXPECT_TRUE(base::ReadFileToString(
201 dir_db_path.AppendASCII("dummy"), &origin_db_data));
202 EXPECT_EQ(kFakeDirectoryData1, origin_db_data);
203
204 origin_db_data.clear();
205 dir_db_path = dir.GetPath().Append(path2);
206 EXPECT_TRUE(base::PathExists(dir_db_path.AppendASCII("dummy")));
207 EXPECT_TRUE(base::ReadFileToString(
208 dir_db_path.AppendASCII("dummy"), &origin_db_data));
209 EXPECT_EQ(kFakeDirectoryData2, origin_db_data);
210
211 // After the migration the kOrigin1 directory database path must be gone.
212 EXPECT_FALSE(base::PathExists(old_dir_db_path1));
213 EXPECT_TRUE(base::PathExists(old_dir_db_path2));
214 }
215
216 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698