OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/string16.h" | 7 #include "base/string16.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 virtual HttpAuth::AuthorizationResult HandleAnotherChallenge( | 33 virtual HttpAuth::AuthorizationResult HandleAnotherChallenge( |
34 HttpAuth::ChallengeTokenizer* challenge) { | 34 HttpAuth::ChallengeTokenizer* challenge) { |
35 return HttpAuth::AUTHORIZATION_RESULT_REJECT; | 35 return HttpAuth::AUTHORIZATION_RESULT_REJECT; |
36 } | 36 } |
37 | 37 |
38 protected: | 38 protected: |
39 virtual bool Init(HttpAuth::ChallengeTokenizer* challenge) { | 39 virtual bool Init(HttpAuth::ChallengeTokenizer* challenge) { |
40 return false; // Unused. | 40 return false; // Unused. |
41 } | 41 } |
42 | 42 |
43 virtual int GenerateAuthTokenImpl(const string16*, | 43 virtual int GenerateAuthTokenImpl(const AuthCredentials*, |
44 const string16*, | |
45 const HttpRequestInfo*, | 44 const HttpRequestInfo*, |
46 OldCompletionCallback* callback, | 45 OldCompletionCallback* callback, |
47 std::string* auth_token) { | 46 std::string* auth_token) { |
48 *auth_token = "mock-credentials"; | 47 *auth_token = "mock-credentials"; |
49 return OK; | 48 return OK; |
50 } | 49 } |
51 | 50 |
52 | 51 |
53 private: | 52 private: |
54 ~MockAuthHandler() {} | 53 ~MockAuthHandler() {} |
55 }; | 54 }; |
56 | 55 |
57 const char* kRealm1 = "Realm1"; | 56 const char* kRealm1 = "Realm1"; |
58 const char* kRealm2 = "Realm2"; | 57 const char* kRealm2 = "Realm2"; |
59 const char* kRealm3 = "Realm3"; | 58 const char* kRealm3 = "Realm3"; |
60 const char* kRealm4 = "Realm4"; | 59 const char* kRealm4 = "Realm4"; |
61 const char* kRealm5 = "Realm5"; | 60 const char* kRealm5 = "Realm5"; |
62 const string16 k123(ASCIIToUTF16("123")); | 61 const string16 k123(ASCIIToUTF16("123")); |
63 const string16 k1234(ASCIIToUTF16("1234")); | 62 const string16 k1234(ASCIIToUTF16("1234")); |
64 const string16 kAdmin(ASCIIToUTF16("admin")); | 63 const string16 kAdmin(ASCIIToUTF16("admin")); |
65 const string16 kAlice(ASCIIToUTF16("alice")); | 64 const string16 kAlice(ASCIIToUTF16("alice")); |
66 const string16 kAlice2(ASCIIToUTF16("alice2")); | 65 const string16 kAlice2(ASCIIToUTF16("alice2")); |
67 const string16 kPassword(ASCIIToUTF16("password")); | 66 const string16 kPassword(ASCIIToUTF16("password")); |
68 const string16 kRoot(ASCIIToUTF16("root")); | 67 const string16 kRoot(ASCIIToUTF16("root")); |
69 const string16 kUsername(ASCIIToUTF16("username")); | 68 const string16 kUsername(ASCIIToUTF16("username")); |
70 const string16 kWileCoyote(ASCIIToUTF16("wilecoyote")); | 69 const string16 kWileCoyote(ASCIIToUTF16("wilecoyote")); |
71 | 70 |
| 71 AuthCredentials CreateASCIICredentials(const char* username, |
| 72 const char* password) { |
| 73 return AuthCredentials(ASCIIToUTF16(username), ASCIIToUTF16(password)); |
| 74 } |
| 75 |
72 } // namespace | 76 } // namespace |
73 | 77 |
74 // Test adding and looking-up cache entries (both by realm and by path). | 78 // Test adding and looking-up cache entries (both by realm and by path). |
75 TEST(HttpAuthCacheTest, Basic) { | 79 TEST(HttpAuthCacheTest, Basic) { |
76 GURL origin("http://www.google.com"); | 80 GURL origin("http://www.google.com"); |
77 HttpAuthCache cache; | 81 HttpAuthCache cache; |
78 HttpAuthCache::Entry* entry; | 82 HttpAuthCache::Entry* entry; |
79 | 83 |
80 // Add cache entries for 4 realms: "Realm1", "Realm2", "Realm3" and | 84 // Add cache entries for 4 realms: "Realm1", "Realm2", "Realm3" and |
81 // "Realm4" | 85 // "Realm4" |
82 | 86 |
83 scoped_ptr<HttpAuthHandler> realm1_handler( | 87 scoped_ptr<HttpAuthHandler> realm1_handler( |
84 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, | 88 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, |
85 kRealm1, | 89 kRealm1, |
86 HttpAuth::AUTH_SERVER)); | 90 HttpAuth::AUTH_SERVER)); |
87 cache.Add(origin, realm1_handler->realm(), realm1_handler->auth_scheme(), | 91 cache.Add(origin, realm1_handler->realm(), realm1_handler->auth_scheme(), |
88 "Basic realm=Realm1", ASCIIToUTF16("realm1-user"), | 92 "Basic realm=Realm1", |
89 ASCIIToUTF16("realm1-password"), "/foo/bar/index.html"); | 93 CreateASCIICredentials("realm1-user", "realm1-password"), |
| 94 "/foo/bar/index.html"); |
90 | 95 |
91 scoped_ptr<HttpAuthHandler> realm2_handler( | 96 scoped_ptr<HttpAuthHandler> realm2_handler( |
92 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, | 97 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, |
93 kRealm2, | 98 kRealm2, |
94 HttpAuth::AUTH_SERVER)); | 99 HttpAuth::AUTH_SERVER)); |
95 cache.Add(origin, realm2_handler->realm(), realm2_handler->auth_scheme(), | 100 cache.Add(origin, realm2_handler->realm(), realm2_handler->auth_scheme(), |
96 "Basic realm=Realm2", ASCIIToUTF16("realm2-user"), | 101 "Basic realm=Realm2", |
97 ASCIIToUTF16("realm2-password"), "/foo2/index.html"); | 102 CreateASCIICredentials("realm2-user", "realm2-password"), |
| 103 "/foo2/index.html"); |
98 | 104 |
99 scoped_ptr<HttpAuthHandler> realm3_basic_handler( | 105 scoped_ptr<HttpAuthHandler> realm3_basic_handler( |
100 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, | 106 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, |
101 kRealm3, | 107 kRealm3, |
102 HttpAuth::AUTH_PROXY)); | 108 HttpAuth::AUTH_PROXY)); |
103 cache.Add(origin, realm3_basic_handler->realm(), | 109 cache.Add(origin, realm3_basic_handler->realm(), |
104 realm3_basic_handler->auth_scheme(), "Basic realm=Realm3", | 110 realm3_basic_handler->auth_scheme(), "Basic realm=Realm3", |
105 ASCIIToUTF16("realm3-basic-user"), | 111 CreateASCIICredentials("realm3-basic-user", |
106 ASCIIToUTF16("realm3-basic-password"), ""); | 112 "realm3-basic-password"), |
| 113 ""); |
107 | 114 |
108 scoped_ptr<HttpAuthHandler> realm3_digest_handler( | 115 scoped_ptr<HttpAuthHandler> realm3_digest_handler( |
109 new MockAuthHandler(HttpAuth::AUTH_SCHEME_DIGEST, | 116 new MockAuthHandler(HttpAuth::AUTH_SCHEME_DIGEST, |
110 kRealm3, | 117 kRealm3, |
111 HttpAuth::AUTH_PROXY)); | 118 HttpAuth::AUTH_PROXY)); |
112 cache.Add(origin, realm3_digest_handler->realm(), | 119 cache.Add(origin, realm3_digest_handler->realm(), |
113 realm3_digest_handler->auth_scheme(), "Digest realm=Realm3", | 120 realm3_digest_handler->auth_scheme(), "Digest realm=Realm3", |
114 ASCIIToUTF16("realm3-digest-user"), | 121 CreateASCIICredentials("realm3-digest-user", |
115 ASCIIToUTF16("realm3-digest-password"), "/baz/index.html"); | 122 "realm3-digest-password"), |
| 123 "/baz/index.html"); |
116 | 124 |
117 scoped_ptr<HttpAuthHandler> realm4_basic_handler( | 125 scoped_ptr<HttpAuthHandler> realm4_basic_handler( |
118 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, | 126 new MockAuthHandler(HttpAuth::AUTH_SCHEME_BASIC, |
119 kRealm4, | 127 kRealm4, |
120 HttpAuth::AUTH_SERVER)); | 128 HttpAuth::AUTH_SERVER)); |
121 cache.Add(origin, realm4_basic_handler->realm(), | 129 cache.Add(origin, realm4_basic_handler->realm(), |
122 realm4_basic_handler->auth_scheme(), "Basic realm=Realm4", | 130 realm4_basic_handler->auth_scheme(), "Basic realm=Realm4", |
123 ASCIIToUTF16("realm4-basic-user"), | 131 CreateASCIICredentials("realm4-basic-user", |
124 ASCIIToUTF16("realm4-basic-password"), "/"); | 132 "realm4-basic-password"), |
| 133 "/"); |
125 | 134 |
126 // There is no Realm5 | 135 // There is no Realm5 |
127 entry = cache.Lookup(origin, kRealm5, HttpAuth::AUTH_SCHEME_BASIC); | 136 entry = cache.Lookup(origin, kRealm5, HttpAuth::AUTH_SCHEME_BASIC); |
128 EXPECT_TRUE(NULL == entry); | 137 EXPECT_TRUE(NULL == entry); |
129 | 138 |
130 // While Realm3 does exist, the origin scheme is wrong. | 139 // While Realm3 does exist, the origin scheme is wrong. |
131 entry = cache.Lookup(GURL("https://www.google.com"), kRealm3, | 140 entry = cache.Lookup(GURL("https://www.google.com"), kRealm3, |
132 HttpAuth::AUTH_SCHEME_BASIC); | 141 HttpAuth::AUTH_SCHEME_BASIC); |
133 EXPECT_TRUE(NULL == entry); | 142 EXPECT_TRUE(NULL == entry); |
134 | 143 |
135 // Realm, origin scheme ok, authentication scheme wrong | 144 // Realm, origin scheme ok, authentication scheme wrong |
136 entry = cache.Lookup | 145 entry = cache.Lookup |
137 (GURL("http://www.google.com"), kRealm1, HttpAuth::AUTH_SCHEME_DIGEST); | 146 (GURL("http://www.google.com"), kRealm1, HttpAuth::AUTH_SCHEME_DIGEST); |
138 EXPECT_TRUE(NULL == entry); | 147 EXPECT_TRUE(NULL == entry); |
139 | 148 |
140 // Valid lookup by origin, realm, scheme. | 149 // Valid lookup by origin, realm, scheme. |
141 entry = cache.Lookup( | 150 entry = cache.Lookup( |
142 GURL("http://www.google.com:80"), kRealm3, HttpAuth::AUTH_SCHEME_BASIC); | 151 GURL("http://www.google.com:80"), kRealm3, HttpAuth::AUTH_SCHEME_BASIC); |
143 ASSERT_FALSE(NULL == entry); | 152 ASSERT_FALSE(NULL == entry); |
144 EXPECT_EQ(HttpAuth::AUTH_SCHEME_BASIC, entry->scheme()); | 153 EXPECT_EQ(HttpAuth::AUTH_SCHEME_BASIC, entry->scheme()); |
145 EXPECT_EQ(kRealm3, entry->realm()); | 154 EXPECT_EQ(kRealm3, entry->realm()); |
146 EXPECT_EQ("Basic realm=Realm3", entry->auth_challenge()); | 155 EXPECT_EQ("Basic realm=Realm3", entry->auth_challenge()); |
147 EXPECT_EQ(ASCIIToUTF16("realm3-basic-user"), entry->username()); | 156 EXPECT_EQ(ASCIIToUTF16("realm3-basic-user"), entry->credentials().username()); |
148 EXPECT_EQ(ASCIIToUTF16("realm3-basic-password"), entry->password()); | 157 EXPECT_EQ(ASCIIToUTF16("realm3-basic-password"), |
| 158 entry->credentials().password()); |
149 | 159 |
150 // Valid lookup by origin, realm, scheme when there's a duplicate | 160 // Valid lookup by origin, realm, scheme when there's a duplicate |
151 // origin, realm in the cache | 161 // origin, realm in the cache |
152 entry = cache.Lookup( | 162 entry = cache.Lookup( |
153 GURL("http://www.google.com:80"), kRealm3, HttpAuth::AUTH_SCHEME_DIGEST); | 163 GURL("http://www.google.com:80"), kRealm3, HttpAuth::AUTH_SCHEME_DIGEST); |
154 ASSERT_FALSE(NULL == entry); | 164 ASSERT_FALSE(NULL == entry); |
155 EXPECT_EQ(HttpAuth::AUTH_SCHEME_DIGEST, entry->scheme()); | 165 EXPECT_EQ(HttpAuth::AUTH_SCHEME_DIGEST, entry->scheme()); |
156 EXPECT_EQ(kRealm3, entry->realm()); | 166 EXPECT_EQ(kRealm3, entry->realm()); |
157 EXPECT_EQ("Digest realm=Realm3", entry->auth_challenge()); | 167 EXPECT_EQ("Digest realm=Realm3", entry->auth_challenge()); |
158 EXPECT_EQ(ASCIIToUTF16("realm3-digest-user"), entry->username()); | 168 EXPECT_EQ(ASCIIToUTF16("realm3-digest-user"), |
159 EXPECT_EQ(ASCIIToUTF16("realm3-digest-password"), entry->password()); | 169 entry->credentials().username()); |
| 170 EXPECT_EQ(ASCIIToUTF16("realm3-digest-password"), |
| 171 entry->credentials().password()); |
160 | 172 |
161 // Valid lookup by realm. | 173 // Valid lookup by realm. |
162 entry = cache.Lookup(origin, kRealm2, HttpAuth::AUTH_SCHEME_BASIC); | 174 entry = cache.Lookup(origin, kRealm2, HttpAuth::AUTH_SCHEME_BASIC); |
163 ASSERT_FALSE(NULL == entry); | 175 ASSERT_FALSE(NULL == entry); |
164 EXPECT_EQ(HttpAuth::AUTH_SCHEME_BASIC, entry->scheme()); | 176 EXPECT_EQ(HttpAuth::AUTH_SCHEME_BASIC, entry->scheme()); |
165 EXPECT_EQ(kRealm2, entry->realm()); | 177 EXPECT_EQ(kRealm2, entry->realm()); |
166 EXPECT_EQ("Basic realm=Realm2", entry->auth_challenge()); | 178 EXPECT_EQ("Basic realm=Realm2", entry->auth_challenge()); |
167 EXPECT_EQ(ASCIIToUTF16("realm2-user"), entry->username()); | 179 EXPECT_EQ(ASCIIToUTF16("realm2-user"), entry->credentials().username()); |
168 EXPECT_EQ(ASCIIToUTF16("realm2-password"), entry->password()); | 180 EXPECT_EQ(ASCIIToUTF16("realm2-password"), entry->credentials().password()); |
169 | 181 |
170 // Check that subpaths are recognized. | 182 // Check that subpaths are recognized. |
171 HttpAuthCache::Entry* realm2_entry = cache.Lookup( | 183 HttpAuthCache::Entry* realm2_entry = cache.Lookup( |
172 origin, kRealm2, HttpAuth::AUTH_SCHEME_BASIC); | 184 origin, kRealm2, HttpAuth::AUTH_SCHEME_BASIC); |
173 HttpAuthCache::Entry* realm4_entry = cache.Lookup( | 185 HttpAuthCache::Entry* realm4_entry = cache.Lookup( |
174 origin, kRealm4, HttpAuth::AUTH_SCHEME_BASIC); | 186 origin, kRealm4, HttpAuth::AUTH_SCHEME_BASIC); |
175 EXPECT_FALSE(NULL == realm2_entry); | 187 EXPECT_FALSE(NULL == realm2_entry); |
176 EXPECT_FALSE(NULL == realm4_entry); | 188 EXPECT_FALSE(NULL == realm4_entry); |
177 // Realm4 applies to '/' and Realm2 applies to '/foo2/'. | 189 // Realm4 applies to '/' and Realm2 applies to '/foo2/'. |
178 // LookupByPath() should return the closest enclosing path. | 190 // LookupByPath() should return the closest enclosing path. |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 TEST(HttpAuthCacheTest, AddToExistingEntry) { | 274 TEST(HttpAuthCacheTest, AddToExistingEntry) { |
263 HttpAuthCache cache; | 275 HttpAuthCache cache; |
264 GURL origin("http://www.foobar.com:70"); | 276 GURL origin("http://www.foobar.com:70"); |
265 const std::string auth_challenge = "Basic realm=MyRealm"; | 277 const std::string auth_challenge = "Basic realm=MyRealm"; |
266 | 278 |
267 scoped_ptr<HttpAuthHandler> handler( | 279 scoped_ptr<HttpAuthHandler> handler( |
268 new MockAuthHandler( | 280 new MockAuthHandler( |
269 HttpAuth::AUTH_SCHEME_BASIC, "MyRealm", HttpAuth::AUTH_SERVER)); | 281 HttpAuth::AUTH_SCHEME_BASIC, "MyRealm", HttpAuth::AUTH_SERVER)); |
270 HttpAuthCache::Entry* orig_entry = cache.Add( | 282 HttpAuthCache::Entry* orig_entry = cache.Add( |
271 origin, handler->realm(), handler->auth_scheme(), auth_challenge, | 283 origin, handler->realm(), handler->auth_scheme(), auth_challenge, |
272 ASCIIToUTF16("user1"), ASCIIToUTF16("password1"), "/x/y/z/"); | 284 CreateASCIICredentials("user1", "password1"), "/x/y/z/"); |
273 cache.Add(origin, handler->realm(), handler->auth_scheme(), auth_challenge, | 285 cache.Add(origin, handler->realm(), handler->auth_scheme(), auth_challenge, |
274 ASCIIToUTF16("user2"), ASCIIToUTF16("password2"), "/z/y/x/"); | 286 CreateASCIICredentials("user2", "password2"), "/z/y/x/"); |
275 cache.Add(origin, handler->realm(), handler->auth_scheme(), auth_challenge, | 287 cache.Add(origin, handler->realm(), handler->auth_scheme(), auth_challenge, |
276 ASCIIToUTF16("user3"), ASCIIToUTF16("password3"), "/z/y"); | 288 CreateASCIICredentials("user3", "password3"), "/z/y"); |
277 | 289 |
278 HttpAuthCache::Entry* entry = cache.Lookup( | 290 HttpAuthCache::Entry* entry = cache.Lookup( |
279 origin, "MyRealm", HttpAuth::AUTH_SCHEME_BASIC); | 291 origin, "MyRealm", HttpAuth::AUTH_SCHEME_BASIC); |
280 | 292 |
281 EXPECT_TRUE(entry == orig_entry); | 293 EXPECT_TRUE(entry == orig_entry); |
282 EXPECT_EQ(ASCIIToUTF16("user3"), entry->username()); | 294 EXPECT_EQ(ASCIIToUTF16("user3"), entry->credentials().username()); |
283 EXPECT_EQ(ASCIIToUTF16("password3"), entry->password()); | 295 EXPECT_EQ(ASCIIToUTF16("password3"), entry->credentials().password()); |
284 | 296 |
285 EXPECT_EQ(2U, entry->paths_.size()); | 297 EXPECT_EQ(2U, entry->paths_.size()); |
286 EXPECT_EQ("/z/", entry->paths_.front()); | 298 EXPECT_EQ("/z/", entry->paths_.front()); |
287 EXPECT_EQ("/x/y/z/", entry->paths_.back()); | 299 EXPECT_EQ("/x/y/z/", entry->paths_.back()); |
288 } | 300 } |
289 | 301 |
290 TEST(HttpAuthCacheTest, Remove) { | 302 TEST(HttpAuthCacheTest, Remove) { |
291 GURL origin("http://foobar2.com"); | 303 GURL origin("http://foobar2.com"); |
292 | 304 |
293 scoped_ptr<HttpAuthHandler> realm1_handler( | 305 scoped_ptr<HttpAuthHandler> realm1_handler( |
294 new MockAuthHandler( | 306 new MockAuthHandler( |
295 HttpAuth::AUTH_SCHEME_BASIC, kRealm1, HttpAuth::AUTH_SERVER)); | 307 HttpAuth::AUTH_SCHEME_BASIC, kRealm1, HttpAuth::AUTH_SERVER)); |
296 | 308 |
297 scoped_ptr<HttpAuthHandler> realm2_handler( | 309 scoped_ptr<HttpAuthHandler> realm2_handler( |
298 new MockAuthHandler( | 310 new MockAuthHandler( |
299 HttpAuth::AUTH_SCHEME_BASIC, kRealm2, HttpAuth::AUTH_SERVER)); | 311 HttpAuth::AUTH_SCHEME_BASIC, kRealm2, HttpAuth::AUTH_SERVER)); |
300 | 312 |
301 scoped_ptr<HttpAuthHandler> realm3_basic_handler( | 313 scoped_ptr<HttpAuthHandler> realm3_basic_handler( |
302 new MockAuthHandler( | 314 new MockAuthHandler( |
303 HttpAuth::AUTH_SCHEME_BASIC, kRealm3, HttpAuth::AUTH_SERVER)); | 315 HttpAuth::AUTH_SCHEME_BASIC, kRealm3, HttpAuth::AUTH_SERVER)); |
304 | 316 |
305 scoped_ptr<HttpAuthHandler> realm3_digest_handler( | 317 scoped_ptr<HttpAuthHandler> realm3_digest_handler( |
306 new MockAuthHandler( | 318 new MockAuthHandler( |
307 HttpAuth::AUTH_SCHEME_DIGEST, kRealm3, HttpAuth::AUTH_SERVER)); | 319 HttpAuth::AUTH_SCHEME_DIGEST, kRealm3, HttpAuth::AUTH_SERVER)); |
308 | 320 |
309 HttpAuthCache cache; | 321 HttpAuthCache cache; |
310 cache.Add(origin, realm1_handler->realm(), realm1_handler->auth_scheme(), | 322 cache.Add(origin, realm1_handler->realm(), realm1_handler->auth_scheme(), |
311 "basic realm=Realm1", kAlice, k123, "/"); | 323 "basic realm=Realm1", AuthCredentials(kAlice, k123), "/"); |
312 cache.Add(origin, realm2_handler->realm(), realm2_handler->auth_scheme(), | 324 cache.Add(origin, realm2_handler->realm(), realm2_handler->auth_scheme(), |
313 "basic realm=Realm2", ASCIIToUTF16("bob"), ASCIIToUTF16("princess"), | 325 "basic realm=Realm2", CreateASCIICredentials("bob", "princess"), |
314 "/"); | 326 "/"); |
315 cache.Add(origin, realm3_basic_handler->realm(), | 327 cache.Add(origin, realm3_basic_handler->realm(), |
316 realm3_basic_handler->auth_scheme(), "basic realm=Realm3", | 328 realm3_basic_handler->auth_scheme(), "basic realm=Realm3", |
317 kAdmin, kPassword, "/"); | 329 AuthCredentials(kAdmin, kPassword), "/"); |
318 cache.Add(origin, realm3_digest_handler->realm(), | 330 cache.Add(origin, realm3_digest_handler->realm(), |
319 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", | 331 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", |
320 kRoot, kWileCoyote, "/"); | 332 AuthCredentials(kRoot, kWileCoyote), "/"); |
321 | 333 |
322 // Fails, because there is no realm "Realm5". | 334 // Fails, because there is no realm "Realm5". |
323 EXPECT_FALSE(cache.Remove( | 335 EXPECT_FALSE(cache.Remove( |
324 origin, kRealm5, HttpAuth::AUTH_SCHEME_BASIC, kAlice, k123)); | 336 origin, kRealm5, HttpAuth::AUTH_SCHEME_BASIC, |
| 337 AuthCredentials(kAlice, k123))); |
325 | 338 |
326 // Fails because the origin is wrong. | 339 // Fails because the origin is wrong. |
327 EXPECT_FALSE(cache.Remove(GURL("http://foobar2.com:100"), | 340 EXPECT_FALSE(cache.Remove(GURL("http://foobar2.com:100"), |
328 kRealm1, | 341 kRealm1, |
329 HttpAuth::AUTH_SCHEME_BASIC, | 342 HttpAuth::AUTH_SCHEME_BASIC, |
330 kAlice, | 343 AuthCredentials(kAlice, k123))); |
331 k123)); | |
332 | 344 |
333 // Fails because the username is wrong. | 345 // Fails because the username is wrong. |
334 EXPECT_FALSE(cache.Remove( | 346 EXPECT_FALSE(cache.Remove( |
335 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, kAlice2, k123)); | 347 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, |
| 348 AuthCredentials(kAlice2, k123))); |
336 | 349 |
337 // Fails because the password is wrong. | 350 // Fails because the password is wrong. |
338 EXPECT_FALSE(cache.Remove( | 351 EXPECT_FALSE(cache.Remove( |
339 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, kAlice, k1234)); | 352 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, |
| 353 AuthCredentials(kAlice, k1234))); |
340 | 354 |
341 // Fails because the authentication type is wrong. | 355 // Fails because the authentication type is wrong. |
342 EXPECT_FALSE(cache.Remove( | 356 EXPECT_FALSE(cache.Remove( |
343 origin, kRealm1, HttpAuth::AUTH_SCHEME_DIGEST, kAlice, k123)); | 357 origin, kRealm1, HttpAuth::AUTH_SCHEME_DIGEST, |
| 358 AuthCredentials(kAlice, k123))); |
344 | 359 |
345 // Succeeds. | 360 // Succeeds. |
346 EXPECT_TRUE(cache.Remove( | 361 EXPECT_TRUE(cache.Remove( |
347 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, kAlice, k123)); | 362 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, |
| 363 AuthCredentials(kAlice, k123))); |
348 | 364 |
349 // Fails because we just deleted the entry! | 365 // Fails because we just deleted the entry! |
350 EXPECT_FALSE(cache.Remove( | 366 EXPECT_FALSE(cache.Remove( |
351 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, kAlice, k123)); | 367 origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC, |
| 368 AuthCredentials(kAlice, k123))); |
352 | 369 |
353 // Succeed when there are two authentication types for the same origin,realm. | 370 // Succeed when there are two authentication types for the same origin,realm. |
354 EXPECT_TRUE(cache.Remove( | 371 EXPECT_TRUE(cache.Remove( |
355 origin, kRealm3, HttpAuth::AUTH_SCHEME_DIGEST, kRoot, kWileCoyote)); | 372 origin, kRealm3, HttpAuth::AUTH_SCHEME_DIGEST, |
| 373 AuthCredentials(kRoot, kWileCoyote))); |
356 | 374 |
357 // Succeed as above, but when entries were added in opposite order | 375 // Succeed as above, but when entries were added in opposite order |
358 cache.Add(origin, realm3_digest_handler->realm(), | 376 cache.Add(origin, realm3_digest_handler->realm(), |
359 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", | 377 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", |
360 kRoot, kWileCoyote, "/"); | 378 AuthCredentials(kRoot, kWileCoyote), "/"); |
361 EXPECT_TRUE(cache.Remove( | 379 EXPECT_TRUE(cache.Remove( |
362 origin, kRealm3, HttpAuth::AUTH_SCHEME_BASIC, kAdmin, kPassword)); | 380 origin, kRealm3, HttpAuth::AUTH_SCHEME_BASIC, |
| 381 AuthCredentials(kAdmin, kPassword))); |
363 | 382 |
364 // Make sure that removing one entry still leaves the other available for | 383 // Make sure that removing one entry still leaves the other available for |
365 // lookup. | 384 // lookup. |
366 HttpAuthCache::Entry* entry = cache.Lookup( | 385 HttpAuthCache::Entry* entry = cache.Lookup( |
367 origin, kRealm3, HttpAuth::AUTH_SCHEME_DIGEST); | 386 origin, kRealm3, HttpAuth::AUTH_SCHEME_DIGEST); |
368 EXPECT_FALSE(NULL == entry); | 387 EXPECT_FALSE(NULL == entry); |
369 } | 388 } |
370 | 389 |
371 TEST(HttpAuthCacheTest, UpdateStaleChallenge) { | 390 TEST(HttpAuthCacheTest, UpdateStaleChallenge) { |
372 HttpAuthCache cache; | 391 HttpAuthCache cache; |
373 GURL origin("http://foobar2.com"); | 392 GURL origin("http://foobar2.com"); |
374 scoped_ptr<HttpAuthHandler> digest_handler( | 393 scoped_ptr<HttpAuthHandler> digest_handler( |
375 new MockAuthHandler( | 394 new MockAuthHandler( |
376 HttpAuth::AUTH_SCHEME_DIGEST, kRealm1, HttpAuth::AUTH_PROXY)); | 395 HttpAuth::AUTH_SCHEME_DIGEST, kRealm1, HttpAuth::AUTH_PROXY)); |
377 HttpAuthCache::Entry* entry_pre = cache.Add( | 396 HttpAuthCache::Entry* entry_pre = cache.Add( |
378 origin, | 397 origin, |
379 digest_handler->realm(), | 398 digest_handler->realm(), |
380 digest_handler->auth_scheme(), | 399 digest_handler->auth_scheme(), |
381 "Digest realm=Realm1," | 400 "Digest realm=Realm1," |
382 "nonce=\"s3MzvFhaBAA=4c520af5acd9d8d7ae26947529d18c8eae1e98f4\"", | 401 "nonce=\"s3MzvFhaBAA=4c520af5acd9d8d7ae26947529d18c8eae1e98f4\"", |
383 ASCIIToUTF16("realm-digest-user"), | 402 CreateASCIICredentials("realm-digest-user", "realm-digest-password"), |
384 ASCIIToUTF16("realm-digest-password"), | |
385 "/baz/index.html"); | 403 "/baz/index.html"); |
386 ASSERT_TRUE(entry_pre != NULL); | 404 ASSERT_TRUE(entry_pre != NULL); |
387 | 405 |
388 EXPECT_EQ(2, entry_pre->IncrementNonceCount()); | 406 EXPECT_EQ(2, entry_pre->IncrementNonceCount()); |
389 EXPECT_EQ(3, entry_pre->IncrementNonceCount()); | 407 EXPECT_EQ(3, entry_pre->IncrementNonceCount()); |
390 EXPECT_EQ(4, entry_pre->IncrementNonceCount()); | 408 EXPECT_EQ(4, entry_pre->IncrementNonceCount()); |
391 | 409 |
392 bool update_success = cache.UpdateStaleChallenge( | 410 bool update_success = cache.UpdateStaleChallenge( |
393 origin, | 411 origin, |
394 digest_handler->realm(), | 412 digest_handler->realm(), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 | 455 |
438 scoped_ptr<HttpAuthHandler> realm4_handler( | 456 scoped_ptr<HttpAuthHandler> realm4_handler( |
439 new MockAuthHandler( | 457 new MockAuthHandler( |
440 HttpAuth::AUTH_SCHEME_BASIC, kRealm4, HttpAuth::AUTH_SERVER)); | 458 HttpAuth::AUTH_SCHEME_BASIC, kRealm4, HttpAuth::AUTH_SERVER)); |
441 | 459 |
442 HttpAuthCache first_cache; | 460 HttpAuthCache first_cache; |
443 HttpAuthCache::Entry* entry; | 461 HttpAuthCache::Entry* entry; |
444 | 462 |
445 first_cache.Add(origin, realm1_handler->realm(), | 463 first_cache.Add(origin, realm1_handler->realm(), |
446 realm1_handler->auth_scheme(), "basic realm=Realm1", | 464 realm1_handler->auth_scheme(), "basic realm=Realm1", |
447 kAlice, k123, path); | 465 AuthCredentials(kAlice, k123), path); |
448 first_cache.Add(origin, realm2_handler->realm(), | 466 first_cache.Add(origin, realm2_handler->realm(), |
449 realm2_handler->auth_scheme(), "basic realm=Realm2", | 467 realm2_handler->auth_scheme(), "basic realm=Realm2", |
450 kAlice2, k1234, path); | 468 AuthCredentials(kAlice2, k1234), path); |
451 first_cache.Add(origin, realm3_digest_handler->realm(), | 469 first_cache.Add(origin, realm3_digest_handler->realm(), |
452 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", | 470 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", |
453 kRoot, kWileCoyote, path); | 471 AuthCredentials(kRoot, kWileCoyote), path); |
454 entry = first_cache.Add( | 472 entry = first_cache.Add( |
455 origin, realm3_digest_handler->realm(), | 473 origin, realm3_digest_handler->realm(), |
456 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", | 474 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", |
457 kRoot, kWileCoyote, another_path); | 475 AuthCredentials(kRoot, kWileCoyote), another_path); |
458 | 476 |
459 EXPECT_EQ(2, entry->IncrementNonceCount()); | 477 EXPECT_EQ(2, entry->IncrementNonceCount()); |
460 | 478 |
461 HttpAuthCache second_cache; | 479 HttpAuthCache second_cache; |
462 // Will be overwritten by kRoot:kWileCoyote. | 480 // Will be overwritten by kRoot:kWileCoyote. |
463 second_cache.Add(origin, realm3_digest_handler->realm(), | 481 second_cache.Add(origin, realm3_digest_handler->realm(), |
464 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", | 482 realm3_digest_handler->auth_scheme(), "digest realm=Realm3", |
465 kAlice2, k1234, path); | 483 AuthCredentials(kAlice2, k1234), path); |
466 // Should be left intact. | 484 // Should be left intact. |
467 second_cache.Add(origin, realm4_handler->realm(), | 485 second_cache.Add(origin, realm4_handler->realm(), |
468 realm4_handler->auth_scheme(), "basic realm=Realm4", | 486 realm4_handler->auth_scheme(), "basic realm=Realm4", |
469 kAdmin, kRoot, path); | 487 AuthCredentials(kAdmin, kRoot), path); |
470 | 488 |
471 second_cache.UpdateAllFrom(first_cache); | 489 second_cache.UpdateAllFrom(first_cache); |
472 | 490 |
473 // Copied from first_cache. | 491 // Copied from first_cache. |
474 entry = second_cache.Lookup(origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC); | 492 entry = second_cache.Lookup(origin, kRealm1, HttpAuth::AUTH_SCHEME_BASIC); |
475 EXPECT_TRUE(NULL != entry); | 493 EXPECT_TRUE(NULL != entry); |
476 EXPECT_EQ(kAlice, entry->username()); | 494 EXPECT_EQ(kAlice, entry->credentials().username()); |
477 EXPECT_EQ(k123, entry->password()); | 495 EXPECT_EQ(k123, entry->credentials().password()); |
478 | 496 |
479 // Copied from first_cache. | 497 // Copied from first_cache. |
480 entry = second_cache.Lookup(origin, kRealm2, HttpAuth::AUTH_SCHEME_BASIC); | 498 entry = second_cache.Lookup(origin, kRealm2, HttpAuth::AUTH_SCHEME_BASIC); |
481 EXPECT_TRUE(NULL != entry); | 499 EXPECT_TRUE(NULL != entry); |
482 EXPECT_EQ(kAlice2, entry->username()); | 500 EXPECT_EQ(kAlice2, entry->credentials().username()); |
483 EXPECT_EQ(k1234, entry->password()); | 501 EXPECT_EQ(k1234, entry->credentials().password()); |
484 | 502 |
485 // Overwritten from first_cache. | 503 // Overwritten from first_cache. |
486 entry = second_cache.Lookup(origin, kRealm3, HttpAuth::AUTH_SCHEME_DIGEST); | 504 entry = second_cache.Lookup(origin, kRealm3, HttpAuth::AUTH_SCHEME_DIGEST); |
487 EXPECT_TRUE(NULL != entry); | 505 EXPECT_TRUE(NULL != entry); |
488 EXPECT_EQ(kRoot, entry->username()); | 506 EXPECT_EQ(kRoot, entry->credentials().username()); |
489 EXPECT_EQ(kWileCoyote, entry->password()); | 507 EXPECT_EQ(kWileCoyote, entry->credentials().password()); |
490 // Nonce count should get copied. | 508 // Nonce count should get copied. |
491 EXPECT_EQ(3, entry->IncrementNonceCount()); | 509 EXPECT_EQ(3, entry->IncrementNonceCount()); |
492 | 510 |
493 // All paths should get copied. | 511 // All paths should get copied. |
494 entry = second_cache.LookupByPath(origin, another_path); | 512 entry = second_cache.LookupByPath(origin, another_path); |
495 EXPECT_TRUE(NULL != entry); | 513 EXPECT_TRUE(NULL != entry); |
496 EXPECT_EQ(kRoot, entry->username()); | 514 EXPECT_EQ(kRoot, entry->credentials().username()); |
497 EXPECT_EQ(kWileCoyote, entry->password()); | 515 EXPECT_EQ(kWileCoyote, entry->credentials().password()); |
498 | 516 |
499 // Left intact in second_cache. | 517 // Left intact in second_cache. |
500 entry = second_cache.Lookup(origin, kRealm4, HttpAuth::AUTH_SCHEME_BASIC); | 518 entry = second_cache.Lookup(origin, kRealm4, HttpAuth::AUTH_SCHEME_BASIC); |
501 EXPECT_TRUE(NULL != entry); | 519 EXPECT_TRUE(NULL != entry); |
502 EXPECT_EQ(kAdmin, entry->username()); | 520 EXPECT_EQ(kAdmin, entry->credentials().username()); |
503 EXPECT_EQ(kRoot, entry->password()); | 521 EXPECT_EQ(kRoot, entry->credentials().password()); |
504 } | 522 } |
505 | 523 |
506 // Test fixture class for eviction tests (contains helpers for bulk | 524 // Test fixture class for eviction tests (contains helpers for bulk |
507 // insertion and existence testing). | 525 // insertion and existence testing). |
508 class HttpAuthCacheEvictionTest : public testing::Test { | 526 class HttpAuthCacheEvictionTest : public testing::Test { |
509 protected: | 527 protected: |
510 HttpAuthCacheEvictionTest() : origin_("http://www.google.com") { } | 528 HttpAuthCacheEvictionTest() : origin_("http://www.google.com") { } |
511 | 529 |
512 std::string GenerateRealm(int realm_i) { | 530 std::string GenerateRealm(int realm_i) { |
513 return base::StringPrintf("Realm %d", realm_i); | 531 return base::StringPrintf("Realm %d", realm_i); |
514 } | 532 } |
515 | 533 |
516 std::string GeneratePath(int realm_i, int path_i) { | 534 std::string GeneratePath(int realm_i, int path_i) { |
517 return base::StringPrintf("/%d/%d/x/y", realm_i, path_i); | 535 return base::StringPrintf("/%d/%d/x/y", realm_i, path_i); |
518 } | 536 } |
519 | 537 |
520 void AddRealm(int realm_i) { | 538 void AddRealm(int realm_i) { |
521 AddPathToRealm(realm_i, 0); | 539 AddPathToRealm(realm_i, 0); |
522 } | 540 } |
523 | 541 |
524 void AddPathToRealm(int realm_i, int path_i) { | 542 void AddPathToRealm(int realm_i, int path_i) { |
525 cache_.Add(origin_, GenerateRealm(realm_i), HttpAuth::AUTH_SCHEME_BASIC, "", | 543 cache_.Add(origin_, GenerateRealm(realm_i), HttpAuth::AUTH_SCHEME_BASIC, "", |
526 kUsername, kPassword, GeneratePath(realm_i, path_i)); | 544 AuthCredentials(kUsername, kPassword), |
| 545 GeneratePath(realm_i, path_i)); |
527 } | 546 } |
528 | 547 |
529 void CheckRealmExistence(int realm_i, bool exists) { | 548 void CheckRealmExistence(int realm_i, bool exists) { |
530 const HttpAuthCache::Entry* entry = | 549 const HttpAuthCache::Entry* entry = |
531 cache_.Lookup( | 550 cache_.Lookup( |
532 origin_, GenerateRealm(realm_i), HttpAuth::AUTH_SCHEME_BASIC); | 551 origin_, GenerateRealm(realm_i), HttpAuth::AUTH_SCHEME_BASIC); |
533 if (exists) { | 552 if (exists) { |
534 EXPECT_FALSE(entry == NULL); | 553 EXPECT_FALSE(entry == NULL); |
535 EXPECT_EQ(GenerateRealm(realm_i), entry->realm()); | 554 EXPECT_EQ(GenerateRealm(realm_i), entry->realm()); |
536 } else { | 555 } else { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 CheckPathExistence(0, i, false); | 612 CheckPathExistence(0, i, false); |
594 | 613 |
595 for (int i = 0; i < kMaxPaths; ++i) | 614 for (int i = 0; i < kMaxPaths; ++i) |
596 CheckPathExistence(0, i + 3, true); | 615 CheckPathExistence(0, i + 3, true); |
597 | 616 |
598 for (int i = 0; i < kMaxRealms; ++i) | 617 for (int i = 0; i < kMaxRealms; ++i) |
599 CheckRealmExistence(i, true); | 618 CheckRealmExistence(i, true); |
600 } | 619 } |
601 | 620 |
602 } // namespace net | 621 } // namespace net |
OLD | NEW |