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

Side by Side Diff: net/http/http_auth_cache_unittest.cc

Issue 28144: Implement the NTLM authentication scheme by porting... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Final upload before checkin Created 11 years, 9 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/http/http_auth.cc ('k') | net/http/http_auth_handler.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) 2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2008 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/string_util.h" 5 #include "base/string_util.h"
6 #include "net/http/http_auth_cache.h" 6 #include "net/http/http_auth_cache.h"
7 7
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace net { 10 namespace net {
11 11
12 namespace { 12 namespace {
13 13
14 class MockAuthHandler : public HttpAuthHandler { 14 class MockAuthHandler : public HttpAuthHandler {
15 public: 15 public:
16 MockAuthHandler(const char* scheme, const std::string& realm, 16 MockAuthHandler(const char* scheme, const std::string& realm,
17 HttpAuth::Target target) { 17 HttpAuth::Target target) {
18 // Can't use initializer list since these are members of the base class. 18 // Can't use initializer list since these are members of the base class.
19 scheme_ = scheme; 19 scheme_ = scheme;
20 realm_ = realm; 20 realm_ = realm;
21 score_ = 1; 21 score_ = 1;
22 target_ = target; 22 target_ = target;
23 properties_ = 0;
23 } 24 }
24 25
25 virtual std::string GenerateCredentials(const std::wstring&, 26 virtual std::string GenerateCredentials(const std::wstring&,
26 const std::wstring&, 27 const std::wstring&,
27 const HttpRequestInfo*, 28 const HttpRequestInfo*,
28 const ProxyInfo*) { 29 const ProxyInfo*) {
29 return "mock-credentials"; // Unused. 30 return "mock-credentials"; // Unused.
30 } 31 }
31 32
32 protected: 33 protected:
33 virtual bool Init(std::string::const_iterator, std::string::const_iterator) { 34 virtual bool Init(std::string::const_iterator, std::string::const_iterator) {
34 return false; // Unused. 35 return false; // Unused.
35 } 36 }
36 }; 37 };
37 38
38 } // namespace 39 } // namespace
39 40
40 // Test adding and looking-up cache entries (both by realm and by path). 41 // Test adding and looking-up cache entries (both by realm and by path).
41 TEST(HttpAuthCacheTest, Basic) { 42 TEST(HttpAuthCacheTest, Basic) {
42 GURL origin("http://www.google.com"); 43 GURL origin("http://www.google.com");
43 HttpAuthCache cache; 44 HttpAuthCache cache;
44 HttpAuthCache::Entry* entry; 45 HttpAuthCache::Entry* entry;
45 46
46 // Add cache entries for 3 realms: "Realm1", "Realm2", "Realm3" 47 // Add cache entries for 3 realms: "Realm1", "Realm2", "Realm3"
47 48
48 scoped_refptr<HttpAuthHandler> realm1_handler = 49 scoped_refptr<HttpAuthHandler> realm1_handler =
49 new MockAuthHandler("basic", "Realm1", HttpAuth::AUTH_SERVER); 50 new MockAuthHandler("basic", "Realm1", HttpAuth::AUTH_SERVER);
50 cache.Add(origin, realm1_handler, L"realm1-user", L"realm1-password", 51 cache.Add(origin, realm1_handler, L"realm1-user", L"realm1-password",
51 "/foo/bar/index.html"); 52 "/foo/bar/index.html");
52 53
53 scoped_refptr<HttpAuthHandler> realm2_handler = 54 scoped_refptr<HttpAuthHandler> realm2_handler =
54 new MockAuthHandler("basic", "Realm2", HttpAuth::AUTH_SERVER); 55 new MockAuthHandler("basic", "Realm2", HttpAuth::AUTH_SERVER);
55 cache.Add(origin, realm2_handler, L"realm2-user", L"realm2-password", 56 cache.Add(origin, realm2_handler, L"realm2-user", L"realm2-password",
(...skipping 17 matching lines...) Expand all
73 EXPECT_TRUE(entry->handler() == realm3_handler.get()); 74 EXPECT_TRUE(entry->handler() == realm3_handler.get());
74 EXPECT_EQ(L"realm3-user", entry->username()); 75 EXPECT_EQ(L"realm3-user", entry->username());
75 EXPECT_EQ(L"realm3-password", entry->password()); 76 EXPECT_EQ(L"realm3-password", entry->password());
76 77
77 // Valid lookup by realm. 78 // Valid lookup by realm.
78 entry = cache.LookupByRealm(origin, "Realm2"); 79 entry = cache.LookupByRealm(origin, "Realm2");
79 EXPECT_FALSE(NULL == entry); 80 EXPECT_FALSE(NULL == entry);
80 EXPECT_TRUE(entry->handler() == realm2_handler.get()); 81 EXPECT_TRUE(entry->handler() == realm2_handler.get());
81 EXPECT_EQ(L"realm2-user", entry->username()); 82 EXPECT_EQ(L"realm2-user", entry->username());
82 EXPECT_EQ(L"realm2-password", entry->password()); 83 EXPECT_EQ(L"realm2-password", entry->password());
83 84
84 // Check that subpaths are recognized. 85 // Check that subpaths are recognized.
85 HttpAuthCache::Entry* realm2Entry = cache.LookupByRealm(origin, "Realm2"); 86 HttpAuthCache::Entry* realm2Entry = cache.LookupByRealm(origin, "Realm2");
86 EXPECT_FALSE(NULL == realm2Entry); 87 EXPECT_FALSE(NULL == realm2Entry);
87 // Positive tests: 88 // Positive tests:
88 entry = cache.LookupByPath(origin, "/foo2/index.html"); 89 entry = cache.LookupByPath(origin, "/foo2/index.html");
89 EXPECT_TRUE(realm2Entry == entry); 90 EXPECT_TRUE(realm2Entry == entry);
90 entry = cache.LookupByPath(origin, "/foo2/foobar.html"); 91 entry = cache.LookupByPath(origin, "/foo2/foobar.html");
91 EXPECT_TRUE(realm2Entry == entry); 92 EXPECT_TRUE(realm2Entry == entry);
92 entry = cache.LookupByPath(origin, "/foo2/bar/index.html"); 93 entry = cache.LookupByPath(origin, "/foo2/bar/index.html");
93 EXPECT_TRUE(realm2Entry == entry); 94 EXPECT_TRUE(realm2Entry == entry);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 HttpAuthCache::Entry* orig_entry = cache.Add( 155 HttpAuthCache::Entry* orig_entry = cache.Add(
155 origin, handler, L"user1", L"password1", "/x/y/z/"); 156 origin, handler, L"user1", L"password1", "/x/y/z/");
156 cache.Add(origin, handler, L"user2", L"password2", "/z/y/x/"); 157 cache.Add(origin, handler, L"user2", L"password2", "/z/y/x/");
157 cache.Add(origin, handler, L"user3", L"password3", "/z/y"); 158 cache.Add(origin, handler, L"user3", L"password3", "/z/y");
158 159
159 HttpAuthCache::Entry* entry = cache.LookupByRealm(origin, "MyRealm"); 160 HttpAuthCache::Entry* entry = cache.LookupByRealm(origin, "MyRealm");
160 161
161 EXPECT_TRUE(entry == orig_entry); 162 EXPECT_TRUE(entry == orig_entry);
162 EXPECT_EQ(L"user3", entry->username()); 163 EXPECT_EQ(L"user3", entry->username());
163 EXPECT_EQ(L"password3", entry->password()); 164 EXPECT_EQ(L"password3", entry->password());
164 165
165 EXPECT_EQ(2U, entry->paths_.size()); 166 EXPECT_EQ(2U, entry->paths_.size());
166 EXPECT_EQ("/z/", entry->paths_.front()); 167 EXPECT_EQ("/z/", entry->paths_.front());
167 EXPECT_EQ("/x/y/z/", entry->paths_.back()); 168 EXPECT_EQ("/x/y/z/", entry->paths_.back());
168 } 169 }
169 170
170 TEST(HttpAuthCacheTest, Remove) { 171 TEST(HttpAuthCacheTest, Remove) {
171 GURL origin("http://foobar2.com"); 172 GURL origin("http://foobar2.com");
172 173
173 scoped_refptr<HttpAuthHandler> realm1_handler = 174 scoped_refptr<HttpAuthHandler> realm1_handler =
174 new MockAuthHandler("basic", "Realm1", HttpAuth::AUTH_SERVER); 175 new MockAuthHandler("basic", "Realm1", HttpAuth::AUTH_SERVER);
175 176
176 scoped_refptr<HttpAuthHandler> realm2_handler = 177 scoped_refptr<HttpAuthHandler> realm2_handler =
177 new MockAuthHandler("basic", "Realm2", HttpAuth::AUTH_SERVER); 178 new MockAuthHandler("basic", "Realm2", HttpAuth::AUTH_SERVER);
178 179
179 scoped_refptr<HttpAuthHandler> realm3_handler = 180 scoped_refptr<HttpAuthHandler> realm3_handler =
180 new MockAuthHandler("basic", "Realm3", HttpAuth::AUTH_SERVER); 181 new MockAuthHandler("basic", "Realm3", HttpAuth::AUTH_SERVER);
181 182
182 HttpAuthCache cache; 183 HttpAuthCache cache;
183 cache.Add(origin, realm1_handler, L"alice", L"123", "/"); 184 cache.Add(origin, realm1_handler, L"alice", L"123", "/");
184 cache.Add(origin, realm2_handler, L"bob", L"princess", "/"); 185 cache.Add(origin, realm2_handler, L"bob", L"princess", "/");
185 cache.Add(origin, realm3_handler, L"admin", L"password", "/"); 186 cache.Add(origin, realm3_handler, L"admin", L"password", "/");
186 187
187 // Fails, because there is no realm "Realm4". 188 // Fails, because there is no realm "Realm4".
188 EXPECT_FALSE(cache.Remove(origin, "Realm4", L"alice", L"123")); 189 EXPECT_FALSE(cache.Remove(origin, "Realm4", L"alice", L"123"));
189 190
190 // Fails because the origin is wrong. 191 // Fails because the origin is wrong.
191 EXPECT_FALSE(cache.Remove( 192 EXPECT_FALSE(cache.Remove(
192 GURL("http://foobar2.com:100"), "Realm1", L"alice", L"123")); 193 GURL("http://foobar2.com:100"), "Realm1", L"alice", L"123"));
193 194
194 // Fails because the username is wrong. 195 // Fails because the username is wrong.
195 EXPECT_FALSE(cache.Remove(origin, "Realm1", L"alice2", L"123")); 196 EXPECT_FALSE(cache.Remove(origin, "Realm1", L"alice2", L"123"));
196 197
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 // full this causes FIFO eviction of the first three entries. 264 // full this causes FIFO eviction of the first three entries.
264 TEST_F(HttpAuthCacheEvictionTest, RealmEntryEviction) { 265 TEST_F(HttpAuthCacheEvictionTest, RealmEntryEviction) {
265 for (int i = 0; i < kMaxRealms; ++i) 266 for (int i = 0; i < kMaxRealms; ++i)
266 AddRealm(i); 267 AddRealm(i);
267 268
268 for (int i = 0; i < kMaxRealms; ++i) 269 for (int i = 0; i < kMaxRealms; ++i)
269 CheckRealmExistence(i, true); 270 CheckRealmExistence(i, true);
270 271
271 for (int i = 0; i < 3; ++i) 272 for (int i = 0; i < 3; ++i)
272 AddRealm(i + kMaxRealms); 273 AddRealm(i + kMaxRealms);
273 274
274 for (int i = 0; i < 3; ++i) 275 for (int i = 0; i < 3; ++i)
275 CheckRealmExistence(i, false); 276 CheckRealmExistence(i, false);
276 277
277 for (int i = 0; i < kMaxRealms; ++i) 278 for (int i = 0; i < kMaxRealms; ++i)
278 CheckRealmExistence(i + 3, true); 279 CheckRealmExistence(i + 3, true);
279 } 280 }
280 281
281 // Add the maximum number of paths to a single realm entry. Each of these 282 // Add the maximum number of paths to a single realm entry. Each of these
282 // paths should be retrievable. Next add 3 more paths -- since the cache is 283 // paths should be retrievable. Next add 3 more paths -- since the cache is
283 // full this causes FIFO eviction of the first three paths. 284 // full this causes FIFO eviction of the first three paths.
(...skipping 10 matching lines...) Expand all
294 for (int i = 0; i < 3; ++i) 295 for (int i = 0; i < 3; ++i)
295 CheckPathExistence(0, i, false); 296 CheckPathExistence(0, i, false);
296 297
297 for (int i = 0; i < kMaxPaths; ++i) 298 for (int i = 0; i < kMaxPaths; ++i)
298 CheckPathExistence(0, i + 3, true); 299 CheckPathExistence(0, i + 3, true);
299 300
300 for (int i = 0; i < kMaxRealms; ++i) 301 for (int i = 0; i < kMaxRealms; ++i)
301 CheckRealmExistence(i, true); 302 CheckRealmExistence(i, true);
302 } 303 }
303 304
304 } // namespace net 305 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_auth.cc ('k') | net/http/http_auth_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698