OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Unit tests for the SyncApi. Note that a lot of the underlying | 5 // Unit tests for the SyncApi. Note that a lot of the underlying |
6 // functionality is provided by the Syncable layer, which has its own | 6 // functionality is provided by the Syncable layer, which has its own |
7 // unit tests. We'll test SyncApi specific things in this harness. | 7 // unit tests. We'll test SyncApi specific things in this harness. |
8 | 8 |
9 #include <cstddef> | 9 #include <cstddef> |
10 #include <map> | 10 #include <map> |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
56 #include "sync/protocol/preference_specifics.pb.h" | 56 #include "sync/protocol/preference_specifics.pb.h" |
57 #include "sync/protocol/proto_value_conversions.h" | 57 #include "sync/protocol/proto_value_conversions.h" |
58 #include "sync/protocol/sync.pb.h" | 58 #include "sync/protocol/sync.pb.h" |
59 #include "sync/sessions/sync_session.h" | 59 #include "sync/sessions/sync_session.h" |
60 #include "sync/syncable/directory.h" | 60 #include "sync/syncable/directory.h" |
61 #include "sync/syncable/entry.h" | 61 #include "sync/syncable/entry.h" |
62 #include "sync/syncable/mutable_entry.h" | 62 #include "sync/syncable/mutable_entry.h" |
63 #include "sync/syncable/nigori_util.h" | 63 #include "sync/syncable/nigori_util.h" |
64 #include "sync/syncable/syncable_id.h" | 64 #include "sync/syncable/syncable_id.h" |
65 #include "sync/syncable/syncable_read_transaction.h" | 65 #include "sync/syncable/syncable_read_transaction.h" |
66 #include "sync/syncable/syncable_util.h" | |
66 #include "sync/syncable/syncable_write_transaction.h" | 67 #include "sync/syncable/syncable_write_transaction.h" |
67 #include "sync/test/callback_counter.h" | 68 #include "sync/test/callback_counter.h" |
68 #include "sync/test/engine/fake_sync_scheduler.h" | 69 #include "sync/test/engine/fake_sync_scheduler.h" |
69 #include "sync/test/fake_encryptor.h" | 70 #include "sync/test/fake_encryptor.h" |
70 #include "sync/test/fake_extensions_activity_monitor.h" | 71 #include "sync/test/fake_extensions_activity_monitor.h" |
71 #include "sync/util/cryptographer.h" | 72 #include "sync/util/cryptographer.h" |
72 #include "sync/util/extensions_activity_monitor.h" | 73 #include "sync/util/extensions_activity_monitor.h" |
73 #include "sync/util/test_unrecoverable_error_handler.h" | 74 #include "sync/util/test_unrecoverable_error_handler.h" |
74 #include "sync/util/time.h" | 75 #include "sync/util/time.h" |
75 #include "testing/gmock/include/gmock/gmock.h" | 76 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
273 node.InitByClientTagLookup(BOOKMARKS, "testtag")); | 274 node.InitByClientTagLookup(BOOKMARKS, "testtag")); |
274 | 275 |
275 ReadNode root_node(&trans); | 276 ReadNode root_node(&trans); |
276 root_node.InitByRootLookup(); | 277 root_node.InitByRootLookup(); |
277 EXPECT_NE(node.GetId(), 0); | 278 EXPECT_NE(node.GetId(), 0); |
278 EXPECT_EQ(node.GetId(), root_node.GetFirstChildId()); | 279 EXPECT_EQ(node.GetId(), root_node.GetFirstChildId()); |
279 } | 280 } |
280 } | 281 } |
281 | 282 |
282 TEST_F(SyncApiTest, GenerateSyncableHash) { | 283 TEST_F(SyncApiTest, GenerateSyncableHash) { |
283 EXPECT_EQ("OyaXV5mEzrPS4wbogmtKvRfekAI=", | 284 EXPECT_EQ("TrJxl8908A2qDbaLzjxjyUzskpY=", |
284 BaseNode::GenerateSyncableHash(BOOKMARKS, "tag1")); | 285 syncable::GenerateSyncableHash(THEMES, "tag1")); |
285 EXPECT_EQ("iNFQtRFQb+IZcn1kKUJEZDDkLs4=", | 286 EXPECT_EQ("iNFQtRFQb+IZcn1kKUJEZDDkLs4=", |
286 BaseNode::GenerateSyncableHash(PREFERENCES, "tag1")); | 287 syncable::GenerateSyncableHash(PREFERENCES, "tag1")); |
287 EXPECT_EQ("gO1cPZQXaM73sHOvSA+tKCKFs58=", | 288 EXPECT_EQ("gO1cPZQXaM73sHOvSA+tKCKFs58=", |
288 BaseNode::GenerateSyncableHash(AUTOFILL, "tag1")); | 289 syncable::GenerateSyncableHash(AUTOFILL, "tag1")); |
289 | 290 |
290 EXPECT_EQ("A0eYIHXM1/jVwKDDp12Up20IkKY=", | 291 EXPECT_EQ("YCbRusldaxqFnrd36Y7cJagN8TA=", |
291 BaseNode::GenerateSyncableHash(BOOKMARKS, "tag2")); | 292 syncable::GenerateSyncableHash(THEMES, "tag2")); |
tim (not reviewing)
2012/12/21 17:26:31
This looks like it should be moved to syncable_uti
rlarocque
2012/12/21 18:39:48
Good idea. That file didn't exist before, but it'
| |
292 EXPECT_EQ("XYxkF7bhS4eItStFgiOIAU23swI=", | 293 EXPECT_EQ("XYxkF7bhS4eItStFgiOIAU23swI=", |
293 BaseNode::GenerateSyncableHash(PREFERENCES, "tag2")); | 294 syncable::GenerateSyncableHash(PREFERENCES, "tag2")); |
294 EXPECT_EQ("GFiWzo5NGhjLlN+OyCfhy28DJTQ=", | 295 EXPECT_EQ("GFiWzo5NGhjLlN+OyCfhy28DJTQ=", |
295 BaseNode::GenerateSyncableHash(AUTOFILL, "tag2")); | 296 syncable::GenerateSyncableHash(AUTOFILL, "tag2")); |
296 } | 297 } |
297 | 298 |
298 TEST_F(SyncApiTest, ModelTypesSiloed) { | 299 TEST_F(SyncApiTest, ModelTypesSiloed) { |
299 { | 300 { |
300 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 301 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
301 ReadNode root_node(&trans); | 302 ReadNode root_node(&trans); |
302 root_node.InitByRootLookup(); | 303 root_node.InitByRootLookup(); |
303 EXPECT_EQ(root_node.GetFirstChildId(), 0); | 304 EXPECT_EQ(root_node.GetFirstChildId(), 0); |
304 } | 305 } |
305 | 306 |
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
949 } | 950 } |
950 | 951 |
951 // Looks up an entry by client tag and resets IS_UNSYNCED value to false. | 952 // Looks up an entry by client tag and resets IS_UNSYNCED value to false. |
952 // Returns true if entry was previously unsynced, false if IS_UNSYNCED was | 953 // Returns true if entry was previously unsynced, false if IS_UNSYNCED was |
953 // already false. | 954 // already false. |
954 bool ResetUnsyncedEntry(ModelType type, | 955 bool ResetUnsyncedEntry(ModelType type, |
955 const std::string& client_tag) { | 956 const std::string& client_tag) { |
956 UserShare* share = sync_manager_.GetUserShare(); | 957 UserShare* share = sync_manager_.GetUserShare(); |
957 syncable::WriteTransaction trans( | 958 syncable::WriteTransaction trans( |
958 FROM_HERE, syncable::UNITTEST, share->directory.get()); | 959 FROM_HERE, syncable::UNITTEST, share->directory.get()); |
959 const std::string hash = BaseNode::GenerateSyncableHash(type, client_tag); | 960 const std::string hash = syncable::GenerateSyncableHash(type, client_tag); |
960 syncable::MutableEntry entry(&trans, syncable::GET_BY_CLIENT_TAG, | 961 syncable::MutableEntry entry(&trans, syncable::GET_BY_CLIENT_TAG, |
961 hash); | 962 hash); |
962 EXPECT_TRUE(entry.good()); | 963 EXPECT_TRUE(entry.good()); |
963 if (!entry.Get(IS_UNSYNCED)) | 964 if (!entry.Get(IS_UNSYNCED)) |
964 return false; | 965 return false; |
965 entry.Put(IS_UNSYNCED, false); | 966 entry.Put(IS_UNSYNCED, false); |
966 return true; | 967 return true; |
967 } | 968 } |
968 | 969 |
969 virtual InternalComponentsFactory* GetFactory() { | 970 virtual InternalComponentsFactory* GetFactory() { |
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2190 } | 2191 } |
2191 | 2192 |
2192 // Verifies WriteNode::UpdateEntryWithEncryption does not make unnecessary | 2193 // Verifies WriteNode::UpdateEntryWithEncryption does not make unnecessary |
2193 // changes. | 2194 // changes. |
2194 TEST_F(SyncManagerTest, UpdateEntryWithEncryption) { | 2195 TEST_F(SyncManagerTest, UpdateEntryWithEncryption) { |
2195 std::string client_tag = "title"; | 2196 std::string client_tag = "title"; |
2196 sync_pb::EntitySpecifics entity_specifics; | 2197 sync_pb::EntitySpecifics entity_specifics; |
2197 entity_specifics.mutable_bookmark()->set_url("url"); | 2198 entity_specifics.mutable_bookmark()->set_url("url"); |
2198 entity_specifics.mutable_bookmark()->set_title("title"); | 2199 entity_specifics.mutable_bookmark()->set_title("title"); |
2199 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, | 2200 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, |
2200 BaseNode::GenerateSyncableHash(BOOKMARKS, | 2201 syncable::GenerateSyncableHash(BOOKMARKS, |
2201 client_tag), | 2202 client_tag), |
2202 entity_specifics); | 2203 entity_specifics); |
2203 // New node shouldn't start off unsynced. | 2204 // New node shouldn't start off unsynced. |
2204 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2205 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2205 // Manually change to the same data. Should not set is_unsynced. | 2206 // Manually change to the same data. Should not set is_unsynced. |
2206 { | 2207 { |
2207 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2208 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2208 WriteNode node(&trans); | 2209 WriteNode node(&trans); |
2209 EXPECT_EQ(BaseNode::INIT_OK, | 2210 EXPECT_EQ(BaseNode::INIT_OK, |
2210 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2211 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2339 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2340 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2340 Cryptographer* cryptographer = trans.GetCryptographer(); | 2341 Cryptographer* cryptographer = trans.GetCryptographer(); |
2341 sync_pb::PasswordSpecificsData data; | 2342 sync_pb::PasswordSpecificsData data; |
2342 data.set_password_value("secret"); | 2343 data.set_password_value("secret"); |
2343 cryptographer->Encrypt( | 2344 cryptographer->Encrypt( |
2344 data, | 2345 data, |
2345 entity_specifics.mutable_password()-> | 2346 entity_specifics.mutable_password()-> |
2346 mutable_encrypted()); | 2347 mutable_encrypted()); |
2347 } | 2348 } |
2348 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, | 2349 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, |
2349 BaseNode::GenerateSyncableHash(PASSWORDS, | 2350 syncable::GenerateSyncableHash(PASSWORDS, |
2350 client_tag), | 2351 client_tag), |
2351 entity_specifics); | 2352 entity_specifics); |
2352 // New node shouldn't start off unsynced. | 2353 // New node shouldn't start off unsynced. |
2353 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2354 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2354 | 2355 |
2355 // Manually change to the same data via SetEntitySpecifics. Should not set | 2356 // Manually change to the same data via SetEntitySpecifics. Should not set |
2356 // is_unsynced. | 2357 // is_unsynced. |
2357 { | 2358 { |
2358 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2359 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2359 WriteNode node(&trans); | 2360 WriteNode node(&trans); |
(...skipping 14 matching lines...) Expand all Loading... | |
2374 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2375 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2375 Cryptographer* cryptographer = trans.GetCryptographer(); | 2376 Cryptographer* cryptographer = trans.GetCryptographer(); |
2376 sync_pb::PasswordSpecificsData data; | 2377 sync_pb::PasswordSpecificsData data; |
2377 data.set_password_value("secret"); | 2378 data.set_password_value("secret"); |
2378 cryptographer->Encrypt( | 2379 cryptographer->Encrypt( |
2379 data, | 2380 data, |
2380 entity_specifics.mutable_password()-> | 2381 entity_specifics.mutable_password()-> |
2381 mutable_encrypted()); | 2382 mutable_encrypted()); |
2382 } | 2383 } |
2383 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, | 2384 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, |
2384 BaseNode::GenerateSyncableHash(PASSWORDS, | 2385 syncable::GenerateSyncableHash(PASSWORDS, |
2385 client_tag), | 2386 client_tag), |
2386 entity_specifics); | 2387 entity_specifics); |
2387 // New node shouldn't start off unsynced. | 2388 // New node shouldn't start off unsynced. |
2388 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2389 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2389 | 2390 |
2390 // Manually change to the same data via SetPasswordSpecifics. Should not set | 2391 // Manually change to the same data via SetPasswordSpecifics. Should not set |
2391 // is_unsynced. | 2392 // is_unsynced. |
2392 { | 2393 { |
2393 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2394 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2394 WriteNode node(&trans); | 2395 WriteNode node(&trans); |
(...skipping 30 matching lines...) Expand all Loading... | |
2425 { | 2426 { |
2426 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2427 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2427 Cryptographer* cryptographer = trans.GetCryptographer(); | 2428 Cryptographer* cryptographer = trans.GetCryptographer(); |
2428 sync_pb::PasswordSpecificsData data; | 2429 sync_pb::PasswordSpecificsData data; |
2429 data.set_password_value("secret"); | 2430 data.set_password_value("secret"); |
2430 cryptographer->Encrypt( | 2431 cryptographer->Encrypt( |
2431 data, | 2432 data, |
2432 entity_specifics.mutable_password()->mutable_encrypted()); | 2433 entity_specifics.mutable_password()->mutable_encrypted()); |
2433 } | 2434 } |
2434 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, | 2435 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, |
2435 BaseNode::GenerateSyncableHash(PASSWORDS, | 2436 syncable::GenerateSyncableHash(PASSWORDS, |
2436 client_tag), | 2437 client_tag), |
2437 entity_specifics); | 2438 entity_specifics); |
2438 // New node shouldn't start off unsynced. | 2439 // New node shouldn't start off unsynced. |
2439 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2440 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2440 | 2441 |
2441 // Set a new passphrase. Should set is_unsynced. | 2442 // Set a new passphrase. Should set is_unsynced. |
2442 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 2443 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
2443 EXPECT_CALL(encryption_observer_, | 2444 EXPECT_CALL(encryption_observer_, |
2444 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); | 2445 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); |
2445 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()); | 2446 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()); |
(...skipping 18 matching lines...) Expand all Loading... | |
2464 { | 2465 { |
2465 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2466 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2466 Cryptographer* cryptographer = trans.GetCryptographer(); | 2467 Cryptographer* cryptographer = trans.GetCryptographer(); |
2467 sync_pb::PasswordSpecificsData data; | 2468 sync_pb::PasswordSpecificsData data; |
2468 data.set_password_value("secret"); | 2469 data.set_password_value("secret"); |
2469 cryptographer->Encrypt( | 2470 cryptographer->Encrypt( |
2470 data, | 2471 data, |
2471 entity_specifics.mutable_password()->mutable_encrypted()); | 2472 entity_specifics.mutable_password()->mutable_encrypted()); |
2472 } | 2473 } |
2473 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, | 2474 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, |
2474 BaseNode::GenerateSyncableHash(PASSWORDS, | 2475 syncable::GenerateSyncableHash(PASSWORDS, |
2475 client_tag), | 2476 client_tag), |
2476 entity_specifics); | 2477 entity_specifics); |
2477 // New node shouldn't start off unsynced. | 2478 // New node shouldn't start off unsynced. |
2478 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2479 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2479 | 2480 |
2480 // Force a re-encrypt everything. Should not set is_unsynced. | 2481 // Force a re-encrypt everything. Should not set is_unsynced. |
2481 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); | 2482 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); |
2482 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2483 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
2483 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 2484 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
2484 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); | 2485 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
2485 sync_manager_.GetEncryptionHandler()->Init(); | 2486 sync_manager_.GetEncryptionHandler()->Init(); |
2486 PumpLoop(); | 2487 PumpLoop(); |
2487 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); | 2488 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); |
2488 } | 2489 } |
2489 | 2490 |
2490 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks | 2491 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks |
2491 // when we write the same data, but does set it when we write new data. | 2492 // when we write the same data, but does set it when we write new data. |
2492 TEST_F(SyncManagerTest, SetBookmarkTitle) { | 2493 TEST_F(SyncManagerTest, SetBookmarkTitle) { |
2493 std::string client_tag = "title"; | 2494 std::string client_tag = "title"; |
2494 sync_pb::EntitySpecifics entity_specifics; | 2495 sync_pb::EntitySpecifics entity_specifics; |
2495 entity_specifics.mutable_bookmark()->set_url("url"); | 2496 entity_specifics.mutable_bookmark()->set_url("url"); |
2496 entity_specifics.mutable_bookmark()->set_title("title"); | 2497 entity_specifics.mutable_bookmark()->set_title("title"); |
2497 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, | 2498 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, |
2498 BaseNode::GenerateSyncableHash(BOOKMARKS, | 2499 syncable::GenerateSyncableHash(BOOKMARKS, |
2499 client_tag), | 2500 client_tag), |
2500 entity_specifics); | 2501 entity_specifics); |
2501 // New node shouldn't start off unsynced. | 2502 // New node shouldn't start off unsynced. |
2502 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2503 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2503 | 2504 |
2504 // Manually change to the same title. Should not set is_unsynced. | 2505 // Manually change to the same title. Should not set is_unsynced. |
2505 { | 2506 { |
2506 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2507 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2507 WriteNode node(&trans); | 2508 WriteNode node(&trans); |
2508 EXPECT_EQ(BaseNode::INIT_OK, | 2509 EXPECT_EQ(BaseNode::INIT_OK, |
(...skipping 15 matching lines...) Expand all Loading... | |
2524 | 2525 |
2525 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted | 2526 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted |
2526 // bookmarks when we write the same data, but does set it when we write new | 2527 // bookmarks when we write the same data, but does set it when we write new |
2527 // data. | 2528 // data. |
2528 TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) { | 2529 TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) { |
2529 std::string client_tag = "title"; | 2530 std::string client_tag = "title"; |
2530 sync_pb::EntitySpecifics entity_specifics; | 2531 sync_pb::EntitySpecifics entity_specifics; |
2531 entity_specifics.mutable_bookmark()->set_url("url"); | 2532 entity_specifics.mutable_bookmark()->set_url("url"); |
2532 entity_specifics.mutable_bookmark()->set_title("title"); | 2533 entity_specifics.mutable_bookmark()->set_title("title"); |
2533 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, | 2534 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, |
2534 BaseNode::GenerateSyncableHash(BOOKMARKS, | 2535 syncable::GenerateSyncableHash(BOOKMARKS, |
2535 client_tag), | 2536 client_tag), |
2536 entity_specifics); | 2537 entity_specifics); |
2537 // New node shouldn't start off unsynced. | 2538 // New node shouldn't start off unsynced. |
2538 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); | 2539 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); |
2539 | 2540 |
2540 // Encrypt the datatatype, should set is_unsynced. | 2541 // Encrypt the datatatype, should set is_unsynced. |
2541 EXPECT_CALL(encryption_observer_, | 2542 EXPECT_CALL(encryption_observer_, |
2542 OnEncryptedTypesChanged( | 2543 OnEncryptedTypesChanged( |
2543 HasModelTypes(EncryptableUserTypes()), true)); | 2544 HasModelTypes(EncryptableUserTypes()), true)); |
2544 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2545 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2583 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for non-bookmarks | 2584 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for non-bookmarks |
2584 // when we write the same data, but does set it when we write new data. | 2585 // when we write the same data, but does set it when we write new data. |
2585 TEST_F(SyncManagerTest, SetNonBookmarkTitle) { | 2586 TEST_F(SyncManagerTest, SetNonBookmarkTitle) { |
2586 std::string client_tag = "title"; | 2587 std::string client_tag = "title"; |
2587 sync_pb::EntitySpecifics entity_specifics; | 2588 sync_pb::EntitySpecifics entity_specifics; |
2588 entity_specifics.mutable_preference()->set_name("name"); | 2589 entity_specifics.mutable_preference()->set_name("name"); |
2589 entity_specifics.mutable_preference()->set_value("value"); | 2590 entity_specifics.mutable_preference()->set_value("value"); |
2590 MakeServerNode(sync_manager_.GetUserShare(), | 2591 MakeServerNode(sync_manager_.GetUserShare(), |
2591 PREFERENCES, | 2592 PREFERENCES, |
2592 client_tag, | 2593 client_tag, |
2593 BaseNode::GenerateSyncableHash(PREFERENCES, | 2594 syncable::GenerateSyncableHash(PREFERENCES, |
2594 client_tag), | 2595 client_tag), |
2595 entity_specifics); | 2596 entity_specifics); |
2596 // New node shouldn't start off unsynced. | 2597 // New node shouldn't start off unsynced. |
2597 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2598 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
2598 | 2599 |
2599 // Manually change to the same title. Should not set is_unsynced. | 2600 // Manually change to the same title. Should not set is_unsynced. |
2600 { | 2601 { |
2601 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2602 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2602 WriteNode node(&trans); | 2603 WriteNode node(&trans); |
2603 EXPECT_EQ(BaseNode::INIT_OK, | 2604 EXPECT_EQ(BaseNode::INIT_OK, |
(...skipping 17 matching lines...) Expand all Loading... | |
2621 // non-bookmarks when we write the same data or when we write new data | 2622 // non-bookmarks when we write the same data or when we write new data |
2622 // data (should remained kEncryptedString). | 2623 // data (should remained kEncryptedString). |
2623 TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) { | 2624 TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) { |
2624 std::string client_tag = "title"; | 2625 std::string client_tag = "title"; |
2625 sync_pb::EntitySpecifics entity_specifics; | 2626 sync_pb::EntitySpecifics entity_specifics; |
2626 entity_specifics.mutable_preference()->set_name("name"); | 2627 entity_specifics.mutable_preference()->set_name("name"); |
2627 entity_specifics.mutable_preference()->set_value("value"); | 2628 entity_specifics.mutable_preference()->set_value("value"); |
2628 MakeServerNode(sync_manager_.GetUserShare(), | 2629 MakeServerNode(sync_manager_.GetUserShare(), |
2629 PREFERENCES, | 2630 PREFERENCES, |
2630 client_tag, | 2631 client_tag, |
2631 BaseNode::GenerateSyncableHash(PREFERENCES, | 2632 syncable::GenerateSyncableHash(PREFERENCES, |
2632 client_tag), | 2633 client_tag), |
2633 entity_specifics); | 2634 entity_specifics); |
2634 // New node shouldn't start off unsynced. | 2635 // New node shouldn't start off unsynced. |
2635 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); | 2636 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); |
2636 | 2637 |
2637 // Encrypt the datatatype, should set is_unsynced. | 2638 // Encrypt the datatatype, should set is_unsynced. |
2638 EXPECT_CALL(encryption_observer_, | 2639 EXPECT_CALL(encryption_observer_, |
2639 OnEncryptedTypesChanged( | 2640 OnEncryptedTypesChanged( |
2640 HasModelTypes(EncryptableUserTypes()), true)); | 2641 HasModelTypes(EncryptableUserTypes()), true)); |
2641 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 2642 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2692 Cryptographer* crypto = trans.GetCryptographer(); | 2693 Cryptographer* crypto = trans.GetCryptographer(); |
2693 sync_pb::EntitySpecifics bm_specifics; | 2694 sync_pb::EntitySpecifics bm_specifics; |
2694 bm_specifics.mutable_bookmark()->set_title("title"); | 2695 bm_specifics.mutable_bookmark()->set_title("title"); |
2695 bm_specifics.mutable_bookmark()->set_url("url"); | 2696 bm_specifics.mutable_bookmark()->set_url("url"); |
2696 sync_pb::EncryptedData encrypted; | 2697 sync_pb::EncryptedData encrypted; |
2697 crypto->Encrypt(bm_specifics, &encrypted); | 2698 crypto->Encrypt(bm_specifics, &encrypted); |
2698 entity_specifics.mutable_encrypted()->CopyFrom(encrypted); | 2699 entity_specifics.mutable_encrypted()->CopyFrom(encrypted); |
2699 AddDefaultFieldValue(BOOKMARKS, &entity_specifics); | 2700 AddDefaultFieldValue(BOOKMARKS, &entity_specifics); |
2700 } | 2701 } |
2701 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, | 2702 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, |
2702 BaseNode::GenerateSyncableHash(BOOKMARKS, | 2703 syncable::GenerateSyncableHash(BOOKMARKS, |
2703 client_tag), | 2704 client_tag), |
2704 entity_specifics); | 2705 entity_specifics); |
2705 | 2706 |
2706 { | 2707 { |
2707 // Verify the data. | 2708 // Verify the data. |
2708 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2709 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2709 ReadNode node(&trans); | 2710 ReadNode node(&trans); |
2710 EXPECT_EQ(BaseNode::INIT_OK, | 2711 EXPECT_EQ(BaseNode::INIT_OK, |
2711 node.InitByClientTagLookup(BOOKMARKS, client_tag)); | 2712 node.InitByClientTagLookup(BOOKMARKS, client_tag)); |
2712 EXPECT_EQ(title, node.GetTitle()); | 2713 EXPECT_EQ(title, node.GetTitle()); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2757 GetTransactionVersion(i->first)); | 2758 GetTransactionVersion(i->first)); |
2758 } | 2759 } |
2759 } | 2760 } |
2760 | 2761 |
2761 // Create bookmark node to increment transaction version of bookmark model. | 2762 // Create bookmark node to increment transaction version of bookmark model. |
2762 std::string client_tag = "title"; | 2763 std::string client_tag = "title"; |
2763 sync_pb::EntitySpecifics entity_specifics; | 2764 sync_pb::EntitySpecifics entity_specifics; |
2764 entity_specifics.mutable_bookmark()->set_url("url"); | 2765 entity_specifics.mutable_bookmark()->set_url("url"); |
2765 entity_specifics.mutable_bookmark()->set_title("title"); | 2766 entity_specifics.mutable_bookmark()->set_title("title"); |
2766 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, | 2767 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, |
2767 BaseNode::GenerateSyncableHash(BOOKMARKS, | 2768 syncable::GenerateSyncableHash(BOOKMARKS, |
2768 client_tag), | 2769 client_tag), |
2769 entity_specifics); | 2770 entity_specifics); |
2770 | 2771 |
2771 { | 2772 { |
2772 ReadTransaction read_trans(FROM_HERE, sync_manager_.GetUserShare()); | 2773 ReadTransaction read_trans(FROM_HERE, sync_manager_.GetUserShare()); |
2773 for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); | 2774 for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); |
2774 i != routing_info.end(); ++i) { | 2775 i != routing_info.end(); ++i) { |
2775 EXPECT_EQ(i->first == BOOKMARKS ? 2 : 1, | 2776 EXPECT_EQ(i->first == BOOKMARKS ? 2 : 1, |
2776 sync_manager_.GetUserShare()->directory-> | 2777 sync_manager_.GetUserShare()->directory-> |
2777 GetTransactionVersion(i->first)); | 2778 GetTransactionVersion(i->first)); |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3072 Difference(ModelTypeSet::All(), disabled_types); | 3073 Difference(ModelTypeSet::All(), disabled_types); |
3073 | 3074 |
3074 // Verify only the non-disabled types remain after cleanup. | 3075 // Verify only the non-disabled types remain after cleanup. |
3075 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); | 3076 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); |
3076 EXPECT_TRUE(new_enabled_types.Equals(sync_manager_.InitialSyncEndedTypes())); | 3077 EXPECT_TRUE(new_enabled_types.Equals(sync_manager_.InitialSyncEndedTypes())); |
3077 EXPECT_TRUE(disabled_types.Equals( | 3078 EXPECT_TRUE(disabled_types.Equals( |
3078 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); | 3079 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); |
3079 } | 3080 } |
3080 | 3081 |
3081 } // namespace | 3082 } // namespace |
OLD | NEW |