| 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 24 matching lines...) Expand all Loading... |
| 35 #include "sync/internal_api/public/read_node.h" | 35 #include "sync/internal_api/public/read_node.h" |
| 36 #include "sync/internal_api/public/read_transaction.h" | 36 #include "sync/internal_api/public/read_transaction.h" |
| 37 #include "sync/internal_api/public/test/test_entry_factory.h" | 37 #include "sync/internal_api/public/test/test_entry_factory.h" |
| 38 #include "sync/internal_api/public/test/test_internal_components_factory.h" | 38 #include "sync/internal_api/public/test/test_internal_components_factory.h" |
| 39 #include "sync/internal_api/public/test/test_user_share.h" | 39 #include "sync/internal_api/public/test/test_user_share.h" |
| 40 #include "sync/internal_api/public/write_node.h" | 40 #include "sync/internal_api/public/write_node.h" |
| 41 #include "sync/internal_api/public/write_transaction.h" | 41 #include "sync/internal_api/public/write_transaction.h" |
| 42 #include "sync/internal_api/sync_encryption_handler_impl.h" | 42 #include "sync/internal_api/sync_encryption_handler_impl.h" |
| 43 #include "sync/internal_api/sync_manager_impl.h" | 43 #include "sync/internal_api/sync_manager_impl.h" |
| 44 #include "sync/internal_api/syncapi_internal.h" | 44 #include "sync/internal_api/syncapi_internal.h" |
| 45 #include "sync/js/js_arg_list.h" | |
| 46 #include "sync/js/js_backend.h" | 45 #include "sync/js/js_backend.h" |
| 47 #include "sync/js/js_event_handler.h" | 46 #include "sync/js/js_event_handler.h" |
| 48 #include "sync/js/js_reply_handler.h" | |
| 49 #include "sync/js/js_test_util.h" | 47 #include "sync/js/js_test_util.h" |
| 50 #include "sync/notifier/fake_invalidation_handler.h" | 48 #include "sync/notifier/fake_invalidation_handler.h" |
| 51 #include "sync/notifier/invalidation_handler.h" | 49 #include "sync/notifier/invalidation_handler.h" |
| 52 #include "sync/notifier/invalidator.h" | 50 #include "sync/notifier/invalidator.h" |
| 53 #include "sync/protocol/bookmark_specifics.pb.h" | 51 #include "sync/protocol/bookmark_specifics.pb.h" |
| 54 #include "sync/protocol/encryption.pb.h" | 52 #include "sync/protocol/encryption.pb.h" |
| 55 #include "sync/protocol/extension_specifics.pb.h" | 53 #include "sync/protocol/extension_specifics.pb.h" |
| 56 #include "sync/protocol/password_specifics.pb.h" | 54 #include "sync/protocol/password_specifics.pb.h" |
| 57 #include "sync/protocol/preference_specifics.pb.h" | 55 #include "sync/protocol/preference_specifics.pb.h" |
| 58 #include "sync/protocol/proto_value_conversions.h" | 56 #include "sync/protocol/proto_value_conversions.h" |
| (...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 747 | 745 |
| 748 EXPECT_TRUE(js_backend_.IsInitialized()); | 746 EXPECT_TRUE(js_backend_.IsInitialized()); |
| 749 | 747 |
| 750 if (initialization_succeeded_) { | 748 if (initialization_succeeded_) { |
| 751 for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); | 749 for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); |
| 752 i != routing_info.end(); ++i) { | 750 i != routing_info.end(); ++i) { |
| 753 type_roots_[i->first] = MakeServerNodeForType( | 751 type_roots_[i->first] = MakeServerNodeForType( |
| 754 sync_manager_.GetUserShare(), i->first); | 752 sync_manager_.GetUserShare(), i->first); |
| 755 } | 753 } |
| 756 } | 754 } |
| 755 |
| 757 PumpLoop(); | 756 PumpLoop(); |
| 758 } | 757 } |
| 759 | 758 |
| 760 void TearDown() { | 759 void TearDown() { |
| 761 sync_manager_.RemoveObserver(&manager_observer_); | 760 sync_manager_.RemoveObserver(&manager_observer_); |
| 762 sync_manager_.ShutdownOnSyncThread(); | 761 sync_manager_.ShutdownOnSyncThread(); |
| 763 PumpLoop(); | 762 PumpLoop(); |
| 764 } | 763 } |
| 765 | 764 |
| 766 void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) { | 765 void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 int64 GetIdForDataType(ModelType type) { | 828 int64 GetIdForDataType(ModelType type) { |
| 830 if (type_roots_.count(type) == 0) | 829 if (type_roots_.count(type) == 0) |
| 831 return 0; | 830 return 0; |
| 832 return type_roots_[type]; | 831 return type_roots_[type]; |
| 833 } | 832 } |
| 834 | 833 |
| 835 void PumpLoop() { | 834 void PumpLoop() { |
| 836 message_loop_.RunUntilIdle(); | 835 message_loop_.RunUntilIdle(); |
| 837 } | 836 } |
| 838 | 837 |
| 839 void SendJsMessage(const std::string& name, const JsArgList& args, | |
| 840 const WeakHandle<JsReplyHandler>& reply_handler) { | |
| 841 js_backend_.Call(FROM_HERE, &JsBackend::ProcessJsMessage, | |
| 842 name, args, reply_handler); | |
| 843 PumpLoop(); | |
| 844 } | |
| 845 | |
| 846 void SetJsEventHandler(const WeakHandle<JsEventHandler>& event_handler) { | 838 void SetJsEventHandler(const WeakHandle<JsEventHandler>& event_handler) { |
| 847 js_backend_.Call(FROM_HERE, &JsBackend::SetJsEventHandler, | 839 js_backend_.Call(FROM_HERE, &JsBackend::SetJsEventHandler, |
| 848 event_handler); | 840 event_handler); |
| 849 PumpLoop(); | 841 PumpLoop(); |
| 850 } | 842 } |
| 851 | 843 |
| 852 // Looks up an entry by client tag and resets IS_UNSYNCED value to false. | 844 // Looks up an entry by client tag and resets IS_UNSYNCED value to false. |
| 853 // Returns true if entry was previously unsynced, false if IS_UNSYNCED was | 845 // Returns true if entry was previously unsynced, false if IS_UNSYNCED was |
| 854 // already false. | 846 // already false. |
| 855 bool ResetUnsyncedEntry(ModelType type, | 847 bool ResetUnsyncedEntry(ModelType type, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 FakeEncryptor encryptor_; | 923 FakeEncryptor encryptor_; |
| 932 SyncManagerImpl sync_manager_; | 924 SyncManagerImpl sync_manager_; |
| 933 CancelationSignal cancelation_signal_; | 925 CancelationSignal cancelation_signal_; |
| 934 WeakHandle<JsBackend> js_backend_; | 926 WeakHandle<JsBackend> js_backend_; |
| 935 bool initialization_succeeded_; | 927 bool initialization_succeeded_; |
| 936 StrictMock<SyncManagerObserverMock> manager_observer_; | 928 StrictMock<SyncManagerObserverMock> manager_observer_; |
| 937 StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_; | 929 StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_; |
| 938 InternalComponentsFactory::Switches switches_; | 930 InternalComponentsFactory::Switches switches_; |
| 939 }; | 931 }; |
| 940 | 932 |
| 941 TEST_F(SyncManagerTest, GetAllNodesTest) { | 933 TEST_F(SyncManagerTest, GetAllNodesForTypeTest) { |
| 942 StrictMock<MockJsReplyHandler> reply_handler; | 934 ModelSafeRoutingInfo routing_info; |
| 943 JsArgList return_args; | 935 GetModelSafeRoutingInfo(&routing_info); |
| 936 sync_manager_.StartSyncingNormally(routing_info); |
| 944 | 937 |
| 945 EXPECT_CALL(reply_handler, | 938 scoped_ptr<base::ListValue> node_list( |
| 946 HandleJsReply("getAllNodes", _)) | 939 sync_manager_.GetAllNodesForType(syncer::PREFERENCES)); |
| 947 .Times(1).WillRepeatedly(SaveArg<1>(&return_args)); | |
| 948 | 940 |
| 949 { | 941 // Should have one node: the type root node. |
| 950 base::ListValue args; | 942 ASSERT_EQ(1U, node_list->GetSize()); |
| 951 SendJsMessage("getAllNodes", | |
| 952 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 953 } | |
| 954 | 943 |
| 955 // There's not much value in verifying every attribute on every node here. | |
| 956 // Most of the value of this test has already been achieved: we've verified we | |
| 957 // can call the above function without crashing or leaking memory. | |
| 958 // | |
| 959 // Let's just check the list size and a few of its elements. Anything more | |
| 960 // would make this test brittle without greatly increasing our chances of | |
| 961 // catching real bugs. | |
| 962 | |
| 963 const base::ListValue* node_list; | |
| 964 const base::DictionaryValue* first_result; | 944 const base::DictionaryValue* first_result; |
| 965 | |
| 966 // The resulting argument list should have one argument, a list of nodes. | |
| 967 ASSERT_EQ(1U, return_args.Get().GetSize()); | |
| 968 ASSERT_TRUE(return_args.Get().GetList(0, &node_list)); | |
| 969 | |
| 970 // The database creation logic depends on the routing info. | |
| 971 // Refer to setup methods for more information. | |
| 972 ModelSafeRoutingInfo routes; | |
| 973 GetModelSafeRoutingInfo(&routes); | |
| 974 size_t directory_size = routes.size() + 1; | |
| 975 | |
| 976 ASSERT_EQ(directory_size, node_list->GetSize()); | |
| 977 ASSERT_TRUE(node_list->GetDictionary(0, &first_result)); | 945 ASSERT_TRUE(node_list->GetDictionary(0, &first_result)); |
| 978 EXPECT_TRUE(first_result->HasKey("ID")); | 946 EXPECT_TRUE(first_result->HasKey("ID")); |
| 979 EXPECT_TRUE(first_result->HasKey("NON_UNIQUE_NAME")); | 947 EXPECT_TRUE(first_result->HasKey("NON_UNIQUE_NAME")); |
| 980 } | 948 } |
| 981 | 949 |
| 982 TEST_F(SyncManagerTest, RefreshEncryptionReady) { | 950 TEST_F(SyncManagerTest, RefreshEncryptionReady) { |
| 983 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 951 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
| 984 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); | 952 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); |
| 985 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); | 953 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); |
| 986 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); | 954 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); |
| (...skipping 2086 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3073 // SyncManagerInitInvalidStorageTest::GetFactory will return | 3041 // SyncManagerInitInvalidStorageTest::GetFactory will return |
| 3074 // DirectoryBackingStore that ensures that SyncManagerImpl::OpenDirectory fails. | 3042 // DirectoryBackingStore that ensures that SyncManagerImpl::OpenDirectory fails. |
| 3075 // SyncManagerImpl initialization is done in SyncManagerTest::SetUp. This test's | 3043 // SyncManagerImpl initialization is done in SyncManagerTest::SetUp. This test's |
| 3076 // task is to ensure that SyncManagerImpl reported initialization failure in | 3044 // task is to ensure that SyncManagerImpl reported initialization failure in |
| 3077 // OnInitializationComplete callback. | 3045 // OnInitializationComplete callback. |
| 3078 TEST_F(SyncManagerInitInvalidStorageTest, FailToOpenDatabase) { | 3046 TEST_F(SyncManagerInitInvalidStorageTest, FailToOpenDatabase) { |
| 3079 EXPECT_FALSE(initialization_succeeded_); | 3047 EXPECT_FALSE(initialization_succeeded_); |
| 3080 } | 3048 } |
| 3081 | 3049 |
| 3082 } // namespace | 3050 } // namespace |
| OLD | NEW |