xref: /aosp_15_r20/external/cronet/net/cert/cert_database_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/cert/cert_database.h"
6 
7 #include "base/test/metrics/histogram_tester.h"
8 #include "base/test/task_environment.h"
9 #include "net/log/test_net_log.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace net {
13 
14 namespace {
15 class Observer : public CertDatabase::Observer {
16  public:
OnTrustStoreChanged()17   void OnTrustStoreChanged() override { trust_store_change_count_++; }
18 
OnClientCertStoreChanged()19   void OnClientCertStoreChanged() override { client_cert_change_count_++; }
20 
21   int trust_store_change_count_ = 0;
22   int client_cert_change_count_ = 0;
23 };
24 
25 }  // namespace
26 
TEST(CertDatabaseTest,Notifications)27 TEST(CertDatabaseTest, Notifications) {
28   base::test::SingleThreadTaskEnvironment task_environment;
29 
30   CertDatabase* cert_database = CertDatabase::GetInstance();
31   ASSERT_TRUE(cert_database);
32 
33   Observer observer_1;
34   Observer observer_2;
35 
36   cert_database->AddObserver(&observer_1);
37   cert_database->AddObserver(&observer_2);
38 
39   {
40     RecordingNetLogObserver net_log_observer;
41     base::HistogramTester histograms;
42     cert_database->NotifyObserversClientCertStoreChanged();
43     task_environment.RunUntilIdle();
44 
45     EXPECT_EQ(observer_1.trust_store_change_count_, 0);
46     EXPECT_EQ(observer_1.client_cert_change_count_, 1);
47     EXPECT_EQ(observer_2.trust_store_change_count_,
48               observer_1.trust_store_change_count_);
49     EXPECT_EQ(observer_2.client_cert_change_count_,
50               observer_1.client_cert_change_count_);
51 
52     EXPECT_EQ(net_log_observer.GetEntries().size(), 1u);
53     EXPECT_EQ(
54         net_log_observer
55             .GetEntriesWithType(
56                 NetLogEventType::CERTIFICATE_DATABASE_CLIENT_CERT_STORE_CHANGED)
57             .size(),
58         1u);
59 
60     histograms.ExpectUniqueSample(
61         "Net.Certificate.ChangeNotification",
62         CertDatabase::HistogramNotificationType::kClientCert, 1);
63   }
64 
65   {
66     RecordingNetLogObserver net_log_observer;
67     base::HistogramTester histograms;
68     cert_database->NotifyObserversTrustStoreChanged();
69     task_environment.RunUntilIdle();
70 
71     EXPECT_EQ(observer_1.trust_store_change_count_, 1);
72     EXPECT_EQ(observer_1.client_cert_change_count_, 1);
73     EXPECT_EQ(observer_2.trust_store_change_count_,
74               observer_1.trust_store_change_count_);
75     EXPECT_EQ(observer_2.client_cert_change_count_,
76               observer_1.client_cert_change_count_);
77 
78     EXPECT_EQ(net_log_observer.GetEntries().size(), 1u);
79     EXPECT_EQ(net_log_observer
80                   .GetEntriesWithType(
81                       NetLogEventType::CERTIFICATE_DATABASE_TRUST_STORE_CHANGED)
82                   .size(),
83               1u);
84 
85     histograms.ExpectUniqueSample(
86         "Net.Certificate.ChangeNotification",
87         CertDatabase::HistogramNotificationType::kTrust, 1);
88   }
89 
90   cert_database->RemoveObserver(&observer_1);
91   cert_database->RemoveObserver(&observer_2);
92 }
93 
94 }  // namespace net
95