// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/cert/coalescing_cert_verifier.h" #include <memory> #include "base/functional/bind.h" #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" #include "net/base/net_errors.h" #include "net/base/test_completion_callback.h" #include "net/cert/mock_cert_verifier.h" #include "net/cert/x509_certificate.h" #include "net/log/net_log_with_source.h" #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" #include "net/test/test_with_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" IsError; IsOk; namespace net { CoalescingCertVerifierTest; // Tests that synchronous completion does not cause any issues. TEST_F(CoalescingCertVerifierTest, SyncCompletion) { … } // Test that requests with identical parameters only result in a single // underlying verification; that is, the second Request is joined to the // in-progress first Request. TEST_F(CoalescingCertVerifierTest, InflightJoin) { … } // Test that changing configurations between Requests prevents the second // Request from being attached to the first Request. There should be two // Requests to the underlying CertVerifier, and the correct results should be // received by each. TEST_F(CoalescingCertVerifierTest, DoesNotJoinAfterConfigChange) { … } // Test that the underlying CertVerifier changing configurations and triggering // an OnCertVerifierChanged notification between Requests prevents the second // Request from being attached to the first Request. There should be two // Requests to the underlying CertVerifier, and the correct results should be // received by each. TEST_F(CoalescingCertVerifierTest, DoesNotJoinAfterUnderlyingVerifierChange) { … } TEST_F(CoalescingCertVerifierTest, ObserverIsForwarded) { … } // Test that when two Requests are attached to the same Job, it's safe to // delete the second Request while processing the response to the first. The // second Request should not cause the second callback to be called. TEST_F(CoalescingCertVerifierTest, DeleteSecondRequestDuringFirstCompletion) { … } // Test that it's safe to delete the CoalescingCertVerifier during completion, // even when there are outstanding Requests to be processed. The additional // Requests should not invoke the user callback once the // CoalescingCertVerifier is deleted. TEST_F(CoalescingCertVerifierTest, DeleteVerifierDuringCompletion) { … } // Test that it's safe to delete a Request before the underlying verifier has // completed. This is a guard against memory safety (e.g. when this Request // is the last/only Request remaining). TEST_F(CoalescingCertVerifierTest, DeleteRequestBeforeCompletion) { … } // Test that it's safe to delete a Request before the underlying verifier has // completed. This is a correctness test, to ensure that other Requests are // still notified. TEST_F(CoalescingCertVerifierTest, DeleteFirstRequestBeforeCompletionStillCompletesSecondRequest) { … } TEST_F(CoalescingCertVerifierTest, DeleteRequestDuringCompletion) { … } TEST_F(CoalescingCertVerifierTest, DeleteVerifierBeforeRequest) { … } } // namespace net