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

Side by Side Diff: webkit/browser/fileapi/quota/quota_backend_impl_unittest.cc

Issue 253753007: Move all remaining fileapi and quota unit tests from webkit/ to content/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address feedback Created 6 years, 7 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
(Empty)
1 // Copyright 2013 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 "webkit/browser/fileapi/quota/quota_backend_impl.h"
6
7 #include <string>
8
9 #include "base/files/scoped_temp_dir.h"
10 #include "base/message_loop/message_loop.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
13 #include "third_party/leveldatabase/src/include/leveldb/env.h"
14 #include "webkit/browser/fileapi/file_system_usage_cache.h"
15 #include "webkit/browser/fileapi/obfuscated_file_util.h"
16 #include "webkit/browser/quota/quota_manager_proxy.h"
17
18 namespace fileapi {
19
20 namespace {
21
22 const char kOrigin[] = "http://example.com";
23
24 bool DidReserveQuota(bool accepted,
25 base::File::Error* error_out,
26 int64* delta_out,
27 base::File::Error error,
28 int64 delta) {
29 DCHECK(error_out);
30 DCHECK(delta_out);
31 *error_out = error;
32 *delta_out = delta;
33 return accepted;
34 }
35
36 class MockQuotaManagerProxy : public quota::QuotaManagerProxy {
37 public:
38 MockQuotaManagerProxy()
39 : QuotaManagerProxy(NULL, NULL),
40 storage_modified_count_(0),
41 usage_(0), quota_(0) {}
42
43 // We don't mock them.
44 virtual void NotifyOriginInUse(const GURL& origin) OVERRIDE {}
45 virtual void NotifyOriginNoLongerInUse(const GURL& origin) OVERRIDE {}
46 virtual void SetUsageCacheEnabled(quota::QuotaClient::ID client_id,
47 const GURL& origin,
48 quota::StorageType type,
49 bool enabled) OVERRIDE {}
50
51 virtual void NotifyStorageModified(
52 quota::QuotaClient::ID client_id,
53 const GURL& origin,
54 quota::StorageType type,
55 int64 delta) OVERRIDE {
56 ++storage_modified_count_;
57 usage_ += delta;
58 ASSERT_LE(usage_, quota_);
59 }
60
61 virtual void GetUsageAndQuota(
62 base::SequencedTaskRunner* original_task_runner,
63 const GURL& origin,
64 quota::StorageType type,
65 const GetUsageAndQuotaCallback& callback) OVERRIDE {
66 callback.Run(quota::kQuotaStatusOk, usage_, quota_);
67 }
68
69 int storage_modified_count() { return storage_modified_count_; }
70 int64 usage() { return usage_; }
71 void set_usage(int64 usage) { usage_ = usage; }
72 void set_quota(int64 quota) { quota_ = quota; }
73
74 protected:
75 virtual ~MockQuotaManagerProxy() {}
76
77 private:
78 int storage_modified_count_;
79 int64 usage_;
80 int64 quota_;
81
82 DISALLOW_COPY_AND_ASSIGN(MockQuotaManagerProxy);
83 };
84
85 } // namespace
86
87 class QuotaBackendImplTest : public testing::Test {
88 public:
89 QuotaBackendImplTest()
90 : file_system_usage_cache_(file_task_runner()),
91 quota_manager_proxy_(new MockQuotaManagerProxy) {}
92
93 virtual void SetUp() OVERRIDE {
94 ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
95 in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
96 file_util_.reset(ObfuscatedFileUtil::CreateForTesting(
97 NULL, data_dir_.path(), in_memory_env_.get(), file_task_runner()));
98 backend_.reset(new QuotaBackendImpl(file_task_runner(),
99 file_util_.get(),
100 &file_system_usage_cache_,
101 quota_manager_proxy_.get()));
102 }
103
104 virtual void TearDown() OVERRIDE {
105 backend_.reset();
106 quota_manager_proxy_ = NULL;
107 file_util_.reset();
108 message_loop_.RunUntilIdle();
109 }
110
111 protected:
112 void InitializeForOriginAndType(const GURL& origin, FileSystemType type) {
113 ASSERT_TRUE(file_util_->InitOriginDatabase(origin, true /* create */));
114 ASSERT_TRUE(file_util_->origin_database_ != NULL);
115
116 std::string type_string =
117 SandboxFileSystemBackendDelegate::GetTypeString(type);
118 base::File::Error error = base::File::FILE_ERROR_FAILED;
119 base::FilePath path = file_util_->GetDirectoryForOriginAndType(
120 origin, type_string, true /* create */, &error);
121 ASSERT_EQ(base::File::FILE_OK, error);
122
123 ASSERT_TRUE(file_system_usage_cache_.UpdateUsage(
124 GetUsageCachePath(origin, type), 0));
125 }
126
127 base::SequencedTaskRunner* file_task_runner() {
128 return base::MessageLoopProxy::current().get();
129 }
130
131 base::FilePath GetUsageCachePath(const GURL& origin, FileSystemType type) {
132 base::FilePath path;
133 base::File::Error error =
134 backend_->GetUsageCachePath(origin, type, &path);
135 EXPECT_EQ(base::File::FILE_OK, error);
136 EXPECT_FALSE(path.empty());
137 return path;
138 }
139
140 base::MessageLoop message_loop_;
141 base::ScopedTempDir data_dir_;
142 scoped_ptr<leveldb::Env> in_memory_env_;
143 scoped_ptr<ObfuscatedFileUtil> file_util_;
144 FileSystemUsageCache file_system_usage_cache_;
145 scoped_refptr<MockQuotaManagerProxy> quota_manager_proxy_;
146 scoped_ptr<QuotaBackendImpl> backend_;
147
148 private:
149 DISALLOW_COPY_AND_ASSIGN(QuotaBackendImplTest);
150 };
151
152 TEST_F(QuotaBackendImplTest, ReserveQuota_Basic) {
153 FileSystemType type = fileapi::kFileSystemTypeTemporary;
154 InitializeForOriginAndType(GURL(kOrigin), type);
155 quota_manager_proxy_->set_quota(10000);
156
157 int64 delta = 0;
158
159 const int64 kDelta1 = 1000;
160 base::File::Error error = base::File::FILE_ERROR_FAILED;
161 backend_->ReserveQuota(GURL(kOrigin), type, kDelta1,
162 base::Bind(&DidReserveQuota, true, &error, &delta));
163 EXPECT_EQ(base::File::FILE_OK, error);
164 EXPECT_EQ(kDelta1, delta);
165 EXPECT_EQ(kDelta1, quota_manager_proxy_->usage());
166
167 const int64 kDelta2 = -300;
168 error = base::File::FILE_ERROR_FAILED;
169 backend_->ReserveQuota(GURL(kOrigin), type, kDelta2,
170 base::Bind(&DidReserveQuota, true, &error, &delta));
171 EXPECT_EQ(base::File::FILE_OK, error);
172 EXPECT_EQ(kDelta2, delta);
173 EXPECT_EQ(kDelta1 + kDelta2, quota_manager_proxy_->usage());
174
175 EXPECT_EQ(2, quota_manager_proxy_->storage_modified_count());
176 }
177
178 TEST_F(QuotaBackendImplTest, ReserveQuota_NoSpace) {
179 FileSystemType type = fileapi::kFileSystemTypeTemporary;
180 InitializeForOriginAndType(GURL(kOrigin), type);
181 quota_manager_proxy_->set_quota(100);
182
183 int64 delta = 0;
184
185 const int64 kDelta = 1000;
186 base::File::Error error = base::File::FILE_ERROR_FAILED;
187 backend_->ReserveQuota(GURL(kOrigin), type, kDelta,
188 base::Bind(&DidReserveQuota, true, &error, &delta));
189 EXPECT_EQ(base::File::FILE_OK, error);
190 EXPECT_EQ(100, delta);
191 EXPECT_EQ(100, quota_manager_proxy_->usage());
192
193 EXPECT_EQ(1, quota_manager_proxy_->storage_modified_count());
194 }
195
196 TEST_F(QuotaBackendImplTest, ReserveQuota_Revert) {
197 FileSystemType type = fileapi::kFileSystemTypeTemporary;
198 InitializeForOriginAndType(GURL(kOrigin), type);
199 quota_manager_proxy_->set_quota(10000);
200
201 int64 delta = 0;
202
203 const int64 kDelta = 1000;
204 base::File::Error error = base::File::FILE_ERROR_FAILED;
205 backend_->ReserveQuota(GURL(kOrigin), type, kDelta,
206 base::Bind(&DidReserveQuota, false, &error, &delta));
207 EXPECT_EQ(base::File::FILE_OK, error);
208 EXPECT_EQ(kDelta, delta);
209 EXPECT_EQ(0, quota_manager_proxy_->usage());
210
211 EXPECT_EQ(2, quota_manager_proxy_->storage_modified_count());
212 }
213
214 TEST_F(QuotaBackendImplTest, ReleaseReservedQuota) {
215 FileSystemType type = fileapi::kFileSystemTypeTemporary;
216 InitializeForOriginAndType(GURL(kOrigin), type);
217 const int64 kInitialUsage = 2000;
218 quota_manager_proxy_->set_usage(kInitialUsage);
219 quota_manager_proxy_->set_quota(10000);
220
221 const int64 kSize = 1000;
222 backend_->ReleaseReservedQuota(GURL(kOrigin), type, kSize);
223 EXPECT_EQ(kInitialUsage - kSize, quota_manager_proxy_->usage());
224
225 EXPECT_EQ(1, quota_manager_proxy_->storage_modified_count());
226 }
227
228 TEST_F(QuotaBackendImplTest, CommitQuotaUsage) {
229 FileSystemType type = fileapi::kFileSystemTypeTemporary;
230 InitializeForOriginAndType(GURL(kOrigin), type);
231 quota_manager_proxy_->set_quota(10000);
232 base::FilePath path = GetUsageCachePath(GURL(kOrigin), type);
233
234 const int64 kDelta1 = 1000;
235 backend_->CommitQuotaUsage(GURL(kOrigin), type, kDelta1);
236 EXPECT_EQ(kDelta1, quota_manager_proxy_->usage());
237 int64 usage = 0;
238 EXPECT_TRUE(file_system_usage_cache_.GetUsage(path, &usage));
239 EXPECT_EQ(kDelta1, usage);
240
241 const int64 kDelta2 = -300;
242 backend_->CommitQuotaUsage(GURL(kOrigin), type, kDelta2);
243 EXPECT_EQ(kDelta1 + kDelta2, quota_manager_proxy_->usage());
244 usage = 0;
245 EXPECT_TRUE(file_system_usage_cache_.GetUsage(path, &usage));
246 EXPECT_EQ(kDelta1 + kDelta2, usage);
247
248 EXPECT_EQ(2, quota_manager_proxy_->storage_modified_count());
249 }
250
251 TEST_F(QuotaBackendImplTest, DirtyCount) {
252 FileSystemType type = fileapi::kFileSystemTypeTemporary;
253 InitializeForOriginAndType(GURL(kOrigin), type);
254 base::FilePath path = GetUsageCachePath(GURL(kOrigin), type);
255
256 backend_->IncrementDirtyCount(GURL(kOrigin), type);
257 uint32 dirty = 0;
258 ASSERT_TRUE(file_system_usage_cache_.GetDirty(path, &dirty));
259 EXPECT_EQ(1u, dirty);
260
261 backend_->DecrementDirtyCount(GURL(kOrigin), type);
262 ASSERT_TRUE(file_system_usage_cache_.GetDirty(path, &dirty));
263 EXPECT_EQ(0u, dirty);
264 }
265
266 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/browser/fileapi/quota/quota_backend_impl.h ('k') | webkit/browser/fileapi/quota/quota_reservation_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698