19 #include <gmock/gmock.h>
20 #include <gtest/gtest.h>
42 const int kSslTsiTestRevokedKeyCertPairsNum = 1;
43 const int kSslTsiTestValidKeyCertPairsNum = 1;
44 const char* kSslTsiTestCrlSupportedCredentialsDir =
45 "test/core/tsi/test_creds/crl_data/";
46 const char* kSslTsiTestFaultyCrlsDir =
"bad_path/";
48 class CrlSslTransportSecurityTest
52 class SslTsiTestFixture {
56 static SslTsiTestFixture* Create(
bool use_revoked_server_cert,
57 bool use_revoked_client_cert,
58 bool use_faulty_crl_directory) {
59 return new SslTsiTestFixture(use_revoked_server_cert,
60 use_revoked_client_cert,
61 use_faulty_crl_directory);
70 SslTsiTestFixture(
bool use_revoked_server_cert,
71 bool use_revoked_client_cert,
72 bool use_faulty_crl_directory)
73 : use_revoked_server_cert_(use_revoked_server_cert),
74 use_revoked_client_cert_(use_revoked_client_cert),
75 use_faulty_crl_directory_(use_faulty_crl_directory) {
77 base_.test_unused_bytes =
true;
78 base_.vtable = &kVtable;
82 kSslTsiTestRevokedKeyCertPairsNum));
83 revoked_pem_key_cert_pairs_[0].
private_key = LoadFile(
84 absl::StrCat(kSslTsiTestCrlSupportedCredentialsDir,
"revoked.key"));
85 revoked_pem_key_cert_pairs_[0].cert_chain = LoadFile(
86 absl::StrCat(kSslTsiTestCrlSupportedCredentialsDir,
"revoked.pem"));
89 kSslTsiTestValidKeyCertPairsNum));
90 valid_pem_key_cert_pairs_[0].
private_key = LoadFile(
91 absl::StrCat(kSslTsiTestCrlSupportedCredentialsDir,
"valid.key"));
92 valid_pem_key_cert_pairs_[0].cert_chain = LoadFile(
93 absl::StrCat(kSslTsiTestCrlSupportedCredentialsDir,
"valid.pem"));
95 absl::StrCat(kSslTsiTestCrlSupportedCredentialsDir,
"ca.pem"));
100 ~SslTsiTestFixture() {
101 for (
size_t i = 0;
i < kSslTsiTestValidKeyCertPairsNum;
i++) {
102 PemKeyCertPairDestroy(valid_pem_key_cert_pairs_[
i]);
104 gpr_free(valid_pem_key_cert_pairs_);
105 for (
size_t i = 0;
i < kSslTsiTestRevokedKeyCertPairsNum;
i++) {
106 PemKeyCertPairDestroy(revoked_pem_key_cert_pairs_[
i]);
108 gpr_free(revoked_pem_key_cert_pairs_);
117 auto*
self =
reinterpret_cast<SslTsiTestFixture*
>(
fixture);
118 self->SetupHandshakers();
121 void SetupHandshakers() {
125 if (use_revoked_client_cert_) {
130 if (use_faulty_crl_directory_) {
133 client_options.
crl_directory = kSslTsiTestCrlSupportedCredentialsDir;
139 &client_options, &client_handshaker_factory_),
143 if (use_revoked_server_cert_) {
145 server_options.num_key_cert_pairs = kSslTsiTestRevokedKeyCertPairsNum;
148 server_options.num_key_cert_pairs = kSslTsiTestValidKeyCertPairsNum;
151 server_options.crl_directory = kSslTsiTestCrlSupportedCredentialsDir;
163 client_handshaker_factory_,
nullptr, 0, 0,
164 &base_.client_handshaker),
167 server_handshaker_factory_, 0, 0, &base_.server_handshaker),
173 auto*
self =
reinterpret_cast<SslTsiTestFixture*
>(
fixture);
174 self->CheckHandshakerPeers();
177 void CheckHandshakerPeers() {
187 bool expect_server_success =
188 !(use_revoked_server_cert_ || use_revoked_client_cert_);
189 #if OPENSSL_VERSION_NUMBER >= 0x10100000
191 ? expect_server_success
192 : !use_revoked_server_cert_;
196 expect_server_success =
true;
197 bool expect_client_success = expect_server_success;
200 if (expect_client_success) {
208 if (expect_server_success) {
224 auto*
self =
reinterpret_cast<SslTsiTestFixture*
>(
fixture);
240 bool use_revoked_server_cert_;
241 bool use_revoked_client_cert_;
242 bool use_faulty_crl_directory_;
253 CrlSslTransportSecurityTest::SslTsiTestFixture::kVtable = {
254 &CrlSslTransportSecurityTest::SslTsiTestFixture::SetupHandshakers,
255 &CrlSslTransportSecurityTest::SslTsiTestFixture::CheckHandshakerPeers,
258 TEST_P(CrlSslTransportSecurityTest, RevokedServerCert) {
259 auto*
fixture = SslTsiTestFixture::Create(
true,
265 TEST_P(CrlSslTransportSecurityTest, RevokedClientCert) {
266 auto*
fixture = SslTsiTestFixture::Create(
false,
272 TEST_P(CrlSslTransportSecurityTest, ValidCerts) {
273 auto*
fixture = SslTsiTestFixture::Create(
false,
279 TEST_P(CrlSslTransportSecurityTest, UseFaultyCrlDirectory) {
280 auto*
fixture = SslTsiTestFixture::Create(
false,
287 const ::testing::TestParamInfo<tsi_tls_version>&
version) {
300 int main(
int argc,
char** argv) {