OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/cert/nss_cert_database_chromeos.h" | 5 #include "net/cert/nss_cert_database_chromeos.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 } | 45 } |
46 | 46 |
47 } // namespace | 47 } // namespace |
48 | 48 |
49 class NSSCertDatabaseChromeOSTest : public testing::Test, | 49 class NSSCertDatabaseChromeOSTest : public testing::Test, |
50 public CertDatabase::Observer { | 50 public CertDatabase::Observer { |
51 public: | 51 public: |
52 NSSCertDatabaseChromeOSTest() | 52 NSSCertDatabaseChromeOSTest() |
53 : scoped_task_scheduler_(base::MessageLoop::current()), | 53 : scoped_task_scheduler_(base::MessageLoop::current()), |
54 observer_added_(false), | 54 observer_added_(false), |
| 55 db_changed_count_(0), |
55 user_1_("user1"), | 56 user_1_("user1"), |
56 user_2_("user2") {} | 57 user_2_("user2") {} |
57 | 58 |
58 void SetUp() override { | 59 void SetUp() override { |
59 // Initialize nss_util slots. | 60 // Initialize nss_util slots. |
60 ASSERT_TRUE(user_1_.constructed_successfully()); | 61 ASSERT_TRUE(user_1_.constructed_successfully()); |
61 ASSERT_TRUE(user_2_.constructed_successfully()); | 62 ASSERT_TRUE(user_2_.constructed_successfully()); |
62 user_1_.FinishInit(); | 63 user_1_.FinishInit(); |
63 user_2_.FinishInit(); | 64 user_2_.FinishInit(); |
64 | 65 |
(...skipping 16 matching lines...) Expand all Loading... |
81 CertDatabase::GetInstance()->AddObserver(this); | 82 CertDatabase::GetInstance()->AddObserver(this); |
82 observer_added_ = true; | 83 observer_added_ = true; |
83 } | 84 } |
84 | 85 |
85 void TearDown() override { | 86 void TearDown() override { |
86 if (observer_added_) | 87 if (observer_added_) |
87 CertDatabase::GetInstance()->RemoveObserver(this); | 88 CertDatabase::GetInstance()->RemoveObserver(this); |
88 } | 89 } |
89 | 90 |
90 // CertDatabase::Observer: | 91 // CertDatabase::Observer: |
91 void OnCertDBChanged(const X509Certificate* cert) override { | 92 void OnCertDBChanged() override { db_changed_count_++; } |
92 added_ca_.push_back(cert ? cert->os_cert_handle() : NULL); | |
93 } | |
94 | 93 |
95 protected: | 94 protected: |
96 base::test::ScopedTaskScheduler scoped_task_scheduler_; | 95 base::test::ScopedTaskScheduler scoped_task_scheduler_; |
97 | 96 |
98 bool observer_added_; | 97 bool observer_added_; |
99 // Certificates that were passed to the CertDatabase observers. | 98 int db_changed_count_; |
100 std::vector<CERTCertificate*> added_ca_; | |
101 | 99 |
102 crypto::ScopedTestNSSChromeOSUser user_1_; | 100 crypto::ScopedTestNSSChromeOSUser user_1_; |
103 crypto::ScopedTestNSSChromeOSUser user_2_; | 101 crypto::ScopedTestNSSChromeOSUser user_2_; |
104 crypto::ScopedTestNSSDB system_db_; | 102 crypto::ScopedTestNSSDB system_db_; |
105 std::unique_ptr<NSSCertDatabaseChromeOS> db_1_; | 103 std::unique_ptr<NSSCertDatabaseChromeOS> db_1_; |
106 std::unique_ptr<NSSCertDatabaseChromeOS> db_2_; | 104 std::unique_ptr<NSSCertDatabaseChromeOS> db_2_; |
107 }; | 105 }; |
108 | 106 |
109 // Test that ListModules() on each user includes that user's NSS software slot, | 107 // Test that ListModules() on each user includes that user's NSS software slot, |
110 // and does not include the software slot of the other user. (Does not check the | 108 // and does not include the software slot of the other user. (Does not check the |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 // imported them. | 170 // imported them. |
173 EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist)); | 171 EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist)); |
174 EXPECT_FALSE(IsCertInCertificateList(certs_1[0].get(), user_2_certlist)); | 172 EXPECT_FALSE(IsCertInCertificateList(certs_1[0].get(), user_2_certlist)); |
175 | 173 |
176 EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist)); | 174 EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist)); |
177 EXPECT_FALSE(IsCertInCertificateList(certs_2[0].get(), user_1_certlist)); | 175 EXPECT_FALSE(IsCertInCertificateList(certs_2[0].get(), user_1_certlist)); |
178 | 176 |
179 // Run the message loop so the observer notifications get processed. | 177 // Run the message loop so the observer notifications get processed. |
180 base::RunLoop().RunUntilIdle(); | 178 base::RunLoop().RunUntilIdle(); |
181 // Should have gotten two OnCertDBChanged notifications. | 179 // Should have gotten two OnCertDBChanged notifications. |
182 ASSERT_EQ(2U, added_ca_.size()); | 180 ASSERT_EQ(2, db_changed_count_); |
183 // TODO(mattm): make NSSCertDatabase actually pass the cert to the callback, | |
184 // and enable these checks: | |
185 // EXPECT_EQ(certs_1[0]->os_cert_handle(), added_ca_[0]); | |
186 // EXPECT_EQ(certs_2[0]->os_cert_handle(), added_ca_[1]); | |
187 | 181 |
188 // Tests that the new certs are loaded by async ListCerts method. | 182 // Tests that the new certs are loaded by async ListCerts method. |
189 CertificateList user_1_certlist_async; | 183 CertificateList user_1_certlist_async; |
190 CertificateList user_2_certlist_async; | 184 CertificateList user_2_certlist_async; |
191 db_1_->ListCerts( | 185 db_1_->ListCerts( |
192 base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); | 186 base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); |
193 db_2_->ListCerts( | 187 db_2_->ListCerts( |
194 base::Bind(&SwapCertLists, base::Unretained(&user_2_certlist_async))); | 188 base::Bind(&SwapCertLists, base::Unretained(&user_2_certlist_async))); |
195 | 189 |
196 base::RunLoop().RunUntilIdle(); | 190 base::RunLoop().RunUntilIdle(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist)); | 234 EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist)); |
241 EXPECT_FALSE(IsCertInCertificateList(certs_1[0].get(), user_2_certlist)); | 235 EXPECT_FALSE(IsCertInCertificateList(certs_1[0].get(), user_2_certlist)); |
242 | 236 |
243 EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist)); | 237 EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist)); |
244 EXPECT_FALSE(IsCertInCertificateList(certs_2[0].get(), user_1_certlist)); | 238 EXPECT_FALSE(IsCertInCertificateList(certs_2[0].get(), user_1_certlist)); |
245 | 239 |
246 // Run the message loop so the observer notifications get processed. | 240 // Run the message loop so the observer notifications get processed. |
247 base::RunLoop().RunUntilIdle(); | 241 base::RunLoop().RunUntilIdle(); |
248 // TODO(mattm): ImportServerCert doesn't actually cause any observers to | 242 // TODO(mattm): ImportServerCert doesn't actually cause any observers to |
249 // fire. Is that correct? | 243 // fire. Is that correct? |
250 EXPECT_EQ(0U, added_ca_.size()); | 244 EXPECT_EQ(0, db_changed_count_); |
251 | 245 |
252 // Tests that the new certs are loaded by async ListCerts method. | 246 // Tests that the new certs are loaded by async ListCerts method. |
253 CertificateList user_1_certlist_async; | 247 CertificateList user_1_certlist_async; |
254 CertificateList user_2_certlist_async; | 248 CertificateList user_2_certlist_async; |
255 db_1_->ListCerts( | 249 db_1_->ListCerts( |
256 base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); | 250 base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); |
257 db_2_->ListCerts( | 251 db_2_->ListCerts( |
258 base::Bind(&SwapCertLists, base::Unretained(&user_2_certlist_async))); | 252 base::Bind(&SwapCertLists, base::Unretained(&user_2_certlist_async))); |
259 | 253 |
260 base::RunLoop().RunUntilIdle(); | 254 base::RunLoop().RunUntilIdle(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 "client_2.pem", | 306 "client_2.pem", |
313 "client_2.pk8", | 307 "client_2.pk8", |
314 system_db_.slot())); | 308 system_db_.slot())); |
315 CertificateList certs; | 309 CertificateList certs; |
316 db_2_->ListCertsSync(&certs); | 310 db_2_->ListCertsSync(&certs); |
317 EXPECT_TRUE(IsCertInCertificateList(cert_1.get(), certs)); | 311 EXPECT_TRUE(IsCertInCertificateList(cert_1.get(), certs)); |
318 EXPECT_FALSE(IsCertInCertificateList(cert_2.get(), certs)); | 312 EXPECT_FALSE(IsCertInCertificateList(cert_2.get(), certs)); |
319 } | 313 } |
320 | 314 |
321 } // namespace net | 315 } // namespace net |
OLD | NEW |