OLD | NEW |
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 <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 bool DomainNotEquals(const std::string& domain1, const std::string& domain2) { | 125 bool DomainNotEquals(const std::string& domain1, const std::string& domain2) { |
126 return !DomainEquals(domain1, domain2); | 126 return !DomainEquals(domain1, domain2); |
127 } | 127 } |
128 | 128 |
129 } // namespace | 129 } // namespace |
130 | 130 |
131 TEST(DefaultChannelIDStoreTest, TestLoading) { | 131 TEST(DefaultChannelIDStoreTest, TestLoading) { |
132 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 132 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
133 | 133 |
134 persistent_store->AddChannelID(DefaultChannelIDStore::ChannelID( | 134 persistent_store->AddChannelID(DefaultChannelIDStore::ChannelID( |
135 "google.com", base::Time(), | 135 "google.com", base::Time(), crypto::ECPrivateKey::Create())); |
136 base::WrapUnique(crypto::ECPrivateKey::Create()))); | |
137 persistent_store->AddChannelID(DefaultChannelIDStore::ChannelID( | 136 persistent_store->AddChannelID(DefaultChannelIDStore::ChannelID( |
138 "verisign.com", base::Time(), | 137 "verisign.com", base::Time(), crypto::ECPrivateKey::Create())); |
139 base::WrapUnique(crypto::ECPrivateKey::Create()))); | |
140 | 138 |
141 // Make sure channel_ids load properly. | 139 // Make sure channel_ids load properly. |
142 DefaultChannelIDStore store(persistent_store.get()); | 140 DefaultChannelIDStore store(persistent_store.get()); |
143 // Load has not occurred yet. | 141 // Load has not occurred yet. |
144 EXPECT_EQ(0, store.GetChannelIDCount()); | 142 EXPECT_EQ(0, store.GetChannelIDCount()); |
145 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 143 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
146 "verisign.com", base::Time(), | 144 "verisign.com", base::Time(), crypto::ECPrivateKey::Create()))); |
147 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
148 // Wait for load & queued set task. | 145 // Wait for load & queued set task. |
149 base::RunLoop().RunUntilIdle(); | 146 base::RunLoop().RunUntilIdle(); |
150 EXPECT_EQ(2, store.GetChannelIDCount()); | 147 EXPECT_EQ(2, store.GetChannelIDCount()); |
151 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 148 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
152 "twitter.com", base::Time(), | 149 "twitter.com", base::Time(), crypto::ECPrivateKey::Create()))); |
153 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
154 // Set should be synchronous now that load is done. | 150 // Set should be synchronous now that load is done. |
155 EXPECT_EQ(3, store.GetChannelIDCount()); | 151 EXPECT_EQ(3, store.GetChannelIDCount()); |
156 } | 152 } |
157 | 153 |
158 //TODO(mattm): add more tests of without a persistent store? | 154 //TODO(mattm): add more tests of without a persistent store? |
159 TEST(DefaultChannelIDStoreTest, TestSettingAndGetting) { | 155 TEST(DefaultChannelIDStoreTest, TestSettingAndGetting) { |
160 // No persistent store, all calls will be synchronous. | 156 // No persistent store, all calls will be synchronous. |
161 DefaultChannelIDStore store(NULL); | 157 DefaultChannelIDStore store(NULL); |
162 std::unique_ptr<crypto::ECPrivateKey> expected_key( | 158 std::unique_ptr<crypto::ECPrivateKey> expected_key( |
163 crypto::ECPrivateKey::Create()); | 159 crypto::ECPrivateKey::Create()); |
164 | 160 |
165 std::unique_ptr<crypto::ECPrivateKey> key; | 161 std::unique_ptr<crypto::ECPrivateKey> key; |
166 EXPECT_EQ(0, store.GetChannelIDCount()); | 162 EXPECT_EQ(0, store.GetChannelIDCount()); |
167 EXPECT_EQ(ERR_FILE_NOT_FOUND, | 163 EXPECT_EQ(ERR_FILE_NOT_FOUND, |
168 store.GetChannelID("verisign.com", &key, | 164 store.GetChannelID("verisign.com", &key, |
169 base::Bind(&GetChannelIDCallbackNotCalled))); | 165 base::Bind(&GetChannelIDCallbackNotCalled))); |
170 EXPECT_FALSE(key); | 166 EXPECT_FALSE(key); |
171 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 167 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
172 "verisign.com", base::Time::FromInternalValue(123), | 168 "verisign.com", base::Time::FromInternalValue(123), |
173 base::WrapUnique(expected_key->Copy())))); | 169 expected_key->Copy()))); |
174 EXPECT_EQ(OK, store.GetChannelID("verisign.com", &key, | 170 EXPECT_EQ(OK, store.GetChannelID("verisign.com", &key, |
175 base::Bind(&GetChannelIDCallbackNotCalled))); | 171 base::Bind(&GetChannelIDCallbackNotCalled))); |
176 EXPECT_TRUE(KeysEqual(expected_key.get(), key.get())); | 172 EXPECT_TRUE(KeysEqual(expected_key.get(), key.get())); |
177 } | 173 } |
178 | 174 |
179 TEST(DefaultChannelIDStoreTest, TestDuplicateChannelIds) { | 175 TEST(DefaultChannelIDStoreTest, TestDuplicateChannelIds) { |
180 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 176 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
181 DefaultChannelIDStore store(persistent_store.get()); | 177 DefaultChannelIDStore store(persistent_store.get()); |
182 std::unique_ptr<crypto::ECPrivateKey> expected_key( | 178 std::unique_ptr<crypto::ECPrivateKey> expected_key( |
183 crypto::ECPrivateKey::Create()); | 179 crypto::ECPrivateKey::Create()); |
184 | 180 |
185 std::unique_ptr<crypto::ECPrivateKey> key; | 181 std::unique_ptr<crypto::ECPrivateKey> key; |
186 EXPECT_EQ(0, store.GetChannelIDCount()); | 182 EXPECT_EQ(0, store.GetChannelIDCount()); |
187 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 183 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
188 "verisign.com", base::Time::FromInternalValue(123), | 184 "verisign.com", base::Time::FromInternalValue(123), |
189 base::WrapUnique(crypto::ECPrivateKey::Create())))); | 185 crypto::ECPrivateKey::Create()))); |
190 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 186 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
191 "verisign.com", base::Time::FromInternalValue(456), | 187 "verisign.com", base::Time::FromInternalValue(456), |
192 base::WrapUnique(expected_key->Copy())))); | 188 expected_key->Copy()))); |
193 | 189 |
194 // Wait for load & queued set tasks. | 190 // Wait for load & queued set tasks. |
195 base::RunLoop().RunUntilIdle(); | 191 base::RunLoop().RunUntilIdle(); |
196 EXPECT_EQ(1, store.GetChannelIDCount()); | 192 EXPECT_EQ(1, store.GetChannelIDCount()); |
197 EXPECT_EQ(OK, store.GetChannelID("verisign.com", &key, | 193 EXPECT_EQ(OK, store.GetChannelID("verisign.com", &key, |
198 base::Bind(&GetChannelIDCallbackNotCalled))); | 194 base::Bind(&GetChannelIDCallbackNotCalled))); |
199 EXPECT_TRUE(KeysEqual(expected_key.get(), key.get())); | 195 EXPECT_TRUE(KeysEqual(expected_key.get(), key.get())); |
200 } | 196 } |
201 | 197 |
202 TEST(DefaultChannelIDStoreTest, TestAsyncGet) { | 198 TEST(DefaultChannelIDStoreTest, TestAsyncGet) { |
203 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 199 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
204 std::unique_ptr<crypto::ECPrivateKey> expected_key( | 200 std::unique_ptr<crypto::ECPrivateKey> expected_key( |
205 crypto::ECPrivateKey::Create()); | 201 crypto::ECPrivateKey::Create()); |
206 persistent_store->AddChannelID(ChannelIDStore::ChannelID( | 202 persistent_store->AddChannelID(ChannelIDStore::ChannelID( |
207 "verisign.com", base::Time::FromInternalValue(123), | 203 "verisign.com", base::Time::FromInternalValue(123), |
208 base::WrapUnique(expected_key->Copy()))); | 204 expected_key->Copy())); |
209 | 205 |
210 DefaultChannelIDStore store(persistent_store.get()); | 206 DefaultChannelIDStore store(persistent_store.get()); |
211 AsyncGetChannelIDHelper helper; | 207 AsyncGetChannelIDHelper helper; |
212 std::unique_ptr<crypto::ECPrivateKey> key; | 208 std::unique_ptr<crypto::ECPrivateKey> key; |
213 EXPECT_EQ(0, store.GetChannelIDCount()); | 209 EXPECT_EQ(0, store.GetChannelIDCount()); |
214 EXPECT_EQ(ERR_IO_PENDING, | 210 EXPECT_EQ(ERR_IO_PENDING, |
215 store.GetChannelID("verisign.com", &key, | 211 store.GetChannelID("verisign.com", &key, |
216 base::Bind(&AsyncGetChannelIDHelper::Callback, | 212 base::Bind(&AsyncGetChannelIDHelper::Callback, |
217 base::Unretained(&helper)))); | 213 base::Unretained(&helper)))); |
218 | 214 |
219 // Wait for load & queued get tasks. | 215 // Wait for load & queued get tasks. |
220 base::RunLoop().RunUntilIdle(); | 216 base::RunLoop().RunUntilIdle(); |
221 EXPECT_EQ(1, store.GetChannelIDCount()); | 217 EXPECT_EQ(1, store.GetChannelIDCount()); |
222 EXPECT_FALSE(key); | 218 EXPECT_FALSE(key); |
223 EXPECT_TRUE(helper.called_); | 219 EXPECT_TRUE(helper.called_); |
224 EXPECT_EQ(OK, helper.err_); | 220 EXPECT_EQ(OK, helper.err_); |
225 EXPECT_EQ("verisign.com", helper.server_identifier_); | 221 EXPECT_EQ("verisign.com", helper.server_identifier_); |
226 EXPECT_TRUE(KeysEqual(expected_key.get(), helper.key_.get())); | 222 EXPECT_TRUE(KeysEqual(expected_key.get(), helper.key_.get())); |
227 } | 223 } |
228 | 224 |
229 TEST(DefaultChannelIDStoreTest, TestDeleteAll) { | 225 TEST(DefaultChannelIDStoreTest, TestDeleteAll) { |
230 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 226 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
231 DefaultChannelIDStore store(persistent_store.get()); | 227 DefaultChannelIDStore store(persistent_store.get()); |
232 | 228 |
233 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 229 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
234 "verisign.com", base::Time(), | 230 "verisign.com", base::Time(), crypto::ECPrivateKey::Create()))); |
235 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
236 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 231 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
237 "google.com", base::Time(), | 232 "google.com", base::Time(), crypto::ECPrivateKey::Create()))); |
238 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
239 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 233 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
240 "harvard.com", base::Time(), | 234 "harvard.com", base::Time(), crypto::ECPrivateKey::Create()))); |
241 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
242 // Wait for load & queued set tasks. | 235 // Wait for load & queued set tasks. |
243 base::RunLoop().RunUntilIdle(); | 236 base::RunLoop().RunUntilIdle(); |
244 | 237 |
245 EXPECT_EQ(3, store.GetChannelIDCount()); | 238 EXPECT_EQ(3, store.GetChannelIDCount()); |
246 int delete_finished = 0; | 239 int delete_finished = 0; |
247 store.DeleteAll(base::Bind(&CallCounter, &delete_finished)); | 240 store.DeleteAll(base::Bind(&CallCounter, &delete_finished)); |
248 ASSERT_EQ(1, delete_finished); | 241 ASSERT_EQ(1, delete_finished); |
249 EXPECT_EQ(0, store.GetChannelIDCount()); | 242 EXPECT_EQ(0, store.GetChannelIDCount()); |
250 } | 243 } |
251 | 244 |
252 TEST(DefaultChannelIDStoreTest, TestDeleteForDomains) { | 245 TEST(DefaultChannelIDStoreTest, TestDeleteForDomains) { |
253 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 246 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
254 DefaultChannelIDStore store(persistent_store.get()); | 247 DefaultChannelIDStore store(persistent_store.get()); |
255 | 248 |
256 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 249 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
257 "verisign.com", base::Time(), | 250 "verisign.com", base::Time(), crypto::ECPrivateKey::Create()))); |
258 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
259 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 251 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
260 "google.com", base::Time(), | 252 "google.com", base::Time(), crypto::ECPrivateKey::Create()))); |
261 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
262 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 253 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
263 "harvard.com", base::Time(), | 254 "harvard.com", base::Time(), crypto::ECPrivateKey::Create()))); |
264 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
265 // Wait for load & queued set tasks. | 255 // Wait for load & queued set tasks. |
266 base::RunLoop().RunUntilIdle(); | 256 base::RunLoop().RunUntilIdle(); |
267 EXPECT_EQ(3, store.GetChannelIDCount()); | 257 EXPECT_EQ(3, store.GetChannelIDCount()); |
268 | 258 |
269 // Whitelist deletion. | 259 // Whitelist deletion. |
270 int deletions_finished = 0; | 260 int deletions_finished = 0; |
271 store.DeleteForDomainsCreatedBetween( | 261 store.DeleteForDomainsCreatedBetween( |
272 base::Bind(&DomainEquals, base::ConstRef(std::string("verisign.com"))), | 262 base::Bind(&DomainEquals, base::ConstRef(std::string("verisign.com"))), |
273 base::Time(), base::Time(), | 263 base::Time(), base::Time(), |
274 base::Bind(&CallCounter, &deletions_finished)); | 264 base::Bind(&CallCounter, &deletions_finished)); |
(...skipping 11 matching lines...) Expand all Loading... |
286 base::Bind(&CallCounter, &deletions_finished)); | 276 base::Bind(&CallCounter, &deletions_finished)); |
287 ASSERT_EQ(2, deletions_finished); | 277 ASSERT_EQ(2, deletions_finished); |
288 EXPECT_EQ(1, store.GetChannelIDCount()); | 278 EXPECT_EQ(1, store.GetChannelIDCount()); |
289 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); | 279 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); |
290 EXPECT_EQ("google.com", channel_ids.begin()->server_identifier()); | 280 EXPECT_EQ("google.com", channel_ids.begin()->server_identifier()); |
291 } | 281 } |
292 | 282 |
293 TEST(DefaultChannelIDStoreTest, TestAsyncGetAndDeleteAll) { | 283 TEST(DefaultChannelIDStoreTest, TestAsyncGetAndDeleteAll) { |
294 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 284 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
295 persistent_store->AddChannelID(ChannelIDStore::ChannelID( | 285 persistent_store->AddChannelID(ChannelIDStore::ChannelID( |
296 "verisign.com", base::Time(), | 286 "verisign.com", base::Time(), crypto::ECPrivateKey::Create())); |
297 base::WrapUnique(crypto::ECPrivateKey::Create()))); | |
298 persistent_store->AddChannelID(ChannelIDStore::ChannelID( | 287 persistent_store->AddChannelID(ChannelIDStore::ChannelID( |
299 "google.com", base::Time(), | 288 "google.com", base::Time(), crypto::ECPrivateKey::Create())); |
300 base::WrapUnique(crypto::ECPrivateKey::Create()))); | |
301 | 289 |
302 ChannelIDStore::ChannelIDList pre_channel_ids; | 290 ChannelIDStore::ChannelIDList pre_channel_ids; |
303 ChannelIDStore::ChannelIDList post_channel_ids; | 291 ChannelIDStore::ChannelIDList post_channel_ids; |
304 int delete_finished = 0; | 292 int delete_finished = 0; |
305 DefaultChannelIDStore store(persistent_store.get()); | 293 DefaultChannelIDStore store(persistent_store.get()); |
306 | 294 |
307 store.GetAllChannelIDs(base::Bind(GetAllCallback, &pre_channel_ids)); | 295 store.GetAllChannelIDs(base::Bind(GetAllCallback, &pre_channel_ids)); |
308 store.DeleteAll(base::Bind(&CallCounter, &delete_finished)); | 296 store.DeleteAll(base::Bind(&CallCounter, &delete_finished)); |
309 store.GetAllChannelIDs(base::Bind(GetAllCallback, &post_channel_ids)); | 297 store.GetAllChannelIDs(base::Bind(GetAllCallback, &post_channel_ids)); |
310 // Tasks have not run yet. | 298 // Tasks have not run yet. |
311 EXPECT_EQ(0u, pre_channel_ids.size()); | 299 EXPECT_EQ(0u, pre_channel_ids.size()); |
312 // Wait for load & queued tasks. | 300 // Wait for load & queued tasks. |
313 base::RunLoop().RunUntilIdle(); | 301 base::RunLoop().RunUntilIdle(); |
314 EXPECT_EQ(0, store.GetChannelIDCount()); | 302 EXPECT_EQ(0, store.GetChannelIDCount()); |
315 EXPECT_EQ(2u, pre_channel_ids.size()); | 303 EXPECT_EQ(2u, pre_channel_ids.size()); |
316 EXPECT_EQ(0u, post_channel_ids.size()); | 304 EXPECT_EQ(0u, post_channel_ids.size()); |
317 } | 305 } |
318 | 306 |
319 TEST(DefaultChannelIDStoreTest, TestDelete) { | 307 TEST(DefaultChannelIDStoreTest, TestDelete) { |
320 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 308 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
321 DefaultChannelIDStore store(persistent_store.get()); | 309 DefaultChannelIDStore store(persistent_store.get()); |
322 | 310 |
323 std::unique_ptr<crypto::ECPrivateKey> key; | 311 std::unique_ptr<crypto::ECPrivateKey> key; |
324 EXPECT_EQ(0, store.GetChannelIDCount()); | 312 EXPECT_EQ(0, store.GetChannelIDCount()); |
325 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 313 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
326 "verisign.com", base::Time(), | 314 "verisign.com", base::Time(), crypto::ECPrivateKey::Create()))); |
327 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
328 // Wait for load & queued set task. | 315 // Wait for load & queued set task. |
329 base::RunLoop().RunUntilIdle(); | 316 base::RunLoop().RunUntilIdle(); |
330 | 317 |
331 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 318 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
332 "google.com", base::Time(), | 319 "google.com", base::Time(), crypto::ECPrivateKey::Create()))); |
333 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
334 | 320 |
335 EXPECT_EQ(2, store.GetChannelIDCount()); | 321 EXPECT_EQ(2, store.GetChannelIDCount()); |
336 int delete_finished = 0; | 322 int delete_finished = 0; |
337 store.DeleteChannelID("verisign.com", | 323 store.DeleteChannelID("verisign.com", |
338 base::Bind(&CallCounter, &delete_finished)); | 324 base::Bind(&CallCounter, &delete_finished)); |
339 ASSERT_EQ(1, delete_finished); | 325 ASSERT_EQ(1, delete_finished); |
340 EXPECT_EQ(1, store.GetChannelIDCount()); | 326 EXPECT_EQ(1, store.GetChannelIDCount()); |
341 EXPECT_EQ(ERR_FILE_NOT_FOUND, | 327 EXPECT_EQ(ERR_FILE_NOT_FOUND, |
342 store.GetChannelID("verisign.com", &key, | 328 store.GetChannelID("verisign.com", &key, |
343 base::Bind(&GetChannelIDCallbackNotCalled))); | 329 base::Bind(&GetChannelIDCallbackNotCalled))); |
344 EXPECT_EQ(OK, store.GetChannelID("google.com", &key, | 330 EXPECT_EQ(OK, store.GetChannelID("google.com", &key, |
345 base::Bind(&GetChannelIDCallbackNotCalled))); | 331 base::Bind(&GetChannelIDCallbackNotCalled))); |
346 int delete2_finished = 0; | 332 int delete2_finished = 0; |
347 store.DeleteChannelID("google.com", | 333 store.DeleteChannelID("google.com", |
348 base::Bind(&CallCounter, &delete2_finished)); | 334 base::Bind(&CallCounter, &delete2_finished)); |
349 ASSERT_EQ(1, delete2_finished); | 335 ASSERT_EQ(1, delete2_finished); |
350 EXPECT_EQ(0, store.GetChannelIDCount()); | 336 EXPECT_EQ(0, store.GetChannelIDCount()); |
351 EXPECT_EQ(ERR_FILE_NOT_FOUND, | 337 EXPECT_EQ(ERR_FILE_NOT_FOUND, |
352 store.GetChannelID("google.com", &key, | 338 store.GetChannelID("google.com", &key, |
353 base::Bind(&GetChannelIDCallbackNotCalled))); | 339 base::Bind(&GetChannelIDCallbackNotCalled))); |
354 } | 340 } |
355 | 341 |
356 TEST(DefaultChannelIDStoreTest, TestAsyncDelete) { | 342 TEST(DefaultChannelIDStoreTest, TestAsyncDelete) { |
357 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 343 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
358 std::unique_ptr<crypto::ECPrivateKey> expected_key( | 344 std::unique_ptr<crypto::ECPrivateKey> expected_key( |
359 crypto::ECPrivateKey::Create()); | 345 crypto::ECPrivateKey::Create()); |
| 346 persistent_store->AddChannelID( |
| 347 ChannelIDStore::ChannelID("a.com", base::Time::FromInternalValue(1), |
| 348 crypto::ECPrivateKey::Create())); |
360 persistent_store->AddChannelID(ChannelIDStore::ChannelID( | 349 persistent_store->AddChannelID(ChannelIDStore::ChannelID( |
361 "a.com", base::Time::FromInternalValue(1), | 350 "b.com", base::Time::FromInternalValue(3), expected_key->Copy())); |
362 base::WrapUnique(crypto::ECPrivateKey::Create()))); | |
363 persistent_store->AddChannelID( | |
364 ChannelIDStore::ChannelID("b.com", base::Time::FromInternalValue(3), | |
365 base::WrapUnique(expected_key->Copy()))); | |
366 DefaultChannelIDStore store(persistent_store.get()); | 351 DefaultChannelIDStore store(persistent_store.get()); |
367 int delete_finished = 0; | 352 int delete_finished = 0; |
368 store.DeleteChannelID("a.com", | 353 store.DeleteChannelID("a.com", |
369 base::Bind(&CallCounter, &delete_finished)); | 354 base::Bind(&CallCounter, &delete_finished)); |
370 | 355 |
371 AsyncGetChannelIDHelper a_helper; | 356 AsyncGetChannelIDHelper a_helper; |
372 AsyncGetChannelIDHelper b_helper; | 357 AsyncGetChannelIDHelper b_helper; |
373 std::unique_ptr<crypto::ECPrivateKey> key; | 358 std::unique_ptr<crypto::ECPrivateKey> key; |
374 EXPECT_EQ(0, store.GetChannelIDCount()); | 359 EXPECT_EQ(0, store.GetChannelIDCount()); |
375 EXPECT_EQ(ERR_IO_PENDING, | 360 EXPECT_EQ(ERR_IO_PENDING, |
(...skipping 22 matching lines...) Expand all Loading... |
398 EXPECT_EQ("b.com", b_helper.server_identifier_); | 383 EXPECT_EQ("b.com", b_helper.server_identifier_); |
399 EXPECT_TRUE(KeysEqual(expected_key.get(), b_helper.key_.get())); | 384 EXPECT_TRUE(KeysEqual(expected_key.get(), b_helper.key_.get())); |
400 } | 385 } |
401 | 386 |
402 TEST(DefaultChannelIDStoreTest, TestGetAll) { | 387 TEST(DefaultChannelIDStoreTest, TestGetAll) { |
403 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 388 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
404 DefaultChannelIDStore store(persistent_store.get()); | 389 DefaultChannelIDStore store(persistent_store.get()); |
405 | 390 |
406 EXPECT_EQ(0, store.GetChannelIDCount()); | 391 EXPECT_EQ(0, store.GetChannelIDCount()); |
407 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 392 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
408 "verisign.com", base::Time(), | 393 "verisign.com", base::Time(), crypto::ECPrivateKey::Create()))); |
409 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
410 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 394 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
411 "google.com", base::Time(), | 395 "google.com", base::Time(), crypto::ECPrivateKey::Create()))); |
412 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
413 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 396 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
414 "harvard.com", base::Time(), | 397 "harvard.com", base::Time(), crypto::ECPrivateKey::Create()))); |
415 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
416 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 398 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
417 "mit.com", base::Time(), | 399 "mit.com", base::Time(), crypto::ECPrivateKey::Create()))); |
418 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
419 // Wait for load & queued set tasks. | 400 // Wait for load & queued set tasks. |
420 base::RunLoop().RunUntilIdle(); | 401 base::RunLoop().RunUntilIdle(); |
421 | 402 |
422 EXPECT_EQ(4, store.GetChannelIDCount()); | 403 EXPECT_EQ(4, store.GetChannelIDCount()); |
423 ChannelIDStore::ChannelIDList channel_ids; | 404 ChannelIDStore::ChannelIDList channel_ids; |
424 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); | 405 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); |
425 EXPECT_EQ(4u, channel_ids.size()); | 406 EXPECT_EQ(4u, channel_ids.size()); |
426 } | 407 } |
427 | 408 |
428 TEST(DefaultChannelIDStoreTest, TestInitializeFrom) { | 409 TEST(DefaultChannelIDStoreTest, TestInitializeFrom) { |
429 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 410 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
430 DefaultChannelIDStore store(persistent_store.get()); | 411 DefaultChannelIDStore store(persistent_store.get()); |
431 std::unique_ptr<crypto::ECPrivateKey> preexisting_key( | 412 std::unique_ptr<crypto::ECPrivateKey> preexisting_key( |
432 crypto::ECPrivateKey::Create()); | 413 crypto::ECPrivateKey::Create()); |
433 std::unique_ptr<crypto::ECPrivateKey> both_key( | 414 std::unique_ptr<crypto::ECPrivateKey> both_key( |
434 crypto::ECPrivateKey::Create()); | 415 crypto::ECPrivateKey::Create()); |
435 std::unique_ptr<crypto::ECPrivateKey> copied_key( | 416 std::unique_ptr<crypto::ECPrivateKey> copied_key( |
436 crypto::ECPrivateKey::Create()); | 417 crypto::ECPrivateKey::Create()); |
437 | 418 |
438 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 419 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
439 "preexisting.com", base::Time(), | 420 "preexisting.com", base::Time(), preexisting_key->Copy()))); |
440 base::WrapUnique(preexisting_key->Copy())))); | |
441 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( | 421 store.SetChannelID(base::WrapUnique(new ChannelIDStore::ChannelID( |
442 "both.com", base::Time(), | 422 "both.com", base::Time(), crypto::ECPrivateKey::Create()))); |
443 base::WrapUnique(crypto::ECPrivateKey::Create())))); | |
444 // Wait for load & queued set tasks. | 423 // Wait for load & queued set tasks. |
445 base::RunLoop().RunUntilIdle(); | 424 base::RunLoop().RunUntilIdle(); |
446 EXPECT_EQ(2, store.GetChannelIDCount()); | 425 EXPECT_EQ(2, store.GetChannelIDCount()); |
447 | 426 |
448 ChannelIDStore::ChannelIDList source_channel_ids; | 427 ChannelIDStore::ChannelIDList source_channel_ids; |
449 source_channel_ids.push_back(ChannelIDStore::ChannelID( | 428 source_channel_ids.push_back(ChannelIDStore::ChannelID( |
450 "both.com", base::Time(), | 429 "both.com", base::Time(), |
451 // Key differs from above to test that existing entries are overwritten. | 430 // Key differs from above to test that existing entries are overwritten. |
452 base::WrapUnique(both_key->Copy()))); | 431 both_key->Copy())); |
453 source_channel_ids.push_back(ChannelIDStore::ChannelID( | 432 source_channel_ids.push_back(ChannelIDStore::ChannelID( |
454 "copied.com", base::Time(), base::WrapUnique(copied_key->Copy()))); | 433 "copied.com", base::Time(), copied_key->Copy())); |
455 store.InitializeFrom(source_channel_ids); | 434 store.InitializeFrom(source_channel_ids); |
456 EXPECT_EQ(3, store.GetChannelIDCount()); | 435 EXPECT_EQ(3, store.GetChannelIDCount()); |
457 | 436 |
458 ChannelIDStore::ChannelIDList channel_ids; | 437 ChannelIDStore::ChannelIDList channel_ids; |
459 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); | 438 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); |
460 ASSERT_EQ(3u, channel_ids.size()); | 439 ASSERT_EQ(3u, channel_ids.size()); |
461 | 440 |
462 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin(); | 441 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin(); |
463 EXPECT_EQ("both.com", channel_id->server_identifier()); | 442 EXPECT_EQ("both.com", channel_id->server_identifier()); |
464 EXPECT_TRUE(KeysEqual(both_key.get(), channel_id->key())); | 443 EXPECT_TRUE(KeysEqual(both_key.get(), channel_id->key())); |
465 | 444 |
466 ++channel_id; | 445 ++channel_id; |
467 EXPECT_EQ("copied.com", channel_id->server_identifier()); | 446 EXPECT_EQ("copied.com", channel_id->server_identifier()); |
468 EXPECT_TRUE(KeysEqual(copied_key.get(), channel_id->key())); | 447 EXPECT_TRUE(KeysEqual(copied_key.get(), channel_id->key())); |
469 | 448 |
470 ++channel_id; | 449 ++channel_id; |
471 EXPECT_EQ("preexisting.com", channel_id->server_identifier()); | 450 EXPECT_EQ("preexisting.com", channel_id->server_identifier()); |
472 EXPECT_TRUE(KeysEqual(preexisting_key.get(), channel_id->key())); | 451 EXPECT_TRUE(KeysEqual(preexisting_key.get(), channel_id->key())); |
473 } | 452 } |
474 | 453 |
475 TEST(DefaultChannelIDStoreTest, TestAsyncInitializeFrom) { | 454 TEST(DefaultChannelIDStoreTest, TestAsyncInitializeFrom) { |
476 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); | 455 scoped_refptr<MockPersistentStore> persistent_store(new MockPersistentStore); |
477 std::unique_ptr<crypto::ECPrivateKey> preexisting_key( | 456 std::unique_ptr<crypto::ECPrivateKey> preexisting_key( |
478 crypto::ECPrivateKey::Create()); | 457 crypto::ECPrivateKey::Create()); |
479 std::unique_ptr<crypto::ECPrivateKey> both_key( | 458 std::unique_ptr<crypto::ECPrivateKey> both_key( |
480 crypto::ECPrivateKey::Create()); | 459 crypto::ECPrivateKey::Create()); |
481 std::unique_ptr<crypto::ECPrivateKey> copied_key( | 460 std::unique_ptr<crypto::ECPrivateKey> copied_key( |
482 crypto::ECPrivateKey::Create()); | 461 crypto::ECPrivateKey::Create()); |
483 | 462 |
484 persistent_store->AddChannelID( | |
485 ChannelIDStore::ChannelID("preexisting.com", base::Time(), | |
486 base::WrapUnique(preexisting_key->Copy()))); | |
487 persistent_store->AddChannelID(ChannelIDStore::ChannelID( | 463 persistent_store->AddChannelID(ChannelIDStore::ChannelID( |
488 "both.com", base::Time(), | 464 "preexisting.com", base::Time(), preexisting_key->Copy())); |
489 base::WrapUnique(crypto::ECPrivateKey::Create()))); | 465 persistent_store->AddChannelID(ChannelIDStore::ChannelID( |
| 466 "both.com", base::Time(), crypto::ECPrivateKey::Create())); |
490 | 467 |
491 DefaultChannelIDStore store(persistent_store.get()); | 468 DefaultChannelIDStore store(persistent_store.get()); |
492 ChannelIDStore::ChannelIDList source_channel_ids; | 469 ChannelIDStore::ChannelIDList source_channel_ids; |
493 source_channel_ids.push_back(ChannelIDStore::ChannelID( | 470 source_channel_ids.push_back(ChannelIDStore::ChannelID( |
494 "both.com", base::Time(), | 471 "both.com", base::Time(), |
495 // Key differs from above to test that existing entries are overwritten. | 472 // Key differs from above to test that existing entries are overwritten. |
496 base::WrapUnique(both_key->Copy()))); | 473 both_key->Copy())); |
497 source_channel_ids.push_back(ChannelIDStore::ChannelID( | 474 source_channel_ids.push_back(ChannelIDStore::ChannelID( |
498 "copied.com", base::Time(), base::WrapUnique(copied_key->Copy()))); | 475 "copied.com", base::Time(), copied_key->Copy())); |
499 store.InitializeFrom(source_channel_ids); | 476 store.InitializeFrom(source_channel_ids); |
500 EXPECT_EQ(0, store.GetChannelIDCount()); | 477 EXPECT_EQ(0, store.GetChannelIDCount()); |
501 // Wait for load & queued tasks. | 478 // Wait for load & queued tasks. |
502 base::RunLoop().RunUntilIdle(); | 479 base::RunLoop().RunUntilIdle(); |
503 EXPECT_EQ(3, store.GetChannelIDCount()); | 480 EXPECT_EQ(3, store.GetChannelIDCount()); |
504 | 481 |
505 ChannelIDStore::ChannelIDList channel_ids; | 482 ChannelIDStore::ChannelIDList channel_ids; |
506 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); | 483 store.GetAllChannelIDs(base::Bind(GetAllCallback, &channel_ids)); |
507 ASSERT_EQ(3u, channel_ids.size()); | 484 ASSERT_EQ(3u, channel_ids.size()); |
508 | 485 |
509 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin(); | 486 ChannelIDStore::ChannelIDList::iterator channel_id = channel_ids.begin(); |
510 EXPECT_EQ("both.com", channel_id->server_identifier()); | 487 EXPECT_EQ("both.com", channel_id->server_identifier()); |
511 EXPECT_TRUE(KeysEqual(both_key.get(), channel_id->key())); | 488 EXPECT_TRUE(KeysEqual(both_key.get(), channel_id->key())); |
512 | 489 |
513 ++channel_id; | 490 ++channel_id; |
514 EXPECT_EQ("copied.com", channel_id->server_identifier()); | 491 EXPECT_EQ("copied.com", channel_id->server_identifier()); |
515 EXPECT_TRUE(KeysEqual(copied_key.get(), channel_id->key())); | 492 EXPECT_TRUE(KeysEqual(copied_key.get(), channel_id->key())); |
516 | 493 |
517 ++channel_id; | 494 ++channel_id; |
518 EXPECT_EQ("preexisting.com", channel_id->server_identifier()); | 495 EXPECT_EQ("preexisting.com", channel_id->server_identifier()); |
519 EXPECT_TRUE(KeysEqual(preexisting_key.get(), channel_id->key())); | 496 EXPECT_TRUE(KeysEqual(preexisting_key.get(), channel_id->key())); |
520 } | 497 } |
521 | 498 |
522 } // namespace net | 499 } // namespace net |
OLD | NEW |