summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net/certificate_error_reporter_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/net/certificate_error_reporter_unittest.cc')
-rw-r--r--chrome/browser/net/certificate_error_reporter_unittest.cc139
1 files changed, 41 insertions, 98 deletions
diff --git a/chrome/browser/net/certificate_error_reporter_unittest.cc b/chrome/browser/net/certificate_error_reporter_unittest.cc
index fbf4c81..8641e5e 100644
--- a/chrome/browser/net/certificate_error_reporter_unittest.cc
+++ b/chrome/browser/net/certificate_error_reporter_unittest.cc
@@ -9,25 +9,19 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
-#include "base/path_service.h"
#include "base/run_loop.h"
#include "base/thread_task_runner_handle.h"
-#include "chrome/browser/net/cert_logger.pb.h"
+#include "chrome/browser/net/encrypted_cert_logger.pb.h"
#include "chrome/common/chrome_paths.h"
#include "content/public/browser/browser_thread.h"
#include "crypto/curve25519.h"
#include "net/base/load_flags.h"
#include "net/base/network_delegate_impl.h"
-#include "net/base/test_data_directory.h"
#include "net/base/upload_bytes_element_reader.h"
#include "net/base/upload_data_stream.h"
#include "net/base/upload_element_reader.h"
-#include "net/cert/cert_status_flags.h"
-#include "net/test/cert_test_util.h"
#include "net/test/url_request/url_request_failed_job.h"
#include "net/test/url_request/url_request_mock_data_job.h"
#include "net/url_request/url_request_filter.h"
@@ -38,44 +32,15 @@ using chrome_browser_net::CertificateErrorReporter;
using content::BrowserThread;
using net::CertStatus;
using net::CompletionCallback;
-using net::SSLInfo;
using net::NetworkDelegateImpl;
using net::TestURLRequestContext;
using net::URLRequest;
namespace {
-const char kHostname[] = "test.mail.google.com";
-const char kSecondRequestHostname[] = "test2.mail.google.com";
-const char kDummyFailureLog[] = "dummy failure log";
-const char kTestCertFilename[] = "test_mail_google_com.pem";
+const char kDummyReport[] = "test.mail.google.com";
+const char kSecondDummyReport[] = "test2.mail.google.com";
const uint32 kServerPublicKeyVersion = 1;
-const CertStatus kCertStatus =
- net::CERT_STATUS_COMMON_NAME_INVALID | net::CERT_STATUS_REVOKED;
-const size_t kNumCertErrors = 2;
-const chrome_browser_net::CertLoggerRequest::CertError kFirstReportedCertError =
- chrome_browser_net::CertLoggerRequest::ERR_CERT_COMMON_NAME_INVALID;
-const chrome_browser_net::CertLoggerRequest::CertError
- kSecondReportedCertError =
- chrome_browser_net::CertLoggerRequest::ERR_CERT_REVOKED;
-
-SSLInfo GetTestSSLInfo() {
- SSLInfo info;
- info.cert =
- net::ImportCertFromFile(net::GetTestCertsDirectory(), kTestCertFilename);
- info.is_issued_by_known_root = true;
- info.cert_status = kCertStatus;
- info.pinning_failure_log = kDummyFailureLog;
- return info;
-}
-
-std::string GetPEMEncodedChain() {
- base::FilePath cert_path =
- net::GetTestCertsDirectory().AppendASCII(kTestCertFilename);
- std::string cert_data;
- EXPECT_TRUE(base::ReadFileToString(cert_path, &cert_data));
- return cert_data;
-}
void EnableUrlRequestMocks(bool enable) {
net::URLRequestFilter::GetInstance()->ClearHandlers();
@@ -86,12 +51,10 @@ void EnableUrlRequestMocks(bool enable) {
net::URLRequestMockDataJob::AddUrlHandler();
}
-// Check that data uploaded in the request matches the test data (an SSL
-// report for one of the given hostnames, with the info returned by
-// |GetTestSSLInfo()|). The hostname sent in the report will be erased
-// from |expect_hostnames|.
+// Check that data uploaded in the request matches the test report
+// data. The sent reports will be erased from |expect_reports|.
void CheckUploadData(URLRequest* request,
- std::set<std::string>* expect_hostnames,
+ std::set<std::string>* expect_reports,
bool encrypted,
const uint8* server_private_key) {
const net::UploadDataStream* upload = request->get_upload();
@@ -104,7 +67,7 @@ void CheckUploadData(URLRequest* request,
ASSERT_TRUE(reader);
std::string upload_data(reader->bytes(), reader->length());
- chrome_browser_net::CertLoggerRequest uploaded_request;
+ std::string uploaded_report;
#if defined(USE_OPENSSL)
if (encrypted) {
chrome_browser_net::EncryptedCertLoggerRequest encrypted_request;
@@ -114,42 +77,23 @@ void CheckUploadData(URLRequest* request,
EXPECT_EQ(chrome_browser_net::EncryptedCertLoggerRequest::
AEAD_ECDH_AES_128_CTR_HMAC_SHA256,
encrypted_request.algorithm());
- ASSERT_TRUE(
- chrome_browser_net::CertificateErrorReporter::
- DecryptCertificateErrorReport(server_private_key, encrypted_request,
- &uploaded_request));
+ ASSERT_TRUE(CertificateErrorReporter::DecryptCertificateErrorReport(
+ server_private_key, encrypted_request, &uploaded_report));
} else {
- ASSERT_TRUE(uploaded_request.ParseFromString(upload_data));
+ uploaded_report = upload_data;
}
#else
- ASSERT_TRUE(uploaded_request.ParseFromString(upload_data));
+ uploaded_report = upload_data;
#endif
- EXPECT_EQ(1u, expect_hostnames->count(uploaded_request.hostname()));
- expect_hostnames->erase(uploaded_request.hostname());
-
- EXPECT_EQ(GetPEMEncodedChain(), uploaded_request.cert_chain());
- EXPECT_EQ(1, uploaded_request.pin().size());
- EXPECT_EQ(kDummyFailureLog, uploaded_request.pin().Get(0));
- EXPECT_EQ(2, uploaded_request.cert_error().size());
-
- std::set<chrome_browser_net::CertLoggerRequest::CertError> reported_errors;
- reported_errors.insert(
- static_cast<chrome_browser_net::CertLoggerRequest::CertError>(
- uploaded_request.cert_error().Get(0)));
- reported_errors.insert(
- static_cast<chrome_browser_net::CertLoggerRequest::CertError>(
- uploaded_request.cert_error().Get(1)));
- EXPECT_EQ(kNumCertErrors, reported_errors.size());
- EXPECT_EQ(1u, reported_errors.count(kFirstReportedCertError));
- EXPECT_EQ(1u, reported_errors.count(kSecondReportedCertError));
+ EXPECT_EQ(1u, expect_reports->count(uploaded_report));
+ expect_reports->erase(uploaded_report);
}
// A network delegate that lets tests check that a certificate error
// report was sent. It counts the number of requests and lets tests
// register a callback to run when the request is destroyed. It also
-// checks that the uploaded data is as expected (a report for
-// |kHostname| and |GetTestSSLInfo()|).
+// checks that the uploaded data is as expected.
class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
public:
TestCertificateErrorReporterNetworkDelegate()
@@ -164,8 +108,8 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
~TestCertificateErrorReporterNetworkDelegate() override {}
- void ExpectHostname(const std::string& hostname) {
- expect_hostnames_.insert(hostname);
+ void ExpectReport(const std::string& report) {
+ expect_reports_.insert(report);
}
void set_all_url_requests_destroyed_callback(
@@ -209,16 +153,14 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
EXPECT_TRUE(request->load_flags() & net::LOAD_DO_NOT_SAVE_COOKIES);
}
- std::string uploaded_request_hostname;
- CheckUploadData(request, &expect_hostnames_, expect_request_encrypted_,
+ CheckUploadData(request, &expect_reports_, expect_request_encrypted_,
server_private_key_);
- expect_hostnames_.erase(uploaded_request_hostname);
return net::OK;
}
void OnURLRequestDestroyed(URLRequest* request) override {
url_request_destroyed_callback_.Run();
- if (expect_hostnames_.empty())
+ if (expect_reports_.empty())
all_url_requests_destroyed_callback_.Run();
}
@@ -230,7 +172,7 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
base::Closure all_url_requests_destroyed_callback_;
int num_requests_;
GURL expect_url_;
- std::set<std::string> expect_hostnames_;
+ std::set<std::string> expect_reports_;
bool expect_cookies_;
bool expect_request_encrypted_;
@@ -264,7 +206,7 @@ class CertificateErrorReporterTest : public ::testing::Test {
void SendReport(CertificateErrorReporter* reporter,
TestCertificateErrorReporterNetworkDelegate* network_delegate,
- const std::string& report_hostname,
+ const std::string& report,
const GURL& url,
int request_sequence_number,
CertificateErrorReporter::ReportType type) {
@@ -272,11 +214,11 @@ void SendReport(CertificateErrorReporter* reporter,
network_delegate->set_url_request_destroyed_callback(run_loop.QuitClosure());
network_delegate->set_expect_url(url);
- network_delegate->ExpectHostname(report_hostname);
+ network_delegate->ExpectReport(report);
EXPECT_EQ(request_sequence_number, network_delegate->num_requests());
- reporter->SendReport(type, report_hostname, GetTestSSLInfo());
+ reporter->SendReport(type, report);
run_loop.Run();
EXPECT_EQ(request_sequence_number + 1, network_delegate->num_requests());
@@ -288,7 +230,7 @@ TEST_F(CertificateErrorReporterTest, PinningViolationSendReportSendsRequest) {
GURL url = net::URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
CertificateErrorReporter reporter(
context(), url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
- SendReport(&reporter, network_delegate(), kHostname, url, 0,
+ SendReport(&reporter, network_delegate(), kDummyReport, url, 0,
CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION);
}
@@ -298,7 +240,7 @@ TEST_F(CertificateErrorReporterTest, ExtendedReportingSendReportSendsRequest) {
CertificateErrorReporter https_reporter(
context(), https_url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
network_delegate()->set_expect_request_encrypted(false);
- SendReport(&https_reporter, network_delegate(), kHostname, https_url, 0,
+ SendReport(&https_reporter, network_delegate(), kDummyReport, https_url, 0,
CertificateErrorReporter::REPORT_TYPE_EXTENDED_REPORTING);
// Data should be encrypted when sent to an HTTP URL.
@@ -308,7 +250,7 @@ TEST_F(CertificateErrorReporterTest, ExtendedReportingSendReportSendsRequest) {
context(), http_url, CertificateErrorReporter::DO_NOT_SEND_COOKIES,
network_delegate()->server_public_key(), kServerPublicKeyVersion);
network_delegate()->set_expect_request_encrypted(true);
- SendReport(&http_reporter, network_delegate(), kHostname, http_url, 1,
+ SendReport(&http_reporter, network_delegate(), kDummyReport, http_url, 1,
CertificateErrorReporter::REPORT_TYPE_EXTENDED_REPORTING);
}
}
@@ -317,9 +259,9 @@ TEST_F(CertificateErrorReporterTest, SendMultipleReportsSequentially) {
GURL url = net::URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
CertificateErrorReporter reporter(
context(), url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
- SendReport(&reporter, network_delegate(), kHostname, url, 0,
+ SendReport(&reporter, network_delegate(), kDummyReport, url, 0,
CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION);
- SendReport(&reporter, network_delegate(), kSecondRequestHostname, url, 1,
+ SendReport(&reporter, network_delegate(), kDummyReport, url, 1,
CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION);
}
@@ -330,8 +272,8 @@ TEST_F(CertificateErrorReporterTest, SendMultipleReportsSimultaneously) {
GURL url = net::URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
network_delegate()->set_expect_url(url);
- network_delegate()->ExpectHostname(kHostname);
- network_delegate()->ExpectHostname(kSecondRequestHostname);
+ network_delegate()->ExpectReport(kDummyReport);
+ network_delegate()->ExpectReport(kSecondDummyReport);
CertificateErrorReporter reporter(
context(), url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
@@ -339,9 +281,9 @@ TEST_F(CertificateErrorReporterTest, SendMultipleReportsSimultaneously) {
EXPECT_EQ(0, network_delegate()->num_requests());
reporter.SendReport(CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION,
- kHostname, GetTestSSLInfo());
+ kDummyReport);
reporter.SendReport(CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION,
- kSecondRequestHostname, GetTestSSLInfo());
+ kSecondDummyReport);
run_loop.Run();
@@ -358,14 +300,14 @@ TEST_F(CertificateErrorReporterTest, PendingRequestGetsDeleted) {
GURL url = net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase(
net::URLRequestFailedJob::START, net::ERR_IO_PENDING);
network_delegate()->set_expect_url(url);
- network_delegate()->ExpectHostname(kHostname);
+ network_delegate()->ExpectReport(kDummyReport);
EXPECT_EQ(0, network_delegate()->num_requests());
scoped_ptr<CertificateErrorReporter> reporter(new CertificateErrorReporter(
context(), url, CertificateErrorReporter::DO_NOT_SEND_COOKIES));
reporter->SendReport(CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION,
- kHostname, GetTestSSLInfo());
+ kDummyReport);
reporter.reset();
run_loop.Run();
@@ -378,7 +320,7 @@ TEST_F(CertificateErrorReporterTest, ErroredRequestGetsDeleted) {
GURL url = net::URLRequestFailedJob::GetMockHttpsUrl(net::ERR_FAILED);
CertificateErrorReporter reporter(
context(), url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
- SendReport(&reporter, network_delegate(), kHostname, url, 0,
+ SendReport(&reporter, network_delegate(), kDummyReport, url, 0,
CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION);
}
@@ -391,7 +333,7 @@ TEST_F(CertificateErrorReporterTest, SendCookiesPreference) {
CertificateErrorReporter::SEND_COOKIES);
network_delegate()->set_expect_cookies(true);
- SendReport(&reporter, network_delegate(), kHostname, url, 0,
+ SendReport(&reporter, network_delegate(), kDummyReport, url, 0,
CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION);
}
@@ -401,7 +343,7 @@ TEST_F(CertificateErrorReporterTest, DoNotSendCookiesPreference) {
context(), url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
network_delegate()->set_expect_cookies(false);
- SendReport(&reporter, network_delegate(), kHostname, url, 0,
+ SendReport(&reporter, network_delegate(), kDummyReport, url, 0,
CertificateErrorReporter::REPORT_TYPE_PINNING_VIOLATION);
}
@@ -558,13 +500,14 @@ TEST_F(CertificateErrorReporterTest, DecryptExampleReport) {
0x1A, 0x7D, 0x19, 0x81, 0xF0, 0x4D, 0x20, 0x01};
chrome_browser_net::EncryptedCertLoggerRequest encrypted_request;
- chrome_browser_net::CertLoggerRequest request;
- ASSERT_TRUE(encrypted_request.ParseFromString(std::string(
- (char*) kSerializedEncryptedReport, sizeof(kSerializedEncryptedReport))));
+ std::string decrypted_serialized_report;
+ ASSERT_TRUE(encrypted_request.ParseFromString(
+ std::string(reinterpret_cast<const char*>(kSerializedEncryptedReport),
+ sizeof(kSerializedEncryptedReport))));
ASSERT_TRUE(chrome_browser_net::CertificateErrorReporter::
DecryptCertificateErrorReport(
network_delegate()->server_private_key(),
- encrypted_request, &request));
+ encrypted_request, &decrypted_serialized_report));
}
#endif