summaryrefslogtreecommitdiff
path: root/chromium/net/http/http_auth_handler_factory_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/http/http_auth_handler_factory_unittest.cc')
-rw-r--r--chromium/net/http/http_auth_handler_factory_unittest.cc190
1 files changed, 190 insertions, 0 deletions
diff --git a/chromium/net/http/http_auth_handler_factory_unittest.cc b/chromium/net/http/http_auth_handler_factory_unittest.cc
new file mode 100644
index 00000000000..8e69919c0bf
--- /dev/null
+++ b/chromium/net/http/http_auth_handler_factory_unittest.cc
@@ -0,0 +1,190 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/scoped_ptr.h"
+#include "net/base/net_errors.h"
+#include "net/dns/mock_host_resolver.h"
+#include "net/http/http_auth_handler.h"
+#include "net/http/http_auth_handler_factory.h"
+#include "net/http/mock_allow_url_security_manager.h"
+#include "net/http/url_security_manager.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+namespace {
+
+class MockHttpAuthHandlerFactory : public HttpAuthHandlerFactory {
+ public:
+ explicit MockHttpAuthHandlerFactory(int return_code) :
+ return_code_(return_code) {}
+ virtual ~MockHttpAuthHandlerFactory() {}
+
+ virtual int CreateAuthHandler(HttpAuth::ChallengeTokenizer* challenge,
+ HttpAuth::Target target,
+ const GURL& origin,
+ CreateReason reason,
+ int nonce_count,
+ const BoundNetLog& net_log,
+ scoped_ptr<HttpAuthHandler>* handler) OVERRIDE {
+ handler->reset();
+ return return_code_;
+ }
+
+ private:
+ int return_code_;
+};
+
+} // namespace
+
+TEST(HttpAuthHandlerFactoryTest, RegistryFactory) {
+ HttpAuthHandlerRegistryFactory registry_factory;
+ GURL gurl("www.google.com");
+ const int kBasicReturnCode = ERR_INVALID_SPDY_STREAM;
+ MockHttpAuthHandlerFactory* mock_factory_basic =
+ new MockHttpAuthHandlerFactory(kBasicReturnCode);
+
+ const int kDigestReturnCode = ERR_PAC_SCRIPT_FAILED;
+ MockHttpAuthHandlerFactory* mock_factory_digest =
+ new MockHttpAuthHandlerFactory(kDigestReturnCode);
+
+ const int kDigestReturnCodeReplace = ERR_SYN_REPLY_NOT_RECEIVED;
+ MockHttpAuthHandlerFactory* mock_factory_digest_replace =
+ new MockHttpAuthHandlerFactory(kDigestReturnCodeReplace);
+
+ scoped_ptr<HttpAuthHandler> handler;
+
+ // No schemes should be supported in the beginning.
+ EXPECT_EQ(ERR_UNSUPPORTED_AUTH_SCHEME,
+ registry_factory.CreateAuthHandlerFromString(
+ "Basic", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(), &handler));
+
+ // Test what happens with a single scheme.
+ registry_factory.RegisterSchemeFactory("Basic", mock_factory_basic);
+ EXPECT_EQ(kBasicReturnCode,
+ registry_factory.CreateAuthHandlerFromString(
+ "Basic", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(), &handler));
+ EXPECT_EQ(ERR_UNSUPPORTED_AUTH_SCHEME,
+ registry_factory.CreateAuthHandlerFromString(
+ "Digest", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(),
+ &handler));
+
+ // Test multiple schemes
+ registry_factory.RegisterSchemeFactory("Digest", mock_factory_digest);
+ EXPECT_EQ(kBasicReturnCode,
+ registry_factory.CreateAuthHandlerFromString(
+ "Basic", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(), &handler));
+ EXPECT_EQ(kDigestReturnCode,
+ registry_factory.CreateAuthHandlerFromString(
+ "Digest", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(),
+ &handler));
+
+ // Test case-insensitivity
+ EXPECT_EQ(kBasicReturnCode,
+ registry_factory.CreateAuthHandlerFromString(
+ "basic", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(), &handler));
+
+ // Test replacement of existing auth scheme
+ registry_factory.RegisterSchemeFactory("Digest", mock_factory_digest_replace);
+ EXPECT_EQ(kBasicReturnCode,
+ registry_factory.CreateAuthHandlerFromString(
+ "Basic", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(), &handler));
+ EXPECT_EQ(kDigestReturnCodeReplace,
+ registry_factory.CreateAuthHandlerFromString(
+ "Digest", HttpAuth::AUTH_SERVER, gurl, BoundNetLog(),
+ &handler));
+}
+
+TEST(HttpAuthHandlerFactoryTest, DefaultFactory) {
+ scoped_ptr<HostResolver> host_resolver(new MockHostResolver());
+ MockAllowURLSecurityManager url_security_manager;
+ scoped_ptr<HttpAuthHandlerRegistryFactory> http_auth_handler_factory(
+ HttpAuthHandlerFactory::CreateDefault(host_resolver.get()));
+ http_auth_handler_factory->SetURLSecurityManager(
+ "negotiate", &url_security_manager);
+ GURL server_origin("http://www.example.com");
+ GURL proxy_origin("http://cache.example.com:3128");
+ {
+ scoped_ptr<HttpAuthHandler> handler;
+ int rv = http_auth_handler_factory->CreateAuthHandlerFromString(
+ "Basic realm=\"FooBar\"",
+ HttpAuth::AUTH_SERVER,
+ server_origin,
+ BoundNetLog(),
+ &handler);
+ EXPECT_EQ(OK, rv);
+ ASSERT_FALSE(handler.get() == NULL);
+ EXPECT_EQ(HttpAuth::AUTH_SCHEME_BASIC, handler->auth_scheme());
+ EXPECT_STREQ("FooBar", handler->realm().c_str());
+ EXPECT_EQ(HttpAuth::AUTH_SERVER, handler->target());
+ EXPECT_FALSE(handler->encrypts_identity());
+ EXPECT_FALSE(handler->is_connection_based());
+ }
+ {
+ scoped_ptr<HttpAuthHandler> handler;
+ int rv = http_auth_handler_factory->CreateAuthHandlerFromString(
+ "UNSUPPORTED realm=\"FooBar\"",
+ HttpAuth::AUTH_SERVER,
+ server_origin,
+ BoundNetLog(),
+ &handler);
+ EXPECT_EQ(ERR_UNSUPPORTED_AUTH_SCHEME, rv);
+ EXPECT_TRUE(handler.get() == NULL);
+ }
+ {
+ scoped_ptr<HttpAuthHandler> handler;
+ int rv = http_auth_handler_factory->CreateAuthHandlerFromString(
+ "Digest realm=\"FooBar\", nonce=\"xyz\"",
+ HttpAuth::AUTH_PROXY,
+ proxy_origin,
+ BoundNetLog(),
+ &handler);
+ EXPECT_EQ(OK, rv);
+ ASSERT_FALSE(handler.get() == NULL);
+ EXPECT_EQ(HttpAuth::AUTH_SCHEME_DIGEST, handler->auth_scheme());
+ EXPECT_STREQ("FooBar", handler->realm().c_str());
+ EXPECT_EQ(HttpAuth::AUTH_PROXY, handler->target());
+ EXPECT_TRUE(handler->encrypts_identity());
+ EXPECT_FALSE(handler->is_connection_based());
+ }
+ {
+ scoped_ptr<HttpAuthHandler> handler;
+ int rv = http_auth_handler_factory->CreateAuthHandlerFromString(
+ "NTLM",
+ HttpAuth::AUTH_SERVER,
+ server_origin,
+ BoundNetLog(),
+ &handler);
+ EXPECT_EQ(OK, rv);
+ ASSERT_FALSE(handler.get() == NULL);
+ EXPECT_EQ(HttpAuth::AUTH_SCHEME_NTLM, handler->auth_scheme());
+ EXPECT_STREQ("", handler->realm().c_str());
+ EXPECT_EQ(HttpAuth::AUTH_SERVER, handler->target());
+ EXPECT_TRUE(handler->encrypts_identity());
+ EXPECT_TRUE(handler->is_connection_based());
+ }
+ {
+ scoped_ptr<HttpAuthHandler> handler;
+ int rv = http_auth_handler_factory->CreateAuthHandlerFromString(
+ "Negotiate",
+ HttpAuth::AUTH_SERVER,
+ server_origin,
+ BoundNetLog(),
+ &handler);
+#if defined(USE_KERBEROS)
+ EXPECT_EQ(OK, rv);
+ ASSERT_FALSE(handler.get() == NULL);
+ EXPECT_EQ(HttpAuth::AUTH_SCHEME_NEGOTIATE, handler->auth_scheme());
+ EXPECT_STREQ("", handler->realm().c_str());
+ EXPECT_EQ(HttpAuth::AUTH_SERVER, handler->target());
+ EXPECT_TRUE(handler->encrypts_identity());
+ EXPECT_TRUE(handler->is_connection_based());
+#else
+ EXPECT_EQ(ERR_UNSUPPORTED_AUTH_SCHEME, rv);
+ EXPECT_TRUE(handler.get() == NULL);
+#endif // defined(USE_KERBEROS)
+ }
+}
+
+} // namespace net