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

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

Issue 263273002: Add a ClientAction used by SyncRollbackManager to notify PSS that rollback is (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « sync/internal_api/sync_rollback_manager_base.cc ('k') | sync/protocol/sync_protocol_error.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "sync/internal_api/sync_rollback_manager.h" 5 #include "sync/internal_api/sync_rollback_manager.h"
6 6
7 #include "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "sync/internal_api/public/read_node.h" 8 #include "sync/internal_api/public/read_node.h"
9 #include "sync/internal_api/public/read_transaction.h" 9 #include "sync/internal_api/public/read_transaction.h"
10 #include "sync/internal_api/public/sessions/sync_session_snapshot.h"
10 #include "sync/internal_api/public/test/test_internal_components_factory.h" 11 #include "sync/internal_api/public/test/test_internal_components_factory.h"
11 #include "sync/internal_api/public/write_node.h" 12 #include "sync/internal_api/public/write_node.h"
12 #include "sync/internal_api/public/write_transaction.h" 13 #include "sync/internal_api/public/write_transaction.h"
13 #include "sync/internal_api/sync_backup_manager.h" 14 #include "sync/internal_api/sync_backup_manager.h"
14 #include "sync/syncable/entry.h" 15 #include "sync/syncable/entry.h"
15 #include "sync/test/engine/fake_model_worker.h" 16 #include "sync/test/engine/fake_model_worker.h"
16 #include "sync/test/test_directory_backing_store.h" 17 #include "sync/test/test_directory_backing_store.h"
17 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 20
20 using ::testing::_; 21 using ::testing::_;
21 using ::testing::DoDefault; 22 using ::testing::DoDefault;
22 using ::testing::Invoke; 23 using ::testing::Invoke;
24 using ::testing::Truly;
23 using ::testing::WithArgs; 25 using ::testing::WithArgs;
24 26
25 namespace syncer { 27 namespace syncer {
26 28
27 namespace { 29 namespace {
28 30
29 class TestChangeDelegate : public SyncManager::ChangeDelegate { 31 class TestChangeDelegate : public SyncManager::ChangeDelegate {
30 public: 32 public:
31 TestChangeDelegate() { 33 TestChangeDelegate() {
32 ON_CALL(*this, OnChangesApplied(_, _, _, _)) 34 ON_CALL(*this, OnChangesApplied(_, _, _, _))
(...skipping 21 matching lines...) Expand all
54 EXPECT_EQ(ChangeRecord::ACTION_DELETE, change.action); 56 EXPECT_EQ(ChangeRecord::ACTION_DELETE, change.action);
55 EXPECT_TRUE(deleted.find(change.id) == deleted.end()); 57 EXPECT_TRUE(deleted.find(change.id) == deleted.end());
56 deleted.insert(change.id); 58 deleted.insert(change.id);
57 } 59 }
58 EXPECT_TRUE(expected_deletes_ == deleted); 60 EXPECT_TRUE(expected_deletes_ == deleted);
59 } 61 }
60 62
61 std::set<int64> expected_deletes_; 63 std::set<int64> expected_deletes_;
62 }; 64 };
63 65
64 class SyncRollbackManagerTest : public testing::Test { 66 class SyncRollbackManagerTest : public testing::Test,
67 public SyncManager::Observer {
65 protected: 68 protected:
66 virtual void SetUp() OVERRIDE { 69 virtual void SetUp() OVERRIDE {
67 CHECK(temp_dir_.CreateUniqueTempDir()); 70 CHECK(temp_dir_.CreateUniqueTempDir());
68 71
69 worker_ = new FakeModelWorker(GROUP_UI); 72 worker_ = new FakeModelWorker(GROUP_UI);
70 } 73 }
71 74
75 MOCK_METHOD1(OnSyncCycleCompleted,
76 void(const sessions::SyncSessionSnapshot&));
77 MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus));
78 MOCK_METHOD4(OnInitializationComplete,
79 void(const WeakHandle<JsBackend>&,
80 const WeakHandle<DataTypeDebugInfoListener>&,
81 bool, ModelTypeSet));
82 MOCK_METHOD1(OnActionableError, void(const SyncProtocolError&));
83 MOCK_METHOD1(OnMigrationRequested, void(ModelTypeSet));;
84 MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&));
85
72 void OnConfigDone(bool success) { 86 void OnConfigDone(bool success) {
73 EXPECT_TRUE(success); 87 EXPECT_TRUE(success);
74 } 88 }
75 89
76 int64 CreateEntry(UserShare* user_share, ModelType type, 90 int64 CreateEntry(UserShare* user_share, ModelType type,
77 const std::string& client_tag) { 91 const std::string& client_tag) {
78 WriteTransaction trans(FROM_HERE, user_share); 92 WriteTransaction trans(FROM_HERE, user_share);
79 ReadNode type_root(&trans); 93 ReadNode type_root(&trans);
80 EXPECT_EQ(BaseNode::INIT_OK, 94 EXPECT_EQ(BaseNode::INIT_OK,
81 type_root.InitByTagLookup(ModelTypeToRootTag(type))); 95 type_root.InitByTagLookup(ModelTypeToRootTag(type)));
82 96
83 WriteNode node(&trans); 97 WriteNode node(&trans);
84 EXPECT_EQ(WriteNode::INIT_SUCCESS, 98 EXPECT_EQ(WriteNode::INIT_SUCCESS,
85 node.InitUniqueByCreation(type, type_root, client_tag)); 99 node.InitUniqueByCreation(type, type_root, client_tag));
86 return node.GetEntry()->GetMetahandle(); 100 return node.GetEntry()->GetMetahandle();
87 } 101 }
88 102
89 void InitManager(SyncManager* manager, ModelTypeSet types, 103 void InitManager(SyncManager* manager, ModelTypeSet types,
90 TestChangeDelegate* delegate) { 104 TestChangeDelegate* delegate) {
105 manager->AddObserver(this);
91 TestInternalComponentsFactory factory(InternalComponentsFactory::Switches(), 106 TestInternalComponentsFactory factory(InternalComponentsFactory::Switches(),
92 STORAGE_ON_DISK); 107 STORAGE_ON_DISK);
93 108
94 manager->Init(temp_dir_.path(), 109 manager->Init(temp_dir_.path(),
95 MakeWeakHandle(base::WeakPtr<JsEventHandler>()), 110 MakeWeakHandle(base::WeakPtr<JsEventHandler>()),
96 "", 0, true, scoped_ptr<HttpPostProviderFactory>().Pass(), 111 "", 0, true, scoped_ptr<HttpPostProviderFactory>().Pass(),
97 std::vector<scoped_refptr<ModelSafeWorker> >(1, 112 std::vector<scoped_refptr<ModelSafeWorker> >(1,
98 worker_.get()), 113 worker_.get()),
99 NULL, delegate, SyncCredentials(), "", "", "", &factory, 114 NULL, delegate, SyncCredentials(), "", "", "", &factory,
100 NULL, scoped_ptr<UnrecoverableErrorHandler>().Pass(), 115 NULL, scoped_ptr<UnrecoverableErrorHandler>().Pass(),
(...skipping 23 matching lines...) Expand all
124 ReadTransaction trans(FROM_HERE, user_share); 139 ReadTransaction trans(FROM_HERE, user_share);
125 ReadNode node(&trans); 140 ReadNode node(&trans);
126 return BaseNode::INIT_OK == node.InitByClientTagLookup(type, client_tag); 141 return BaseNode::INIT_OK == node.InitByClientTagLookup(type, client_tag);
127 } 142 }
128 143
129 base::ScopedTempDir temp_dir_; 144 base::ScopedTempDir temp_dir_;
130 scoped_refptr<ModelSafeWorker> worker_; 145 scoped_refptr<ModelSafeWorker> worker_;
131 base::MessageLoop loop_; // Needed for WeakHandle 146 base::MessageLoop loop_; // Needed for WeakHandle
132 }; 147 };
133 148
149 bool IsRollbackDoneAction(SyncProtocolError e) {
150 return e.action == syncer::ROLLBACK_DONE;
151 }
152
134 TEST_F(SyncRollbackManagerTest, RollbackBasic) { 153 TEST_F(SyncRollbackManagerTest, RollbackBasic) {
135 PrepopulateDb(PREFERENCES, "pref1"); 154 PrepopulateDb(PREFERENCES, "pref1");
136 155
137 TestChangeDelegate delegate; 156 TestChangeDelegate delegate;
138 SyncRollbackManager rollback_manager; 157 SyncRollbackManager rollback_manager;
139 InitManager(&rollback_manager, ModelTypeSet(PREFERENCES), &delegate); 158 InitManager(&rollback_manager, ModelTypeSet(PREFERENCES), &delegate);
140 159
141 // Simulate a new entry added during type initialization. 160 // Simulate a new entry added during type initialization.
142 int64 new_pref_id = 161 int64 new_pref_id =
143 CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2"); 162 CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2");
144 163
145 delegate.add_expected_delete(new_pref_id); 164 delegate.add_expected_delete(new_pref_id);
146 EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _)) 165 EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _))
147 .Times(1) 166 .Times(1)
148 .WillOnce(DoDefault()); 167 .WillOnce(DoDefault());
149 EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1); 168 EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1);
169 EXPECT_CALL(*this, OnActionableError(Truly(IsRollbackDoneAction))).Times(1);
150 170
151 ModelSafeRoutingInfo routing_info; 171 ModelSafeRoutingInfo routing_info;
152 routing_info[PREFERENCES] = GROUP_UI; 172 routing_info[PREFERENCES] = GROUP_UI;
153 rollback_manager.StartSyncingNormally(routing_info); 173 rollback_manager.StartSyncingNormally(routing_info);
154 } 174 }
155 175
156 TEST_F(SyncRollbackManagerTest, NoRollbackOfTypesNotBackedUp) { 176 TEST_F(SyncRollbackManagerTest, NoRollbackOfTypesNotBackedUp) {
157 PrepopulateDb(PREFERENCES, "pref1"); 177 PrepopulateDb(PREFERENCES, "pref1");
158 178
159 TestChangeDelegate delegate; 179 TestChangeDelegate delegate;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 // Verify new entry was not persisted. 216 // Verify new entry was not persisted.
197 rollback_manager.reset(new SyncRollbackManager); 217 rollback_manager.reset(new SyncRollbackManager);
198 InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate); 218 InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate);
199 EXPECT_FALSE(VerifyEntry(rollback_manager->GetUserShare(), PREFERENCES, 219 EXPECT_FALSE(VerifyEntry(rollback_manager->GetUserShare(), PREFERENCES,
200 "pref2")); 220 "pref2"));
201 } 221 }
202 222
203 } // anonymous namespace 223 } // anonymous namespace
204 224
205 } // namespace syncer 225 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/internal_api/sync_rollback_manager_base.cc ('k') | sync/protocol/sync_protocol_error.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698