| Index: net/ssl/client_cert_store_chromeos_unittest.cc
|
| diff --git a/net/ssl/client_cert_store_chromeos_unittest.cc b/net/ssl/client_cert_store_chromeos_unittest.cc
|
| deleted file mode 100644
|
| index ca2c049408837685d0f67fd2e98139dac105e531..0000000000000000000000000000000000000000
|
| --- a/net/ssl/client_cert_store_chromeos_unittest.cc
|
| +++ /dev/null
|
| @@ -1,244 +0,0 @@
|
| -// 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_chromeos.h"
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/run_loop.h"
|
| -#include "crypto/rsa_private_key.h"
|
| -#include "crypto/scoped_test_nss_db.h"
|
| -#include "net/base/test_data_directory.h"
|
| -#include "net/cert/x509_certificate.h"
|
| -#include "net/ssl/client_cert_store_unittest-inl.h"
|
| -#include "net/test/cert_test_util.h"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -class TestCertFilter : public net::ClientCertStoreChromeOS::CertFilter {
|
| - public:
|
| - explicit TestCertFilter(bool init_finished)
|
| - : init_finished_(init_finished), init_called_(false) {}
|
| -
|
| - ~TestCertFilter() override {}
|
| -
|
| - bool Init(const base::Closure& callback) override {
|
| - init_called_ = true;
|
| - if (init_finished_)
|
| - return true;
|
| - pending_callback_ = callback;
|
| - return false;
|
| - }
|
| -
|
| - bool IsCertAllowed(
|
| - const scoped_refptr<net::X509Certificate>& cert) const override {
|
| - if (not_allowed_cert_.get() && cert->Equals(not_allowed_cert_.get()))
|
| - return false;
|
| - return true;
|
| - }
|
| -
|
| - bool init_called() { return init_called_; }
|
| -
|
| - void FinishInit() {
|
| - init_finished_ = true;
|
| - base::MessageLoop::current()->PostTask(FROM_HERE, pending_callback_);
|
| - pending_callback_.Reset();
|
| - }
|
| -
|
| - void SetNotAllowedCert(scoped_refptr<X509Certificate> cert) {
|
| - not_allowed_cert_ = cert;
|
| - }
|
| -
|
| - private:
|
| - bool init_finished_;
|
| - bool init_called_;
|
| - base::Closure pending_callback_;
|
| - scoped_refptr<X509Certificate> not_allowed_cert_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// Define a delegate to be used for instantiating the parameterized test set
|
| -// ClientCertStoreTest.
|
| -class ClientCertStoreChromeOSTestDelegate {
|
| - public:
|
| - ClientCertStoreChromeOSTestDelegate()
|
| - : store_(
|
| - make_scoped_ptr(new TestCertFilter(true /* init synchronously */)),
|
| - ClientCertStoreChromeOS::PasswordDelegateFactory()) {
|
| - // Defer futher initialization and checks to SelectClientCerts, because the
|
| - // constructor doesn't allow us to return an initialization result. Could be
|
| - // cleaned up by adding an Init() function.
|
| - }
|
| -
|
| - // Called by the ClientCertStoreTest tests.
|
| - // |inpurt_certs| contains certificates to select from. Because
|
| - // ClientCertStoreChromeOS filters also for the right slot, we have to import
|
| - // the certs at first.
|
| - // Since the certs are imported, the store can be tested by using its public
|
| - // interface (GetClientCerts), which will read the certs from NSS.
|
| - bool SelectClientCerts(const CertificateList& input_certs,
|
| - const SSLCertRequestInfo& cert_request_info,
|
| - CertificateList* selected_certs) {
|
| - if (!test_db_.is_open()) {
|
| - LOG(ERROR) << "NSS DB could not be constructed.";
|
| - return false;
|
| - }
|
| -
|
| - // Only user certs are considered for the cert request, which means that the
|
| - // private key must be known to NSS. Import all private keys for certs that
|
| - // are used througout the test.
|
| - if (!ImportSensitiveKeyFromFile(
|
| - GetTestCertsDirectory(), "client_1.pk8", test_db_.slot()) ||
|
| - !ImportSensitiveKeyFromFile(
|
| - GetTestCertsDirectory(), "client_2.pk8", test_db_.slot())) {
|
| - return false;
|
| - }
|
| -
|
| - for (CertificateList::const_iterator it = input_certs.begin();
|
| - it != input_certs.end();
|
| - ++it) {
|
| - if (!ImportClientCertToSlot(*it, test_db_.slot()))
|
| - return false;
|
| - }
|
| - base::RunLoop run_loop;
|
| - store_.GetClientCerts(
|
| - cert_request_info, selected_certs, run_loop.QuitClosure());
|
| - run_loop.Run();
|
| - return true;
|
| - }
|
| -
|
| - private:
|
| - crypto::ScopedTestNSSDB test_db_;
|
| - ClientCertStoreChromeOS store_;
|
| -};
|
| -
|
| -// ClientCertStoreChromeOS derives from ClientCertStoreNSS and delegates the
|
| -// filtering by issuer to that base class.
|
| -// To verify that this delegation is functional, run the same filtering tests as
|
| -// for the other implementations. These tests are defined in
|
| -// client_cert_store_unittest-inl.h and are instantiated for each platform.
|
| -INSTANTIATE_TYPED_TEST_CASE_P(ClientCertStoreTestChromeOS,
|
| - ClientCertStoreTest,
|
| - ClientCertStoreChromeOSTestDelegate);
|
| -
|
| -class ClientCertStoreChromeOSTest : public ::testing::Test {
|
| - public:
|
| - scoped_refptr<X509Certificate> ImportCertToSlot(
|
| - const std::string& cert_filename,
|
| - const std::string& key_filename,
|
| - PK11SlotInfo* slot) {
|
| - return ImportClientCertAndKeyFromFile(
|
| - GetTestCertsDirectory(), cert_filename, key_filename, slot);
|
| - }
|
| -};
|
| -
|
| -// Ensure that cert requests, that are started before the filter is initialized,
|
| -// will wait for the initialization and succeed afterwards.
|
| -TEST_F(ClientCertStoreChromeOSTest, RequestWaitsForNSSInitAndSucceeds) {
|
| - crypto::ScopedTestNSSDB test_db;
|
| - ASSERT_TRUE(test_db.is_open());
|
| -
|
| - TestCertFilter* cert_filter =
|
| - new TestCertFilter(false /* init asynchronously */);
|
| - ClientCertStoreChromeOS store(
|
| - make_scoped_ptr(cert_filter),
|
| - ClientCertStoreChromeOS::PasswordDelegateFactory());
|
| -
|
| - scoped_refptr<X509Certificate> cert_1(
|
| - ImportCertToSlot("client_1.pem", "client_1.pk8", test_db.slot()));
|
| - ASSERT_TRUE(cert_1.get());
|
| -
|
| - // Request any client certificate, which is expected to match client_1.
|
| - scoped_refptr<SSLCertRequestInfo> request_all(new SSLCertRequestInfo());
|
| -
|
| - base::RunLoop run_loop;
|
| - store.GetClientCerts(
|
| - *request_all, &request_all->client_certs, run_loop.QuitClosure());
|
| -
|
| - {
|
| - base::RunLoop run_loop_inner;
|
| - run_loop_inner.RunUntilIdle();
|
| - // GetClientCerts should wait for the initialization of the filter to
|
| - // finish.
|
| - ASSERT_EQ(0u, request_all->client_certs.size());
|
| - EXPECT_TRUE(cert_filter->init_called());
|
| - }
|
| - cert_filter->FinishInit();
|
| - run_loop.Run();
|
| -
|
| - ASSERT_EQ(1u, request_all->client_certs.size());
|
| -}
|
| -
|
| -// Ensure that cert requests, that are started after the filter was initialized,
|
| -// will succeed.
|
| -TEST_F(ClientCertStoreChromeOSTest, RequestsAfterNSSInitSucceed) {
|
| - crypto::ScopedTestNSSDB test_db;
|
| - ASSERT_TRUE(test_db.is_open());
|
| -
|
| - ClientCertStoreChromeOS store(
|
| - make_scoped_ptr(new TestCertFilter(true /* init synchronously */)),
|
| - ClientCertStoreChromeOS::PasswordDelegateFactory());
|
| -
|
| - scoped_refptr<X509Certificate> cert_1(
|
| - ImportCertToSlot("client_1.pem", "client_1.pk8", test_db.slot()));
|
| - ASSERT_TRUE(cert_1.get());
|
| -
|
| - scoped_refptr<SSLCertRequestInfo> request_all(new SSLCertRequestInfo());
|
| -
|
| - base::RunLoop run_loop;
|
| - store.GetClientCerts(
|
| - *request_all, &request_all->client_certs, run_loop.QuitClosure());
|
| - run_loop.Run();
|
| -
|
| - ASSERT_EQ(1u, request_all->client_certs.size());
|
| -}
|
| -
|
| -TEST_F(ClientCertStoreChromeOSTest, Filter) {
|
| - crypto::ScopedTestNSSDB test_db;
|
| - ASSERT_TRUE(test_db.is_open());
|
| -
|
| - TestCertFilter* cert_filter =
|
| - new TestCertFilter(true /* init synchronously */);
|
| - ClientCertStoreChromeOS store(
|
| - make_scoped_ptr(cert_filter),
|
| - ClientCertStoreChromeOS::PasswordDelegateFactory());
|
| -
|
| - scoped_refptr<X509Certificate> cert_1(
|
| - ImportCertToSlot("client_1.pem", "client_1.pk8", test_db.slot()));
|
| - ASSERT_TRUE(cert_1.get());
|
| - scoped_refptr<X509Certificate> cert_2(
|
| - ImportCertToSlot("client_2.pem", "client_2.pk8", test_db.slot()));
|
| - ASSERT_TRUE(cert_2.get());
|
| -
|
| - scoped_refptr<SSLCertRequestInfo> request_all(new SSLCertRequestInfo());
|
| -
|
| - {
|
| - base::RunLoop run_loop;
|
| - cert_filter->SetNotAllowedCert(cert_2);
|
| - CertificateList selected_certs;
|
| - store.GetClientCerts(*request_all, &selected_certs, run_loop.QuitClosure());
|
| - run_loop.Run();
|
| -
|
| - ASSERT_EQ(1u, selected_certs.size());
|
| - EXPECT_TRUE(cert_1->Equals(selected_certs[0].get()));
|
| - }
|
| -
|
| - {
|
| - base::RunLoop run_loop;
|
| - cert_filter->SetNotAllowedCert(cert_1);
|
| - CertificateList selected_certs;
|
| - store.GetClientCerts(*request_all, &selected_certs, run_loop.QuitClosure());
|
| - run_loop.Run();
|
| -
|
| - ASSERT_EQ(1u, selected_certs.size());
|
| - EXPECT_TRUE(cert_2->Equals(selected_certs[0].get()));
|
| - }
|
| -}
|
| -
|
| -} // namespace net
|
|
|