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

Side by Side Diff: webkit/database/database_tracker_unittest.cc

Issue 507014: Adding methods that will be used by the quota management UI.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 11 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
« no previous file with comments | « webkit/database/database_tracker.cc ('k') | webkit/database/databases_table.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/scoped_ptr.h" 7 #include "base/scoped_ptr.h"
8 #include "base/scoped_temp_dir.h" 8 #include "base/scoped_temp_dir.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 } // namespace 63 } // namespace
64 64
65 namespace webkit_database { 65 namespace webkit_database {
66 66
67 TEST(DatabaseTrackerTest, TestIt) { 67 TEST(DatabaseTrackerTest, TestIt) {
68 // Initialize the tracker database. 68 // Initialize the tracker database.
69 ScopedTempDir temp_dir; 69 ScopedTempDir temp_dir;
70 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); 70 EXPECT_TRUE(temp_dir.CreateUniqueTempDir());
71 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker(temp_dir.path())); 71 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker(temp_dir.path()));
72 72
73 // Get the default quota for all origins.
74 const int64 kDefaultQuota = tracker->GetOriginQuota(EmptyString16());
75
76 // Add two observers. 73 // Add two observers.
77 TestObserver observer1; 74 TestObserver observer1;
78 TestObserver observer2; 75 TestObserver observer2;
79 tracker->AddObserver(&observer1); 76 tracker->AddObserver(&observer1);
80 tracker->AddObserver(&observer2); 77 tracker->AddObserver(&observer2);
81 78
82 // Open three new databases. 79 // Open three new databases.
83 int64 database_size = 0; 80 int64 database_size = 0;
84 int64 space_available = 0; 81 int64 space_available = 0;
85 const string16 kOrigin1 = ASCIIToUTF16("origin1"); 82 const string16 kOrigin1 = ASCIIToUTF16("origin1");
86 const string16 kOrigin2 = ASCIIToUTF16("origin2"); 83 const string16 kOrigin2 = ASCIIToUTF16("origin2");
87 const string16 kDB1 = ASCIIToUTF16("db1"); 84 const string16 kDB1 = ASCIIToUTF16("db1");
88 const string16 kDB2 = ASCIIToUTF16("db2"); 85 const string16 kDB2 = ASCIIToUTF16("db2");
89 const string16 kDB3 = ASCIIToUTF16("db3"); 86 const string16 kDB3 = ASCIIToUTF16("db3");
90 const string16 kDescription = ASCIIToUTF16("database_description"); 87 const string16 kDescription = ASCIIToUTF16("database_description");
91 88
89 // Get the quota for kOrigin1 and kOrigin2
90 DatabaseTracker::CachedOriginInfo* origin1_info =
91 tracker->GetCachedOriginInfo(kOrigin1);
92 DatabaseTracker::CachedOriginInfo* origin2_info =
93 tracker->GetCachedOriginInfo(kOrigin1);
94 EXPECT_TRUE(origin1_info);
95 EXPECT_TRUE(origin2_info);
96 int64 origin1_quota = origin1_info->Quota();
97 int64 origin2_quota = origin2_info->Quota();
98 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1));
99 EXPECT_EQ(origin2_quota, tracker->GetOriginSpaceAvailable(kOrigin2));
100
101 // Set a new quota for kOrigin1
102 origin1_quota *= 2;
103 tracker->SetOriginQuota(kOrigin1, origin1_quota);
104 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
105 EXPECT_TRUE(origin1_info);
106 EXPECT_EQ(origin1_quota, origin1_info->Quota());
107
92 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 108 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
93 &database_size, &space_available); 109 &database_size, &space_available);
94 EXPECT_EQ(0, database_size); 110 EXPECT_EQ(0, database_size);
95 EXPECT_EQ(kDefaultQuota, space_available); 111 EXPECT_EQ(origin1_quota, space_available);
96 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, 112 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0,
97 &database_size, &space_available); 113 &database_size, &space_available);
98 EXPECT_EQ(0, database_size); 114 EXPECT_EQ(0, database_size);
99 EXPECT_EQ(kDefaultQuota, space_available); 115 EXPECT_EQ(origin2_quota, space_available);
100 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, 116 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0,
101 &database_size, &space_available); 117 &database_size, &space_available);
102 EXPECT_EQ(0, database_size); 118 EXPECT_EQ(0, database_size);
103 EXPECT_EQ(kDefaultQuota, space_available); 119 EXPECT_EQ(origin1_quota, space_available);
104 120
105 // Tell the tracker that a database has changed. 121 // Tell the tracker that a database has changed.
106 // Even though nothing has changed, the observers should be notified. 122 // Even though nothing has changed, the observers should be notified.
107 tracker->DatabaseModified(kOrigin1, kDB1); 123 tracker->DatabaseModified(kOrigin1, kDB1);
108 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 0, kDefaultQuota); 124 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 0, origin1_quota);
109 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 0, kDefaultQuota); 125 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 0, origin1_quota);
110 126
111 // Write some data to each file and check that the listeners are 127 // Write some data to each file and check that the listeners are
112 // called with the appropriate values. 128 // called with the appropriate values.
113 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( 129 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
114 FilePath::FromWStringHack(UTF16ToWide(kOrigin1))))); 130 FilePath::FromWStringHack(UTF16ToWide(kOrigin1)))));
115 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( 131 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
116 FilePath::FromWStringHack(UTF16ToWide(kOrigin2))))); 132 FilePath::FromWStringHack(UTF16ToWide(kOrigin2)))));
117 EXPECT_EQ(1, file_util::WriteFile( 133 EXPECT_EQ(1, file_util::WriteFile(
118 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); 134 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1));
119 EXPECT_EQ(2, file_util::WriteFile( 135 EXPECT_EQ(2, file_util::WriteFile(
120 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); 136 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2));
121 EXPECT_EQ(4, file_util::WriteFile( 137 EXPECT_EQ(4, file_util::WriteFile(
122 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4)); 138 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4));
123 tracker->DatabaseModified(kOrigin1, kDB1); 139 tracker->DatabaseModified(kOrigin1, kDB1);
124 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, kDefaultQuota - 1); 140 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 1);
125 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, kDefaultQuota - 1); 141 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 1);
126 tracker->DatabaseModified(kOrigin2, kDB2); 142 tracker->DatabaseModified(kOrigin2, kDB2);
127 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2, kDefaultQuota - 2); 143 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2, origin2_quota - 2);
128 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2, kDefaultQuota - 2); 144 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2, origin2_quota - 2);
129 tracker->DatabaseModified(kOrigin1, kDB3); 145 tracker->DatabaseModified(kOrigin1, kDB3);
130 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4, kDefaultQuota - 5); 146 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4, origin1_quota - 5);
131 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4, kDefaultQuota - 5); 147 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4, origin1_quota - 5);
148
149 // Make sure the available space for kOrigin1 and kOrigin2 changed accordingly
150 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1));
151 EXPECT_EQ(origin2_quota - 2, tracker->GetOriginSpaceAvailable(kOrigin2));
152
153 // Close all databases
154 tracker->DatabaseClosed(kOrigin1, kDB1);
155 tracker->DatabaseClosed(kOrigin2, kDB2);
156 tracker->DatabaseClosed(kOrigin1, kDB3);
132 157
133 // Open an existing database and check the reported size 158 // Open an existing database and check the reported size
134 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 159 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
135 &database_size, &space_available); 160 &database_size, &space_available);
136 EXPECT_EQ(1, database_size); 161 EXPECT_EQ(1, database_size);
137 EXPECT_EQ(kDefaultQuota - 5, space_available); 162 EXPECT_EQ(origin1_quota - 5, space_available);
138 163
139 // Make sure that the observers are notified even if 164 // Make sure that the observers are notified even if
140 // the size of the database hasn't changed. 165 // the size of the database hasn't changed.
141 EXPECT_EQ(1, file_util::WriteFile( 166 EXPECT_EQ(1, file_util::WriteFile(
142 tracker->GetFullDBFilePath(kOrigin1, kDB1), "b", 1)); 167 tracker->GetFullDBFilePath(kOrigin1, kDB1), "b", 1));
143 tracker->DatabaseModified(kOrigin1, kDB1); 168 tracker->DatabaseModified(kOrigin1, kDB1);
144 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, kDefaultQuota - 5); 169 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 5);
145 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, kDefaultQuota - 5); 170 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 5);
171 tracker->DatabaseClosed(kOrigin1, kDB1);
146 172
147 // Remove an observer; this should clear all caches. 173 // Remove an observer; this should clear all caches.
148 tracker->RemoveObserver(&observer2); 174 tracker->RemoveObserver(&observer2);
149 175
150 // Change kDB1's and kDB3's size and call tracker->DatabaseModified() 176 // Change kDB1's and kDB3's size and call tracker->DatabaseModified()
151 // for kDB1 only. If the caches were indeed cleared, then calling 177 // for kDB1 only. If the caches were indeed cleared, then calling
152 // tracker->DatabaseModified() should re-populate the cache for 178 // tracker->DatabaseModified() should re-populate the cache for
153 // kOrigin1 == kOrigin1, and thus, should pick up kDB3's size change too. 179 // kOrigin1 == kOrigin1, and thus, should pick up kDB3's size change too.
154 EXPECT_EQ(5, file_util::WriteFile( 180 EXPECT_EQ(5, file_util::WriteFile(
155 tracker->GetFullDBFilePath(kOrigin1, kDB1), "ccccc", 5)); 181 tracker->GetFullDBFilePath(kOrigin1, kDB1), "ccccc", 5));
156 EXPECT_EQ(6, file_util::WriteFile( 182 EXPECT_EQ(6, file_util::WriteFile(
157 tracker->GetFullDBFilePath(kOrigin1, kDB3), "dddddd", 6)); 183 tracker->GetFullDBFilePath(kOrigin1, kDB3), "dddddd", 6));
158 tracker->DatabaseModified(kOrigin1, kDB1); 184 tracker->DatabaseModified(kOrigin1, kDB1);
159 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 5, kDefaultQuota - 11); 185 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 5, origin1_quota - 11);
160 EXPECT_FALSE(observer2.DidReceiveNewNotification()); 186 EXPECT_FALSE(observer2.DidReceiveNewNotification());
187 EXPECT_EQ(origin1_quota - 11, tracker->GetOriginSpaceAvailable(kOrigin1));
161 188
162 // Close the tracker database and clear all caches. 189 // Close the tracker database and clear all caches.
163 // Then make sure that DatabaseOpened() still returns the correct result. 190 // Then make sure that DatabaseOpened() still returns the correct result.
164 tracker->CloseTrackerDatabaseAndClearCaches(); 191 tracker->CloseTrackerDatabaseAndClearCaches();
165 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 192 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
166 &database_size, &space_available); 193 &database_size, &space_available);
167 EXPECT_EQ(5, database_size); 194 EXPECT_EQ(5, database_size);
168 EXPECT_EQ(kDefaultQuota - 11, space_available); 195 EXPECT_EQ(origin1_quota - 11, space_available);
169 196
170 // Close the tracker database and clear all caches. Then make sure that 197 // Close the tracker database and clear all caches. Then make sure that
171 // DatabaseModified() still calls the observers with correct values. 198 // DatabaseModified() still calls the observers with correct values.
172 tracker->CloseTrackerDatabaseAndClearCaches(); 199 tracker->CloseTrackerDatabaseAndClearCaches();
173 tracker->DatabaseModified(kOrigin1, kDB3); 200 tracker->DatabaseModified(kOrigin1, kDB3);
174 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6, kDefaultQuota - 11); 201 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6, origin1_quota - 11);
202 tracker->DatabaseClosed(kOrigin1, kDB1);
175 203
176 // Clean up. 204 // Remove all observers.
177 tracker->RemoveObserver(&observer1); 205 tracker->RemoveObserver(&observer1);
206
207 // Trying to delete a database in use should fail
208 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0,
209 &database_size, &space_available);
210 EXPECT_FALSE(tracker->DeleteDatabase(kOrigin1, kDB3));
211 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
212 EXPECT_TRUE(origin1_info);
213 EXPECT_EQ(6, origin1_info->GetDatabaseSize(kDB3));
214 tracker->DatabaseClosed(kOrigin1, kDB3);
215
216 // Delete a database and make sure the space used by that origin is updated
217 EXPECT_TRUE(tracker->DeleteDatabase(kOrigin1, kDB3));
218 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
219 EXPECT_TRUE(origin1_info);
220 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1));
221 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1));
222 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3));
223
224 // Get all data for all origins
225 std::vector<OriginInfo> origins_info;
226 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info));
227 EXPECT_EQ(size_t(2), origins_info.size());
228 EXPECT_EQ(kOrigin1, origins_info[0].GetOrigin());
229 EXPECT_EQ(5, origins_info[0].TotalSize());
230 EXPECT_EQ(origin1_quota, origins_info[0].Quota());
231 EXPECT_EQ(5, origins_info[0].GetDatabaseSize(kDB1));
232 EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3));
233
234 EXPECT_EQ(kOrigin2, origins_info[1].GetOrigin());
235 EXPECT_EQ(2, origins_info[1].TotalSize());
236 EXPECT_EQ(origin2_quota, origins_info[1].Quota());
237
238 // Trying to delete an origin with databases in use should fail
239 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
240 &database_size, &space_available);
241 EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1));
242 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
243 EXPECT_TRUE(origin1_info);
244 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1));
245 tracker->DatabaseClosed(kOrigin1, kDB1);
246
247 // Delete an origin that doesn't have any database in use
248 EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1));
249 origins_info.clear();
250 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info));
251 EXPECT_EQ(size_t(1), origins_info.size());
252 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin());
253
254 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
255 EXPECT_TRUE(origin1_info);
256 EXPECT_EQ(origin1_quota, origin1_info->Quota());
257 EXPECT_EQ(0, origin1_info->TotalSize());
258 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1));
178 } 259 }
179 260
180 } // namespace webkit_database 261 } // namespace webkit_database
OLDNEW
« no previous file with comments | « webkit/database/database_tracker.cc ('k') | webkit/database/databases_table.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698