Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(772)

Side by Side Diff: chrome/browser/net/sqlite_server_bound_cert_store_unittest.cc

Issue 14197014: Add TestBrowserThreadBundle into RenderViewHostTestHarness. Kill some unnecessary real threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged ToT Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/test/thread_test_helper.h"
14 #include "chrome/browser/net/sqlite_server_bound_cert_store.h" 13 #include "chrome/browser/net/sqlite_server_bound_cert_store.h"
15 #include "chrome/common/chrome_constants.h" 14 #include "chrome/common/chrome_constants.h"
16 #include "content/public/test/test_browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
16 #include "content/public/test/test_browser_thread_bundle.h"
17 #include "net/base/test_data_directory.h" 17 #include "net/base/test_data_directory.h"
18 #include "net/test/cert_test_util.h" 18 #include "net/test/cert_test_util.h"
19 #include "sql/statement.h" 19 #include "sql/statement.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "webkit/browser/quota/mock_special_storage_policy.h" 21 #include "webkit/browser/quota/mock_special_storage_policy.h"
22 22
23 using content::BrowserThread; 23 using content::BrowserThread;
24 24
25 class SQLiteServerBoundCertStoreTest : public testing::Test { 25 class SQLiteServerBoundCertStoreTest : public testing::Test {
26 public: 26 public:
27 SQLiteServerBoundCertStoreTest() 27 SQLiteServerBoundCertStoreTest()
28 : db_thread_(BrowserThread::DB), 28 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {}
29 io_thread_(BrowserThread::IO, &message_loop_) {}
30 29
31 void Load( 30 void Load(
32 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert>* certs) { 31 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert>* certs) {
33 base::RunLoop run_loop; 32 base::RunLoop run_loop;
34 store_->Load(base::Bind(&SQLiteServerBoundCertStoreTest::OnLoaded, 33 store_->Load(base::Bind(&SQLiteServerBoundCertStoreTest::OnLoaded,
35 base::Unretained(this), 34 base::Unretained(this),
36 &run_loop)); 35 &run_loop));
37 run_loop.Run(); 36 run_loop.Run();
38 certs->swap(certs_); 37 certs->swap(certs_);
39 certs_.clear(); 38 certs_.clear();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 exploded_time.day_of_week = 0; // Unused. 72 exploded_time.day_of_week = 0; // Unused.
74 exploded_time.day_of_month = 13; 73 exploded_time.day_of_month = 13;
75 exploded_time.hour = 2; 74 exploded_time.hour = 2;
76 exploded_time.minute = 23; 75 exploded_time.minute = 23;
77 exploded_time.second = 45; 76 exploded_time.second = 45;
78 exploded_time.millisecond = 0; 77 exploded_time.millisecond = 0;
79 return base::Time::FromUTCExploded(exploded_time); 78 return base::Time::FromUTCExploded(exploded_time);
80 } 79 }
81 80
82 virtual void SetUp() { 81 virtual void SetUp() {
83 db_thread_.Start();
84 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 82 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
85 store_ = new SQLiteServerBoundCertStore( 83 store_ = new SQLiteServerBoundCertStore(
86 temp_dir_.path().Append(chrome::kOBCertFilename), NULL); 84 temp_dir_.path().Append(chrome::kOBCertFilename), NULL);
87 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert> certs; 85 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert> certs;
88 Load(&certs); 86 Load(&certs);
89 ASSERT_EQ(0u, certs.size()); 87 ASSERT_EQ(0u, certs.size());
90 // Make sure the store gets written at least once. 88 // Make sure the store gets written at least once.
91 store_->AddServerBoundCert( 89 store_->AddServerBoundCert(
92 net::DefaultServerBoundCertStore::ServerBoundCert( 90 net::DefaultServerBoundCertStore::ServerBoundCert(
93 "google.com", 91 "google.com",
94 net::CLIENT_CERT_RSA_SIGN, 92 net::CLIENT_CERT_RSA_SIGN,
95 base::Time::FromInternalValue(1), 93 base::Time::FromInternalValue(1),
96 base::Time::FromInternalValue(2), 94 base::Time::FromInternalValue(2),
97 "a", "b")); 95 "a", "b"));
98 } 96 }
99 97
100 base::MessageLoopForIO message_loop_; 98 content::TestBrowserThreadBundle thread_bundle_;
101 content::TestBrowserThread db_thread_;
102 content::TestBrowserThread io_thread_;
103 base::ScopedTempDir temp_dir_; 99 base::ScopedTempDir temp_dir_;
104 scoped_refptr<SQLiteServerBoundCertStore> store_; 100 scoped_refptr<SQLiteServerBoundCertStore> store_;
105 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert> certs_; 101 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert> certs_;
106 }; 102 };
107 103
108 // Test if data is stored as expected in the SQLite database. 104 // Test if data is stored as expected in the SQLite database.
109 TEST_F(SQLiteServerBoundCertStoreTest, TestPersistence) { 105 TEST_F(SQLiteServerBoundCertStoreTest, TestPersistence) {
110 store_->AddServerBoundCert( 106 store_->AddServerBoundCert(
111 net::DefaultServerBoundCertStore::ServerBoundCert( 107 net::DefaultServerBoundCertStore::ServerBoundCert(
112 "foo.com", 108 "foo.com",
113 net::CLIENT_CERT_ECDSA_SIGN, 109 net::CLIENT_CERT_ECDSA_SIGN,
114 base::Time::FromInternalValue(3), 110 base::Time::FromInternalValue(3),
115 base::Time::FromInternalValue(4), 111 base::Time::FromInternalValue(4),
116 "c", "d")); 112 "c", "d"));
117 113
118 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert> certs; 114 ScopedVector<net::DefaultServerBoundCertStore::ServerBoundCert> certs;
119 // Replace the store effectively destroying the current one and forcing it 115 // Replace the store effectively destroying the current one and forcing it
120 // to write its data to disk. Then we can see if after loading it again it 116 // to write its data to disk. Then we can see if after loading it again it
121 // is still there. 117 // is still there.
122 store_ = NULL; 118 store_ = NULL;
123 scoped_refptr<base::ThreadTestHelper> helper(
124 new base::ThreadTestHelper(
125 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)));
126 // Make sure we wait until the destructor has run. 119 // Make sure we wait until the destructor has run.
127 ASSERT_TRUE(helper->Run()); 120 base::RunLoop().RunUntilIdle();
128 store_ = new SQLiteServerBoundCertStore( 121 store_ = new SQLiteServerBoundCertStore(
129 temp_dir_.path().Append(chrome::kOBCertFilename), NULL); 122 temp_dir_.path().Append(chrome::kOBCertFilename), NULL);
130 123
131 // Reload and test for persistence 124 // Reload and test for persistence
132 Load(&certs); 125 Load(&certs);
133 ASSERT_EQ(2U, certs.size()); 126 ASSERT_EQ(2U, certs.size());
134 net::DefaultServerBoundCertStore::ServerBoundCert* ec_cert; 127 net::DefaultServerBoundCertStore::ServerBoundCert* ec_cert;
135 net::DefaultServerBoundCertStore::ServerBoundCert* rsa_cert; 128 net::DefaultServerBoundCertStore::ServerBoundCert* rsa_cert;
136 if (net::CLIENT_CERT_RSA_SIGN == certs[0]->type()) { 129 if (net::CLIENT_CERT_RSA_SIGN == certs[0]->type()) {
137 rsa_cert = certs[0]; 130 rsa_cert = certs[0];
(...skipping 13 matching lines...) Expand all
151 ASSERT_STREQ("c", ec_cert->private_key().c_str()); 144 ASSERT_STREQ("c", ec_cert->private_key().c_str());
152 ASSERT_STREQ("d", ec_cert->cert().c_str()); 145 ASSERT_STREQ("d", ec_cert->cert().c_str());
153 ASSERT_EQ(3, ec_cert->creation_time().ToInternalValue()); 146 ASSERT_EQ(3, ec_cert->creation_time().ToInternalValue());
154 ASSERT_EQ(4, ec_cert->expiration_time().ToInternalValue()); 147 ASSERT_EQ(4, ec_cert->expiration_time().ToInternalValue());
155 148
156 // Now delete the cert and check persistence again. 149 // Now delete the cert and check persistence again.
157 store_->DeleteServerBoundCert(*certs[0]); 150 store_->DeleteServerBoundCert(*certs[0]);
158 store_->DeleteServerBoundCert(*certs[1]); 151 store_->DeleteServerBoundCert(*certs[1]);
159 store_ = NULL; 152 store_ = NULL;
160 // Make sure we wait until the destructor has run. 153 // Make sure we wait until the destructor has run.
161 ASSERT_TRUE(helper->Run()); 154 base::RunLoop().RunUntilIdle();
162 certs.clear(); 155 certs.clear();
163 store_ = new SQLiteServerBoundCertStore( 156 store_ = new SQLiteServerBoundCertStore(
164 temp_dir_.path().Append(chrome::kOBCertFilename), NULL); 157 temp_dir_.path().Append(chrome::kOBCertFilename), NULL);
165 158
166 // Reload and check if the cert has been removed. 159 // Reload and check if the cert has been removed.
167 Load(&certs); 160 Load(&certs);
168 ASSERT_EQ(0U, certs.size()); 161 ASSERT_EQ(0U, certs.size());
169 } 162 }
170 163
171 TEST_F(SQLiteServerBoundCertStoreTest, TestUpgradeV1) { 164 TEST_F(SQLiteServerBoundCertStoreTest, TestUpgradeV1) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 ASSERT_EQ(cert_data, certs[0]->cert()); 219 ASSERT_EQ(cert_data, certs[0]->cert());
227 220
228 ASSERT_STREQ("foo.com", certs[1]->server_identifier().c_str()); 221 ASSERT_STREQ("foo.com", certs[1]->server_identifier().c_str());
229 ASSERT_EQ(net::CLIENT_CERT_RSA_SIGN, certs[1]->type()); 222 ASSERT_EQ(net::CLIENT_CERT_RSA_SIGN, certs[1]->type());
230 // Undecodable cert, expiration time will be uninitialized. 223 // Undecodable cert, expiration time will be uninitialized.
231 ASSERT_EQ(base::Time(), certs[1]->expiration_time()); 224 ASSERT_EQ(base::Time(), certs[1]->expiration_time());
232 ASSERT_STREQ("\xaa", certs[1]->private_key().c_str()); 225 ASSERT_STREQ("\xaa", certs[1]->private_key().c_str());
233 ASSERT_STREQ("\xbb", certs[1]->cert().c_str()); 226 ASSERT_STREQ("\xbb", certs[1]->cert().c_str());
234 227
235 store_ = NULL; 228 store_ = NULL;
236 // Make sure we wait until the destructor has run. 229 base::RunLoop().RunUntilIdle();
237 scoped_refptr<base::ThreadTestHelper> helper(
238 new base::ThreadTestHelper(
239 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)));
240 ASSERT_TRUE(helper->Run());
241 230
242 // Verify the database version is updated. 231 // Verify the database version is updated.
243 { 232 {
244 sql::Connection db; 233 sql::Connection db;
245 ASSERT_TRUE(db.Open(v1_db_path)); 234 ASSERT_TRUE(db.Open(v1_db_path));
246 sql::Statement smt(db.GetUniqueStatement( 235 sql::Statement smt(db.GetUniqueStatement(
247 "SELECT value FROM meta WHERE key = \"version\"")); 236 "SELECT value FROM meta WHERE key = \"version\""));
248 ASSERT_TRUE(smt.Step()); 237 ASSERT_TRUE(smt.Step());
249 EXPECT_EQ(4, smt.ColumnInt(0)); 238 EXPECT_EQ(4, smt.ColumnInt(0));
250 EXPECT_FALSE(smt.Step()); 239 EXPECT_FALSE(smt.Step());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 304
316 ASSERT_STREQ("foo.com", certs[1]->server_identifier().c_str()); 305 ASSERT_STREQ("foo.com", certs[1]->server_identifier().c_str());
317 ASSERT_EQ(net::CLIENT_CERT_ECDSA_SIGN, certs[1]->type()); 306 ASSERT_EQ(net::CLIENT_CERT_ECDSA_SIGN, certs[1]->type());
318 // Undecodable cert, expiration time will be uninitialized. 307 // Undecodable cert, expiration time will be uninitialized.
319 ASSERT_EQ(base::Time(), certs[1]->expiration_time()); 308 ASSERT_EQ(base::Time(), certs[1]->expiration_time());
320 ASSERT_STREQ("\xaa", certs[1]->private_key().c_str()); 309 ASSERT_STREQ("\xaa", certs[1]->private_key().c_str());
321 ASSERT_STREQ("\xbb", certs[1]->cert().c_str()); 310 ASSERT_STREQ("\xbb", certs[1]->cert().c_str());
322 311
323 store_ = NULL; 312 store_ = NULL;
324 // Make sure we wait until the destructor has run. 313 // Make sure we wait until the destructor has run.
325 scoped_refptr<base::ThreadTestHelper> helper( 314 base::RunLoop().RunUntilIdle();
326 new base::ThreadTestHelper(
327 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)));
328 ASSERT_TRUE(helper->Run());
329 315
330 // Verify the database version is updated. 316 // Verify the database version is updated.
331 { 317 {
332 sql::Connection db; 318 sql::Connection db;
333 ASSERT_TRUE(db.Open(v2_db_path)); 319 ASSERT_TRUE(db.Open(v2_db_path));
334 sql::Statement smt(db.GetUniqueStatement( 320 sql::Statement smt(db.GetUniqueStatement(
335 "SELECT value FROM meta WHERE key = \"version\"")); 321 "SELECT value FROM meta WHERE key = \"version\""));
336 ASSERT_TRUE(smt.Step()); 322 ASSERT_TRUE(smt.Step());
337 EXPECT_EQ(4, smt.ColumnInt(0)); 323 EXPECT_EQ(4, smt.ColumnInt(0));
338 EXPECT_FALSE(smt.Step()); 324 EXPECT_FALSE(smt.Step());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 ASSERT_STREQ("foo.com", certs[1]->server_identifier().c_str()); 393 ASSERT_STREQ("foo.com", certs[1]->server_identifier().c_str());
408 ASSERT_EQ(net::CLIENT_CERT_ECDSA_SIGN, certs[1]->type()); 394 ASSERT_EQ(net::CLIENT_CERT_ECDSA_SIGN, certs[1]->type());
409 ASSERT_EQ(2000, certs[1]->expiration_time().ToInternalValue()); 395 ASSERT_EQ(2000, certs[1]->expiration_time().ToInternalValue());
410 // Undecodable cert, creation time will be uninitialized. 396 // Undecodable cert, creation time will be uninitialized.
411 ASSERT_EQ(base::Time(), certs[1]->creation_time()); 397 ASSERT_EQ(base::Time(), certs[1]->creation_time());
412 ASSERT_STREQ("\xaa", certs[1]->private_key().c_str()); 398 ASSERT_STREQ("\xaa", certs[1]->private_key().c_str());
413 ASSERT_STREQ("\xbb", certs[1]->cert().c_str()); 399 ASSERT_STREQ("\xbb", certs[1]->cert().c_str());
414 400
415 store_ = NULL; 401 store_ = NULL;
416 // Make sure we wait until the destructor has run. 402 // Make sure we wait until the destructor has run.
417 scoped_refptr<base::ThreadTestHelper> helper( 403 base::RunLoop().RunUntilIdle();
418 new base::ThreadTestHelper(
419 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)));
420 ASSERT_TRUE(helper->Run());
421 404
422 // Verify the database version is updated. 405 // Verify the database version is updated.
423 { 406 {
424 sql::Connection db; 407 sql::Connection db;
425 ASSERT_TRUE(db.Open(v3_db_path)); 408 ASSERT_TRUE(db.Open(v3_db_path));
426 sql::Statement smt(db.GetUniqueStatement( 409 sql::Statement smt(db.GetUniqueStatement(
427 "SELECT value FROM meta WHERE key = \"version\"")); 410 "SELECT value FROM meta WHERE key = \"version\""));
428 ASSERT_TRUE(smt.Step()); 411 ASSERT_TRUE(smt.Step());
429 EXPECT_EQ(4, smt.ColumnInt(0)); 412 EXPECT_EQ(4, smt.ColumnInt(0));
430 EXPECT_FALSE(smt.Step()); 413 EXPECT_FALSE(smt.Step());
431 } 414 }
432 } 415 }
433 } 416 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698