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

Side by Side Diff: chrome/browser/sync/util/cryptographer_unittest.cc

Issue 8851006: [Sync] Replace all instances of ModelTypeSet with ModelEnumSet (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup pass #2 Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/sync/util/cryptographer.h" 5 #include "chrome/browser/sync/util/cryptographer.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "chrome/browser/password_manager/encryptor.h" 11 #include "chrome/browser/password_manager/encryptor.h"
12 #include "chrome/browser/sync/protocol/nigori_specifics.pb.h" 12 #include "chrome/browser/sync/protocol/nigori_specifics.pb.h"
13 #include "chrome/browser/sync/protocol/password_specifics.pb.h" 13 #include "chrome/browser/sync/protocol/password_specifics.pb.h"
14 #include "chrome/browser/sync/syncable/model_type_test_util.h"
14 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 namespace browser_sync { 18 namespace browser_sync {
18 19
20 using ::testing::_;
19 using ::testing::Mock; 21 using ::testing::Mock;
20 using ::testing::StrictMock; 22 using ::testing::StrictMock;
21 using syncable::ModelTypeSet; 23 using syncable::ModelEnumSet;
22 24
23 namespace { 25 namespace {
24 26
25 class MockObserver : public Cryptographer::Observer { 27 class MockObserver : public Cryptographer::Observer {
26 public: 28 public:
27 MOCK_METHOD2(OnEncryptedTypesChanged, 29 MOCK_METHOD2(OnEncryptedTypesChanged,
28 void(const syncable::ModelTypeSet&, bool)); 30 void(syncable::ModelEnumSet, bool));
29 }; 31 };
30 32
31 } // namespace 33 } // namespace
32 34
33 TEST(CryptographerTest, EmptyCantDecrypt) { 35 TEST(CryptographerTest, EmptyCantDecrypt) {
34 Cryptographer cryptographer; 36 Cryptographer cryptographer;
35 EXPECT_FALSE(cryptographer.is_ready()); 37 EXPECT_FALSE(cryptographer.is_ready());
36 38
37 sync_pb::EncryptedData encrypted; 39 sync_pb::EncryptedData encrypted;
38 encrypted.set_key_name("foo"); 40 encrypted.set_key_name("foo");
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 Cryptographer cryptographer2; 201 Cryptographer cryptographer2;
200 sync_pb::NigoriSpecifics nigori; 202 sync_pb::NigoriSpecifics nigori;
201 203
202 StrictMock<MockObserver> observer; 204 StrictMock<MockObserver> observer;
203 cryptographer.AddObserver(&observer); 205 cryptographer.AddObserver(&observer);
204 StrictMock<MockObserver> observer2; 206 StrictMock<MockObserver> observer2;
205 cryptographer2.AddObserver(&observer2); 207 cryptographer2.AddObserver(&observer2);
206 208
207 // Just set the sensitive types (shouldn't trigger any 209 // Just set the sensitive types (shouldn't trigger any
208 // notifications). 210 // notifications).
209 ModelTypeSet encrypted_types(Cryptographer::SensitiveTypes()); 211 ModelEnumSet encrypted_types(Cryptographer::SensitiveTypes());
210 cryptographer.MergeEncryptedTypesForTest(encrypted_types); 212 cryptographer.MergeEncryptedTypesForTest(encrypted_types);
211 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori); 213 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori);
212 cryptographer2.UpdateEncryptedTypesFromNigori(nigori); 214 cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
213 EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); 215 EXPECT_TRUE(encrypted_types.Equals(cryptographer.GetEncryptedTypes()));
214 EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes()); 216 EXPECT_TRUE(encrypted_types.Equals(cryptographer2.GetEncryptedTypes()));
215 217
216 Mock::VerifyAndClearExpectations(&observer); 218 Mock::VerifyAndClearExpectations(&observer);
217 Mock::VerifyAndClearExpectations(&observer2); 219 Mock::VerifyAndClearExpectations(&observer2);
218 220
219 EXPECT_CALL(observer, 221 EXPECT_CALL(observer,
220 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 222 OnEncryptedTypesChanged(
221 false)); 223 HasModelTypes(syncable::ModelEnumSet::All()),
224 false));
222 EXPECT_CALL(observer2, 225 EXPECT_CALL(observer2,
223 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 226 OnEncryptedTypesChanged(
224 false)); 227 HasModelTypes(syncable::ModelEnumSet::All()),
228 false));
225 229
226 // Set all encrypted types 230 // Set all encrypted types
227 encrypted_types = syncable::GetAllRealModelTypes(); 231 encrypted_types = syncable::ModelEnumSet::All();
228 cryptographer.MergeEncryptedTypesForTest(encrypted_types); 232 cryptographer.MergeEncryptedTypesForTest(encrypted_types);
229 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori); 233 cryptographer.UpdateNigoriFromEncryptedTypes(&nigori);
230 cryptographer2.UpdateEncryptedTypesFromNigori(nigori); 234 cryptographer2.UpdateEncryptedTypesFromNigori(nigori);
231 EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); 235 EXPECT_TRUE(encrypted_types.Equals(cryptographer.GetEncryptedTypes()));
232 EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes()); 236 EXPECT_TRUE(encrypted_types.Equals(cryptographer2.GetEncryptedTypes()));
233 237
234 // Receiving an empty nigori should not reset any encrypted types or trigger 238 // Receiving an empty nigori should not reset any encrypted types or trigger
235 // an observer notification. 239 // an observer notification.
236 Mock::VerifyAndClearExpectations(&observer); 240 Mock::VerifyAndClearExpectations(&observer);
237 nigori = sync_pb::NigoriSpecifics(); 241 nigori = sync_pb::NigoriSpecifics();
238 cryptographer.UpdateEncryptedTypesFromNigori(nigori); 242 cryptographer.UpdateEncryptedTypesFromNigori(nigori);
239 EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); 243 EXPECT_TRUE(encrypted_types.Equals(cryptographer.GetEncryptedTypes()));
240 } 244 }
241 245
242 TEST(CryptographerTest, EncryptEverythingExplicit) { 246 TEST(CryptographerTest, EncryptEverythingExplicit) {
243 ModelTypeSet real_types = syncable::GetAllRealModelTypes(); 247 ModelEnumSet real_types = syncable::ModelEnumSet::All();
244 sync_pb::NigoriSpecifics specifics; 248 sync_pb::NigoriSpecifics specifics;
245 specifics.set_encrypt_everything(true); 249 specifics.set_encrypt_everything(true);
246 250
247 Cryptographer cryptographer; 251 Cryptographer cryptographer;
248 StrictMock<MockObserver> observer; 252 StrictMock<MockObserver> observer;
249 cryptographer.AddObserver(&observer); 253 cryptographer.AddObserver(&observer);
250 254
251 EXPECT_CALL(observer, 255 EXPECT_CALL(observer,
252 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 256 OnEncryptedTypesChanged(
253 true)); 257 HasModelTypes(syncable::ModelEnumSet::All()), true));
254 258
255 EXPECT_FALSE(cryptographer.encrypt_everything()); 259 EXPECT_FALSE(cryptographer.encrypt_everything());
256 ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); 260 ModelEnumSet encrypted_types = cryptographer.GetEncryptedTypes();
257 for (ModelTypeSet::iterator iter = real_types.begin(); 261 for (ModelEnumSet::Iterator iter = real_types.First();
258 iter != real_types.end(); 262 iter.Good(); iter.Inc()) {
259 ++iter) { 263 if (iter.Get() == syncable::PASSWORDS || iter.Get() == syncable::NIGORI)
260 if (*iter == syncable::PASSWORDS || *iter == syncable::NIGORI) 264 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
261 EXPECT_EQ(1U, encrypted_types.count(*iter));
262 else 265 else
263 EXPECT_EQ(0U, encrypted_types.count(*iter)); 266 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
264 } 267 }
265 268
266 cryptographer.UpdateEncryptedTypesFromNigori(specifics); 269 cryptographer.UpdateEncryptedTypesFromNigori(specifics);
267 270
268 EXPECT_TRUE(cryptographer.encrypt_everything()); 271 EXPECT_TRUE(cryptographer.encrypt_everything());
269 encrypted_types = cryptographer.GetEncryptedTypes(); 272 encrypted_types = cryptographer.GetEncryptedTypes();
270 for (ModelTypeSet::iterator iter = real_types.begin(); 273 for (ModelEnumSet::Iterator iter = real_types.First();
271 iter != real_types.end(); 274 iter.Good(); iter.Inc()) {
272 ++iter) { 275 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
273 EXPECT_EQ(1U, encrypted_types.count(*iter));
274 } 276 }
275 277
276 // Shouldn't trigger another notification. 278 // Shouldn't trigger another notification.
277 specifics.set_encrypt_everything(true); 279 specifics.set_encrypt_everything(true);
278 280
279 cryptographer.RemoveObserver(&observer); 281 cryptographer.RemoveObserver(&observer);
280 } 282 }
281 283
282 TEST(CryptographerTest, EncryptEverythingImplicit) { 284 TEST(CryptographerTest, EncryptEverythingImplicit) {
283 ModelTypeSet real_types = syncable::GetAllRealModelTypes(); 285 ModelEnumSet real_types = syncable::ModelEnumSet::All();
284 sync_pb::NigoriSpecifics specifics; 286 sync_pb::NigoriSpecifics specifics;
285 specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything 287 specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything
286 288
287 Cryptographer cryptographer; 289 Cryptographer cryptographer;
288 StrictMock<MockObserver> observer; 290 StrictMock<MockObserver> observer;
289 cryptographer.AddObserver(&observer); 291 cryptographer.AddObserver(&observer);
290 292
291 EXPECT_CALL(observer, 293 EXPECT_CALL(observer,
292 OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), 294 OnEncryptedTypesChanged(
293 true)); 295 HasModelTypes(syncable::ModelEnumSet::All()), true));
294 296
295 EXPECT_FALSE(cryptographer.encrypt_everything()); 297 EXPECT_FALSE(cryptographer.encrypt_everything());
296 ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); 298 ModelEnumSet encrypted_types = cryptographer.GetEncryptedTypes();
297 for (ModelTypeSet::iterator iter = real_types.begin(); 299 for (ModelEnumSet::Iterator iter = real_types.First();
298 iter != real_types.end(); 300 iter.Good(); iter.Inc()) {
299 ++iter) { 301 if (iter.Get() == syncable::PASSWORDS || iter.Get() == syncable::NIGORI)
300 if (*iter == syncable::PASSWORDS || *iter == syncable::NIGORI) 302 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
301 EXPECT_EQ(1U, encrypted_types.count(*iter));
302 else 303 else
303 EXPECT_EQ(0U, encrypted_types.count(*iter)); 304 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
304 } 305 }
305 306
306 cryptographer.UpdateEncryptedTypesFromNigori(specifics); 307 cryptographer.UpdateEncryptedTypesFromNigori(specifics);
307 308
308 EXPECT_TRUE(cryptographer.encrypt_everything()); 309 EXPECT_TRUE(cryptographer.encrypt_everything());
309 encrypted_types = cryptographer.GetEncryptedTypes(); 310 encrypted_types = cryptographer.GetEncryptedTypes();
310 for (ModelTypeSet::iterator iter = real_types.begin(); 311 for (ModelEnumSet::Iterator iter = real_types.First();
311 iter != real_types.end(); 312 iter.Good(); iter.Inc()) {
312 ++iter) { 313 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
313 EXPECT_EQ(1U, encrypted_types.count(*iter));
314 } 314 }
315 315
316 // Shouldn't trigger another notification. 316 // Shouldn't trigger another notification.
317 specifics.set_encrypt_everything(true); 317 specifics.set_encrypt_everything(true);
318 318
319 cryptographer.RemoveObserver(&observer); 319 cryptographer.RemoveObserver(&observer);
320 } 320 }
321 321
322 TEST(CryptographerTest, UnknownSensitiveTypes) { 322 TEST(CryptographerTest, UnknownSensitiveTypes) {
323 ModelTypeSet real_types = syncable::GetAllRealModelTypes(); 323 ModelEnumSet real_types = syncable::ModelEnumSet::All();
324 sync_pb::NigoriSpecifics specifics; 324 sync_pb::NigoriSpecifics specifics;
325 // Explicitly setting encrypt everything should override logic for implicit 325 // Explicitly setting encrypt everything should override logic for implicit
326 // encrypt everything. 326 // encrypt everything.
327 specifics.set_encrypt_everything(false); 327 specifics.set_encrypt_everything(false);
328 specifics.set_encrypt_bookmarks(true); 328 specifics.set_encrypt_bookmarks(true);
329 329
330 Cryptographer cryptographer; 330 Cryptographer cryptographer;
331 StrictMock<MockObserver> observer; 331 StrictMock<MockObserver> observer;
332 cryptographer.AddObserver(&observer); 332 cryptographer.AddObserver(&observer);
333 333
334 syncable::ModelTypeSet expected_encrypted_types = 334 syncable::ModelEnumSet expected_encrypted_types =
335 Cryptographer::SensitiveTypes(); 335 Cryptographer::SensitiveTypes();
336 expected_encrypted_types.insert(syncable::BOOKMARKS); 336 expected_encrypted_types.Put(syncable::BOOKMARKS);
337 337
338 EXPECT_CALL(observer, 338 EXPECT_CALL(observer,
339 OnEncryptedTypesChanged(expected_encrypted_types, 339 OnEncryptedTypesChanged(
340 false)); 340 HasModelTypes(expected_encrypted_types), false));
341 341
342 EXPECT_FALSE(cryptographer.encrypt_everything()); 342 EXPECT_FALSE(cryptographer.encrypt_everything());
343 ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); 343 ModelEnumSet encrypted_types = cryptographer.GetEncryptedTypes();
344 for (ModelTypeSet::iterator iter = real_types.begin(); 344 for (ModelEnumSet::Iterator iter = real_types.First();
345 iter != real_types.end(); 345 iter.Good(); iter.Inc()) {
346 ++iter) { 346 if (iter.Get() == syncable::PASSWORDS || iter.Get() == syncable::NIGORI)
347 if (*iter == syncable::PASSWORDS || *iter == syncable::NIGORI) 347 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
348 EXPECT_EQ(1U, encrypted_types.count(*iter));
349 else 348 else
350 EXPECT_EQ(0U, encrypted_types.count(*iter)); 349 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
351 } 350 }
352 351
353 cryptographer.UpdateEncryptedTypesFromNigori(specifics); 352 cryptographer.UpdateEncryptedTypesFromNigori(specifics);
354 353
355 EXPECT_FALSE(cryptographer.encrypt_everything()); 354 EXPECT_FALSE(cryptographer.encrypt_everything());
356 encrypted_types = cryptographer.GetEncryptedTypes(); 355 encrypted_types = cryptographer.GetEncryptedTypes();
357 for (ModelTypeSet::iterator iter = real_types.begin(); 356 for (ModelEnumSet::Iterator iter = real_types.First();
358 iter != real_types.end(); 357 iter.Good(); iter.Inc()) {
359 ++iter) { 358 if (iter.Get() == syncable::PASSWORDS ||
360 if (*iter == syncable::PASSWORDS || 359 iter.Get() == syncable::NIGORI ||
361 *iter == syncable::NIGORI || 360 iter.Get() == syncable::BOOKMARKS)
362 *iter == syncable::BOOKMARKS) 361 EXPECT_TRUE(encrypted_types.Has(iter.Get()));
363 EXPECT_EQ(1U, encrypted_types.count(*iter));
364 else 362 else
365 EXPECT_EQ(0U, encrypted_types.count(*iter)); 363 EXPECT_FALSE(encrypted_types.Has(iter.Get()));
366 } 364 }
367 365
368 cryptographer.RemoveObserver(&observer); 366 cryptographer.RemoveObserver(&observer);
369 } 367 }
370 368
371 } // namespace browser_sync 369 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/util/cryptographer.cc ('k') | chrome/browser/ui/webui/sync_setup_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698