| Index: components/certificate_transparency/tree_state_tracker_unittest.cc
|
| diff --git a/components/certificate_transparency/tree_state_tracker_unittest.cc b/components/certificate_transparency/tree_state_tracker_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e97ce3da6ec6024d4e7417ad7c60d884b9a87ce2
|
| --- /dev/null
|
| +++ b/components/certificate_transparency/tree_state_tracker_unittest.cc
|
| @@ -0,0 +1,97 @@
|
| +// Copyright 2016 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 "components/certificate_transparency/tree_state_tracker.h"
|
| +
|
| +#include <string>
|
| +#include <utility>
|
| +
|
| +#include "base/feature_list.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/run_loop.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/test/scoped_feature_list.h"
|
| +#include "net/cert/ct_log_verifier.h"
|
| +#include "net/cert/ct_serialization.h"
|
| +#include "net/cert/merkle_tree_leaf.h"
|
| +#include "net/cert/signed_certificate_timestamp.h"
|
| +#include "net/cert/signed_tree_head.h"
|
| +#include "net/cert/x509_certificate.h"
|
| +#include "net/log/net_log.h"
|
| +#include "net/log/test_net_log.h"
|
| +#include "net/test/ct_test_util.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using net::ct::SignedCertificateTimestamp;
|
| +using net::ct::SignedTreeHead;
|
| +using net::ct::GetSampleSignedTreeHead;
|
| +using net::ct::GetTestPublicKeyId;
|
| +using net::ct::GetTestPublicKey;
|
| +using net::ct::kSthRootHashLength;
|
| +using net::ct::GetX509CertSCT;
|
| +
|
| +const base::Feature kCTLogAuditing = {"CertificateTransparencyLogAuditing",
|
| + base::FEATURE_DISABLED_BY_DEFAULT};
|
| +
|
| +namespace certificate_transparency {
|
| +
|
| +class TreeStateTrackerTest : public ::testing::Test {
|
| + void SetUp() override {
|
| + log_ = net::CTLogVerifier::Create(GetTestPublicKey(), "testlog",
|
| + "https://ct.example.com",
|
| + "unresolvable.invalid");
|
| +
|
| + ASSERT_TRUE(log_);
|
| + ASSERT_EQ(log_->key_id(), GetTestPublicKeyId());
|
| +
|
| + const std::string der_test_cert(net::ct::GetDerEncodedX509Cert());
|
| + chain_ = net::X509Certificate::CreateFromBytes(der_test_cert.data(),
|
| + der_test_cert.length());
|
| + ASSERT_TRUE(chain_.get());
|
| + GetX509CertSCT(&cert_sct_);
|
| + cert_sct_->origin = SignedCertificateTimestamp::SCT_FROM_OCSP_RESPONSE;
|
| + }
|
| +
|
| + protected:
|
| + base::MessageLoopForIO message_loop_;
|
| + scoped_refptr<const net::CTLogVerifier> log_;
|
| + std::unique_ptr<TreeStateTracker> tree_tracker_;
|
| + scoped_refptr<net::X509Certificate> chain_;
|
| + scoped_refptr<SignedCertificateTimestamp> cert_sct_;
|
| + net::TestNetLog net_log_;
|
| +};
|
| +
|
| +// Test that a new STH & SCT are delegated correctly to a
|
| +// SingleTreeTracker instance created by the TreeStateTracker.
|
| +// This is verified by looking for a single event on the net_log_
|
| +// passed into the TreeStateTracker c'tor.
|
| +TEST_F(TreeStateTrackerTest, TestDelegatesCorrectly) {
|
| + std::vector<scoped_refptr<const net::CTLogVerifier>> verifiers;
|
| + verifiers.push_back(log_);
|
| +
|
| + base::test::ScopedFeatureList feature_list;
|
| + feature_list.InitAndEnableFeature(kCTLogAuditing);
|
| +
|
| + tree_tracker_ = base::MakeUnique<TreeStateTracker>(verifiers, &net_log_);
|
| +
|
| + SignedTreeHead sth;
|
| + GetSampleSignedTreeHead(&sth);
|
| + ASSERT_EQ(log_->key_id(), sth.log_id);
|
| + tree_tracker_->NewSTHObserved(sth);
|
| +
|
| + ASSERT_EQ(log_->key_id(), cert_sct_->log_id);
|
| + tree_tracker_->OnSCTVerified(chain_.get(), cert_sct_.get());
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + net::ct::MerkleTreeLeaf leaf;
|
| + ASSERT_TRUE(GetMerkleTreeLeaf(chain_.get(), cert_sct_.get(), &leaf));
|
| +
|
| + std::string leaf_hash;
|
| + ASSERT_TRUE(HashMerkleTreeLeaf(leaf, &leaf_hash));
|
| + // There should be one NetLog event.
|
| + EXPECT_EQ(1u, net_log_.GetSize());
|
| +}
|
| +
|
| +} // namespace certificate_transparency
|
|
|