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

Side by Side Diff: net/base/cookie_monster_perftest.cc

Issue 7833042: Finalize a CL originally by departed intern ycxiao@ that detaches the loading of cookies from the... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 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 | « net/base/cookie_monster.cc ('k') | net/base/cookie_monster_store_test.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) 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 <algorithm> 5 #include <algorithm>
6 6
7 #include "net/base/cookie_monster.h" 7 #include "base/bind.h"
8 8 #include "base/message_loop.h"
9 #include "base/perftimer.h" 9 #include "base/perftimer.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
12 #include "googleurl/src/gurl.h" 12 #include "googleurl/src/gurl.h"
13 #include "net/base/cookie_monster.h" 13 #include "net/base/cookie_monster.h"
14 #include "net/base/cookie_monster_store_test.h" 14 #include "net/base/cookie_monster_store_test.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 namespace { 17 namespace {
18 class ParsedCookieTest : public testing::Test { }; 18 class CookieMonsterTest : public testing::Test {
19 class CookieMonsterTest : public testing::Test { }; 19 public:
20 CookieMonsterTest() : message_loop_(new MessageLoopForIO()) {}
21
22 private:
23 scoped_ptr<MessageLoop> message_loop_;
24 };
20 } 25 }
21 26
22 static const int kNumCookies = 20000; 27 static const int kNumCookies = 20000;
23 static const char kCookieLine[] = "A = \"b=;\\\"\" ;secure;;;"; 28 static const char kCookieLine[] = "A = \"b=;\\\"\" ;secure;;;";
24 29
25 namespace net { 30 namespace net {
26 31
27 TEST(ParsedCookieTest, TestParseCookies) { 32 TEST(ParsedCookieTest, TestParseCookies) {
28 std::string cookie(kCookieLine); 33 std::string cookie(kCookieLine);
29 PerfTimeLogger timer("Parsed_cookie_parse_cookies"); 34 PerfTimeLogger timer("Parsed_cookie_parse_cookies");
(...skipping 10 matching lines...) Expand all
40 PerfTimeLogger timer("Parsed_cookie_parse_big_cookies"); 45 PerfTimeLogger timer("Parsed_cookie_parse_big_cookies");
41 for (int i = 0; i < kNumCookies; ++i) { 46 for (int i = 0; i < kNumCookies; ++i) {
42 CookieMonster::ParsedCookie pc(cookie); 47 CookieMonster::ParsedCookie pc(cookie);
43 EXPECT_TRUE(pc.IsValid()); 48 EXPECT_TRUE(pc.IsValid());
44 } 49 }
45 timer.Done(); 50 timer.Done();
46 } 51 }
47 52
48 static const GURL kUrlGoogle("http://www.google.izzle"); 53 static const GURL kUrlGoogle("http://www.google.izzle");
49 54
50 TEST(CookieMonsterTest, TestAddCookiesOnSingleHost) { 55 class BaseCallback {
56 public:
57 BaseCallback() : has_run_(false) {}
58
59 protected:
60 void WaitForCallback() {
61 // Note that the performance tests currently all operate on a loaded cookie
62 // store (or, more precisely, one that has no backing persistent store).
63 // Therefore, callbacks will actually always complete synchronously. If the
64 // tests get more advanced we need to add other means of signaling
65 // completion.
66 EXPECT_TRUE(has_run_);
67 has_run_ = false;
68 }
69
70 void Run() {
71 has_run_ = true;
72 }
73
74 bool has_run_;
75 };
76
77
78 class SetCookieCallback : public BaseCallback {
79 public:
80 void SetCookie(
81 CookieMonster* cm, const GURL& gurl, const std::string& cookie) {
82 cm->SetCookieWithOptionsAsync(gurl, cookie, options_, base::Bind(
83 &SetCookieCallback::Run, base::Unretained(this)));
84 WaitForCallback();
85 }
86 private:
87 void Run(bool success) {
88 EXPECT_TRUE(success);
89 BaseCallback::Run();
90 }
91 net::CookieOptions options_;
92 };
93
94 class GetCookiesCallback : public BaseCallback {
95 public:
96 const std::string& GetCookies(CookieMonster* cm, const GURL& gurl) {
97 cm->GetCookiesWithOptionsAsync(gurl, options_, base::Bind(
98 &GetCookiesCallback::Run, base::Unretained(this)));
99 WaitForCallback();
100 return cookies_;
101 }
102
103 private:
104 void Run(const std::string& cookies) {
105 cookies_ = cookies;
106 BaseCallback::Run();
107 }
108 std::string cookies_;
109 net::CookieOptions options_;
110 };
111
112 class GetCookiesWithInfoCallback : public BaseCallback {
113 public:
114 const std::string& GetCookiesWithInfo(CookieMonster* cm, const GURL& gurl) {
115 cm->GetCookiesWithInfoAsync(gurl, options_, base::Bind(
116 &GetCookiesWithInfoCallback::Run,
117 base::Unretained(this)));
118 WaitForCallback();
119 return cookies_;
120 }
121
122 private:
123 void Run(
124 const std::string& cookie_line,
125 const std::vector<CookieStore::CookieInfo>& cookie_infos) {
126 cookies_ = cookie_line;
127 BaseCallback::Run();
128 }
129
130 std::string cookies_;
131 net::CookieOptions options_;
132 };
133
134
135 TEST_F(CookieMonsterTest, TestAddCookiesOnSingleHost) {
51 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 136 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
52 std::vector<std::string> cookies; 137 std::vector<std::string> cookies;
53 for (int i = 0; i < kNumCookies; i++) { 138 for (int i = 0; i < kNumCookies; i++) {
54 cookies.push_back(base::StringPrintf("a%03d=b", i)); 139 cookies.push_back(base::StringPrintf("a%03d=b", i));
55 } 140 }
56 141
142 SetCookieCallback setCookieCallback;
143
57 // Add a bunch of cookies on a single host 144 // Add a bunch of cookies on a single host
58 PerfTimeLogger timer("Cookie_monster_add_single_host"); 145 PerfTimeLogger timer("Cookie_monster_add_single_host");
146
59 for (std::vector<std::string>::const_iterator it = cookies.begin(); 147 for (std::vector<std::string>::const_iterator it = cookies.begin();
60 it != cookies.end(); ++it) { 148 it != cookies.end(); ++it) {
61 EXPECT_TRUE(cm->SetCookie(kUrlGoogle, *it)); 149 setCookieCallback.SetCookie(cm, kUrlGoogle, *it);
62 } 150 }
63 timer.Done(); 151 timer.Done();
64 152
153 GetCookiesCallback getCookiesCallback;
154
65 PerfTimeLogger timer2("Cookie_monster_query_single_host"); 155 PerfTimeLogger timer2("Cookie_monster_query_single_host");
66 for (std::vector<std::string>::const_iterator it = cookies.begin(); 156 for (std::vector<std::string>::const_iterator it = cookies.begin();
67 it != cookies.end(); ++it) { 157 it != cookies.end(); ++it) {
68 cm->GetCookies(kUrlGoogle); 158 getCookiesCallback.GetCookies(cm, kUrlGoogle);
69 } 159 }
70 timer2.Done(); 160 timer2.Done();
71 161
72 PerfTimeLogger timer3("Cookie_monster_deleteall_single_host"); 162 PerfTimeLogger timer3("Cookie_monster_deleteall_single_host");
73 cm->DeleteAll(false); 163 cm->DeleteAllAsync(CookieMonster::DeleteCallback());
164 MessageLoop::current()->RunAllPending();
74 timer3.Done(); 165 timer3.Done();
75 } 166 }
76 167
77 TEST(CookieMonsterTest, TestAddCookieOnManyHosts) { 168 TEST_F(CookieMonsterTest, TestAddCookieOnManyHosts) {
78 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 169 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
79 std::string cookie(kCookieLine); 170 std::string cookie(kCookieLine);
80 std::vector<GURL> gurls; // just wanna have ffffuunnn 171 std::vector<GURL> gurls; // just wanna have ffffuunnn
81 for (int i = 0; i < kNumCookies; ++i) { 172 for (int i = 0; i < kNumCookies; ++i) {
82 gurls.push_back(GURL(base::StringPrintf("http://a%04d.izzle", i))); 173 gurls.push_back(GURL(base::StringPrintf("https://a%04d.izzle", i)));
83 } 174 }
84 175
176 SetCookieCallback setCookieCallback;
177
85 // Add a cookie on a bunch of host 178 // Add a cookie on a bunch of host
86 PerfTimeLogger timer("Cookie_monster_add_many_hosts"); 179 PerfTimeLogger timer("Cookie_monster_add_many_hosts");
87 for (std::vector<GURL>::const_iterator it = gurls.begin(); 180 for (std::vector<GURL>::const_iterator it = gurls.begin();
88 it != gurls.end(); ++it) { 181 it != gurls.end(); ++it) {
89 EXPECT_TRUE(cm->SetCookie(*it, cookie)); 182 setCookieCallback.SetCookie(cm, *it, cookie);
90 } 183 }
91 timer.Done(); 184 timer.Done();
92 185
186 GetCookiesCallback getCookiesCallback;
187
93 PerfTimeLogger timer2("Cookie_monster_query_many_hosts"); 188 PerfTimeLogger timer2("Cookie_monster_query_many_hosts");
94 for (std::vector<GURL>::const_iterator it = gurls.begin(); 189 for (std::vector<GURL>::const_iterator it = gurls.begin();
95 it != gurls.end(); ++it) { 190 it != gurls.end(); ++it) {
96 cm->GetCookies(*it); 191 getCookiesCallback.GetCookies(cm, *it);
97 } 192 }
98 timer2.Done(); 193 timer2.Done();
99 194
100 PerfTimeLogger timer3("Cookie_monster_deleteall_many_hosts"); 195 PerfTimeLogger timer3("Cookie_monster_deleteall_many_hosts");
101 cm->DeleteAll(false); 196 cm->DeleteAllAsync(CookieMonster::DeleteCallback());
197 MessageLoop::current()->RunAllPending();
102 timer3.Done(); 198 timer3.Done();
103 } 199 }
104 200
105 TEST(CookieMonsterTest, TestGetCookiesWithOptions) { 201 TEST_F(CookieMonsterTest, TestGetCookiesWithInfo) {
106 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 202 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
107 std::string cookie(kCookieLine); 203
108 std::vector<GURL> gurls; 204 std::vector<GURL> gurls;
109 for (int i = 0; i < kNumCookies; ++i) 205 for (int i = 0; i < kNumCookies; ++i)
110 gurls.push_back(GURL(base::StringPrintf("http://a%04d.izzle", i))); 206 gurls.push_back(GURL(base::StringPrintf("https://a%04d.izzle", i)));
207
208 SetCookieCallback setCookieCallback;
111 209
112 for (std::vector<GURL>::const_iterator it = gurls.begin(); 210 for (std::vector<GURL>::const_iterator it = gurls.begin();
113 it != gurls.end(); ++it) { 211 it != gurls.end(); ++it) {
114 EXPECT_TRUE(cm->SetCookie(*it, cookie)); 212 setCookieCallback.SetCookie(cm, *it, kCookieLine);
115 } 213 }
116 214
215 GetCookiesWithInfoCallback getCookiesCallback;
216
117 PerfTimeLogger timer("Cookie_monster_get_cookie_info"); 217 PerfTimeLogger timer("Cookie_monster_get_cookie_info");
118 for (std::vector<GURL>::const_iterator it = gurls.begin(); 218 for (std::vector<GURL>::const_iterator it = gurls.begin();
119 it != gurls.end(); ++it) { 219 it != gurls.end(); ++it) {
120 CookieOptions options; 220 getCookiesCallback.GetCookiesWithInfo(cm, *it);
121 std::string cookie_line;
122 cookie_line = cm->GetCookiesWithOptions(*it, options);
123 } 221 }
124 timer.Done(); 222 timer.Done();
125 } 223 }
126
127 TEST(CookieMonsterTest, TestGetCookiesWithInfo) {
128 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
129 std::string cookie(kCookieLine);
130 std::vector<GURL> gurls;
131 for (int i = 0; i < kNumCookies; ++i)
132 gurls.push_back(GURL(base::StringPrintf("http://a%04d.izzle", i)));
133
134 for (std::vector<GURL>::const_iterator it = gurls.begin();
135 it != gurls.end(); ++it) {
136 EXPECT_TRUE(cm->SetCookie(*it, cookie));
137 }
138
139 PerfTimeLogger timer("Cookie_monster_get_cookie_info");
140 for (std::vector<GURL>::const_iterator it = gurls.begin();
141 it != gurls.end(); ++it) {
142 CookieOptions options;
143 std::string cookie_line;
144 std::vector<CookieStore::CookieInfo> cookie_infos;
145 cm->GetCookiesWithInfo(*it, options, &cookie_line, &cookie_infos);
146 }
147 timer.Done();
148 }
149 224
150 static int CountInString(const std::string& str, char c) { 225 static int CountInString(const std::string& str, char c) {
151 return std::count(str.begin(), str.end(), c); 226 return std::count(str.begin(), str.end(), c);
152 } 227 }
153 228
154 TEST(CookieMonsterTest, TestDomainTree) { 229 TEST_F(CookieMonsterTest, TestDomainTree) {
155 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 230 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
231 GetCookiesCallback getCookiesCallback;
232 SetCookieCallback setCookieCallback;
156 const char* domain_cookie_format_tree = "a=b; domain=%s"; 233 const char* domain_cookie_format_tree = "a=b; domain=%s";
157 const std::string domain_base("top.com"); 234 const std::string domain_base("top.com");
158 235
159 std::vector<std::string> domain_list; 236 std::vector<std::string> domain_list;
160 237
161 // Create a balanced binary tree of domains on which the cookie is set. 238 // Create a balanced binary tree of domains on which the cookie is set.
162 domain_list.push_back(domain_base); 239 domain_list.push_back(domain_base);
163 for (int i1 = 0; i1 < 2; i1++) { 240 for (int i1 = 0; i1 < 2; i1++) {
164 std::string domain_base_1((i1 ? "a." : "b.") + domain_base); 241 std::string domain_base_1((i1 ? "a." : "b.") + domain_base);
165 EXPECT_EQ("top.com", cm->GetKey(domain_base_1)); 242 EXPECT_EQ("top.com", cm->GetKey(domain_base_1));
(...skipping 15 matching lines...) Expand all
181 } 258 }
182 } 259 }
183 260
184 261
185 EXPECT_EQ(31u, domain_list.size()); 262 EXPECT_EQ(31u, domain_list.size());
186 for (std::vector<std::string>::const_iterator it = domain_list.begin(); 263 for (std::vector<std::string>::const_iterator it = domain_list.begin();
187 it != domain_list.end(); it++) { 264 it != domain_list.end(); it++) {
188 GURL gurl("https://" + *it + "/"); 265 GURL gurl("https://" + *it + "/");
189 const std::string cookie = base::StringPrintf(domain_cookie_format_tree, 266 const std::string cookie = base::StringPrintf(domain_cookie_format_tree,
190 it->c_str()); 267 it->c_str());
191 EXPECT_TRUE(cm->SetCookie(gurl, cookie)); 268 setCookieCallback.SetCookie(cm, gurl, cookie);
192 } 269 }
193 EXPECT_EQ(31u, cm->GetAllCookies().size()); 270 EXPECT_EQ(31u, cm->GetAllCookies().size());
194 271
195 GURL probe_gurl("https://b.a.b.a.top.com/"); 272 GURL probe_gurl("https://b.a.b.a.top.com/");
196 std::string cookie_line; 273 std::string cookie_line = getCookiesCallback.GetCookies(cm, probe_gurl);
197 cookie_line = cm->GetCookies(probe_gurl); 274 EXPECT_EQ(5, CountInString(cookie_line, '=')) << "Cookie line: " <<
198 EXPECT_EQ(5, CountInString(cookie_line, '=')) << "Cookie line: " 275 cookie_line;
199 << cookie_line;
200 PerfTimeLogger timer("Cookie_monster_query_domain_tree"); 276 PerfTimeLogger timer("Cookie_monster_query_domain_tree");
201 for (int i = 0; i < kNumCookies; i++) { 277 for (int i = 0; i < kNumCookies; i++) {
202 cm->GetCookies(probe_gurl); 278 getCookiesCallback.GetCookies(cm, probe_gurl);
203 } 279 }
204 timer.Done(); 280 timer.Done();
205
206 } 281 }
207 282
208 TEST(CookieMonsterTest, TestDomainLine) { 283 TEST_F(CookieMonsterTest, TestDomainLine) {
209 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 284 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
285 SetCookieCallback setCookieCallback;
286 GetCookiesCallback getCookiesCallback;
210 std::vector<std::string> domain_list; 287 std::vector<std::string> domain_list;
211 GURL probe_gurl("https://b.a.b.a.top.com/"); 288 GURL probe_gurl("https://b.a.b.a.top.com/");
212 std::string cookie_line; 289 std::string cookie_line;
213 290
214 // Create a line of 32 domain cookies such that all cookies stored 291 // Create a line of 32 domain cookies such that all cookies stored
215 // by effective TLD+1 will apply to probe GURL. 292 // by effective TLD+1 will apply to probe GURL.
216 // (TLD + 1 is the level above .com/org/net/etc, e.g. "top.com" 293 // (TLD + 1 is the level above .com/org/net/etc, e.g. "top.com"
217 // or "google.com". "Effective" is added to include sites like 294 // or "google.com". "Effective" is added to include sites like
218 // bbc.co.uk, where the effetive TLD+1 is more than one level 295 // bbc.co.uk, where the effetive TLD+1 is more than one level
219 // below the top level.) 296 // below the top level.)
220 domain_list.push_back("a.top.com"); 297 domain_list.push_back("a.top.com");
221 domain_list.push_back("b.a.top.com"); 298 domain_list.push_back("b.a.top.com");
222 domain_list.push_back("a.b.a.top.com"); 299 domain_list.push_back("a.b.a.top.com");
223 domain_list.push_back("b.a.b.a.top.com"); 300 domain_list.push_back("b.a.b.a.top.com");
224 EXPECT_EQ(4u, domain_list.size()); 301 EXPECT_EQ(4u, domain_list.size());
225 302
226 const char* domain_cookie_format_line = "a%03d=b; domain=%s"; 303 const char* domain_cookie_format_line = "a%03d=b; domain=%s";
227 for (int i = 0; i < 8; i++) { 304 for (int i = 0; i < 8; i++) {
228 for (std::vector<std::string>::const_iterator it = domain_list.begin(); 305 for (std::vector<std::string>::const_iterator it = domain_list.begin();
229 it != domain_list.end(); it++) { 306 it != domain_list.end(); it++) {
230 GURL gurl("https://" + *it + "/"); 307 GURL gurl("https://" + *it + "/");
231 const std::string cookie = base::StringPrintf(domain_cookie_format_line, 308 const std::string cookie = base::StringPrintf(domain_cookie_format_line,
232 i, it->c_str()); 309 i, it->c_str());
233 EXPECT_TRUE(cm->SetCookie(gurl, cookie)); 310 setCookieCallback.SetCookie(cm, gurl, cookie);
234 } 311 }
235 } 312 }
236 EXPECT_EQ(32u, cm->GetAllCookies().size());
237 313
238 cookie_line = cm->GetCookies(probe_gurl); 314 cookie_line = getCookiesCallback.GetCookies(cm, probe_gurl);
239 EXPECT_EQ(32, CountInString(cookie_line, '=')); 315 EXPECT_EQ(32, CountInString(cookie_line, '='));
240 PerfTimeLogger timer2("Cookie_monster_query_domain_line"); 316 PerfTimeLogger timer2("Cookie_monster_query_domain_line");
241 for (int i = 0; i < kNumCookies; i++) { 317 for (int i = 0; i < kNumCookies; i++) {
242 cm->GetCookies(probe_gurl); 318 getCookiesCallback.GetCookies(cm, probe_gurl);
243 } 319 }
244 timer2.Done(); 320 timer2.Done();
245 } 321 }
246 322
247 TEST(CookieMonsterTest, TestImport) { 323 TEST_F(CookieMonsterTest, TestImport) {
248 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore); 324 scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
249 std::vector<CookieMonster::CanonicalCookie*> initial_cookies; 325 std::vector<CookieMonster::CanonicalCookie*> initial_cookies;
326 GetCookiesCallback getCookiesCallback;
250 327
251 // We want to setup a fairly large backing store, with 300 domains of 50 328 // We want to setup a fairly large backing store, with 300 domains of 50
252 // cookies each. Creation times must be unique. 329 // cookies each. Creation times must be unique.
253 int64 time_tick(base::Time::Now().ToInternalValue()); 330 int64 time_tick(base::Time::Now().ToInternalValue());
254 331
255 for (int domain_num = 0; domain_num < 300; domain_num++) { 332 for (int domain_num = 0; domain_num < 300; domain_num++) {
256 std::string domain_name(base::StringPrintf(".Domain_%d.com", domain_num)); 333 std::string domain_name(base::StringPrintf(".Domain_%d.com", domain_num));
257 std::string gurl("www" + domain_name); 334 std::string gurl("www" + domain_name);
258 for (int cookie_num = 0; cookie_num < 50; cookie_num++) { 335 for (int cookie_num = 0; cookie_num < 50; cookie_num++) {
259 std::string cookie_line(base::StringPrintf("Cookie_%d=1; Path=/", 336 std::string cookie_line(base::StringPrintf("Cookie_%d=1; Path=/",
260 cookie_num)); 337 cookie_num));
261 AddCookieToList(gurl, cookie_line, 338 AddCookieToList(gurl, cookie_line,
262 base::Time::FromInternalValue(time_tick++), 339 base::Time::FromInternalValue(time_tick++),
263 &initial_cookies); 340 &initial_cookies);
264 } 341 }
265 } 342 }
266 343
267 store->SetLoadExpectation(true, initial_cookies); 344 store->SetLoadExpectation(true, initial_cookies);
268 345
269 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL)); 346 scoped_refptr<CookieMonster> cm(new CookieMonster(store, NULL));
270 347
271 // Import will happen on first access. 348 // Import will happen on first access.
272 GURL gurl("www.google.com"); 349 GURL gurl("www.google.com");
273 CookieOptions options; 350 CookieOptions options;
274 PerfTimeLogger timer("Cookie_monster_import_from_store"); 351 PerfTimeLogger timer("Cookie_monster_import_from_store");
275 cm->GetCookiesWithOptions(gurl, options); 352 getCookiesCallback.GetCookies(cm, gurl);
276 timer.Done(); 353 timer.Done();
277 354
278 // Just confirm keys were set as expected. 355 // Just confirm keys were set as expected.
279 EXPECT_EQ("domain_1.com", cm->GetKey("www.Domain_1.com")); 356 EXPECT_EQ("domain_1.com", cm->GetKey("www.Domain_1.com"));
280 } 357 }
281 358
282 TEST(CookieMonsterTest, TestGetKey) { 359 TEST_F(CookieMonsterTest, TestGetKey) {
283 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 360 scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL));
284 PerfTimeLogger timer("Cookie_monster_get_key"); 361 PerfTimeLogger timer("Cookie_monster_get_key");
285 for (int i = 0; i < kNumCookies; i++) 362 for (int i = 0; i < kNumCookies; i++)
286 cm->GetKey("www.google.com"); 363 cm->GetKey("www.google.com");
287 timer.Done(); 364 timer.Done();
288 } 365 }
289 366
290 // This test is probing for whether garbage collection happens when it 367 // This test is probing for whether garbage collection happens when it
291 // shouldn't. This will not in general be visible functionally, since 368 // shouldn't. This will not in general be visible functionally, since
292 // if GC runs twice in a row without any change to the store, the second 369 // if GC runs twice in a row without any change to the store, the second
293 // GC run will not do anything the first one didn't. That's why this is 370 // GC run will not do anything the first one didn't. That's why this is
294 // a performance test. The test should be considered to pass if all the 371 // a performance test. The test should be considered to pass if all the
295 // times reported are approximately the same--this indicates that no GC 372 // times reported are approximately the same--this indicates that no GC
296 // happened repeatedly for any case. 373 // happened repeatedly for any case.
297 TEST(CookieMonsterTest, TestGCTimes) { 374 TEST_F(CookieMonsterTest, TestGCTimes) {
375 SetCookieCallback setCookieCallback;
376
298 const struct TestCase { 377 const struct TestCase {
299 const char* name; 378 const char* name;
300 int num_cookies; 379 int num_cookies;
301 int num_old_cookies; 380 int num_old_cookies;
302 } test_cases[] = { 381 } test_cases[] = {
303 { 382 {
304 // A whole lot of recent cookies; gc shouldn't happen. 383 // A whole lot of recent cookies; gc shouldn't happen.
305 "all_recent", 384 "all_recent",
306 CookieMonster::kMaxCookies * 2, 385 CookieMonster::kMaxCookies * 2,
307 0, 386 0,
(...skipping 23 matching lines...) Expand all
331 for (int ci = 0; ci < static_cast<int>(ARRAYSIZE_UNSAFE(test_cases)); ++ci) { 410 for (int ci = 0; ci < static_cast<int>(ARRAYSIZE_UNSAFE(test_cases)); ++ci) {
332 const TestCase& test_case(test_cases[ci]); 411 const TestCase& test_case(test_cases[ci]);
333 scoped_refptr<CookieMonster> cm( 412 scoped_refptr<CookieMonster> cm(
334 CreateMonsterFromStoreForGC( 413 CreateMonsterFromStoreForGC(
335 test_case.num_cookies, test_case.num_old_cookies, 414 test_case.num_cookies, test_case.num_old_cookies,
336 CookieMonster::kSafeFromGlobalPurgeDays * 2)); 415 CookieMonster::kSafeFromGlobalPurgeDays * 2));
337 416
338 GURL gurl("http://google.com"); 417 GURL gurl("http://google.com");
339 std::string cookie_line("z=3"); 418 std::string cookie_line("z=3");
340 // Trigger the Garbage collection we're allowed. 419 // Trigger the Garbage collection we're allowed.
341 EXPECT_TRUE(cm->SetCookie(gurl, cookie_line)); 420 setCookieCallback.SetCookie(cm, gurl, cookie_line);
342 421
343 PerfTimeLogger timer((std::string("GC_") + test_case.name).c_str()); 422 PerfTimeLogger timer((std::string("GC_") + test_case.name).c_str());
344 for (int i = 0; i < kNumCookies; i++) 423 for (int i = 0; i < kNumCookies; i++)
345 EXPECT_TRUE(cm->SetCookie(gurl, cookie_line)); 424 setCookieCallback.SetCookie(cm, gurl, cookie_line);
346 timer.Done(); 425 timer.Done();
347 } 426 }
348 } 427 }
349 428
350 } // namespace 429 } // namespace
OLDNEW
« no previous file with comments | « net/base/cookie_monster.cc ('k') | net/base/cookie_monster_store_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698