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

Side by Side Diff: net/ssl/default_channel_id_store_unittest.cc

Issue 1076063002: Remove certificates from Channel ID (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor HandleResult and its callees to use scoped_ptr Created 5 years, 7 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/ssl/default_channel_id_store.h" 5 #include "net/ssl/default_channel_id_store.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "crypto/ec_private_key.h"
16 #include "net/base/net_errors.h" 17 #include "net/base/net_errors.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 19
19 namespace net { 20 namespace net {
20 21
21 namespace { 22 namespace {
22 23
23 void CallCounter(int* counter) { 24 void CallCounter(int* counter) {
24 (*counter)++; 25 (*counter)++;
25 } 26 }
26 27
27 void GetChannelIDCallbackNotCalled(int err, 28 void GetChannelIDCallbackNotCalled(
28 const std::string& server_identifier, 29 int err,
29 base::Time expiration_time, 30 const std::string& server_identifier,
30 const std::string& private_key_result, 31 scoped_ptr<crypto::ECPrivateKey> key_result) {
31 const std::string& cert_result) {
32 ADD_FAILURE() << "Unexpected callback execution."; 32 ADD_FAILURE() << "Unexpected callback execution.";
33 } 33 }
34 34
35 class AsyncGetChannelIDHelper { 35 class AsyncGetChannelIDHelper {
36 public: 36 public:
37 AsyncGetChannelIDHelper() : called_(false) {} 37 AsyncGetChannelIDHelper() : called_(false) {}
38 38
39 void Callback(int err, 39 void Callback(int err,
40 const std::string& server_identifier, 40 const std::string& server_identifier,
41 base::Time expiration_time, 41 scoped_ptr<crypto::ECPrivateKey> key_result) {
42 const std::string& private_key_result,
43 const std::string& cert_result) {
44 err_ = err; 42 err_ = err;
45 server_identifier_ = server_identifier; 43 server_identifier_ = server_identifier;
46 expiration_time_ = expiration_time; 44 key_ = key_result.Pass();
47 private_key_ = private_key_result;
48 cert_ = cert_result;
49 called_ = true; 45 called_ = true;
50 } 46 }
51 47
52 int err_; 48 int err_;
53 std::string server_identifier_; 49 std::string server_identifier_;
54 base::Time expiration_time_; 50 scoped_ptr<crypto::ECPrivateKey> key_;
55 std::string private_key_;
56 std::string cert_;
57 bool called_; 51 bool called_;
58 }; 52 };
59 53
60 void GetAllCallback( 54 void GetAllCallback(
61 ChannelIDStore::ChannelIDList* dest, 55 ChannelIDStore::ChannelIDList* dest,
62 const ChannelIDStore::ChannelIDList& result) { 56 const ChannelIDStore::ChannelIDList& result) {
63 *dest = result; 57 *dest = result;
64 } 58 }
65 59
66 class MockPersistentStore 60 class MockPersistentStore
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 103
110 void MockPersistentStore::DeleteChannelID( 104 void MockPersistentStore::DeleteChannelID(
111 const DefaultChannelIDStore::ChannelID& channel_id) { 105 const DefaultChannelIDStore::ChannelID& channel_id) {
112 channel_ids_.erase(channel_id.server_identifier()); 106 channel_ids_.erase(channel_id.server_identifier());
113 } 107 }
114 108
115 void MockPersistentStore::SetForceKeepSessionState() {} 109 void MockPersistentStore::SetForceKeepSessionState() {}
116 110
117 MockPersistentStore::~MockPersistentStore() {} 111 MockPersistentStore::~MockPersistentStore() {}
118 112
113 void ExpectKeysEqual(crypto::ECPrivateKey* key1, crypto::ECPrivateKey* key2) {
114 ASSERT_TRUE(key1);
115 ASSERT_TRUE(key2);
116 std::string public_key1, public_key2;
117 EXPECT_TRUE(key1->ExportRawPublicKey(&public_key1));
118 EXPECT_TRUE(key2->ExportRawPublicKey(&public_key2));
119 EXPECT_EQ(public_key1, public_key2);
120 }
121
119 } // namespace 122 } // namespace
120 123
121 TEST(DefaultChannelIDStoreTest, TestLoading) { 124 TEST(DefaultChannelIDStoreTest, TestLoading) {
122 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 125 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
123 126
124 persistent_store->AddChannelID( 127 persistent_store->AddChannelID(DefaultChannelIDStore::ChannelID(
125 DefaultChannelIDStore::ChannelID( 128 "google.com", base::Time(),
126 "google.com", 129 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create())));
mattm 2015/05/12 07:47:39 nit: there are a number of places make_scoped_ptr
nharper 2015/05/12 18:57:27 I searched my diff for "scoped_ptr<crypto::ECPriva
127 base::Time(), 130 persistent_store->AddChannelID(DefaultChannelIDStore::ChannelID(
128 base::Time(), 131 "verisign.com", base::Time(),
129 "a", "b")); 132 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create())));
130 persistent_store->AddChannelID(
131 DefaultChannelIDStore::ChannelID(
132 "verisign.com",
133 base::Time(),
134 base::Time(),
135 "c", "d"));
136 133
137 // Make sure channel_ids load properly. 134 // Make sure channel_ids load properly.
138 DefaultChannelIDStore store(persistent_store.get()); 135 DefaultChannelIDStore store(persistent_store.get());
139 // Load has not occurred yet. 136 // Load has not occurred yet.
140 EXPECT_EQ(0, store.GetChannelIDCount()); 137 EXPECT_EQ(0, store.GetChannelIDCount());
141 store.SetChannelID( 138 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
142 "verisign.com", 139 "verisign.com", base::Time(),
143 base::Time(), 140 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
144 base::Time(),
145 "e", "f");
146 // Wait for load & queued set task. 141 // Wait for load & queued set task.
147 base::MessageLoop::current()->RunUntilIdle(); 142 base::MessageLoop::current()->RunUntilIdle();
148 EXPECT_EQ(2, store.GetChannelIDCount()); 143 EXPECT_EQ(2, store.GetChannelIDCount());
149 store.SetChannelID( 144 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
150 "twitter.com", 145 "twitter.com", base::Time(),
151 base::Time(), 146 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
152 base::Time(),
153 "g", "h");
154 // Set should be synchronous now that load is done. 147 // Set should be synchronous now that load is done.
155 EXPECT_EQ(3, store.GetChannelIDCount()); 148 EXPECT_EQ(3, store.GetChannelIDCount());
156 } 149 }
157 150
158 //TODO(mattm): add more tests of without a persistent store? 151 //TODO(mattm): add more tests of without a persistent store?
159 TEST(DefaultChannelIDStoreTest, TestSettingAndGetting) { 152 TEST(DefaultChannelIDStoreTest, TestSettingAndGetting) {
160 // No persistent store, all calls will be synchronous. 153 // No persistent store, all calls will be synchronous.
161 DefaultChannelIDStore store(NULL); 154 DefaultChannelIDStore store(NULL);
162 base::Time expiration_time; 155 crypto::ECPrivateKey* expected_key = crypto::ECPrivateKey::Create();
163 std::string private_key, cert; 156
157 scoped_ptr<crypto::ECPrivateKey> key;
164 EXPECT_EQ(0, store.GetChannelIDCount()); 158 EXPECT_EQ(0, store.GetChannelIDCount());
165 EXPECT_EQ(ERR_FILE_NOT_FOUND, 159 EXPECT_EQ(ERR_FILE_NOT_FOUND,
166 store.GetChannelID("verisign.com", 160 store.GetChannelID("verisign.com", &key,
167 &expiration_time,
168 &private_key,
169 &cert,
170 base::Bind(&GetChannelIDCallbackNotCalled))); 161 base::Bind(&GetChannelIDCallbackNotCalled)));
171 EXPECT_TRUE(private_key.empty()); 162 EXPECT_FALSE(key);
172 EXPECT_TRUE(cert.empty()); 163 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
173 store.SetChannelID( 164 "verisign.com", base::Time::FromInternalValue(123),
174 "verisign.com", 165 scoped_ptr<crypto::ECPrivateKey>(expected_key->Copy()))));
175 base::Time::FromInternalValue(123), 166 EXPECT_EQ(OK, store.GetChannelID("verisign.com", &key,
176 base::Time::FromInternalValue(456), 167 base::Bind(&GetChannelIDCallbackNotCalled)));
177 "i", "j"); 168 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(expected_key, key.get()));
178 EXPECT_EQ(OK,
179 store.GetChannelID("verisign.com",
180 &expiration_time,
181 &private_key,
182 &cert,
183 base::Bind(&GetChannelIDCallbackNotCalled)));
184 EXPECT_EQ(456, expiration_time.ToInternalValue());
185 EXPECT_EQ("i", private_key);
186 EXPECT_EQ("j", cert);
187 } 169 }
188 170
189 TEST(DefaultChannelIDStoreTest, TestDuplicateChannelIds) { 171 TEST(DefaultChannelIDStoreTest, TestDuplicateChannelIds) {
190 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 172 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
191 DefaultChannelIDStore store(persistent_store.get()); 173 DefaultChannelIDStore store(persistent_store.get());
174 crypto::ECPrivateKey* expected_key = crypto::ECPrivateKey::Create();
192 175
193 base::Time expiration_time; 176 scoped_ptr<crypto::ECPrivateKey> key;
194 std::string private_key, cert;
195 EXPECT_EQ(0, store.GetChannelIDCount()); 177 EXPECT_EQ(0, store.GetChannelIDCount());
196 store.SetChannelID( 178 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
197 "verisign.com", 179 "verisign.com", base::Time::FromInternalValue(123),
198 base::Time::FromInternalValue(123), 180 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
199 base::Time::FromInternalValue(1234), 181 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
200 "a", "b"); 182 "verisign.com", base::Time::FromInternalValue(456),
201 store.SetChannelID( 183 scoped_ptr<crypto::ECPrivateKey>(expected_key->Copy()))));
202 "verisign.com",
203 base::Time::FromInternalValue(456),
204 base::Time::FromInternalValue(4567),
205 "c", "d");
206 184
207 // Wait for load & queued set tasks. 185 // Wait for load & queued set tasks.
208 base::MessageLoop::current()->RunUntilIdle(); 186 base::MessageLoop::current()->RunUntilIdle();
209 EXPECT_EQ(1, store.GetChannelIDCount()); 187 EXPECT_EQ(1, store.GetChannelIDCount());
210 EXPECT_EQ(OK, 188 EXPECT_EQ(OK, store.GetChannelID("verisign.com", &key,
211 store.GetChannelID("verisign.com", 189 base::Bind(&GetChannelIDCallbackNotCalled)));
212 &expiration_time, 190 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(expected_key, key.get()));
213 &private_key,
214 &cert,
215 base::Bind(&GetChannelIDCallbackNotCalled)));
216 EXPECT_EQ(4567, expiration_time.ToInternalValue());
217 EXPECT_EQ("c", private_key);
218 EXPECT_EQ("d", cert);
219 } 191 }
220 192
221 TEST(DefaultChannelIDStoreTest, TestAsyncGet) { 193 TEST(DefaultChannelIDStoreTest, TestAsyncGet) {
222 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 194 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
195 crypto::ECPrivateKey* expected_key = crypto::ECPrivateKey::Create();
223 persistent_store->AddChannelID(ChannelIDStore::ChannelID( 196 persistent_store->AddChannelID(ChannelIDStore::ChannelID(
224 "verisign.com", 197 "verisign.com", base::Time::FromInternalValue(123),
225 base::Time::FromInternalValue(123), 198 scoped_ptr<crypto::ECPrivateKey>(expected_key->Copy())));
226 base::Time::FromInternalValue(1234),
227 "a", "b"));
228 199
229 DefaultChannelIDStore store(persistent_store.get()); 200 DefaultChannelIDStore store(persistent_store.get());
230 AsyncGetChannelIDHelper helper; 201 AsyncGetChannelIDHelper helper;
231 base::Time expiration_time; 202 scoped_ptr<crypto::ECPrivateKey> key;
232 std::string private_key;
233 std::string cert = "not set";
234 EXPECT_EQ(0, store.GetChannelIDCount()); 203 EXPECT_EQ(0, store.GetChannelIDCount());
235 EXPECT_EQ(ERR_IO_PENDING, 204 EXPECT_EQ(ERR_IO_PENDING,
236 store.GetChannelID("verisign.com", 205 store.GetChannelID("verisign.com", &key,
237 &expiration_time,
238 &private_key,
239 &cert,
240 base::Bind(&AsyncGetChannelIDHelper::Callback, 206 base::Bind(&AsyncGetChannelIDHelper::Callback,
241 base::Unretained(&helper)))); 207 base::Unretained(&helper))));
242 208
243 // Wait for load & queued get tasks. 209 // Wait for load & queued get tasks.
244 base::MessageLoop::current()->RunUntilIdle(); 210 base::MessageLoop::current()->RunUntilIdle();
245 EXPECT_EQ(1, store.GetChannelIDCount()); 211 EXPECT_EQ(1, store.GetChannelIDCount());
246 EXPECT_EQ("not set", cert); 212 EXPECT_FALSE(key);
247 EXPECT_TRUE(helper.called_); 213 EXPECT_TRUE(helper.called_);
248 EXPECT_EQ(OK, helper.err_); 214 EXPECT_EQ(OK, helper.err_);
249 EXPECT_EQ("verisign.com", helper.server_identifier_); 215 EXPECT_EQ("verisign.com", helper.server_identifier_);
250 EXPECT_EQ(1234, helper.expiration_time_.ToInternalValue()); 216 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(expected_key, helper.key_.get()));
251 EXPECT_EQ("a", helper.private_key_);
252 EXPECT_EQ("b", helper.cert_);
253 } 217 }
254 218
255 TEST(DefaultChannelIDStoreTest, TestDeleteAll) { 219 TEST(DefaultChannelIDStoreTest, TestDeleteAll) {
256 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 220 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
257 DefaultChannelIDStore store(persistent_store.get()); 221 DefaultChannelIDStore store(persistent_store.get());
258 222
259 store.SetChannelID( 223 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
260 "verisign.com", 224 "verisign.com", base::Time(),
261 base::Time(), 225 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
262 base::Time(), 226 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
263 "a", "b"); 227 "google.com", base::Time(),
264 store.SetChannelID( 228 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
265 "google.com", 229 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
266 base::Time(), 230 "harvard.com", base::Time(),
267 base::Time(), 231 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
268 "c", "d");
269 store.SetChannelID(
270 "harvard.com",
271 base::Time(),
272 base::Time(),
273 "e", "f");
274 // Wait for load & queued set tasks. 232 // Wait for load & queued set tasks.
275 base::MessageLoop::current()->RunUntilIdle(); 233 base::MessageLoop::current()->RunUntilIdle();
276 234
277 EXPECT_EQ(3, store.GetChannelIDCount()); 235 EXPECT_EQ(3, store.GetChannelIDCount());
278 int delete_finished = 0; 236 int delete_finished = 0;
279 store.DeleteAll(base::Bind(&CallCounter, &delete_finished)); 237 store.DeleteAll(base::Bind(&CallCounter, &delete_finished));
280 ASSERT_EQ(1, delete_finished); 238 ASSERT_EQ(1, delete_finished);
281 EXPECT_EQ(0, store.GetChannelIDCount()); 239 EXPECT_EQ(0, store.GetChannelIDCount());
282 } 240 }
283 241
284 TEST(DefaultChannelIDStoreTest, TestAsyncGetAndDeleteAll) { 242 TEST(DefaultChannelIDStoreTest, TestAsyncGetAndDeleteAll) {
285 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 243 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
286 persistent_store->AddChannelID(ChannelIDStore::ChannelID( 244 persistent_store->AddChannelID(ChannelIDStore::ChannelID(
287 "verisign.com", 245 "verisign.com", base::Time(),
288 base::Time(), 246 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create())));
289 base::Time(),
290 "a", "b"));
291 persistent_store->AddChannelID(ChannelIDStore::ChannelID( 247 persistent_store->AddChannelID(ChannelIDStore::ChannelID(
292 "google.com", 248 "google.com", base::Time(),
293 base::Time(), 249 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create())));
294 base::Time(),
295 "c", "d"));
296 250
297 ChannelIDStore::ChannelIDList pre_channel_ids; 251 ChannelIDStore::ChannelIDList pre_channel_ids;
298 ChannelIDStore::ChannelIDList post_channel_ids; 252 ChannelIDStore::ChannelIDList post_channel_ids;
299 int delete_finished = 0; 253 int delete_finished = 0;
300 DefaultChannelIDStore store(persistent_store.get()); 254 DefaultChannelIDStore store(persistent_store.get());
301 255
302 store.GetAllChannelIDs(base::Bind(GetAllCallback, &pre_channel_ids)); 256 store.GetAllChannelIDs(base::Bind(GetAllCallback, &pre_channel_ids));
303 store.DeleteAll(base::Bind(&CallCounter, &delete_finished)); 257 store.DeleteAll(base::Bind(&CallCounter, &delete_finished));
304 store.GetAllChannelIDs(base::Bind(GetAllCallback, &post_channel_ids)); 258 store.GetAllChannelIDs(base::Bind(GetAllCallback, &post_channel_ids));
305 // Tasks have not run yet. 259 // Tasks have not run yet.
306 EXPECT_EQ(0u, pre_channel_ids.size()); 260 EXPECT_EQ(0u, pre_channel_ids.size());
307 // Wait for load & queued tasks. 261 // Wait for load & queued tasks.
308 base::MessageLoop::current()->RunUntilIdle(); 262 base::MessageLoop::current()->RunUntilIdle();
309 EXPECT_EQ(0, store.GetChannelIDCount()); 263 EXPECT_EQ(0, store.GetChannelIDCount());
310 EXPECT_EQ(2u, pre_channel_ids.size()); 264 EXPECT_EQ(2u, pre_channel_ids.size());
311 EXPECT_EQ(0u, post_channel_ids.size()); 265 EXPECT_EQ(0u, post_channel_ids.size());
312 } 266 }
313 267
314 TEST(DefaultChannelIDStoreTest, TestDelete) { 268 TEST(DefaultChannelIDStoreTest, TestDelete) {
315 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 269 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
316 DefaultChannelIDStore store(persistent_store.get()); 270 DefaultChannelIDStore store(persistent_store.get());
317 271
318 base::Time expiration_time; 272 scoped_ptr<crypto::ECPrivateKey> key;
319 std::string private_key, cert;
320 EXPECT_EQ(0, store.GetChannelIDCount()); 273 EXPECT_EQ(0, store.GetChannelIDCount());
321 store.SetChannelID( 274 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
322 "verisign.com", 275 "verisign.com", base::Time(),
323 base::Time(), 276 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
324 base::Time(),
325 "a", "b");
326 // Wait for load & queued set task. 277 // Wait for load & queued set task.
327 base::MessageLoop::current()->RunUntilIdle(); 278 base::MessageLoop::current()->RunUntilIdle();
328 279
329 store.SetChannelID( 280 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
330 "google.com", 281 "google.com", base::Time(),
331 base::Time(), 282 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
332 base::Time(),
333 "c", "d");
334 283
335 EXPECT_EQ(2, store.GetChannelIDCount()); 284 EXPECT_EQ(2, store.GetChannelIDCount());
336 int delete_finished = 0; 285 int delete_finished = 0;
337 store.DeleteChannelID("verisign.com", 286 store.DeleteChannelID("verisign.com",
338 base::Bind(&CallCounter, &delete_finished)); 287 base::Bind(&CallCounter, &delete_finished));
339 ASSERT_EQ(1, delete_finished); 288 ASSERT_EQ(1, delete_finished);
340 EXPECT_EQ(1, store.GetChannelIDCount()); 289 EXPECT_EQ(1, store.GetChannelIDCount());
341 EXPECT_EQ(ERR_FILE_NOT_FOUND, 290 EXPECT_EQ(ERR_FILE_NOT_FOUND,
342 store.GetChannelID("verisign.com", 291 store.GetChannelID("verisign.com", &key,
343 &expiration_time,
344 &private_key,
345 &cert,
346 base::Bind(&GetChannelIDCallbackNotCalled))); 292 base::Bind(&GetChannelIDCallbackNotCalled)));
347 EXPECT_EQ(OK, 293 EXPECT_EQ(OK, store.GetChannelID("google.com", &key,
348 store.GetChannelID("google.com", 294 base::Bind(&GetChannelIDCallbackNotCalled)));
349 &expiration_time,
350 &private_key,
351 &cert,
352 base::Bind(&GetChannelIDCallbackNotCalled)));
353 int delete2_finished = 0; 295 int delete2_finished = 0;
354 store.DeleteChannelID("google.com", 296 store.DeleteChannelID("google.com",
355 base::Bind(&CallCounter, &delete2_finished)); 297 base::Bind(&CallCounter, &delete2_finished));
356 ASSERT_EQ(1, delete2_finished); 298 ASSERT_EQ(1, delete2_finished);
357 EXPECT_EQ(0, store.GetChannelIDCount()); 299 EXPECT_EQ(0, store.GetChannelIDCount());
358 EXPECT_EQ(ERR_FILE_NOT_FOUND, 300 EXPECT_EQ(ERR_FILE_NOT_FOUND,
359 store.GetChannelID("google.com", 301 store.GetChannelID("google.com", &key,
360 &expiration_time,
361 &private_key,
362 &cert,
363 base::Bind(&GetChannelIDCallbackNotCalled))); 302 base::Bind(&GetChannelIDCallbackNotCalled)));
364 } 303 }
365 304
366 TEST(DefaultChannelIDStoreTest, TestAsyncDelete) { 305 TEST(DefaultChannelIDStoreTest, TestAsyncDelete) {
367 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 306 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
307 crypto::ECPrivateKey* expected_key = crypto::ECPrivateKey::Create();
368 persistent_store->AddChannelID(ChannelIDStore::ChannelID( 308 persistent_store->AddChannelID(ChannelIDStore::ChannelID(
369 "a.com", 309 "a.com", base::Time::FromInternalValue(1),
370 base::Time::FromInternalValue(1), 310 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create())));
371 base::Time::FromInternalValue(2),
372 "a", "b"));
373 persistent_store->AddChannelID(ChannelIDStore::ChannelID( 311 persistent_store->AddChannelID(ChannelIDStore::ChannelID(
374 "b.com", 312 "b.com", base::Time::FromInternalValue(3),
375 base::Time::FromInternalValue(3), 313 scoped_ptr<crypto::ECPrivateKey>(expected_key->Copy())));
376 base::Time::FromInternalValue(4),
377 "c", "d"));
378 DefaultChannelIDStore store(persistent_store.get()); 314 DefaultChannelIDStore store(persistent_store.get());
379 int delete_finished = 0; 315 int delete_finished = 0;
380 store.DeleteChannelID("a.com", 316 store.DeleteChannelID("a.com",
381 base::Bind(&CallCounter, &delete_finished)); 317 base::Bind(&CallCounter, &delete_finished));
382 318
383 AsyncGetChannelIDHelper a_helper; 319 AsyncGetChannelIDHelper a_helper;
384 AsyncGetChannelIDHelper b_helper; 320 AsyncGetChannelIDHelper b_helper;
385 base::Time expiration_time; 321 scoped_ptr<crypto::ECPrivateKey> key;
386 std::string private_key;
387 std::string cert = "not set";
388 EXPECT_EQ(0, store.GetChannelIDCount()); 322 EXPECT_EQ(0, store.GetChannelIDCount());
389 EXPECT_EQ(ERR_IO_PENDING, 323 EXPECT_EQ(ERR_IO_PENDING,
390 store.GetChannelID( 324 store.GetChannelID("a.com", &key,
391 "a.com", &expiration_time, &private_key, &cert, 325 base::Bind(&AsyncGetChannelIDHelper::Callback,
392 base::Bind(&AsyncGetChannelIDHelper::Callback, 326 base::Unretained(&a_helper))));
393 base::Unretained(&a_helper))));
394 EXPECT_EQ(ERR_IO_PENDING, 327 EXPECT_EQ(ERR_IO_PENDING,
395 store.GetChannelID( 328 store.GetChannelID("b.com", &key,
396 "b.com", &expiration_time, &private_key, &cert, 329 base::Bind(&AsyncGetChannelIDHelper::Callback,
397 base::Bind(&AsyncGetChannelIDHelper::Callback, 330 base::Unretained(&b_helper))));
398 base::Unretained(&b_helper))));
399 331
400 EXPECT_EQ(0, delete_finished); 332 EXPECT_EQ(0, delete_finished);
401 EXPECT_FALSE(a_helper.called_); 333 EXPECT_FALSE(a_helper.called_);
402 EXPECT_FALSE(b_helper.called_); 334 EXPECT_FALSE(b_helper.called_);
403 // Wait for load & queued tasks. 335 // Wait for load & queued tasks.
404 base::MessageLoop::current()->RunUntilIdle(); 336 base::MessageLoop::current()->RunUntilIdle();
405 EXPECT_EQ(1, delete_finished); 337 EXPECT_EQ(1, delete_finished);
406 EXPECT_EQ(1, store.GetChannelIDCount()); 338 EXPECT_EQ(1, store.GetChannelIDCount());
407 EXPECT_EQ("not set", cert); 339 EXPECT_FALSE(key);
408 EXPECT_TRUE(a_helper.called_); 340 EXPECT_TRUE(a_helper.called_);
409 EXPECT_EQ(ERR_FILE_NOT_FOUND, a_helper.err_); 341 EXPECT_EQ(ERR_FILE_NOT_FOUND, a_helper.err_);
410 EXPECT_EQ("a.com", a_helper.server_identifier_); 342 EXPECT_EQ("a.com", a_helper.server_identifier_);
411 EXPECT_EQ(0, a_helper.expiration_time_.ToInternalValue()); 343 EXPECT_FALSE(a_helper.key_);
412 EXPECT_EQ("", a_helper.private_key_);
413 EXPECT_EQ("", a_helper.cert_);
414 EXPECT_TRUE(b_helper.called_); 344 EXPECT_TRUE(b_helper.called_);
415 EXPECT_EQ(OK, b_helper.err_); 345 EXPECT_EQ(OK, b_helper.err_);
416 EXPECT_EQ("b.com", b_helper.server_identifier_); 346 EXPECT_EQ("b.com", b_helper.server_identifier_);
417 EXPECT_EQ(4, b_helper.expiration_time_.ToInternalValue()); 347 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(expected_key, b_helper.key_.get()));
418 EXPECT_EQ("c", b_helper.private_key_);
419 EXPECT_EQ("d", b_helper.cert_);
420 } 348 }
421 349
422 TEST(DefaultChannelIDStoreTest, TestGetAll) { 350 TEST(DefaultChannelIDStoreTest, TestGetAll) {
423 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 351 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
424 DefaultChannelIDStore store(persistent_store.get()); 352 DefaultChannelIDStore store(persistent_store.get());
425 353
426 EXPECT_EQ(0, store.GetChannelIDCount()); 354 EXPECT_EQ(0, store.GetChannelIDCount());
427 store.SetChannelID( 355 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
428 "verisign.com", 356 "verisign.com", base::Time(),
429 base::Time(), 357 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
430 base::Time(), 358 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
431 "a", "b"); 359 "google.com", base::Time(),
432 store.SetChannelID( 360 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
433 "google.com", 361 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
434 base::Time(), 362 "harvard.com", base::Time(),
435 base::Time(), 363 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
436 "c", "d"); 364 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
437 store.SetChannelID( 365 "mit.com", base::Time(),
438 "harvard.com", 366 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
439 base::Time(),
440 base::Time(),
441 "e", "f");
442 store.SetChannelID(
443 "mit.com",
444 base::Time(),
445 base::Time(),
446 "g", "h");
447 // Wait for load & queued set tasks. 367 // Wait for load & queued set tasks.
448 base::MessageLoop::current()->RunUntilIdle(); 368 base::MessageLoop::current()->RunUntilIdle();
449 369
450 EXPECT_EQ(4, store.GetChannelIDCount()); 370 EXPECT_EQ(4, store.GetChannelIDCount());
451 ChannelIDStore::ChannelIDList channel_ids; 371 ChannelIDStore::ChannelIDList channel_ids;
452 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); 372 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids));
453 EXPECT_EQ(4u, channel_ids.size()); 373 EXPECT_EQ(4u, channel_ids.size());
454 } 374 }
455 375
456 TEST(DefaultChannelIDStoreTest, TestInitializeFrom) { 376 TEST(DefaultChannelIDStoreTest, TestInitializeFrom) {
457 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 377 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
458 DefaultChannelIDStore store(persistent_store.get()); 378 DefaultChannelIDStore store(persistent_store.get());
379 crypto::ECPrivateKey* preexisting_key = crypto::ECPrivateKey::Create();
380 crypto::ECPrivateKey* both_key = crypto::ECPrivateKey::Create();
381 crypto::ECPrivateKey* copied_key = crypto::ECPrivateKey::Create();
mattm 2015/05/12 07:47:39 these should be scoped_ptrs?
nharper 2015/05/12 18:57:27 Yes - fixed here and elsewhere. I also did an asan
459 382
460 store.SetChannelID( 383 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
461 "preexisting.com", 384 "preexisting.com", base::Time(),
462 base::Time(), 385 scoped_ptr<crypto::ECPrivateKey>(preexisting_key->Copy()))));
463 base::Time(), 386 store.SetChannelID(make_scoped_ptr(new ChannelIDStore::ChannelID(
464 "a", "b"); 387 "both.com", base::Time(),
465 store.SetChannelID( 388 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create()))));
466 "both.com",
467 base::Time(),
468 base::Time(),
469 "c", "d");
470 // Wait for load & queued set tasks. 389 // Wait for load & queued set tasks.
471 base::MessageLoop::current()->RunUntilIdle(); 390 base::MessageLoop::current()->RunUntilIdle();
472 EXPECT_EQ(2, store.GetChannelIDCount()); 391 EXPECT_EQ(2, store.GetChannelIDCount());
473 392
474 ChannelIDStore::ChannelIDList source_channel_ids; 393 ChannelIDStore::ChannelIDList source_channel_ids;
475 source_channel_ids.push_back(ChannelIDStore::ChannelID( 394 source_channel_ids.push_back(ChannelIDStore::ChannelID(
476 "both.com", 395 "both.com", base::Time(),
477 base::Time(),
478 base::Time(),
479 // Key differs from above to test that existing entries are overwritten. 396 // Key differs from above to test that existing entries are overwritten.
480 "e", "f")); 397 scoped_ptr<crypto::ECPrivateKey>(both_key->Copy())));
481 source_channel_ids.push_back(ChannelIDStore::ChannelID( 398 source_channel_ids.push_back(ChannelIDStore::ChannelID(
482 "copied.com", 399 "copied.com", base::Time(),
483 base::Time(), 400 scoped_ptr<crypto::ECPrivateKey>(copied_key->Copy())));
484 base::Time(),
485 "g", "h"));
486 store.InitializeFrom(source_channel_ids); 401 store.InitializeFrom(source_channel_ids);
487 EXPECT_EQ(3, store.GetChannelIDCount()); 402 EXPECT_EQ(3, store.GetChannelIDCount());
488 403
489 ChannelIDStore::ChannelIDList channel_ids; 404 ChannelIDStore::ChannelIDList channel_ids;
490 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); 405 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids));
491 ASSERT_EQ(3u, channel_ids.size()); 406 ASSERT_EQ(3u, channel_ids.size());
492 407
493 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin(); 408 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin();
494 EXPECT_EQ("both.com", channel_id->server_identifier()); 409 EXPECT_EQ("both.com", channel_id->server_identifier());
495 EXPECT_EQ("e", channel_id->private_key()); 410 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(both_key, channel_id->key()));
496 411
497 ++channel_id; 412 ++channel_id;
498 EXPECT_EQ("copied.com", channel_id->server_identifier()); 413 EXPECT_EQ("copied.com", channel_id->server_identifier());
499 EXPECT_EQ("g", channel_id->private_key()); 414 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(copied_key, channel_id->key()));
500 415
501 ++channel_id; 416 ++channel_id;
502 EXPECT_EQ("preexisting.com", channel_id->server_identifier()); 417 EXPECT_EQ("preexisting.com", channel_id->server_identifier());
503 EXPECT_EQ("a", channel_id->private_key()); 418 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(preexisting_key, channel_id->key()));
504 } 419 }
505 420
506 TEST(DefaultChannelIDStoreTest, TestAsyncInitializeFrom) { 421 TEST(DefaultChannelIDStoreTest, TestAsyncInitializeFrom) {
507 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); 422 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore);
423 crypto::ECPrivateKey* preexisting_key = crypto::ECPrivateKey::Create();
424 crypto::ECPrivateKey* both_key = crypto::ECPrivateKey::Create();
425 crypto::ECPrivateKey* copied_key = crypto::ECPrivateKey::Create();
mattm 2015/05/12 07:47:39 these too
nharper 2015/05/12 18:57:27 Done.
426
508 persistent_store->AddChannelID(ChannelIDStore::ChannelID( 427 persistent_store->AddChannelID(ChannelIDStore::ChannelID(
509 "preexisting.com", 428 "preexisting.com", base::Time(),
510 base::Time(), 429 scoped_ptr<crypto::ECPrivateKey>(preexisting_key->Copy())));
511 base::Time(),
512 "a", "b"));
513 persistent_store->AddChannelID(ChannelIDStore::ChannelID( 430 persistent_store->AddChannelID(ChannelIDStore::ChannelID(
514 "both.com", 431 "both.com", base::Time(),
515 base::Time(), 432 scoped_ptr<crypto::ECPrivateKey>(crypto::ECPrivateKey::Create())));
516 base::Time(),
517 "c", "d"));
518 433
519 DefaultChannelIDStore store(persistent_store.get()); 434 DefaultChannelIDStore store(persistent_store.get());
520 ChannelIDStore::ChannelIDList source_channel_ids; 435 ChannelIDStore::ChannelIDList source_channel_ids;
521 source_channel_ids.push_back(ChannelIDStore::ChannelID( 436 source_channel_ids.push_back(ChannelIDStore::ChannelID(
522 "both.com", 437 "both.com", base::Time(),
523 base::Time(),
524 base::Time(),
525 // Key differs from above to test that existing entries are overwritten. 438 // Key differs from above to test that existing entries are overwritten.
526 "e", "f")); 439 scoped_ptr<crypto::ECPrivateKey>(both_key->Copy())));
527 source_channel_ids.push_back(ChannelIDStore::ChannelID( 440 source_channel_ids.push_back(ChannelIDStore::ChannelID(
528 "copied.com", 441 "copied.com", base::Time(),
529 base::Time(), 442 scoped_ptr<crypto::ECPrivateKey>(copied_key->Copy())));
530 base::Time(),
531 "g", "h"));
532 store.InitializeFrom(source_channel_ids); 443 store.InitializeFrom(source_channel_ids);
533 EXPECT_EQ(0, store.GetChannelIDCount()); 444 EXPECT_EQ(0, store.GetChannelIDCount());
534 // Wait for load & queued tasks. 445 // Wait for load & queued tasks.
535 base::MessageLoop::current()->RunUntilIdle(); 446 base::MessageLoop::current()->RunUntilIdle();
536 EXPECT_EQ(3, store.GetChannelIDCount()); 447 EXPECT_EQ(3, store.GetChannelIDCount());
537 448
538 ChannelIDStore::ChannelIDList channel_ids; 449 ChannelIDStore::ChannelIDList channel_ids;
539 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); 450 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids));
540 ASSERT_EQ(3u, channel_ids.size()); 451 ASSERT_EQ(3u, channel_ids.size());
541 452
542 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin(); 453 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin();
543 EXPECT_EQ("both.com", channel_id->server_identifier()); 454 EXPECT_EQ("both.com", channel_id->server_identifier());
544 EXPECT_EQ("e", channel_id->private_key()); 455 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(both_key, channel_id->key()));
545 456
546 ++channel_id; 457 ++channel_id;
547 EXPECT_EQ("copied.com", channel_id->server_identifier()); 458 EXPECT_EQ("copied.com", channel_id->server_identifier());
548 EXPECT_EQ("g", channel_id->private_key()); 459 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(copied_key, channel_id->key()));
549 460
550 ++channel_id; 461 ++channel_id;
551 EXPECT_EQ("preexisting.com", channel_id->server_identifier()); 462 EXPECT_EQ("preexisting.com", channel_id->server_identifier());
552 EXPECT_EQ("a", channel_id->private_key()); 463 ASSERT_NO_FATAL_FAILURE(ExpectKeysEqual(preexisting_key, channel_id->key()));
553 } 464 }
554 465
555 } // namespace net 466 } // namespace net
OLDNEW
« net/ssl/channel_id_service.cc ('K') | « net/ssl/default_channel_id_store.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698