blob: bb57151ab37983674aa2a6bede6e9840a2b56084 [file] [log] [blame]
[email protected]e607ee672010-04-28 17:16:341// 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
3// found in the LICENSE file.
4
5#include "net/http/http_auth_handler_negotiate.h"
6
[email protected]13c8a092010-07-29 06:15:447#include "base/string_util.h"
[email protected]be1ce6a72010-08-03 14:35:228#include "base/utf_string_conversions.h"
[email protected]e607ee672010-04-28 17:16:349#include "net/base/mock_host_resolver.h"
10#include "net/base/net_errors.h"
11#include "net/base/test_completion_callback.h"
[email protected]65d34382010-07-01 18:12:2612#include "net/http/http_request_info.h"
[email protected]d2db0292011-01-26 20:23:4413#include "net/http/mock_allow_url_security_manager.h"
[email protected]e607ee672010-04-28 17:16:3414#if defined(OS_WIN)
15#include "net/http/mock_sspi_library_win.h"
[email protected]3ad259a2010-07-16 17:26:4716#elif defined(OS_POSIX)
17#include "net/http/mock_gssapi_library_posix.h"
[email protected]dbaf3532010-07-21 17:37:4118#include "net/third_party/gssapi/gssapi.h"
[email protected]e607ee672010-04-28 17:16:3419#endif
20#include "testing/gtest/include/gtest/gtest.h"
[email protected]597313a2010-07-19 20:04:5621#include "testing/platform_test.h"
[email protected]e607ee672010-04-28 17:16:3422
[email protected]3ad259a2010-07-16 17:26:4723#if defined(OS_WIN)
[email protected]597313a2010-07-19 20:04:5624typedef net::MockSSPILibrary MockAuthLibrary;
[email protected]3ad259a2010-07-16 17:26:4725#elif defined(OS_POSIX)
[email protected]597313a2010-07-19 20:04:5626typedef net::test::MockGSSAPILibrary MockAuthLibrary;
[email protected]3ad259a2010-07-16 17:26:4727#endif
28
29
[email protected]e607ee672010-04-28 17:16:3430namespace net {
31
[email protected]597313a2010-07-19 20:04:5632class HttpAuthHandlerNegotiateTest : public PlatformTest {
33 public:
34 virtual void SetUp() {
[email protected]ac7f3fdb2010-11-12 12:47:0535 auth_library_ = new MockAuthLibrary();
[email protected]73c45322010-10-01 23:57:5436 resolver_.reset(new MockHostResolver());
[email protected]597313a2010-07-19 20:04:5637 resolver_->rules()->AddIPLiteralRule("alias", "10.0.0.2",
[email protected]65d34382010-07-01 18:12:2638 "canonical.example.com");
[email protected]597313a2010-07-19 20:04:5639
[email protected]d2db0292011-01-26 20:23:4440 url_security_manager_.reset(new MockAllowURLSecurityManager());
[email protected]597313a2010-07-19 20:04:5641 factory_.reset(new HttpAuthHandlerNegotiate::Factory());
42 factory_->set_url_security_manager(url_security_manager_.get());
[email protected]ac7f3fdb2010-11-12 12:47:0543 factory_->set_library(auth_library_);
[email protected]73c45322010-10-01 23:57:5444 factory_->set_host_resolver(resolver_.get());
[email protected]597313a2010-07-19 20:04:5645 }
46
47 void SetupMocks(MockAuthLibrary* mock_library) {
[email protected]3ad259a2010-07-16 17:26:4748#if defined(OS_WIN)
[email protected]597313a2010-07-19 20:04:5649 security_package_.reset(new SecPkgInfoW);
50 memset(security_package_.get(), 0x0, sizeof(SecPkgInfoW));
51 security_package_->cbMaxToken = 1337;
52 mock_library->ExpectQuerySecurityPackageInfo(
53 L"Negotiate", SEC_E_OK, security_package_.get());
54#elif defined(OS_POSIX)
55 // Copied from an actual transaction!
[email protected]7035d3912010-08-03 19:06:3256 static const char kAuthResponse[] =
[email protected]597313a2010-07-19 20:04:5657 "\x60\x82\x02\xCA\x06\x09\x2A\x86\x48\x86\xF7\x12\x01\x02\x02\x01"
58 "\x00\x6E\x82\x02\xB9\x30\x82\x02\xB5\xA0\x03\x02\x01\x05\xA1\x03"
59 "\x02\x01\x0E\xA2\x07\x03\x05\x00\x00\x00\x00\x00\xA3\x82\x01\xC1"
60 "\x61\x82\x01\xBD\x30\x82\x01\xB9\xA0\x03\x02\x01\x05\xA1\x16\x1B"
61 "\x14\x55\x4E\x49\x58\x2E\x43\x4F\x52\x50\x2E\x47\x4F\x4F\x47\x4C"
62 "\x45\x2E\x43\x4F\x4D\xA2\x2C\x30\x2A\xA0\x03\x02\x01\x01\xA1\x23"
63 "\x30\x21\x1B\x04\x68\x6F\x73\x74\x1B\x19\x6E\x69\x6E\x6A\x61\x2E"
64 "\x63\x61\x6D\x2E\x63\x6F\x72\x70\x2E\x67\x6F\x6F\x67\x6C\x65\x2E"
65 "\x63\x6F\x6D\xA3\x82\x01\x6A\x30\x82\x01\x66\xA0\x03\x02\x01\x10"
66 "\xA1\x03\x02\x01\x01\xA2\x82\x01\x58\x04\x82\x01\x54\x2C\xB1\x2B"
67 "\x0A\xA5\xFF\x6F\xEC\xDE\xB0\x19\x6E\x15\x20\x18\x0C\x42\xB3\x2C"
68 "\x4B\xB0\x37\x02\xDE\xD3\x2F\xB4\xBF\xCA\xEC\x0E\xF9\xF3\x45\x6A"
69 "\x43\xF3\x8D\x79\xBD\xCB\xCD\xB2\x2B\xB8\xFC\xD6\xB4\x7F\x09\x48"
70 "\x14\xA7\x4F\xD2\xEE\xBC\x1B\x2F\x18\x3B\x81\x97\x7B\x28\xA4\xAF"
71 "\xA8\xA3\x7A\x31\x1B\xFC\x97\xB6\xBA\x8A\x50\x50\xD7\x44\xB8\x30"
72 "\xA4\x51\x4C\x3A\x95\x6C\xA1\xED\xE2\xEF\x17\xFE\xAB\xD2\xE4\x70"
73 "\xDE\xEB\x7E\x86\x48\xC5\x3E\x19\x5B\x83\x17\xBB\x52\x26\xC0\xF3"
74 "\x38\x0F\xB0\x8C\x72\xC9\xB0\x8B\x99\x96\x18\xE1\x9E\x67\x9D\xDC"
75 "\xF5\x39\x80\x70\x35\x3F\x98\x72\x16\x44\xA2\xC0\x10\xAA\x70\xBD"
76 "\x06\x6F\x83\xB1\xF4\x67\xA4\xBD\xDA\xF7\x79\x1D\x96\xB5\x7E\xF8"
77 "\xC6\xCF\xB4\xD9\x51\xC9\xBB\xB4\x20\x3C\xDD\xB9\x2C\x38\xEA\x40"
78 "\xFB\x02\x6C\xCB\x48\x71\xE8\xF4\x34\x5B\x63\x5D\x13\x57\xBD\xD1"
79 "\x3D\xDE\xE8\x4A\x51\x6E\xBE\x4C\xF5\xA3\x84\xF7\x4C\x4E\x58\x04"
80 "\xBE\xD1\xCC\x22\xA0\x43\xB0\x65\x99\x6A\xE0\x78\x0D\xFC\xE1\x42"
81 "\xA9\x18\xCF\x55\x4D\x23\xBD\x5C\x0D\xB5\x48\x25\x47\xCC\x01\x54"
82 "\x36\x4D\x0C\x6F\xAC\xCD\x33\x21\xC5\x63\x18\x91\x68\x96\xE9\xD1"
83 "\xD8\x23\x1F\x21\xAE\x96\xA3\xBD\x27\xF7\x4B\xEF\x4C\x43\xFF\xF8"
84 "\x22\x57\xCF\x68\x6C\x35\xD5\x21\x48\x5B\x5F\x8F\xA5\xB9\x6F\x99"
85 "\xA6\xE0\x6E\xF0\xC5\x7C\x91\xC8\x0B\x8A\x4B\x4E\x80\x59\x02\xE9"
86 "\xE8\x3F\x87\x04\xA6\xD1\xCA\x26\x3C\xF0\xDA\x57\xFA\xE6\xAF\x25"
87 "\x43\x34\xE1\xA4\x06\x1A\x1C\xF4\xF5\x21\x9C\x00\x98\xDD\xF0\xB4"
88 "\x8E\xA4\x81\xDA\x30\x81\xD7\xA0\x03\x02\x01\x10\xA2\x81\xCF\x04"
89 "\x81\xCC\x20\x39\x34\x60\x19\xF9\x4C\x26\x36\x46\x99\x7A\xFD\x2B"
90 "\x50\x8B\x2D\x47\x72\x38\x20\x43\x0E\x6E\x28\xB3\xA7\x4F\x26\xF1"
91 "\xF1\x7B\x02\x63\x58\x5A\x7F\xC8\xD0\x6E\xF5\xD1\xDA\x28\x43\x1B"
92 "\x6D\x9F\x59\x64\xDE\x90\xEA\x6C\x8C\xA9\x1B\x1E\x92\x29\x24\x23"
93 "\x2C\xE3\xEA\x64\xEF\x91\xA5\x4E\x94\xE1\xDC\x56\x3A\xAF\xD5\xBC"
94 "\xC9\xD3\x9B\x6B\x1F\xBE\x40\xE5\x40\xFF\x5E\x21\xEA\xCE\xFC\xD5"
95 "\xB0\xE5\xBA\x10\x94\xAE\x16\x54\xFC\xEB\xAB\xF1\xD4\x20\x31\xCC"
96 "\x26\xFE\xBE\xFE\x22\xB6\x9B\x1A\xE5\x55\x2C\x93\xB7\x3B\xD6\x4C"
97 "\x35\x35\xC1\x59\x61\xD4\x1F\x2E\x4C\xE1\x72\x8F\x71\x4B\x0C\x39"
98 "\x80\x79\xFA\xCD\xEA\x71\x1B\xAE\x35\x41\xED\xF9\x65\x0C\x59\xF8"
99 "\xE1\x27\xDA\xD6\xD1\x20\x32\xCD\xBF\xD1\xEF\xE2\xED\xAD\x5D\xA7"
100 "\x69\xE3\x55\xF9\x30\xD3\xD4\x08\xC8\xCA\x62\xF8\x64\xEC\x9B\x92"
101 "\x1A\xF1\x03\x2E\xCC\xDC\xEB\x17\xDE\x09\xAC\xA9\x58\x86";
102 test::GssContextMockImpl context1(
103 "localhost", // Source name
104 "example.com", // Target name
105 23, // Lifetime
106 *GSS_C_NT_HOSTBASED_SERVICE, // Mechanism
107 0, // Context flags
108 1, // Locally initiated
109 0); // Open
110 test::GssContextMockImpl context2(
111 "localhost", // Source name
112 "example.com", // Target name
113 23, // Lifetime
114 *GSS_C_NT_HOSTBASED_SERVICE, // Mechanism
115 0, // Context flags
116 1, // Locally initiated
117 1); // Open
118 test::MockGSSAPILibrary::SecurityContextQuery queries[] = {
119 { "Negotiate", // Package name
120 GSS_S_CONTINUE_NEEDED, // Major response code
121 0, // Minor response code
122 context1, // Context
123 { 0, NULL }, // Expected input token
124 { arraysize(kAuthResponse),
125 const_cast<char*>(kAuthResponse) } // Output token
126 },
127 { "Negotiate", // Package name
128 GSS_S_COMPLETE, // Major response code
129 0, // Minor response code
130 context2, // Context
131 { arraysize(kAuthResponse),
132 const_cast<char*>(kAuthResponse) }, // Expected input token
133 { arraysize(kAuthResponse),
134 const_cast<char*>(kAuthResponse) } // Output token
135 },
136 };
137
[email protected]dbaf3532010-07-21 17:37:41138 for (size_t i = 0; i < arraysize(queries); ++i) {
[email protected]597313a2010-07-19 20:04:56139 mock_library->ExpectSecurityContext(queries[i].expected_package,
140 queries[i].response_code,
141 queries[i].minor_response_code,
142 queries[i].context_info,
143 queries[i].expected_input_token,
144 queries[i].output_token);
145 }
146#endif // defined(OS_POSIX)
147 }
148
[email protected]dbaf3532010-07-21 17:37:41149#if defined(OS_POSIX)
150 void SetupErrorMocks(MockAuthLibrary* mock_library,
151 int major_status,
152 int minor_status) {
153 const gss_OID_desc kDefaultMech = { 0, NULL };
154 test::GssContextMockImpl context(
155 "localhost", // Source name
156 "example.com", // Target name
157 0, // Lifetime
158 kDefaultMech, // Mechanism
159 0, // Context flags
160 1, // Locally initiated
161 0); // Open
162 test::MockGSSAPILibrary::SecurityContextQuery query = {
163 "Negotiate", // Package name
164 major_status, // Major response code
165 minor_status, // Minor response code
166 context, // Context
167 { 0, NULL }, // Expected input token
168 { 0, NULL } // Output token
169 };
170
171 mock_library->ExpectSecurityContext(query.expected_package,
172 query.response_code,
173 query.minor_response_code,
174 query.context_info,
175 query.expected_input_token,
176 query.output_token);
177 }
178
179#endif // defined(OS_POSIX)
180
[email protected]597313a2010-07-19 20:04:56181 int CreateHandler(bool disable_cname_lookup, bool use_port,
182 bool synchronous_resolve_mode,
183 const std::string& url_string,
184 scoped_ptr<HttpAuthHandlerNegotiate>* handler) {
185 factory_->set_disable_cname_lookup(disable_cname_lookup);
186 factory_->set_use_port(use_port);
187 resolver_->set_synchronous_mode(synchronous_resolve_mode);
188 GURL gurl(url_string);
189
190 // Note: This is a little tricky because CreateAuthHandlerFromString
191 // expects a scoped_ptr<HttpAuthHandler>* rather than a
192 // scoped_ptr<HttpAuthHandlerNegotiate>*. This needs to do the cast
193 // after creating the handler, and make sure that generic_handler
194 // no longer holds on to the HttpAuthHandlerNegotiate object.
195 scoped_ptr<HttpAuthHandler> generic_handler;
196 int rv = factory_->CreateAuthHandlerFromString("Negotiate",
197 HttpAuth::AUTH_SERVER,
198 gurl,
199 BoundNetLog(),
200 &generic_handler);
201 if (rv != OK)
202 return rv;
203 HttpAuthHandlerNegotiate* negotiate_handler =
204 static_cast<HttpAuthHandlerNegotiate*>(generic_handler.release());
205 handler->reset(negotiate_handler);
206 return rv;
207 }
208
[email protected]ac7f3fdb2010-11-12 12:47:05209 MockAuthLibrary* AuthLibrary() { return auth_library_; }
[email protected]dbaf3532010-07-21 17:37:41210
[email protected]597313a2010-07-19 20:04:56211 private:
212#if defined(OS_WIN)
213 scoped_ptr<SecPkgInfoW> security_package_;
[email protected]3ad259a2010-07-16 17:26:47214#endif
[email protected]ac7f3fdb2010-11-12 12:47:05215 // |auth_library_| is passed to |factory_|, which assumes ownership of it.
216 MockAuthLibrary* auth_library_;
[email protected]73c45322010-10-01 23:57:54217 scoped_ptr<MockHostResolver> resolver_;
[email protected]597313a2010-07-19 20:04:56218 scoped_ptr<URLSecurityManager> url_security_manager_;
219 scoped_ptr<HttpAuthHandlerNegotiate::Factory> factory_;
220};
[email protected]e607ee672010-04-28 17:16:34221
[email protected]597313a2010-07-19 20:04:56222TEST_F(HttpAuthHandlerNegotiateTest, DisableCname) {
[email protected]dbaf3532010-07-21 17:37:41223 SetupMocks(AuthLibrary());
[email protected]36c8e5f72010-06-07 14:17:14224 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler;
[email protected]597313a2010-07-19 20:04:56225 EXPECT_EQ(OK, CreateHandler(
226 true, false, true, "http://alias:500", &auth_handler));
227
[email protected]2b0a76d2010-07-17 15:59:08228 ASSERT_TRUE(auth_handler.get() != NULL);
[email protected]65d34382010-07-01 18:12:26229 TestCompletionCallback callback;
230 HttpRequestInfo request_info;
231 std::string token;
[email protected]c52e60872010-09-08 23:46:54232 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, NULL,
[email protected]65d34382010-07-01 18:12:26233 &request_info,
234 &callback, &token));
[email protected]cf580442010-07-20 01:56:36235#if defined(OS_WIN)
[email protected]e607ee672010-04-28 17:16:34236 EXPECT_EQ(L"HTTP/alias", auth_handler->spn());
[email protected]cf580442010-07-20 01:56:36237#elif defined(OS_POSIX)
238 EXPECT_EQ(L"HTTP@alias", auth_handler->spn());
239#endif
[email protected]e607ee672010-04-28 17:16:34240}
241
[email protected]597313a2010-07-19 20:04:56242TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameStandardPort) {
[email protected]dbaf3532010-07-21 17:37:41243 SetupMocks(AuthLibrary());
[email protected]36c8e5f72010-06-07 14:17:14244 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler;
[email protected]597313a2010-07-19 20:04:56245 EXPECT_EQ(OK, CreateHandler(
246 true, true, true, "http://alias:80", &auth_handler));
[email protected]2b0a76d2010-07-17 15:59:08247 ASSERT_TRUE(auth_handler.get() != NULL);
[email protected]65d34382010-07-01 18:12:26248 TestCompletionCallback callback;
249 HttpRequestInfo request_info;
250 std::string token;
[email protected]c52e60872010-09-08 23:46:54251 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, NULL,
[email protected]65d34382010-07-01 18:12:26252 &request_info,
253 &callback, &token));
[email protected]cf580442010-07-20 01:56:36254#if defined(OS_WIN)
[email protected]e607ee672010-04-28 17:16:34255 EXPECT_EQ(L"HTTP/alias", auth_handler->spn());
[email protected]cf580442010-07-20 01:56:36256#elif defined(OS_POSIX)
257 EXPECT_EQ(L"HTTP@alias", auth_handler->spn());
258#endif
[email protected]e607ee672010-04-28 17:16:34259}
260
[email protected]597313a2010-07-19 20:04:56261TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameNonstandardPort) {
[email protected]dbaf3532010-07-21 17:37:41262 SetupMocks(AuthLibrary());
[email protected]36c8e5f72010-06-07 14:17:14263 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler;
[email protected]597313a2010-07-19 20:04:56264 EXPECT_EQ(OK, CreateHandler(
265 true, true, true, "http://alias:500", &auth_handler));
[email protected]2b0a76d2010-07-17 15:59:08266 ASSERT_TRUE(auth_handler.get() != NULL);
[email protected]65d34382010-07-01 18:12:26267 TestCompletionCallback callback;
268 HttpRequestInfo request_info;
269 std::string token;
[email protected]c52e60872010-09-08 23:46:54270 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, NULL,
[email protected]65d34382010-07-01 18:12:26271 &request_info,
272 &callback, &token));
[email protected]cf580442010-07-20 01:56:36273#if defined(OS_WIN)
[email protected]e607ee672010-04-28 17:16:34274 EXPECT_EQ(L"HTTP/alias:500", auth_handler->spn());
[email protected]cf580442010-07-20 01:56:36275#elif defined(OS_POSIX)
276 EXPECT_EQ(L"HTTP@alias:500", auth_handler->spn());
277#endif
[email protected]e607ee672010-04-28 17:16:34278}
279
[email protected]597313a2010-07-19 20:04:56280TEST_F(HttpAuthHandlerNegotiateTest, CnameSync) {
[email protected]dbaf3532010-07-21 17:37:41281 SetupMocks(AuthLibrary());
[email protected]36c8e5f72010-06-07 14:17:14282 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler;
[email protected]597313a2010-07-19 20:04:56283 EXPECT_EQ(OK, CreateHandler(
284 false, false, true, "http://alias:500", &auth_handler));
[email protected]2b0a76d2010-07-17 15:59:08285 ASSERT_TRUE(auth_handler.get() != NULL);
[email protected]e607ee672010-04-28 17:16:34286 TestCompletionCallback callback;
[email protected]65d34382010-07-01 18:12:26287 HttpRequestInfo request_info;
288 std::string token;
[email protected]c52e60872010-09-08 23:46:54289 EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, NULL,
[email protected]65d34382010-07-01 18:12:26290 &request_info,
291 &callback, &token));
[email protected]cf580442010-07-20 01:56:36292#if defined(OS_WIN)
[email protected]e607ee672010-04-28 17:16:34293 EXPECT_EQ(L"HTTP/canonical.example.com", auth_handler->spn());
[email protected]cf580442010-07-20 01:56:36294#elif defined(OS_POSIX)
295 EXPECT_EQ(L"[email protected]", auth_handler->spn());
296#endif
[email protected]e607ee672010-04-28 17:16:34297}
298
[email protected]597313a2010-07-19 20:04:56299TEST_F(HttpAuthHandlerNegotiateTest, CnameAsync) {
[email protected]dbaf3532010-07-21 17:37:41300 SetupMocks(AuthLibrary());
[email protected]36c8e5f72010-06-07 14:17:14301 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler;
[email protected]597313a2010-07-19 20:04:56302 EXPECT_EQ(OK, CreateHandler(
303 false, false, false, "http://alias:500", &auth_handler));
[email protected]2b0a76d2010-07-17 15:59:08304 ASSERT_TRUE(auth_handler.get() != NULL);
[email protected]e607ee672010-04-28 17:16:34305 TestCompletionCallback callback;
[email protected]65d34382010-07-01 18:12:26306 HttpRequestInfo request_info;
307 std::string token;
[email protected]65d34382010-07-01 18:12:26308 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken(
[email protected]c52e60872010-09-08 23:46:54309 NULL, NULL, &request_info, &callback, &token));
[email protected]e607ee672010-04-28 17:16:34310 EXPECT_EQ(OK, callback.WaitForResult());
[email protected]cf580442010-07-20 01:56:36311#if defined(OS_WIN)
[email protected]e607ee672010-04-28 17:16:34312 EXPECT_EQ(L"HTTP/canonical.example.com", auth_handler->spn());
[email protected]cf580442010-07-20 01:56:36313#elif defined(OS_POSIX)
314 EXPECT_EQ(L"[email protected]", auth_handler->spn());
315#endif
[email protected]e607ee672010-04-28 17:16:34316}
[email protected]e607ee672010-04-28 17:16:34317
[email protected]dbaf3532010-07-21 17:37:41318#if defined(OS_POSIX)
319
320// These tests are only for GSSAPI, as we can't use explicit credentials with
321// that library.
322
323TEST_F(HttpAuthHandlerNegotiateTest, ServerNotInKerberosDatabase) {
324 SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73A07); // No server
325 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler;
326 EXPECT_EQ(OK, CreateHandler(
327 false, false, false, "http://alias:500", &auth_handler));
328 ASSERT_TRUE(auth_handler.get() != NULL);
329 TestCompletionCallback callback;
330 HttpRequestInfo request_info;
331 std::string token;
332 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken(
333 NULL, NULL, &request_info, &callback, &token));
334 EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult());
335}
336
337TEST_F(HttpAuthHandlerNegotiateTest, NoKerberosCredentials) {
338 SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73AC3); // No credentials
339 scoped_ptr<HttpAuthHandlerNegotiate> auth_handler;
340 EXPECT_EQ(OK, CreateHandler(
341 false, false, false, "http://alias:500", &auth_handler));
342 ASSERT_TRUE(auth_handler.get() != NULL);
343 TestCompletionCallback callback;
344 HttpRequestInfo request_info;
345 std::string token;
346 EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken(
347 NULL, NULL, &request_info, &callback, &token));
348 EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult());
349}
350
351#endif // defined(OS_POSIX)
352
[email protected]e607ee672010-04-28 17:16:34353} // namespace net