15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 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/mock_sspi_library_win.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockSSPILibrary::MockSSPILibrary() {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockSSPILibrary::~MockSSPILibrary() {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(expected_package_queries_.empty());
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(expected_freed_packages_.empty());
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SECURITY_STATUS MockSSPILibrary::AcquireCredentialsHandle(
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LPWSTR pszPrincipal,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LPWSTR pszPackage,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned long fCredentialUse,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void* pvLogonId,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void* pvAuthData,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SEC_GET_KEY_FN pGetKeyFn,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void* pvGetKeyArgument,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PCredHandle phCredential,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PTimeStamp ptsExpiry) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill in phCredential with arbitrary value.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  phCredential->dwLower = phCredential->dwUpper = ((ULONG_PTR) ((INT_PTR)0));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SEC_E_OK;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SECURITY_STATUS MockSSPILibrary::InitializeSecurityContext(
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PCredHandle phCredential,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PCtxtHandle phContext,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SEC_WCHAR* pszTargetName,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned long fContextReq,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned long Reserved1,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned long TargetDataRep,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PSecBufferDesc pInput,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned long Reserved2,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PCtxtHandle phNewContext,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PSecBufferDesc pOutput,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned long* contextAttr,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PTimeStamp ptsExpiry) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill in the outbound buffer with garbage data.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PSecBuffer out_buffer = pOutput->pBuffers;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  out_buffer->cbBuffer = 2;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8* buf = reinterpret_cast<uint8 *>(out_buffer->pvBuffer);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  buf[0] = 0xAB;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  buf[1] = 0xBA;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill in phNewContext with arbitrary value if it's invalid.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (phNewContext != phContext)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    phNewContext->dwLower = phNewContext->dwUpper = ((ULONG_PTR) ((INT_PTR)0));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SEC_E_OK;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SECURITY_STATUS MockSSPILibrary::QuerySecurityPackageInfo(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LPWSTR pszPackageName, PSecPkgInfoW *pkgInfo) {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(!expected_package_queries_.empty());
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PackageQuery package_query = expected_package_queries_.front();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_package_queries_.pop_front();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::wstring actual_package(pszPackageName);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(package_query.expected_package, actual_package);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *pkgInfo = package_query.package_info;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (package_query.response_code == SEC_E_OK)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_freed_packages_.insert(package_query.package_info);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return package_query.response_code;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SECURITY_STATUS MockSSPILibrary::FreeCredentialsHandle(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PCredHandle phCredential) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(phCredential->dwLower == ((ULONG_PTR) ((INT_PTR) 0)));
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(phCredential->dwUpper == ((ULONG_PTR) ((INT_PTR) 0)));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SecInvalidateHandle(phCredential);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SEC_E_OK;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SECURITY_STATUS MockSSPILibrary::DeleteSecurityContext(PCtxtHandle phContext) {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(phContext->dwLower == ((ULONG_PTR) ((INT_PTR) 0)));
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(phContext->dwUpper == ((ULONG_PTR) ((INT_PTR) 0)));
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SecInvalidateHandle(phContext);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SEC_E_OK;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SECURITY_STATUS MockSSPILibrary::FreeContextBuffer(PVOID pvContextBuffer) {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PSecPkgInfoW package_info = static_cast<PSecPkgInfoW>(pvContextBuffer);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<PSecPkgInfoW>::iterator it = expected_freed_packages_.find(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      package_info);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(it != expected_freed_packages_.end());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_freed_packages_.erase(it);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SEC_E_OK;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSSPILibrary::ExpectQuerySecurityPackageInfo(
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::wstring& expected_package,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SECURITY_STATUS response_code,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PSecPkgInfoW package_info) {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PackageQuery package_query = {expected_package, response_code,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                package_info};
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_package_queries_.push_back(package_query);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
107