15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_auth_handler_negotiate.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string_util.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/test_completion_callback.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_request_info.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/mock_allow_url_security_manager.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/mock_sspi_library_win.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/mock_gssapi_library_posix.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/platform_test.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef net::MockSSPILibrary MockAuthLibrary; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef net::test::MockGSSAPILibrary MockAuthLibrary; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpAuthHandlerNegotiateTest : public PlatformTest { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auth_library_ = new MockAuthLibrary(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resolver_.reset(new MockHostResolver()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resolver_->rules()->AddIPLiteralRule("alias", "10.0.0.2", 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "canonical.example.com"); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_security_manager_.reset(new MockAllowURLSecurityManager()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) factory_.reset(new HttpAuthHandlerNegotiate::Factory()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) factory_->set_url_security_manager(url_security_manager_.get()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) factory_->set_library(auth_library_); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) factory_->set_host_resolver(resolver_.get()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetupMocks(MockAuthLibrary* mock_library) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) security_package_.reset(new SecPkgInfoW); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(security_package_.get(), 0x0, sizeof(SecPkgInfoW)); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) security_package_->cbMaxToken = 1337; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_library->ExpectQuerySecurityPackageInfo( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"Negotiate", SEC_E_OK, security_package_.get()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copied from an actual transaction! 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kAuthResponse[] = 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x60\x82\x02\xCA\x06\x09\x2A\x86\x48\x86\xF7\x12\x01\x02\x02\x01" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x00\x6E\x82\x02\xB9\x30\x82\x02\xB5\xA0\x03\x02\x01\x05\xA1\x03" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x02\x01\x0E\xA2\x07\x03\x05\x00\x00\x00\x00\x00\xA3\x82\x01\xC1" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x61\x82\x01\xBD\x30\x82\x01\xB9\xA0\x03\x02\x01\x05\xA1\x16\x1B" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x14\x55\x4E\x49\x58\x2E\x43\x4F\x52\x50\x2E\x47\x4F\x4F\x47\x4C" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x45\x2E\x43\x4F\x4D\xA2\x2C\x30\x2A\xA0\x03\x02\x01\x01\xA1\x23" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x30\x21\x1B\x04\x68\x6F\x73\x74\x1B\x19\x6E\x69\x6E\x6A\x61\x2E" 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x63\x61\x6D\x2E\x63\x6F\x72\x70\x2E\x67\x6F\x6F\x67\x6C\x65\x2E" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x63\x6F\x6D\xA3\x82\x01\x6A\x30\x82\x01\x66\xA0\x03\x02\x01\x10" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xA1\x03\x02\x01\x01\xA2\x82\x01\x58\x04\x82\x01\x54\x2C\xB1\x2B" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x0A\xA5\xFF\x6F\xEC\xDE\xB0\x19\x6E\x15\x20\x18\x0C\x42\xB3\x2C" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x4B\xB0\x37\x02\xDE\xD3\x2F\xB4\xBF\xCA\xEC\x0E\xF9\xF3\x45\x6A" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x43\xF3\x8D\x79\xBD\xCB\xCD\xB2\x2B\xB8\xFC\xD6\xB4\x7F\x09\x48" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x14\xA7\x4F\xD2\xEE\xBC\x1B\x2F\x18\x3B\x81\x97\x7B\x28\xA4\xAF" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xA8\xA3\x7A\x31\x1B\xFC\x97\xB6\xBA\x8A\x50\x50\xD7\x44\xB8\x30" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xA4\x51\x4C\x3A\x95\x6C\xA1\xED\xE2\xEF\x17\xFE\xAB\xD2\xE4\x70" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xDE\xEB\x7E\x86\x48\xC5\x3E\x19\x5B\x83\x17\xBB\x52\x26\xC0\xF3" 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x38\x0F\xB0\x8C\x72\xC9\xB0\x8B\x99\x96\x18\xE1\x9E\x67\x9D\xDC" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xF5\x39\x80\x70\x35\x3F\x98\x72\x16\x44\xA2\xC0\x10\xAA\x70\xBD" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x06\x6F\x83\xB1\xF4\x67\xA4\xBD\xDA\xF7\x79\x1D\x96\xB5\x7E\xF8" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xC6\xCF\xB4\xD9\x51\xC9\xBB\xB4\x20\x3C\xDD\xB9\x2C\x38\xEA\x40" 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xFB\x02\x6C\xCB\x48\x71\xE8\xF4\x34\x5B\x63\x5D\x13\x57\xBD\xD1" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x3D\xDE\xE8\x4A\x51\x6E\xBE\x4C\xF5\xA3\x84\xF7\x4C\x4E\x58\x04" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xBE\xD1\xCC\x22\xA0\x43\xB0\x65\x99\x6A\xE0\x78\x0D\xFC\xE1\x42" 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xA9\x18\xCF\x55\x4D\x23\xBD\x5C\x0D\xB5\x48\x25\x47\xCC\x01\x54" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x36\x4D\x0C\x6F\xAC\xCD\x33\x21\xC5\x63\x18\x91\x68\x96\xE9\xD1" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xD8\x23\x1F\x21\xAE\x96\xA3\xBD\x27\xF7\x4B\xEF\x4C\x43\xFF\xF8" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x22\x57\xCF\x68\x6C\x35\xD5\x21\x48\x5B\x5F\x8F\xA5\xB9\x6F\x99" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xA6\xE0\x6E\xF0\xC5\x7C\x91\xC8\x0B\x8A\x4B\x4E\x80\x59\x02\xE9" 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xE8\x3F\x87\x04\xA6\xD1\xCA\x26\x3C\xF0\xDA\x57\xFA\xE6\xAF\x25" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x43\x34\xE1\xA4\x06\x1A\x1C\xF4\xF5\x21\x9C\x00\x98\xDD\xF0\xB4" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x8E\xA4\x81\xDA\x30\x81\xD7\xA0\x03\x02\x01\x10\xA2\x81\xCF\x04" 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x81\xCC\x20\x39\x34\x60\x19\xF9\x4C\x26\x36\x46\x99\x7A\xFD\x2B" 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x50\x8B\x2D\x47\x72\x38\x20\x43\x0E\x6E\x28\xB3\xA7\x4F\x26\xF1" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xF1\x7B\x02\x63\x58\x5A\x7F\xC8\xD0\x6E\xF5\xD1\xDA\x28\x43\x1B" 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x6D\x9F\x59\x64\xDE\x90\xEA\x6C\x8C\xA9\x1B\x1E\x92\x29\x24\x23" 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x2C\xE3\xEA\x64\xEF\x91\xA5\x4E\x94\xE1\xDC\x56\x3A\xAF\xD5\xBC" 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xC9\xD3\x9B\x6B\x1F\xBE\x40\xE5\x40\xFF\x5E\x21\xEA\xCE\xFC\xD5" 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xB0\xE5\xBA\x10\x94\xAE\x16\x54\xFC\xEB\xAB\xF1\xD4\x20\x31\xCC" 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x26\xFE\xBE\xFE\x22\xB6\x9B\x1A\xE5\x55\x2C\x93\xB7\x3B\xD6\x4C" 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x35\x35\xC1\x59\x61\xD4\x1F\x2E\x4C\xE1\x72\x8F\x71\x4B\x0C\x39" 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x80\x79\xFA\xCD\xEA\x71\x1B\xAE\x35\x41\xED\xF9\x65\x0C\x59\xF8" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xE1\x27\xDA\xD6\xD1\x20\x32\xCD\xBF\xD1\xEF\xE2\xED\xAD\x5D\xA7" 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x69\xE3\x55\xF9\x30\xD3\xD4\x08\xC8\xCA\x62\xF8\x64\xEC\x9B\x92" 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\x1A\xF1\x03\x2E\xCC\xDC\xEB\x17\xDE\x09\xAC\xA9\x58\x86"; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::GssContextMockImpl context1( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "localhost", // Source name 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "example.com", // Target name 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23, // Lifetime 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *CHROME_GSS_SPNEGO_MECH_OID_DESC, // Mechanism 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // Context flags 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, // Locally initiated 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); // Open 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::GssContextMockImpl context2( 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "localhost", // Source name 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "example.com", // Target name 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23, // Lifetime 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *CHROME_GSS_SPNEGO_MECH_OID_DESC, // Mechanism 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // Context flags 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, // Locally initiated 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1); // Open 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::MockGSSAPILibrary::SecurityContextQuery queries[] = { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::MockGSSAPILibrary::SecurityContextQuery( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Negotiate", // Package name 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GSS_S_CONTINUE_NEEDED, // Major response code 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // Minor response code 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context1, // Context 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, // Expected input token 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAuthResponse), // Output token 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::MockGSSAPILibrary::SecurityContextQuery( 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Negotiate", // Package name 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GSS_S_COMPLETE, // Major response code 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // Minor response code 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context2, // Context 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAuthResponse, // Expected input token 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAuthResponse) // Output token 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(queries); ++i) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_library->ExpectSecurityContext(queries[i].expected_package, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) queries[i].response_code, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) queries[i].minor_response_code, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) queries[i].context_info, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) queries[i].expected_input_token, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) queries[i].output_token); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetupErrorMocks(MockAuthLibrary* mock_library, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int major_status, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int minor_status) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gss_OID_desc kDefaultMech = { 0, NULL }; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::GssContextMockImpl context( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "localhost", // Source name 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "example.com", // Target name 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // Lifetime 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kDefaultMech, // Mechanism 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // Context flags 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, // Locally initiated 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); // Open 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::MockGSSAPILibrary::SecurityContextQuery query( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Negotiate", // Package name 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) major_status, // Major response code 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) minor_status, // Minor response code 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context, // Context 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, // Expected input token 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL); // Output token 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_library->ExpectSecurityContext(query.expected_package, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query.response_code, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query.minor_response_code, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query.context_info, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query.expected_input_token, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query.output_token); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int CreateHandler(bool disable_cname_lookup, bool use_port, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool synchronous_resolve_mode, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& url_string, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate>* handler) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) factory_->set_disable_cname_lookup(disable_cname_lookup); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) factory_->set_use_port(use_port); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resolver_->set_synchronous_mode(synchronous_resolve_mode); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL gurl(url_string); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: This is a little tricky because CreateAuthHandlerFromString 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expects a scoped_ptr<HttpAuthHandler>* rather than a 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scoped_ptr<HttpAuthHandlerNegotiate>*. This needs to do the cast 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // after creating the handler, and make sure that generic_handler 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no longer holds on to the HttpAuthHandlerNegotiate object. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandler> generic_handler; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rv = factory_->CreateAuthHandlerFromString("Negotiate", 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpAuth::AUTH_SERVER, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gurl, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BoundNetLog(), 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &generic_handler); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rv != OK) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rv; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpAuthHandlerNegotiate* negotiate_handler = 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<HttpAuthHandlerNegotiate*>(generic_handler.release()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler->reset(negotiate_handler); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rv; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockAuthLibrary* AuthLibrary() { return auth_library_; } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<SecPkgInfoW> security_package_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |auth_library_| is passed to |factory_|, which assumes ownership of it. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockAuthLibrary* auth_library_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockHostResolver> resolver_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<URLSecurityManager> url_security_manager_; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate::Factory> factory_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, DisableCname) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupMocks(AuthLibrary()); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, CreateHandler( 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, false, true, "http://alias:500", &auth_handler)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(auth_handler.get() != NULL); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompletionCallback callback; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequestInfo request_info; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.callback(), &token)); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP/alias", auth_handler->spn()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP@alias", auth_handler->spn()); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameStandardPort) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupMocks(AuthLibrary()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, CreateHandler( 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, true, true, "http://alias:80", &auth_handler)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(auth_handler.get() != NULL); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompletionCallback callback; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequestInfo request_info; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.callback(), &token)); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP/alias", auth_handler->spn()); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP@alias", auth_handler->spn()); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, DisableCnameNonstandardPort) { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupMocks(AuthLibrary()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, CreateHandler( 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, true, true, "http://alias:500", &auth_handler)); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(auth_handler.get() != NULL); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompletionCallback callback; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequestInfo request_info; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.callback(), &token)); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP/alias:500", auth_handler->spn()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP@alias:500", auth_handler->spn()); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, CnameSync) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupMocks(AuthLibrary()); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, CreateHandler( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, false, true, "http://alias:500", &auth_handler)); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(auth_handler.get() != NULL); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompletionCallback callback; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequestInfo request_info; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, auth_handler->GenerateAuthToken(NULL, &request_info, 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.callback(), &token)); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP/canonical.example.com", auth_handler->spn()); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP@canonical.example.com", auth_handler->spn()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, CnameAsync) { 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupMocks(AuthLibrary()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, CreateHandler( 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, false, false, "http://alias:500", &auth_handler)); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(auth_handler.get() != NULL); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompletionCallback callback; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequestInfo request_info; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, &request_info, callback.callback(), &token)); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, callback.WaitForResult()); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP/canonical.example.com", auth_handler->spn()); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ("HTTP@canonical.example.com", auth_handler->spn()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test is only for GSSAPI, as we can't use explicit credentials with 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that library. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, ServerNotInKerberosDatabase) { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73A07); // No server 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, CreateHandler( 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, false, false, "http://alias:500", &auth_handler)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(auth_handler.get() != NULL); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompletionCallback callback; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequestInfo request_info; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, &request_info, callback.callback(), &token)); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test is only for GSSAPI, as we can't use explicit credentials with 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that library. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, NoKerberosCredentials) { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupErrorMocks(AuthLibrary(), GSS_S_FAILURE, 0x96C73AC3); // No credentials 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate> auth_handler; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(OK, CreateHandler( 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, false, false, "http://alias:500", &auth_handler)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(auth_handler.get() != NULL); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompletionCallback callback; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpRequestInfo request_info; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERR_IO_PENDING, auth_handler->GenerateAuthToken( 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, &request_info, callback.callback(), &token)); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERR_MISSING_AUTH_CREDENTIALS, callback.WaitForResult()); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(DLOPEN_KERBEROS) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpAuthHandlerNegotiateTest, MissingGSSAPI) { 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HostResolver> host_resolver(new MockHostResolver()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockAllowURLSecurityManager url_security_manager; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandlerNegotiate::Factory> negotiate_factory( 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new HttpAuthHandlerNegotiate::Factory()); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) negotiate_factory->set_host_resolver(host_resolver.get()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) negotiate_factory->set_url_security_manager(&url_security_manager); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) negotiate_factory->set_library( 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new GSSAPISharedLibrary("/this/library/does/not/exist")); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL gurl("http://www.example.com"); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<HttpAuthHandler> generic_handler; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rv = negotiate_factory->CreateAuthHandlerFromString( 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Negotiate", 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpAuth::AUTH_SERVER, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gurl, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BoundNetLog(), 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &generic_handler); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERR_UNSUPPORTED_AUTH_SCHEME, rv); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(generic_handler.get() == NULL); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(DLOPEN_KERBEROS) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 369