Roll tools/swarming_client/ to b61a1802f5ef4bb8c7b81060cc80add47e6cf302.
[chromium-blink-merge.git] / net / ssl / client_cert_store_unittest-inl.h
bloba0e29dc83b5a732c757687b2f9a17e82b5b0ec47
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 #ifndef NET_SSL_CLIENT_CERT_STORE_UNITTEST_INL_H_
6 #define NET_SSL_CLIENT_CERT_STORE_UNITTEST_INL_H_
8 #include <string>
9 #include <vector>
11 #include "base/files/file_path.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "net/base/test_data_directory.h"
15 #include "net/test/cert_test_util.h"
16 #include "testing/gtest/include/gtest/gtest.h"
18 namespace net {
20 namespace {
22 // "CN=B CA" - DER encoded DN of the issuer of client_1.pem
23 const unsigned char kAuthority1DN[] = {
24 0x30, 0x0f, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c,
25 0x04, 0x42, 0x20, 0x43, 0x41
28 // "CN=E CA" - DER encoded DN of the issuer of client_2.pem
29 unsigned char kAuthority2DN[] = {
30 0x30, 0x0f, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c,
31 0x04, 0x45, 0x20, 0x43, 0x41
34 } // namespace
36 // Use a templated test to provide common testcases for all the platform
37 // implementations of ClientCertStore. These cases test the client cert
38 // filtering behavior.
40 // NOTE: If any test cases are added, removed, or renamed, the
41 // REGISTER_TYPED_TEST_CASE_P macro at the bottom of this file must be updated.
43 // The type T provided as the third argument to INSTANTIATE_TYPED_TEST_CASE_P by
44 // the platform implementation should implement this method:
45 // bool SelectClientCerts(const CertificateList& input_certs,
46 // const SSLCertRequestInfo& cert_request_info,
47 // CertificateList* selected_certs);
48 template <typename T>
49 class ClientCertStoreTest : public ::testing::Test {
50 public:
51 T delegate_;
54 TYPED_TEST_CASE_P(ClientCertStoreTest);
56 TYPED_TEST_P(ClientCertStoreTest, EmptyQuery) {
57 std::vector<scoped_refptr<X509Certificate> > certs;
58 scoped_refptr<SSLCertRequestInfo> request(new SSLCertRequestInfo());
60 std::vector<scoped_refptr<X509Certificate> > selected_certs;
61 bool rv = this->delegate_.SelectClientCerts(
62 certs, *request.get(), &selected_certs);
63 EXPECT_TRUE(rv);
64 EXPECT_EQ(0u, selected_certs.size());
67 // Verify that CertRequestInfo with empty |cert_authorities| matches all
68 // issuers, rather than no issuers.
69 TYPED_TEST_P(ClientCertStoreTest, AllIssuersAllowed) {
70 scoped_refptr<X509Certificate> cert(
71 ImportCertFromFile(GetTestCertsDirectory(), "client_1.pem"));
72 ASSERT_TRUE(cert.get());
74 std::vector<scoped_refptr<X509Certificate> > certs;
75 certs.push_back(cert);
76 scoped_refptr<SSLCertRequestInfo> request(new SSLCertRequestInfo());
78 std::vector<scoped_refptr<X509Certificate> > selected_certs;
79 bool rv = this->delegate_.SelectClientCerts(
80 certs, *request.get(), &selected_certs);
81 EXPECT_TRUE(rv);
82 ASSERT_EQ(1u, selected_certs.size());
83 EXPECT_TRUE(selected_certs[0]->Equals(cert.get()));
86 // Verify that certificates are correctly filtered against CertRequestInfo with
87 // |cert_authorities| containing only |authority_1_DN|.
88 TYPED_TEST_P(ClientCertStoreTest, CertAuthorityFiltering) {
89 scoped_refptr<X509Certificate> cert_1(
90 ImportCertFromFile(GetTestCertsDirectory(), "client_1.pem"));
91 ASSERT_TRUE(cert_1.get());
92 scoped_refptr<X509Certificate> cert_2(
93 ImportCertFromFile(GetTestCertsDirectory(), "client_2.pem"));
94 ASSERT_TRUE(cert_2.get());
96 std::vector<std::string> authority_1(
97 1, std::string(reinterpret_cast<const char*>(kAuthority1DN),
98 sizeof(kAuthority1DN)));
99 std::vector<std::string> authority_2(
100 1, std::string(reinterpret_cast<const char*>(kAuthority2DN),
101 sizeof(kAuthority2DN)));
102 EXPECT_TRUE(cert_1->IsIssuedByEncoded(authority_1));
103 EXPECT_FALSE(cert_1->IsIssuedByEncoded(authority_2));
104 EXPECT_TRUE(cert_2->IsIssuedByEncoded(authority_2));
105 EXPECT_FALSE(cert_2->IsIssuedByEncoded(authority_1));
107 std::vector<scoped_refptr<X509Certificate> > certs;
108 certs.push_back(cert_1);
109 certs.push_back(cert_2);
110 scoped_refptr<SSLCertRequestInfo> request(new SSLCertRequestInfo());
111 request->cert_authorities = authority_1;
113 std::vector<scoped_refptr<X509Certificate> > selected_certs;
114 bool rv = this->delegate_.SelectClientCerts(
115 certs, *request.get(), &selected_certs);
116 EXPECT_TRUE(rv);
117 ASSERT_EQ(1u, selected_certs.size());
118 EXPECT_TRUE(selected_certs[0]->Equals(cert_1.get()));
121 REGISTER_TYPED_TEST_CASE_P(ClientCertStoreTest,
122 EmptyQuery,
123 AllIssuersAllowed,
124 CertAuthorityFiltering);
126 } // namespace net
128 #endif // NET_SSL_CLIENT_CERT_STORE_UNITTEST_INL_H_