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

Side by Side Diff: sync/internal_api/sync_manager_impl_unittest.cc

Issue 13197004: Draft: InvalidationService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Passes tests Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
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 28 matching lines...) Expand all
39 #include "sync/internal_api/public/write_transaction.h" 39 #include "sync/internal_api/public/write_transaction.h"
40 #include "sync/internal_api/sync_encryption_handler_impl.h" 40 #include "sync/internal_api/sync_encryption_handler_impl.h"
41 #include "sync/internal_api/sync_manager_impl.h" 41 #include "sync/internal_api/sync_manager_impl.h"
42 #include "sync/internal_api/syncapi_internal.h" 42 #include "sync/internal_api/syncapi_internal.h"
43 #include "sync/js/js_arg_list.h" 43 #include "sync/js/js_arg_list.h"
44 #include "sync/js/js_backend.h" 44 #include "sync/js/js_backend.h"
45 #include "sync/js/js_event_handler.h" 45 #include "sync/js/js_event_handler.h"
46 #include "sync/js/js_reply_handler.h" 46 #include "sync/js/js_reply_handler.h"
47 #include "sync/js/js_test_util.h" 47 #include "sync/js/js_test_util.h"
48 #include "sync/notifier/fake_invalidation_handler.h" 48 #include "sync/notifier/fake_invalidation_handler.h"
49 #include "sync/notifier/fake_invalidator.h"
50 #include "sync/notifier/invalidation_handler.h" 49 #include "sync/notifier/invalidation_handler.h"
51 #include "sync/notifier/invalidator.h" 50 #include "sync/notifier/invalidator.h"
52 #include "sync/protocol/bookmark_specifics.pb.h" 51 #include "sync/protocol/bookmark_specifics.pb.h"
53 #include "sync/protocol/encryption.pb.h" 52 #include "sync/protocol/encryption.pb.h"
54 #include "sync/protocol/extension_specifics.pb.h" 53 #include "sync/protocol/extension_specifics.pb.h"
55 #include "sync/protocol/password_specifics.pb.h" 54 #include "sync/protocol/password_specifics.pb.h"
56 #include "sync/protocol/preference_specifics.pb.h" 55 #include "sync/protocol/preference_specifics.pb.h"
57 #include "sync/protocol/proto_value_conversions.h" 56 #include "sync/protocol/proto_value_conversions.h"
58 #include "sync/protocol/sync.pb.h" 57 #include "sync/protocol/sync.pb.h"
59 #include "sync/sessions/sync_session.h" 58 #include "sync/sessions/sync_session.h"
(...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 WRITE_TO_NIGORI 781 WRITE_TO_NIGORI
783 }; 782 };
784 783
785 enum EncryptionStatus { 784 enum EncryptionStatus {
786 UNINITIALIZED, 785 UNINITIALIZED,
787 DEFAULT_ENCRYPTION, 786 DEFAULT_ENCRYPTION,
788 FULL_ENCRYPTION 787 FULL_ENCRYPTION
789 }; 788 };
790 789
791 SyncManagerTest() 790 SyncManagerTest()
792 : fake_invalidator_(NULL), 791 : sync_manager_("Test sync manager") {
793 sync_manager_("Test sync manager") {
794 switches_.encryption_method = 792 switches_.encryption_method =
795 InternalComponentsFactory::ENCRYPTION_KEYSTORE; 793 InternalComponentsFactory::ENCRYPTION_KEYSTORE;
796 } 794 }
797 795
798 virtual ~SyncManagerTest() { 796 virtual ~SyncManagerTest() {
799 EXPECT_FALSE(fake_invalidator_);
800 } 797 }
801 798
802 // Test implementation. 799 // Test implementation.
803 void SetUp() { 800 void SetUp() {
804 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 801 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
805 802
806 SyncCredentials credentials; 803 SyncCredentials credentials;
807 credentials.email = "foo@bar.com"; 804 credentials.email = "foo@bar.com";
808 credentials.sync_token = "sometoken"; 805 credentials.sync_token = "sometoken";
809 806
810 fake_invalidator_ = new FakeInvalidator();
811
812 sync_manager_.AddObserver(&manager_observer_); 807 sync_manager_.AddObserver(&manager_observer_);
813 EXPECT_CALL(manager_observer_, OnInitializationComplete(_, _, _, _)). 808 EXPECT_CALL(manager_observer_, OnInitializationComplete(_, _, _, _)).
814 WillOnce(SaveArg<0>(&js_backend_)); 809 WillOnce(SaveArg<0>(&js_backend_));
815 810
816 EXPECT_FALSE(js_backend_.IsInitialized()); 811 EXPECT_FALSE(js_backend_.IsInitialized());
817 812
818 std::vector<ModelSafeWorker*> workers; 813 std::vector<ModelSafeWorker*> workers;
819 ModelSafeRoutingInfo routing_info; 814 ModelSafeRoutingInfo routing_info;
820 GetModelSafeRoutingInfo(&routing_info); 815 GetModelSafeRoutingInfo(&routing_info);
821 816
822 // Takes ownership of |fake_invalidator_|.
823 sync_manager_.Init(temp_dir_.path(), 817 sync_manager_.Init(temp_dir_.path(),
824 WeakHandle<JsEventHandler>(), 818 WeakHandle<JsEventHandler>(),
825 "bogus", 0, false, 819 "bogus", 0, false,
826 scoped_ptr<HttpPostProviderFactory>( 820 scoped_ptr<HttpPostProviderFactory>(
827 new TestHttpPostProviderFactory()), 821 new TestHttpPostProviderFactory()),
828 workers, &extensions_activity_monitor_, this, 822 workers, &extensions_activity_monitor_, this,
829 credentials, 823 credentials,
830 scoped_ptr<Invalidator>(fake_invalidator_),
831 "fake_invalidator_client_id", 824 "fake_invalidator_client_id",
832 "", "", // bootstrap tokens 825 "", "", // bootstrap tokens
833 scoped_ptr<InternalComponentsFactory>(GetFactory()), 826 scoped_ptr<InternalComponentsFactory>(GetFactory()),
834 &encryptor_, 827 &encryptor_,
835 &handler_, 828 &handler_,
836 NULL); 829 NULL);
837 830
838 sync_manager_.GetEncryptionHandler()->AddObserver(&encryption_observer_); 831 sync_manager_.GetEncryptionHandler()->AddObserver(&encryption_observer_);
839 832
840 EXPECT_TRUE(js_backend_.IsInitialized()); 833 EXPECT_TRUE(js_backend_.IsInitialized());
841 834
842 for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); 835 for (ModelSafeRoutingInfo::iterator i = routing_info.begin();
843 i != routing_info.end(); ++i) { 836 i != routing_info.end(); ++i) {
844 type_roots_[i->first] = MakeServerNodeForType( 837 type_roots_[i->first] = MakeServerNodeForType(
845 sync_manager_.GetUserShare(), i->first); 838 sync_manager_.GetUserShare(), i->first);
846 } 839 }
847 PumpLoop(); 840 PumpLoop();
848
849 EXPECT_TRUE(fake_invalidator_->IsHandlerRegistered(&sync_manager_));
850 } 841 }
851 842
852 void TearDown() { 843 void TearDown() {
853 sync_manager_.RemoveObserver(&manager_observer_); 844 sync_manager_.RemoveObserver(&manager_observer_);
854 sync_manager_.ShutdownOnSyncThread(); 845 sync_manager_.ShutdownOnSyncThread();
855 // We can't assert that |sync_manager_| isn't registered with
856 // |fake_invalidator_| anymore because |fake_invalidator_| is now
857 // destroyed.
858 fake_invalidator_ = NULL;
859 PumpLoop(); 846 PumpLoop();
860 } 847 }
861 848
862 void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) { 849 void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) {
863 (*out)[NIGORI] = GROUP_PASSIVE; 850 (*out)[NIGORI] = GROUP_PASSIVE;
864 (*out)[DEVICE_INFO] = GROUP_PASSIVE; 851 (*out)[DEVICE_INFO] = GROUP_PASSIVE;
865 (*out)[EXPERIMENTS] = GROUP_PASSIVE; 852 (*out)[EXPERIMENTS] = GROUP_PASSIVE;
866 (*out)[BOOKMARKS] = GROUP_PASSIVE; 853 (*out)[BOOKMARKS] = GROUP_PASSIVE;
867 (*out)[THEMES] = GROUP_PASSIVE; 854 (*out)[THEMES] = GROUP_PASSIVE;
868 (*out)[SESSIONS] = GROUP_PASSIVE; 855 (*out)[SESSIONS] = GROUP_PASSIVE;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 return GetEncryptedTypesWithTrans(&trans); 961 return GetEncryptedTypesWithTrans(&trans);
975 } 962 }
976 963
977 ModelTypeSet GetEncryptedTypesWithTrans(BaseTransaction* trans) { 964 ModelTypeSet GetEncryptedTypesWithTrans(BaseTransaction* trans) {
978 return trans->GetDirectory()->GetNigoriHandler()-> 965 return trans->GetDirectory()->GetNigoriHandler()->
979 GetEncryptedTypes(trans->GetWrappedTrans()); 966 GetEncryptedTypes(trans->GetWrappedTrans());
980 } 967 }
981 968
982 void SimulateInvalidatorStateChangeForTest(InvalidatorState state) { 969 void SimulateInvalidatorStateChangeForTest(InvalidatorState state) {
983 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); 970 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread());
984 sync_manager_.OnInvalidatorStateChange(state); 971 sync_manager_.UpdateInvalidatorState(state);
985 } 972 }
986 973
987 void TriggerOnIncomingNotificationForTest(ModelTypeSet model_types) { 974 void TriggerOnIncomingNotificationForTest(ModelTypeSet model_types) {
988 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread()); 975 DCHECK(sync_manager_.thread_checker_.CalledOnValidThread());
989 ModelTypeInvalidationMap invalidation_map = 976 ModelTypeInvalidationMap invalidation_map =
990 ModelTypeSetToInvalidationMap(model_types, std::string()); 977 ModelTypeSetToInvalidationMap(model_types, std::string());
991 sync_manager_.OnIncomingInvalidation( 978 sync_manager_.Invalidate(
992 ModelTypeInvalidationMapToObjectIdInvalidationMap( 979 ModelTypeInvalidationMapToObjectIdInvalidationMap(
993 invalidation_map)); 980 invalidation_map));
994 } 981 }
995 982
996 void SetProgressMarkerForType(ModelType type, bool set) { 983 void SetProgressMarkerForType(ModelType type, bool set) {
997 if (set) { 984 if (set) {
998 sync_pb::DataTypeProgressMarker marker; 985 sync_pb::DataTypeProgressMarker marker;
999 marker.set_token("token"); 986 marker.set_token("token");
1000 marker.set_data_type_id(GetSpecificsFieldNumberFromModelType(type)); 987 marker.set_data_type_id(GetSpecificsFieldNumberFromModelType(type));
1001 sync_manager_.directory()->SetDownloadProgress(type, marker); 988 sync_manager_.directory()->SetDownloadProgress(type, marker);
(...skipping 12 matching lines...) Expand all
1014 MessageLoop message_loop_; 1001 MessageLoop message_loop_;
1015 // Needed by |sync_manager_|. 1002 // Needed by |sync_manager_|.
1016 base::ScopedTempDir temp_dir_; 1003 base::ScopedTempDir temp_dir_;
1017 // Sync Id's for the roots of the enabled datatypes. 1004 // Sync Id's for the roots of the enabled datatypes.
1018 std::map<ModelType, int64> type_roots_; 1005 std::map<ModelType, int64> type_roots_;
1019 FakeExtensionsActivityMonitor extensions_activity_monitor_; 1006 FakeExtensionsActivityMonitor extensions_activity_monitor_;
1020 1007
1021 protected: 1008 protected:
1022 FakeEncryptor encryptor_; 1009 FakeEncryptor encryptor_;
1023 TestUnrecoverableErrorHandler handler_; 1010 TestUnrecoverableErrorHandler handler_;
1024 FakeInvalidator* fake_invalidator_;
1025 SyncManagerImpl sync_manager_; 1011 SyncManagerImpl sync_manager_;
1026 WeakHandle<JsBackend> js_backend_; 1012 WeakHandle<JsBackend> js_backend_;
1027 StrictMock<SyncManagerObserverMock> manager_observer_; 1013 StrictMock<SyncManagerObserverMock> manager_observer_;
1028 StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_; 1014 StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_;
1029 InternalComponentsFactory::Switches switches_; 1015 InternalComponentsFactory::Switches switches_;
1030 }; 1016 };
1031 1017
1032 TEST_F(SyncManagerTest, UpdateEnabledTypes) {
1033 ModelSafeRoutingInfo routes;
1034 GetModelSafeRoutingInfo(&routes);
1035 const ModelTypeSet enabled_types = GetRoutingInfoTypes(routes);
1036 sync_manager_.UpdateEnabledTypes(enabled_types);
1037 EXPECT_EQ(ModelTypeSetToObjectIdSet(enabled_types),
1038 fake_invalidator_->GetRegisteredIds(&sync_manager_));
1039 }
1040
1041 TEST_F(SyncManagerTest, RegisterInvalidationHandler) {
1042 FakeInvalidationHandler fake_handler;
1043 sync_manager_.RegisterInvalidationHandler(&fake_handler);
1044 EXPECT_TRUE(fake_invalidator_->IsHandlerRegistered(&fake_handler));
1045
1046 const ObjectIdSet& ids =
1047 ModelTypeSetToObjectIdSet(ModelTypeSet(BOOKMARKS, PREFERENCES));
1048 sync_manager_.UpdateRegisteredInvalidationIds(&fake_handler, ids);
1049 EXPECT_EQ(ids, fake_invalidator_->GetRegisteredIds(&fake_handler));
1050
1051 sync_manager_.UnregisterInvalidationHandler(&fake_handler);
1052 EXPECT_FALSE(fake_invalidator_->IsHandlerRegistered(&fake_handler));
1053 }
1054
1055 TEST_F(SyncManagerTest, ProcessJsMessage) { 1018 TEST_F(SyncManagerTest, ProcessJsMessage) {
1056 const JsArgList kNoArgs; 1019 const JsArgList kNoArgs;
1057 1020
1058 StrictMock<MockJsReplyHandler> reply_handler; 1021 StrictMock<MockJsReplyHandler> reply_handler;
1059 1022
1060 base::ListValue disabled_args; 1023 base::ListValue disabled_args;
1061 disabled_args.Append(new base::StringValue("TRANSIENT_INVALIDATION_ERROR")); 1024 disabled_args.Append(new base::StringValue("TRANSIENT_INVALIDATION_ERROR"));
1062 1025
1063 EXPECT_CALL(reply_handler, 1026 EXPECT_CALL(reply_handler,
1064 HandleJsReply("getNotificationState", 1027 HandleJsReply("getNotificationState",
(...skipping 2298 matching lines...) Expand 10 before | Expand all | Expand 10 after
3363 size_t folder_b_pos = 3326 size_t folder_b_pos =
3364 FindChangeInList(folder_b_id, ChangeRecord::ACTION_DELETE); 3327 FindChangeInList(folder_b_id, ChangeRecord::ACTION_DELETE);
3365 size_t child_pos = FindChangeInList(child_id, ChangeRecord::ACTION_DELETE); 3328 size_t child_pos = FindChangeInList(child_id, ChangeRecord::ACTION_DELETE);
3366 3329
3367 // Deletes should appear before updates. 3330 // Deletes should appear before updates.
3368 EXPECT_LT(child_pos, folder_a_pos); 3331 EXPECT_LT(child_pos, folder_a_pos);
3369 EXPECT_LT(folder_b_pos, folder_a_pos); 3332 EXPECT_LT(folder_b_pos, folder_a_pos);
3370 } 3333 }
3371 3334
3372 } // namespace 3335 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698