1 // Copyright 2013 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.
5 #include "net/ssl/client_cert_store_mac.h"
7 #include "net/ssl/client_cert_store_unittest-inl.h"
11 class ClientCertStoreMacTestDelegate
{
13 bool SelectClientCerts(const CertificateList
& input_certs
,
14 const SSLCertRequestInfo
& cert_request_info
,
15 CertificateList
* selected_certs
) {
16 return store_
.SelectClientCertsForTesting(
17 input_certs
, cert_request_info
, selected_certs
);
21 ClientCertStoreMac store_
;
24 INSTANTIATE_TYPED_TEST_CASE_P(Mac
,
26 ClientCertStoreMacTestDelegate
);
28 class ClientCertStoreMacTest
: public ::testing::Test
{
30 bool SelectClientCertsGivenPreferred(
31 const scoped_refptr
<X509Certificate
>& preferred_cert
,
32 const CertificateList
& regular_certs
,
33 const SSLCertRequestInfo
& request
,
34 CertificateList
* selected_certs
) {
35 return store_
.SelectClientCertsGivenPreferredForTesting(
36 preferred_cert
, regular_certs
, request
, selected_certs
);
40 ClientCertStoreMac store_
;
43 // Verify that the preferred cert gets filtered out when it doesn't match the
45 TEST_F(ClientCertStoreMacTest
, FilterOutThePreferredCert
) {
46 scoped_refptr
<X509Certificate
> cert_1(
47 ImportCertFromFile(GetTestCertsDirectory(), "client_1.pem"));
48 ASSERT_TRUE(cert_1
.get());
50 std::vector
<std::string
> authority_2(
51 1, std::string(reinterpret_cast<const char*>(kAuthority2DN
),
52 sizeof(kAuthority2DN
)));
53 EXPECT_FALSE(cert_1
->IsIssuedByEncoded(authority_2
));
55 std::vector
<scoped_refptr
<X509Certificate
> > certs
;
56 scoped_refptr
<SSLCertRequestInfo
> request(new SSLCertRequestInfo());
57 request
->cert_authorities
= authority_2
;
59 std::vector
<scoped_refptr
<X509Certificate
> > selected_certs
;
60 bool rv
= SelectClientCertsGivenPreferred(
61 cert_1
, certs
, *request
.get(), &selected_certs
);
63 EXPECT_EQ(0u, selected_certs
.size());
66 // Verify that the preferred cert takes the first position in the output list,
67 // when it does not get filtered out.
68 TEST_F(ClientCertStoreMacTest
, PreferredCertGoesFirst
) {
69 scoped_refptr
<X509Certificate
> cert_1(
70 ImportCertFromFile(GetTestCertsDirectory(), "client_1.pem"));
71 ASSERT_TRUE(cert_1
.get());
72 scoped_refptr
<X509Certificate
> cert_2(
73 ImportCertFromFile(GetTestCertsDirectory(), "client_2.pem"));
74 ASSERT_TRUE(cert_2
.get());
76 std::vector
<scoped_refptr
<X509Certificate
> > certs
;
77 certs
.push_back(cert_2
);
78 scoped_refptr
<SSLCertRequestInfo
> request(new SSLCertRequestInfo());
80 std::vector
<scoped_refptr
<X509Certificate
> > selected_certs
;
81 bool rv
= SelectClientCertsGivenPreferred(
82 cert_1
, certs
, *request
.get(), &selected_certs
);
84 ASSERT_EQ(2u, selected_certs
.size());
85 EXPECT_TRUE(selected_certs
[0]->Equals(cert_1
.get()));
86 EXPECT_TRUE(selected_certs
[1]->Equals(cert_2
.get()));