| OLD | NEW |
| 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 "net/http/http_auth_handler_negotiate.h" | 5 #include "net/http/http_auth_handler_negotiate.h" |
| 6 | 6 |
| 7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "net/base/mock_host_resolver.h" | 9 #include "net/base/mock_host_resolver.h" |
| 10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 scoped_ptr<HttpAuthHandlerNegotiate::Factory> factory_; | 213 scoped_ptr<HttpAuthHandlerNegotiate::Factory> factory_; |
| 214 }; | 214 }; |
| 215 | 215 |
| 216 TEST_F(HttpAuthHandlerNegotiateTest, DisableCname) { | 216 TEST_F(HttpAuthHandlerNegotiateTest, DisableCname) { |
| 217 SetupMocks(AuthLibrary()); | 217 SetupMocks(AuthLibrary()); |
| 218 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; | 218 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; |
| 219 EXPECT_EQ(OK, CreateHandler( | 219 EXPECT_EQ(OK, CreateHandler( |
| 220 true, false, true, "http://alias:500", &auth_handler)); | 220 true, false, true, "http://alias:500", &auth_handler)); |
| 221 | 221 |
| 222 ASSERT_TRUE(auth_handler.get() != NULL); | 222 ASSERT_TRUE(auth_handler.get() != NULL); |
| 223 TestOldCompletionCallback callback; | 223 TestCompletionCallback callback; |
| 224 HttpRequestInfo request_info; | 224 HttpRequestInfo request_info; |
| 225 std::string token; | 225 std::string token; |
| 226 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, | 226 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, |
| 227 &callback, &token)); | 227 callback.callback(), &token)); |
| 228 #if defined(OS_WIN) | 228 #if defined(OS_WIN) |
| 229 EXPECT_EQ(L"HTTP/alias", auth_handler->spn()); | 229 EXPECT_EQ(L"HTTP/alias", auth_handler->spn()); |
| 230 #elif defined(OS_POSIX) | 230 #elif defined(OS_POSIX) |
| 231 EXPECT_EQ(L"HTTP@alias", auth_handler->spn()); | 231 EXPECT_EQ(L"HTTP@alias", auth_handler->spn()); |
| 232 #endif | 232 #endif |
| 233 } | 233 } |
| 234 | 234 |
| 235 TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameStandardPort) { | 235 TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameStandardPort) { |
| 236 SetupMocks(AuthLibrary()); | 236 SetupMocks(AuthLibrary()); |
| 237 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; | 237 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; |
| 238 EXPECT_EQ(OK, CreateHandler( | 238 EXPECT_EQ(OK, CreateHandler( |
| 239 true, true, true, "http://alias:80", &auth_handler)); | 239 true, true, true, "http://alias:80", &auth_handler)); |
| 240 ASSERT_TRUE(auth_handler.get() != NULL); | 240 ASSERT_TRUE(auth_handler.get() != NULL); |
| 241 TestOldCompletionCallback callback; | 241 TestCompletionCallback callback; |
| 242 HttpRequestInfo request_info; | 242 HttpRequestInfo request_info; |
| 243 std::string token; | 243 std::string token; |
| 244 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, | 244 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, |
| 245 &callback, &token)); | 245 callback.callback(), &token)); |
| 246 #if defined(OS_WIN) | 246 #if defined(OS_WIN) |
| 247 EXPECT_EQ(L"HTTP/alias", auth_handler->spn()); | 247 EXPECT_EQ(L"HTTP/alias", auth_handler->spn()); |
| 248 #elif defined(OS_POSIX) | 248 #elif defined(OS_POSIX) |
| 249 EXPECT_EQ(L"HTTP@alias", auth_handler->spn()); | 249 EXPECT_EQ(L"HTTP@alias", auth_handler->spn()); |
| 250 #endif | 250 #endif |
| 251 } | 251 } |
| 252 | 252 |
| 253 TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameNonstandardPort) { | 253 TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameNonstandardPort) { |
| 254 SetupMocks(AuthLibrary()); | 254 SetupMocks(AuthLibrary()); |
| 255 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; | 255 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; |
| 256 EXPECT_EQ(OK, CreateHandler( | 256 EXPECT_EQ(OK, CreateHandler( |
| 257 true, true, true, "http://alias:500", &auth_handler)); | 257 true, true, true, "http://alias:500", &auth_handler)); |
| 258 ASSERT_TRUE(auth_handler.get() != NULL); | 258 ASSERT_TRUE(auth_handler.get() != NULL); |
| 259 TestOldCompletionCallback callback; | 259 TestCompletionCallback callback; |
| 260 HttpRequestInfo request_info; | 260 HttpRequestInfo request_info; |
| 261 std::string token; | 261 std::string token; |
| 262 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, | 262 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, |
| 263 &callback, &token)); | 263 callback.callback(), &token)); |
| 264 #if defined(OS_WIN) | 264 #if defined(OS_WIN) |
| 265 EXPECT_EQ(L"HTTP/alias:500", auth_handler->spn()); | 265 EXPECT_EQ(L"HTTP/alias:500", auth_handler->spn()); |
| 266 #elif defined(OS_POSIX) | 266 #elif defined(OS_POSIX) |
| 267 EXPECT_EQ(L"HTTP@alias:500", auth_handler->spn()); | 267 EXPECT_EQ(L"HTTP@alias:500", auth_handler->spn()); |
| 268 #endif | 268 #endif |
| 269 } | 269 } |
| 270 | 270 |
| 271 TEST_F(HttpAuthHandlerNegotiateTest, CnameSync) { | 271 TEST_F(HttpAuthHandlerNegotiateTest, CnameSync) { |
| 272 SetupMocks(AuthLibrary()); | 272 SetupMocks(AuthLibrary()); |
| 273 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; | 273 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; |
| 274 EXPECT_EQ(OK, CreateHandler( | 274 EXPECT_EQ(OK, CreateHandler( |
| 275 false, false, true, "http://alias:500", &auth_handler)); | 275 false, false, true, "http://alias:500", &auth_handler)); |
| 276 ASSERT_TRUE(auth_handler.get() != NULL); | 276 ASSERT_TRUE(auth_handler.get() != NULL); |
| 277 TestOldCompletionCallback callback; | 277 TestCompletionCallback callback; |
| 278 HttpRequestInfo request_info; | 278 HttpRequestInfo request_info; |
| 279 std::string token; | 279 std::string token; |
| 280 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, | 280 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, |
| 281 &callback, &token)); | 281 callback.callback(), &token)); |
| 282 #if defined(OS_WIN) | 282 #if defined(OS_WIN) |
| 283 EXPECT_EQ(L"HTTP/canonical.example.com", auth_handler->spn()); | 283 EXPECT_EQ(L"HTTP/canonical.example.com", auth_handler->spn()); |
| 284 #elif defined(OS_POSIX) | 284 #elif defined(OS_POSIX) |
| 285 EXPECT_EQ(L"HTTP@canonical.example.com", auth_handler->spn()); | 285 EXPECT_EQ(L"HTTP@canonical.example.com", auth_handler->spn()); |
| 286 #endif | 286 #endif |
| 287 } | 287 } |
| 288 | 288 |
| 289 TEST_F(HttpAuthHandlerNegotiateTest, CnameAsync) { | 289 TEST_F(HttpAuthHandlerNegotiateTest, CnameAsync) { |
| 290 SetupMocks(AuthLibrary()); | 290 SetupMocks(AuthLibrary()); |
| 291 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; | 291 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; |
| 292 EXPECT_EQ(OK, CreateHandler( | 292 EXPECT_EQ(OK, CreateHandler( |
| 293 false, false, false, "http://alias:500", &auth_handler)); | 293 false, false, false, "http://alias:500", &auth_handler)); |
| 294 ASSERT_TRUE(auth_handler.get() != NULL); | 294 ASSERT_TRUE(auth_handler.get() != NULL); |
| 295 TestOldCompletionCallback callback; | 295 TestCompletionCallback callback; |
| 296 HttpRequestInfo request_info; | 296 HttpRequestInfo request_info; |
| 297 std::string token; | 297 std::string token; |
| 298 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( | 298 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( |
| 299 NULL, &request_info, &callback, &token)); | 299 NULL, &request_info, callback.callback(), &token)); |
| 300 EXPECT_EQ(OK, callback.WaitForResult()); | 300 EXPECT_EQ(OK, callback.WaitForResult()); |
| 301 #if defined(OS_WIN) | 301 #if defined(OS_WIN) |
| 302 EXPECT_EQ(L"HTTP/canonical.example.com", auth_handler->spn()); | 302 EXPECT_EQ(L"HTTP/canonical.example.com", auth_handler->spn()); |
| 303 #elif defined(OS_POSIX) | 303 #elif defined(OS_POSIX) |
| 304 EXPECT_EQ(L"HTTP@canonical.example.com", auth_handler->spn()); | 304 EXPECT_EQ(L"HTTP@canonical.example.com", auth_handler->spn()); |
| 305 #endif | 305 #endif |
| 306 } | 306 } |
| 307 | 307 |
| 308 #if defined(OS_POSIX) | 308 #if defined(OS_POSIX) |
| 309 | 309 |
| 310 // This test is only for GSSAPI, as we can't use explicit credentials with | 310 // This test is only for GSSAPI, as we can't use explicit credentials with |
| 311 // that library. | 311 // that library. |
| 312 TEST_F(HttpAuthHandlerNegotiateTest, ServerNotInKerberosDatabase) { | 312 TEST_F(HttpAuthHandlerNegotiateTest, ServerNotInKerberosDatabase) { |
| 313 SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73A07); // No server | 313 SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73A07); // No server |
| 314 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; | 314 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; |
| 315 EXPECT_EQ(OK, CreateHandler( | 315 EXPECT_EQ(OK, CreateHandler( |
| 316 false, false, false, "http://alias:500", &auth_handler)); | 316 false, false, false, "http://alias:500", &auth_handler)); |
| 317 ASSERT_TRUE(auth_handler.get() != NULL); | 317 ASSERT_TRUE(auth_handler.get() != NULL); |
| 318 TestOldCompletionCallback callback; | 318 TestCompletionCallback callback; |
| 319 HttpRequestInfo request_info; | 319 HttpRequestInfo request_info; |
| 320 std::string token; | 320 std::string token; |
| 321 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( | 321 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( |
| 322 NULL, &request_info, &callback, &token)); | 322 NULL, &request_info, callback.callback(), &token)); |
| 323 EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult()); | 323 EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult()); |
| 324 } | 324 } |
| 325 | 325 |
| 326 // This test is only for GSSAPI, as we can't use explicit credentials with | 326 // This test is only for GSSAPI, as we can't use explicit credentials with |
| 327 // that library. | 327 // that library. |
| 328 TEST_F(HttpAuthHandlerNegotiateTest, NoKerberosCredentials) { | 328 TEST_F(HttpAuthHandlerNegotiateTest, NoKerberosCredentials) { |
| 329 SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73AC3); // No credentials | 329 SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73AC3); // No credentials |
| 330 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; | 330 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; |
| 331 EXPECT_EQ(OK, CreateHandler( | 331 EXPECT_EQ(OK, CreateHandler( |
| 332 false, false, false, "http://alias:500", &auth_handler)); | 332 false, false, false, "http://alias:500", &auth_handler)); |
| 333 ASSERT_TRUE(auth_handler.get() != NULL); | 333 ASSERT_TRUE(auth_handler.get() != NULL); |
| 334 TestOldCompletionCallback callback; | 334 TestCompletionCallback callback; |
| 335 HttpRequestInfo request_info; | 335 HttpRequestInfo request_info; |
| 336 std::string token; | 336 std::string token; |
| 337 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( | 337 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( |
| 338 NULL, &request_info, &callback, &token)); | 338 NULL, &request_info, callback.callback(), &token)); |
| 339 EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult()); | 339 EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult()); |
| 340 } | 340 } |
| 341 | 341 |
| 342 #if defined(DLOPEN_KERBEROS) | 342 #if defined(DLOPEN_KERBEROS) |
| 343 TEST_F(HttpAuthHandlerNegotiateTest, MissingGSSAPI) { | 343 TEST_F(HttpAuthHandlerNegotiateTest, MissingGSSAPI) { |
| 344 scoped_ptr<HostResolver> host_resolver(new MockHostResolver()); | 344 scoped_ptr<HostResolver> host_resolver(new MockHostResolver()); |
| 345 MockAllowURLSecurityManager url_security_manager; | 345 MockAllowURLSecurityManager url_security_manager; |
| 346 scoped_ptr<HttpAuthHandlerNegotiate::Factory> negotiate_factory( | 346 scoped_ptr<HttpAuthHandlerNegotiate::Factory> negotiate_factory( |
| 347 new HttpAuthHandlerNegotiate::Factory()); | 347 new HttpAuthHandlerNegotiate::Factory()); |
| 348 negotiate_factory->set_host_resolver(host_resolver.get()); | 348 negotiate_factory->set_host_resolver(host_resolver.get()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 359 BoundNetLog(), | 359 BoundNetLog(), |
| 360 &generic_handler); | 360 &generic_handler); |
| 361 EXPECT_EQ(ERR_UNSUPPORTED_AUTH_SCHEME, rv); | 361 EXPECT_EQ(ERR_UNSUPPORTED_AUTH_SCHEME, rv); |
| 362 EXPECT_TRUE(generic_handler.get() == NULL); | 362 EXPECT_TRUE(generic_handler.get() == NULL); |
| 363 } | 363 } |
| 364 #endif // defined(DLOPEN_KERBEROS) | 364 #endif // defined(DLOPEN_KERBEROS) |
| 365 | 365 |
| 366 #endif // defined(OS_POSIX) | 366 #endif // defined(OS_POSIX) |
| 367 | 367 |
| 368 } // namespace net | 368 } // namespace net |
| OLD | NEW |