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

Side by Side Diff: webkit/quota/quota_temporary_storage_evictor_unittest.cc

Issue 7002024: Implement QuotaTemporaryStorageEvictor. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Fixed and cleaned-up. Created 9 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 (c) 2011 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 "testing/gtest/include/gtest/gtest.h"
6
7 #include <list>
8 #include <map>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "base/message_loop.h"
12 #include "base/message_loop_proxy.h"
13 #include "webkit/quota/mock_storage_client.h"
14 #include "webkit/quota/quota_manager.h"
15 #include "webkit/quota/quota_temporary_storage_evictor.h"
16
17 namespace quota {
18
19 namespace {
20
21 class MockQuotaEvictionHandler : public quota::QuotaEvictionHandler {
22 public:
23 MockQuotaEvictionHandler()
24 : quota_(0),
25 available_space_(0) {}
26 virtual ~MockQuotaEvictionHandler() {}
27
28 virtual void EvictOriginData(
29 const GURL& origin,
30 StorageType type,
31 EvictOriginDataCallback* callback) OVERRIDE {
32 LOG(ERROR) << "MockQM::EvictOriginData";
33 remove_origin(origin);
34 callback->Run(quota::kQuotaStatusOk);
35 delete callback;
36 }
37
38 virtual void GetUsageAndQuotaForEviction(
39 GetUsageAndQuotaForEvictionCallback* callback) OVERRIDE {
40 LOG(ERROR) << "MockQM::GetUsageAndQuotaForEviction";
41 callback->Run(quota::kQuotaStatusOk, usage(), quota_, available_space_);
42 delete callback;
43 }
44
45 virtual void GetLRUOrigin(
46 StorageType type,
47 GetLRUOriginCallback* callback) OVERRIDE {
48 if (origin_order_.empty())
49 callback->Run(GURL());
50 else
51 callback->Run(origin_order_.back());
52 delete callback;
53 }
54
55 int64 usage() {
kinuko 2011/05/20 06:41:14 For this I may expect the function name to be GetU
Dai Mikurube (NOT FULLTIME) 2011/05/20 07:36:54 Done.
56 int64 total_usage = 0;
57 for (std::map<GURL, int64>::iterator p = origins_.begin();
58 p != origins_.end();
59 ++p)
60 total_usage += p->second;
61 return total_usage;
62 }
63 void set_quota(int64 quota) {
64 quota_ = quota;
65 }
66 void set_available_space(int64 available_space) {
67 available_space_ = available_space;
68 }
69 void access_origin(const GURL& origin) {
kinuko 2011/05/20 06:41:14 AccessOrigin ? (Since it's not a simple getter/se
Dai Mikurube (NOT FULLTIME) 2011/05/20 07:36:54 Done.
70 if (remove_origin(origin))
71 origin_order_.push_back(origin);
72 }
73 void add_pseudo_origin(const GURL& origin, int64 usage) {
kinuko 2011/05/20 06:41:14 ditto.
Dai Mikurube (NOT FULLTIME) 2011/05/20 07:36:54 Done.
74 remove_origin(origin);
75 origin_order_.push_back(origin);
76 origins_[origin] = usage;
77 }
78
79 private:
80 bool remove_origin(const GURL& origin) {
kinuko 2011/05/20 06:41:14 ditto.
Dai Mikurube (NOT FULLTIME) 2011/05/20 07:36:54 Done.
81 origins_.erase(origin);
82 for (std::list<GURL>::iterator p = origin_order_.begin();
83 p != origin_order_.end();
84 ++p) {
85 if (*p == origin) {
86 origin_order_.erase(p);
87 return true;
88 }
89 }
90 return false;
91 }
92
93 int64 quota_;
94 int64 available_space_;
95 std::list<GURL> origin_order_;
96 std::map<GURL, int64> origins_;
97 };
98
99 } // anonymous namespace
100
101 class QuotaTemporaryStorageEvictorTest : public testing::Test {
102 public:
103 QuotaTemporaryStorageEvictorTest() {}
104
105 void SetUp() {
106 quota_eviction_handler_.reset(new MockQuotaEvictionHandler());
107
108 temporary_storage_evictor_.reset(new QuotaTemporaryStorageEvictor(
109 quota_eviction_handler_.get(),
110 3000, base::MessageLoopProxy::CreateForCurrentThread()));
111
112 additional_callback_count_ = 0;
113 }
114
115 void TearDown() {
116 temporary_storage_evictor_.reset();
117 quota_eviction_handler_.reset();
118 MessageLoop::current()->RunAllPending();
119 }
120
121 protected:
122 MockQuotaEvictionHandler* quota_eviction_handler() const {
123 return static_cast<MockQuotaEvictionHandler*>(
124 quota_eviction_handler_.get());
125 }
126
127 QuotaTemporaryStorageEvictor* temporary_storage_evictor() const {
128 return temporary_storage_evictor_.get();
129 }
130
131 protected:
132 scoped_ptr<QuotaEvictionHandler> quota_eviction_handler_;
133 scoped_ptr<QuotaTemporaryStorageEvictor> temporary_storage_evictor_;
134
135 QuotaStatusCode quota_status_;
136 std::string host_;
137
138 int additional_callback_count_;
139
140 DISALLOW_COPY_AND_ASSIGN(QuotaTemporaryStorageEvictorTest);
141 };
142
143 TEST_F(QuotaTemporaryStorageEvictorTest, Simple) {
144 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.foo.com"), 500);
145 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.bar.com"), 200);
146 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.baz.com"), 3000);
147 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.hoge.com"), 10);
148 quota_eviction_handler()->set_quota(4000);
149 quota_eviction_handler()->set_available_space(1000000000);
150 LOG(ERROR) << quota_eviction_handler()->usage();
kinuko 2011/05/20 06:41:14 These LOG(ERROR) will eventually be replaced by so
Dai Mikurube (NOT FULLTIME) 2011/05/20 07:36:54 Of course, they're just for local execution. Just
151 temporary_storage_evictor()->Start();
152 MessageLoop::current()->RunAllPending();
153 LOG(ERROR) << quota_eviction_handler()->usage();
154 }
155
156 TEST_F(QuotaTemporaryStorageEvictorTest, Repeated) {
157 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.foo.com"), 500);
158 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.bar.com"), 200);
159 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.baz.com"), 3000);
160 quota_eviction_handler()->add_pseudo_origin(GURL("http://www.hoge.com"), 10);
161 quota_eviction_handler()->set_quota(4000);
162 quota_eviction_handler()->set_available_space(1000000000);
163 LOG(ERROR) << quota_eviction_handler()->usage();
164 temporary_storage_evictor()->set_repeated_eviction(true);
165 temporary_storage_evictor()->Start();
166 MessageLoop::current()->RunAllPending();
167 LOG(ERROR) << quota_eviction_handler()->usage();
168 }
169
kinuko 2011/05/20 06:41:14 Maybe later we could add the same set of tests usi
Dai Mikurube (NOT FULLTIME) 2011/05/20 07:36:54 I guess such test cases should be run in another t
kinuko 2011/05/20 08:27:02 Yes of course we could add them as a new test (nei
170 } // namespace quota
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698