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

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

Powered by Google App Engine
This is Rietveld 408576698