// Copyright 2013 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 "net/ssl/client_cert_store_mac.h" #include "net/ssl/client_cert_store_unittest-inl.h" namespace net { class ClientCertStoreMacTestDelegate { public: bool SelectClientCerts(const CertificateList& input_certs, const SSLCertRequestInfo& cert_request_info, CertificateList* selected_certs) { return store_.SelectClientCertsForTesting( input_certs, cert_request_info, selected_certs); } private: ClientCertStoreMac store_; }; INSTANTIATE_TYPED_TEST_CASE_P(Mac, ClientCertStoreTest, ClientCertStoreMacTestDelegate); class ClientCertStoreMacTest : public ::testing::Test { protected: bool SelectClientCertsGivenPreferred( const scoped_refptr& preferred_cert, const CertificateList& regular_certs, const SSLCertRequestInfo& request, CertificateList* selected_certs) { return store_.SelectClientCertsGivenPreferredForTesting( preferred_cert, regular_certs, request, selected_certs); } private: ClientCertStoreMac store_; }; // Verify that the preferred cert gets filtered out when it doesn't match the // server criteria. TEST_F(ClientCertStoreMacTest, FilterOutThePreferredCert) { scoped_refptr cert_1( ImportCertFromFile(GetTestCertsDirectory(), "client_1.pem")); ASSERT_TRUE(cert_1.get()); std::vector authority_2( 1, std::string(reinterpret_cast(kAuthority2DN), sizeof(kAuthority2DN))); EXPECT_FALSE(cert_1->IsIssuedByEncoded(authority_2)); std::vector > certs; scoped_refptr request(new SSLCertRequestInfo()); request->cert_authorities = authority_2; std::vector > selected_certs; bool rv = SelectClientCertsGivenPreferred( cert_1, certs, *request.get(), &selected_certs); EXPECT_TRUE(rv); EXPECT_EQ(0u, selected_certs.size()); } // Verify that the preferred cert takes the first position in the output list, // when it does not get filtered out. TEST_F(ClientCertStoreMacTest, PreferredCertGoesFirst) { scoped_refptr cert_1( ImportCertFromFile(GetTestCertsDirectory(), "client_1.pem")); ASSERT_TRUE(cert_1.get()); scoped_refptr cert_2( ImportCertFromFile(GetTestCertsDirectory(), "client_2.pem")); ASSERT_TRUE(cert_2.get()); std::vector > certs; certs.push_back(cert_2); scoped_refptr request(new SSLCertRequestInfo()); std::vector > selected_certs; bool rv = SelectClientCertsGivenPreferred( cert_1, certs, *request.get(), &selected_certs); EXPECT_TRUE(rv); ASSERT_EQ(2u, selected_certs.size()); EXPECT_TRUE(selected_certs[0]->Equals(cert_1.get())); EXPECT_TRUE(selected_certs[1]->Equals(cert_2.get())); } } // namespace net