Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(328)

Side by Side Diff: net/cert/cert_verify_proc_unittest.cc

Issue 2670643008: Move CertVerifyProcMac unit-tests to their own file. (Closed)
Patch Set: Rebase + add missing include Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/cert/cert_verify_proc_mac_unittest.cc ('k') | net/test/cert_test_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/cert/cert_verify_proc.h" 5 #include "net/cert/cert_verify_proc.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 21 matching lines...) Expand all
32 #include "net/test/test_data_directory.h" 32 #include "net/test/test_data_directory.h"
33 #include "testing/gmock/include/gmock/gmock.h" 33 #include "testing/gmock/include/gmock/gmock.h"
34 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
35 35
36 #if defined(OS_ANDROID) 36 #if defined(OS_ANDROID)
37 #include "base/android/build_info.h" 37 #include "base/android/build_info.h"
38 #endif 38 #endif
39 39
40 #if defined(OS_MACOSX) && !defined(OS_IOS) 40 #if defined(OS_MACOSX) && !defined(OS_IOS)
41 #include "base/mac/mac_util.h" 41 #include "base/mac/mac_util.h"
42 #include "net/cert/test_keychain_search_list_mac.h"
43 #endif 42 #endif
44 43
45 #if defined(OS_WIN) 44 #if defined(OS_WIN)
46 #include "base/win/windows_version.h" 45 #include "base/win/windows_version.h"
47 #endif 46 #endif
48 47
49 using net::test::IsError; 48 using net::test::IsError;
50 using net::test::IsOk; 49 using net::test::IsOk;
51 50
52 using base::HexEncode; 51 using base::HexEncode;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } 134 }
136 135
137 // Whether the test is running within the iphone simulator. 136 // Whether the test is running within the iphone simulator.
138 const bool kTargetIsIphoneSimulator = 137 const bool kTargetIsIphoneSimulator =
139 #if TARGET_IPHONE_SIMULATOR 138 #if TARGET_IPHONE_SIMULATOR
140 true; 139 true;
141 #else 140 #else
142 false; 141 false;
143 #endif 142 #endif
144 143
145 // Template helper to load a series of certificate files into a CertificateList.
146 // Like CertTestUtil's CreateCertificateListFromFile, except it can load a
147 // series of individual certificates (to make the tests clearer).
148 template <size_t N>
149 void LoadCertificateFiles(const char* const (&cert_files)[N],
150 CertificateList* certs) {
151 certs->clear();
152 for (size_t i = 0; i < N; ++i) {
153 SCOPED_TRACE(cert_files[i]);
154 scoped_refptr<X509Certificate> cert = CreateCertificateChainFromFile(
155 GetTestCertsDirectory(), cert_files[i], X509Certificate::FORMAT_AUTO);
156 ASSERT_TRUE(cert);
157 certs->push_back(cert);
158 }
159 }
160
161 // Returns a textual description of the CertVerifyProc implementation 144 // Returns a textual description of the CertVerifyProc implementation
162 // that is being tested, used to give better names to parameterized 145 // that is being tested, used to give better names to parameterized
163 // tests. 146 // tests.
164 std::string VerifyProcTypeToName( 147 std::string VerifyProcTypeToName(
165 const testing::TestParamInfo<CertVerifyProcType>& params) { 148 const testing::TestParamInfo<CertVerifyProcType>& params) {
166 switch (params.param) { 149 switch (params.param) {
167 case CERT_VERIFY_PROC_NSS: 150 case CERT_VERIFY_PROC_NSS:
168 return "CertVerifyProcNSS"; 151 return "CertVerifyProcNSS";
169 case CERT_VERIFY_PROC_OPENSSL: 152 case CERT_VERIFY_PROC_OPENSSL:
170 return "CertVerifyProcOpenSSL"; 153 return "CertVerifyProcOpenSSL";
(...skipping 1115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 // Each permutation of revocation is tried: 1269 // Each permutation of revocation is tried:
1287 // 1. Revoking E by SPKI, so that only Path 1 is valid (as E is in Paths 2 & 3) 1270 // 1. Revoking E by SPKI, so that only Path 1 is valid (as E is in Paths 2 & 3)
1288 // 2. Revoking C(D) and F(E) by serial, so that only Path 2 is valid. 1271 // 2. Revoking C(D) and F(E) by serial, so that only Path 2 is valid.
1289 // 3. Revoking C by SPKI, so that only Path 3 is valid (as C is in Paths 1 & 2) 1272 // 3. Revoking C by SPKI, so that only Path 3 is valid (as C is in Paths 1 & 2)
1290 TEST_P(CertVerifyProcInternalTest, CRLSetDuringPathBuilding) { 1273 TEST_P(CertVerifyProcInternalTest, CRLSetDuringPathBuilding) {
1291 if (!SupportsCRLSetsInPathBuilding()) { 1274 if (!SupportsCRLSetsInPathBuilding()) {
1292 LOG(INFO) << "Skipping this test on this platform."; 1275 LOG(INFO) << "Skipping this test on this platform.";
1293 return; 1276 return;
1294 } 1277 }
1295 1278
1296 const char* const kPath1Files[] = {
1297 "multi-root-A-by-B.pem", "multi-root-B-by-C.pem", "multi-root-C-by-D.pem",
1298 "multi-root-D-by-D.pem"};
1299 const char* const kPath2Files[] = {
1300 "multi-root-A-by-B.pem", "multi-root-B-by-C.pem", "multi-root-C-by-E.pem",
1301 "multi-root-E-by-E.pem"};
1302 const char* const kPath3Files[] = {
1303 "multi-root-A-by-B.pem", "multi-root-B-by-F.pem", "multi-root-F-by-E.pem",
1304 "multi-root-E-by-E.pem"};
1305
1306 CertificateList path_1_certs; 1279 CertificateList path_1_certs;
1307 ASSERT_NO_FATAL_FAILURE(LoadCertificateFiles(kPath1Files, &path_1_certs)); 1280 ASSERT_TRUE(
1281 LoadCertificateFiles({"multi-root-A-by-B.pem", "multi-root-B-by-C.pem",
1282 "multi-root-C-by-D.pem", "multi-root-D-by-D.pem"},
1283 &path_1_certs));
1308 1284
1309 CertificateList path_2_certs; 1285 CertificateList path_2_certs;
1310 ASSERT_NO_FATAL_FAILURE(LoadCertificateFiles(kPath2Files, &path_2_certs)); 1286 ASSERT_TRUE(
1287 LoadCertificateFiles({"multi-root-A-by-B.pem", "multi-root-B-by-C.pem",
1288 "multi-root-C-by-E.pem", "multi-root-E-by-E.pem"},
1289 &path_2_certs));
1311 1290
1312 CertificateList path_3_certs; 1291 CertificateList path_3_certs;
1313 ASSERT_NO_FATAL_FAILURE(LoadCertificateFiles(kPath3Files, &path_3_certs)); 1292 ASSERT_TRUE(
1293 LoadCertificateFiles({"multi-root-A-by-B.pem", "multi-root-B-by-F.pem",
1294 "multi-root-F-by-E.pem", "multi-root-E-by-E.pem"},
1295 &path_3_certs));
1314 1296
1315 // Add D and E as trust anchors. 1297 // Add D and E as trust anchors.
1316 ScopedTestRoot test_root_D(path_1_certs[3].get()); // D-by-D 1298 ScopedTestRoot test_root_D(path_1_certs[3].get()); // D-by-D
1317 ScopedTestRoot test_root_E(path_2_certs[3].get()); // E-by-E 1299 ScopedTestRoot test_root_E(path_2_certs[3].get()); // E-by-E
1318 1300
1319 // Create a chain that contains all the certificate paths possible. 1301 // Create a chain that contains all the certificate paths possible.
1320 // CertVerifyProcInternalTest.VerifyReturnChainFiltersUnrelatedCerts already 1302 // CertVerifyProcInternalTest.VerifyReturnChainFiltersUnrelatedCerts already
1321 // ensures that it's safe to send additional certificates as inputs, and 1303 // ensures that it's safe to send additional certificates as inputs, and
1322 // that they're ignored if not necessary. 1304 // that they're ignored if not necessary.
1323 // This is to avoid relying on AIA or internal object caches when 1305 // This is to avoid relying on AIA or internal object caches when
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1379 ASSERT_TRUE(intermediate); 1361 ASSERT_TRUE(intermediate);
1380 1362
1381 EXPECT_TRUE(testcase.expected_intermediate->Equals(intermediate.get())) 1363 EXPECT_TRUE(testcase.expected_intermediate->Equals(intermediate.get()))
1382 << "Expected: " << testcase.expected_intermediate->subject().common_name 1364 << "Expected: " << testcase.expected_intermediate->subject().common_name
1383 << " issued by " << testcase.expected_intermediate->issuer().common_name 1365 << " issued by " << testcase.expected_intermediate->issuer().common_name
1384 << "; Got: " << intermediate->subject().common_name << " issued by " 1366 << "; Got: " << intermediate->subject().common_name << " issued by "
1385 << intermediate->issuer().common_name; 1367 << intermediate->issuer().common_name;
1386 } 1368 }
1387 } 1369 }
1388 1370
1389 #if defined(OS_MACOSX) && !defined(OS_IOS)
1390 // Test that a CRLSet blocking one of the intermediates supplied by the server
1391 // can be worked around by the chopping workaround for path building. (Once the
1392 // supplied chain is chopped back to just the target, a better path can be
1393 // found out-of-band. Normally that would be by AIA fetching, for the purposes
1394 // of this test the better path is supplied by a test keychain.)
1395 //
1396 // In this test, there are two possible paths to validate a leaf (A):
1397 // 1. A(B) -> B(C) -> C(E) -> E(E)
1398 // 2. A(B) -> B(F) -> F(E) -> E(E)
1399 //
1400 // A(B) -> B(C) -> C(E) is supplied to the verifier.
1401 // B(F) and F(E) are supplied in a test keychain.
1402 // C is blocked by a CRLset.
1403 //
1404 // The verifier should rollback until it just tries A(B) alone, at which point
1405 // it will pull B(F) & F(E) from the keychain and succeed.
1406 TEST(CertVerifyProcMacTest, MacCRLIntermediate) {
1407 if (base::mac::IsAtLeastOS10_12()) {
1408 // TODO(crbug.com/671889): Investigate SecTrustSetKeychains issue on Sierra.
1409 LOG(INFO) << "Skipping test, SecTrustSetKeychains does not work on 10.12";
1410 return;
1411 }
1412 const char* const kPath2Files[] = {
1413 "multi-root-A-by-B.pem", "multi-root-B-by-C.pem", "multi-root-C-by-E.pem",
1414 "multi-root-E-by-E.pem"};
1415 CertificateList path_2_certs;
1416 ASSERT_NO_FATAL_FAILURE(LoadCertificateFiles(kPath2Files, &path_2_certs));
1417
1418 const char* const kPath3Files[] = {
1419 "multi-root-A-by-B.pem", "multi-root-B-by-F.pem", "multi-root-F-by-E.pem",
1420 "multi-root-E-by-E.pem"};
1421
1422 CertificateList path_3_certs;
1423 ASSERT_NO_FATAL_FAILURE(LoadCertificateFiles(kPath3Files, &path_3_certs));
1424
1425 // Add E as trust anchor.
1426 ScopedTestRoot test_root_E(path_3_certs[3].get()); // E-by-E
1427
1428 X509Certificate::OSCertHandles intermediates;
1429 intermediates.push_back(path_2_certs[1]->os_cert_handle()); // B-by-C
1430 intermediates.push_back(path_2_certs[2]->os_cert_handle()); // C-by-E
1431 scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle(
1432 path_3_certs[0]->os_cert_handle(), intermediates);
1433 ASSERT_TRUE(cert);
1434
1435 std::unique_ptr<TestKeychainSearchList> test_keychain_search_list(
1436 TestKeychainSearchList::Create());
1437 ASSERT_TRUE(test_keychain_search_list);
1438
1439 base::FilePath keychain_path(
1440 GetTestCertsDirectory().AppendASCII("multi-root-BFE.keychain"));
1441 // SecKeychainOpen does not fail if the file doesn't exist, so assert it here
1442 // for easier debugging.
1443 ASSERT_TRUE(base::PathExists(keychain_path));
1444 SecKeychainRef keychain;
1445 OSStatus status =
1446 SecKeychainOpen(keychain_path.MaybeAsASCII().c_str(), &keychain);
1447 ASSERT_EQ(errSecSuccess, status);
1448 ASSERT_TRUE(keychain);
1449 base::ScopedCFTypeRef<SecKeychainRef> scoped_keychain(keychain);
1450 test_keychain_search_list->AddKeychain(keychain);
1451
1452 scoped_refptr<CRLSet> crl_set;
1453 std::string crl_set_bytes;
1454 // CRL which blocks C by SPKI.
1455 EXPECT_TRUE(base::ReadFileToString(
1456 GetTestCertsDirectory().AppendASCII("multi-root-crlset-C.raw"),
1457 &crl_set_bytes));
1458 ASSERT_TRUE(CRLSetStorage::Parse(crl_set_bytes, &crl_set));
1459
1460 int flags = 0;
1461 CertVerifyResult verify_result;
1462
1463 scoped_refptr<CertVerifyProc> verify_proc = CertVerifyProc::CreateDefault();
1464 int error =
1465 verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), flags,
1466 crl_set.get(), CertificateList(), &verify_result);
1467
1468 ASSERT_EQ(OK, error);
1469 ASSERT_EQ(0U, verify_result.cert_status);
1470 ASSERT_TRUE(verify_result.verified_cert.get());
1471
1472 const X509Certificate::OSCertHandles& verified_intermediates =
1473 verify_result.verified_cert->GetIntermediateCertificates();
1474 ASSERT_EQ(3U, verified_intermediates.size());
1475
1476 scoped_refptr<X509Certificate> intermediate =
1477 X509Certificate::CreateFromHandle(verified_intermediates[1],
1478 X509Certificate::OSCertHandles());
1479 ASSERT_TRUE(intermediate);
1480
1481 scoped_refptr<X509Certificate> expected_intermediate = path_3_certs[2];
1482 EXPECT_TRUE(expected_intermediate->Equals(intermediate.get()))
1483 << "Expected: " << expected_intermediate->subject().common_name
1484 << " issued by " << expected_intermediate->issuer().common_name
1485 << "; Got: " << intermediate->subject().common_name << " issued by "
1486 << intermediate->issuer().common_name;
1487 }
1488
1489 // Test that if a keychain is present which trusts a less-desirable root (ex,
1490 // one using SHA1), that the keychain reordering hack will cause the better
1491 // root in the System Roots to be used instead.
1492 TEST(CertVerifyProcMacTest, MacKeychainReordering) {
1493 // Note: target cert expires Apr 2 23:59:59 2018 GMT
1494 scoped_refptr<X509Certificate> cert = CreateCertificateChainFromFile(
1495 GetTestCertsDirectory(), "tripadvisor-verisign-chain.pem",
1496 X509Certificate::FORMAT_AUTO);
1497 ASSERT_TRUE(cert);
1498
1499 // Create a test keychain search list that will Always Trust the SHA1
1500 // cross-signed VeriSign Class 3 Public Primary Certification Authority - G5
1501 std::unique_ptr<TestKeychainSearchList> test_keychain_search_list(
1502 TestKeychainSearchList::Create());
1503 ASSERT_TRUE(test_keychain_search_list);
1504
1505 base::FilePath keychain_path(GetTestCertsDirectory().AppendASCII(
1506 "verisign_class3_g5_crosssigned-trusted.keychain"));
1507 // SecKeychainOpen does not fail if the file doesn't exist, so assert it here
1508 // for easier debugging.
1509 ASSERT_TRUE(base::PathExists(keychain_path));
1510 SecKeychainRef keychain;
1511 OSStatus status =
1512 SecKeychainOpen(keychain_path.MaybeAsASCII().c_str(), &keychain);
1513 ASSERT_EQ(errSecSuccess, status);
1514 ASSERT_TRUE(keychain);
1515 base::ScopedCFTypeRef<SecKeychainRef> scoped_keychain(keychain);
1516 test_keychain_search_list->AddKeychain(keychain);
1517
1518 int flags = 0;
1519 CertVerifyResult verify_result;
1520 scoped_refptr<CertVerifyProc> verify_proc = CertVerifyProc::CreateDefault();
1521 int error = verify_proc->Verify(cert.get(), "www.tripadvisor.com",
1522 std::string(), flags, nullptr /* crl_set */,
1523 CertificateList(), &verify_result);
1524
1525 ASSERT_EQ(OK, error);
1526 EXPECT_EQ(0U, verify_result.cert_status);
1527 EXPECT_FALSE(verify_result.has_sha1);
1528 ASSERT_TRUE(verify_result.verified_cert.get());
1529
1530 const X509Certificate::OSCertHandles& verified_intermediates =
1531 verify_result.verified_cert->GetIntermediateCertificates();
1532 ASSERT_EQ(2U, verified_intermediates.size());
1533 }
1534
1535 // Test that the system root certificate keychain is in the expected location
1536 // and can be opened. Other tests would fail if this was not true, but this
1537 // test makes the reason for the failure obvious.
1538 TEST(CertVerifyProcMacTest, MacSystemRootCertificateKeychainLocation) {
1539 const char* root_keychain_path =
1540 "/System/Library/Keychains/SystemRootCertificates.keychain";
1541 ASSERT_TRUE(base::PathExists(base::FilePath(root_keychain_path)));
1542
1543 SecKeychainRef keychain;
1544 OSStatus status = SecKeychainOpen(root_keychain_path, &keychain);
1545 ASSERT_EQ(errSecSuccess, status);
1546 CFRelease(keychain);
1547 }
1548 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
1549
1550 // TODO(crbug.com/649017): This is not parameterized by the CertVerifyProc 1371 // TODO(crbug.com/649017): This is not parameterized by the CertVerifyProc
1551 // because the CertVerifyProc::Verify() does this unconditionally based on the 1372 // because the CertVerifyProc::Verify() does this unconditionally based on the
1552 // platform. 1373 // platform.
1553 bool AreSHA1IntermediatesAllowed() { 1374 bool AreSHA1IntermediatesAllowed() {
1554 #if defined(OS_WIN) 1375 #if defined(OS_WIN)
1555 // TODO(rsleevi): Remove this once https://crbug.com/588789 is resolved 1376 // TODO(rsleevi): Remove this once https://crbug.com/588789 is resolved
1556 // for Windows 7/2008 users. 1377 // for Windows 7/2008 users.
1557 // Note: This must be kept in sync with cert_verify_proc.cc 1378 // Note: This must be kept in sync with cert_verify_proc.cc
1558 return base::win::GetVersion() < base::win::VERSION_WIN8; 1379 return base::win::GetVersion() < base::win::VERSION_WIN8;
1559 #else 1380 #else
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
1989 // Should not match the dNSName SAN 1810 // Should not match the dNSName SAN
1990 TEST_P(CertVerifyProcNameTest, DoesntMatchDnsSanTrailingDot) { 1811 TEST_P(CertVerifyProcNameTest, DoesntMatchDnsSanTrailingDot) {
1991 VerifyCertName(".test.example", false); 1812 VerifyCertName(".test.example", false);
1992 } 1813 }
1993 1814
1994 INSTANTIATE_TEST_CASE_P(VerifyName, 1815 INSTANTIATE_TEST_CASE_P(VerifyName,
1995 CertVerifyProcNameTest, 1816 CertVerifyProcNameTest,
1996 testing::ValuesIn(kAllCertVerifiers), 1817 testing::ValuesIn(kAllCertVerifiers),
1997 VerifyProcTypeToName); 1818 VerifyProcTypeToName);
1998 1819
1999 #if defined(OS_MACOSX) && !defined(OS_IOS)
2000 // Test that CertVerifyProcMac reacts appropriately when Apple's certificate
2001 // verifier rejects a certificate with a fatal error. This is a regression
2002 // test for https://crbug.com/472291.
2003 // (Since 10.12, this causes a recoverable error instead of a fatal one.)
2004 // TODO(mattm): Try to find a different way to cause a fatal error that works
2005 // on 10.12.
2006 TEST(CertVerifyProcMacTest, LargeKey) {
2007 // Load root_ca_cert.pem into the test root store.
2008 ScopedTestRoot test_root(
2009 ImportCertFromFile(GetTestCertsDirectory(), "root_ca_cert.pem").get());
2010
2011 scoped_refptr<X509Certificate> cert(
2012 ImportCertFromFile(GetTestCertsDirectory(), "large_key.pem"));
2013
2014 // Apple's verifier rejects this certificate as invalid because the
2015 // RSA key is too large. If a future version of OS X changes this,
2016 // large_key.pem may need to be regenerated with a larger key.
2017 int flags = 0;
2018 CertVerifyResult verify_result;
2019 scoped_refptr<CertVerifyProc> verify_proc = CertVerifyProc::CreateDefault();
2020 int error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), flags,
2021 NULL, CertificateList(), &verify_result);
2022 EXPECT_THAT(error, IsError(ERR_CERT_INVALID));
2023 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID);
2024 }
2025 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
2026
2027 // Tests that CertVerifyProc records a histogram correctly when a 1820 // Tests that CertVerifyProc records a histogram correctly when a
2028 // certificate chaining to a private root contains the TLS feature 1821 // certificate chaining to a private root contains the TLS feature
2029 // extension and does not have a stapled OCSP response. 1822 // extension and does not have a stapled OCSP response.
2030 TEST(CertVerifyProcTest, HasTLSFeatureExtensionUMA) { 1823 TEST(CertVerifyProcTest, HasTLSFeatureExtensionUMA) {
2031 base::HistogramTester histograms; 1824 base::HistogramTester histograms;
2032 scoped_refptr<X509Certificate> cert( 1825 scoped_refptr<X509Certificate> cert(
2033 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem")); 1826 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem"));
2034 ASSERT_TRUE(cert); 1827 ASSERT_TRUE(cert);
2035 CertVerifyResult result; 1828 CertVerifyResult result;
2036 result.is_issued_by_known_root = false; 1829 result.is_issued_by_known_root = false;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2119 int flags = 0; 1912 int flags = 0;
2120 CertVerifyResult verify_result; 1913 CertVerifyResult verify_result;
2121 int error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), flags, 1914 int error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), flags,
2122 NULL, CertificateList(), &verify_result); 1915 NULL, CertificateList(), &verify_result);
2123 EXPECT_EQ(OK, error); 1916 EXPECT_EQ(OK, error);
2124 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); 1917 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0);
2125 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); 1918 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0);
2126 } 1919 }
2127 1920
2128 } // namespace net 1921 } // namespace net
OLDNEW
« no previous file with comments | « net/cert/cert_verify_proc_mac_unittest.cc ('k') | net/test/cert_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698