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

Side by Side Diff: sync/notifier/chrome_invalidation_client_unittest.cc

Issue 10545170: [Sync] Propagate XMPP auth errors to SyncNotifierObservers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile error Created 8 years, 6 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #include <string> 5 #include <string>
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "google/cacheinvalidation/include/invalidation-client.h" 8 #include "google/cacheinvalidation/include/invalidation-client.h"
9 #include "google/cacheinvalidation/include/types.h" 9 #include "google/cacheinvalidation/include/types.h"
10 #include "google/cacheinvalidation/v2/types.pb.h" 10 #include "google/cacheinvalidation/v2/types.pb.h"
11 #include "jingle/notifier/listener/fake_push_client.h" 11 #include "jingle/notifier/listener/fake_push_client.h"
12 #include "sync/internal_api/public/syncable/model_type.h" 12 #include "sync/internal_api/public/syncable/model_type.h"
13 #include "sync/internal_api/public/syncable/model_type_payload_map.h" 13 #include "sync/internal_api/public/syncable/model_type_payload_map.h"
14 #include "sync/notifier/chrome_invalidation_client.h" 14 #include "sync/notifier/chrome_invalidation_client.h"
15 #include "sync/notifier/mock_invalidation_state_tracker.h" 15 #include "sync/notifier/mock_invalidation_state_tracker.h"
16 #include "sync/util/weak_handle.h" 16 #include "sync/util/weak_handle.h"
17 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 19
20 namespace sync_notifier { 20 namespace sync_notifier {
21 21
22 using ::testing::_; 22 using ::testing::_;
23 using ::testing::InSequence;
23 using ::testing::Return; 24 using ::testing::Return;
24 using ::testing::StrictMock; 25 using ::testing::StrictMock;
25 26
26 namespace { 27 namespace {
27 28
28 const char kClientId[] = "client_id"; 29 const char kClientId[] = "client_id";
29 const char kClientInfo[] = "client_info"; 30 const char kClientInfo[] = "client_info";
30 const char kState[] = "state"; 31 const char kState[] = "state";
31 const char kNewState[] = "new_state"; 32 const char kNewState[] = "new_state";
32 33
33 class MockInvalidationClient : public invalidation::InvalidationClient { 34 class MockInvalidationClient : public invalidation::InvalidationClient {
34 public: 35 public:
35 MOCK_METHOD0(Start, void()); 36 MOCK_METHOD0(Start, void());
36 MOCK_METHOD0(Stop, void()); 37 MOCK_METHOD0(Stop, void());
37 MOCK_METHOD1(Register, void(const invalidation::ObjectId&)); 38 MOCK_METHOD1(Register, void(const invalidation::ObjectId&));
38 MOCK_METHOD1(Register, void(const std::vector<invalidation::ObjectId>&)); 39 MOCK_METHOD1(Register, void(const std::vector<invalidation::ObjectId>&));
39 MOCK_METHOD1(Unregister, void(const invalidation::ObjectId&)); 40 MOCK_METHOD1(Unregister, void(const invalidation::ObjectId&));
40 MOCK_METHOD1(Unregister, void(const std::vector<invalidation::ObjectId>&)); 41 MOCK_METHOD1(Unregister, void(const std::vector<invalidation::ObjectId>&));
41 MOCK_METHOD1(Acknowledge, void(const invalidation::AckHandle&)); 42 MOCK_METHOD1(Acknowledge, void(const invalidation::AckHandle&));
42 }; 43 };
43 44
44 class MockListener : public ChromeInvalidationClient::Listener { 45 class MockListener : public ChromeInvalidationClient::Listener {
45 public: 46 public:
46 MOCK_METHOD1(OnInvalidate, void(const syncable::ModelTypePayloadMap&)); 47 MOCK_METHOD1(OnInvalidate, void(const syncable::ModelTypePayloadMap&));
47 MOCK_METHOD1(OnSessionStatusChanged, void(bool)); 48 MOCK_METHOD1(OnSyncNotifierStateChange, void(SyncNotifierState));
48 }; 49 };
49 50
50 } // namespace 51 } // namespace
51 52
52 class ChromeInvalidationClientTest : public testing::Test { 53 class ChromeInvalidationClientTest : public testing::Test {
53 protected: 54 protected:
54 ChromeInvalidationClientTest() 55 ChromeInvalidationClientTest()
55 : client_( 56 : fake_push_client_(new notifier::FakePushClient()),
56 scoped_ptr<notifier::PushClient>( 57 client_(scoped_ptr<notifier::PushClient>(fake_push_client_)) {}
57 new notifier::FakePushClient())) {}
58 58
59 virtual void SetUp() { 59 virtual void SetUp() {
60 client_.Start(kClientId, kClientInfo, kState, 60 client_.Start(kClientId, kClientInfo, kState,
61 InvalidationVersionMap(), 61 InvalidationVersionMap(),
62 browser_sync::MakeWeakHandle( 62 browser_sync::MakeWeakHandle(
63 mock_invalidation_state_tracker_.AsWeakPtr()), 63 mock_invalidation_state_tracker_.AsWeakPtr()),
64 &mock_listener_); 64 &mock_listener_);
65 } 65 }
66 66
67 virtual void TearDown() { 67 virtual void TearDown() {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 invalidation::AckHandle ack_handle("fakedata"); 109 invalidation::AckHandle ack_handle("fakedata");
110 EXPECT_CALL(mock_invalidation_client_, Acknowledge(ack_handle)); 110 EXPECT_CALL(mock_invalidation_client_, Acknowledge(ack_handle));
111 client_.InvalidateAll(&mock_invalidation_client_, ack_handle); 111 client_.InvalidateAll(&mock_invalidation_client_, ack_handle);
112 } 112 }
113 113
114 MessageLoop message_loop_; 114 MessageLoop message_loop_;
115 StrictMock<MockListener> mock_listener_; 115 StrictMock<MockListener> mock_listener_;
116 StrictMock<MockInvalidationStateTracker> 116 StrictMock<MockInvalidationStateTracker>
117 mock_invalidation_state_tracker_; 117 mock_invalidation_state_tracker_;
118 StrictMock<MockInvalidationClient> mock_invalidation_client_; 118 StrictMock<MockInvalidationClient> mock_invalidation_client_;
119 notifier::FakePushClient* const fake_push_client_;
119 ChromeInvalidationClient client_; 120 ChromeInvalidationClient client_;
120 }; 121 };
121 122
122 namespace { 123 namespace {
123 124
124 syncable::ModelTypePayloadMap MakeMap(syncable::ModelType model_type, 125 syncable::ModelTypePayloadMap MakeMap(syncable::ModelType model_type,
125 const std::string& payload) { 126 const std::string& payload) {
126 syncable::ModelTypePayloadMap type_payloads; 127 syncable::ModelTypePayloadMap type_payloads;
127 type_payloads[model_type] = payload; 128 type_payloads[model_type] = payload;
128 return type_payloads; 129 return type_payloads;
(...skipping 23 matching lines...) Expand all
152 } 153 }
153 154
154 TEST_F(ChromeInvalidationClientTest, InvalidateWithPayload) { 155 TEST_F(ChromeInvalidationClientTest, InvalidateWithPayload) {
155 EXPECT_CALL(mock_listener_, 156 EXPECT_CALL(mock_listener_,
156 OnInvalidate(MakeMap(syncable::PREFERENCES, "payload"))); 157 OnInvalidate(MakeMap(syncable::PREFERENCES, "payload")));
157 EXPECT_CALL(mock_invalidation_state_tracker_, 158 EXPECT_CALL(mock_invalidation_state_tracker_,
158 SetMaxVersion(syncable::PREFERENCES, 1)); 159 SetMaxVersion(syncable::PREFERENCES, 1));
159 FireInvalidate("PREFERENCE", 1, "payload"); 160 FireInvalidate("PREFERENCE", 1, "payload");
160 } 161 }
161 162
162 TEST_F(ChromeInvalidationClientTest, WriteState) {
163 EXPECT_CALL(mock_invalidation_state_tracker_,
164 SetInvalidationState(kNewState));
165 client_.WriteState(kNewState);
166 }
167
168 TEST_F(ChromeInvalidationClientTest, InvalidateVersion) { 163 TEST_F(ChromeInvalidationClientTest, InvalidateVersion) {
169 using ::testing::Mock; 164 using ::testing::Mock;
170 165
171 EXPECT_CALL(mock_listener_, 166 EXPECT_CALL(mock_listener_,
172 OnInvalidate(MakeMap(syncable::APPS, ""))); 167 OnInvalidate(MakeMap(syncable::APPS, "")));
173 EXPECT_CALL(mock_invalidation_state_tracker_, 168 EXPECT_CALL(mock_invalidation_state_tracker_,
174 SetMaxVersion(syncable::APPS, 1)); 169 SetMaxVersion(syncable::APPS, 1));
175 170
176 // Should trigger. 171 // Should trigger.
177 FireInvalidate("APP", 1, NULL); 172 FireInvalidate("APP", 1, NULL);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 TEST_F(ChromeInvalidationClientTest, RegisterTypes) { 254 TEST_F(ChromeInvalidationClientTest, RegisterTypes) {
260 syncable::ModelTypeSet types(syncable::PREFERENCES, syncable::EXTENSIONS); 255 syncable::ModelTypeSet types(syncable::PREFERENCES, syncable::EXTENSIONS);
261 client_.RegisterTypes(types); 256 client_.RegisterTypes(types);
262 // Registered types should be preserved across Stop/Start. 257 // Registered types should be preserved across Stop/Start.
263 TearDown(); 258 TearDown();
264 SetUp(); 259 SetUp();
265 EXPECT_CALL(mock_listener_, OnInvalidate(MakeMapFromSet(types, ""))); 260 EXPECT_CALL(mock_listener_, OnInvalidate(MakeMapFromSet(types, "")));
266 FireInvalidateAll(); 261 FireInvalidateAll();
267 } 262 }
268 263
269 // TODO(akalin): Flesh out unit tests. 264 TEST_F(ChromeInvalidationClientTest, WriteState) {
265 EXPECT_CALL(mock_invalidation_state_tracker_,
266 SetInvalidationState(kNewState));
267 client_.WriteState(kNewState);
268 }
269
270 TEST_F(ChromeInvalidationClientTest, StateChangesNotReady) {
271 InSequence dummy;
272 EXPECT_CALL(mock_listener_,
273 OnSyncNotifierStateChange(NOTIFICATIONS_OFF));
274 EXPECT_CALL(mock_listener_,
275 OnSyncNotifierStateChange(CREDENTIALS_REJECTED));
276 EXPECT_CALL(mock_listener_,
277 OnSyncNotifierStateChange(NOTIFICATIONS_OFF));
278
279 fake_push_client_->SimulatePushClientStateChange(
280 notifier::NOTIFICATIONS_OFF);
281 fake_push_client_->SimulatePushClientStateChange(
282 notifier::CREDENTIALS_REJECTED);
283 fake_push_client_->SimulatePushClientStateChange(
284 notifier::NOTIFICATIONS_ON);
285 }
286
287 TEST_F(ChromeInvalidationClientTest, StateChangesReady) {
288 InSequence dummy;
289 EXPECT_CALL(mock_listener_,
290 OnSyncNotifierStateChange(NOTIFICATIONS_OFF));
291 EXPECT_CALL(mock_listener_,
292 OnSyncNotifierStateChange(NOTIFICATIONS_ON));
293 EXPECT_CALL(mock_listener_,
294 OnSyncNotifierStateChange(NOTIFICATIONS_OFF));
295 EXPECT_CALL(mock_listener_,
296 OnSyncNotifierStateChange(CREDENTIALS_REJECTED));
297 EXPECT_CALL(mock_listener_,
298 OnSyncNotifierStateChange(NOTIFICATIONS_ON));
299
300 fake_push_client_->SimulatePushClientStateChange(
301 notifier::NOTIFICATIONS_ON);
302 client_.Ready(NULL);
303 fake_push_client_->SimulatePushClientStateChange(
304 notifier::NOTIFICATIONS_OFF);
305 fake_push_client_->SimulatePushClientStateChange(
306 notifier::CREDENTIALS_REJECTED);
307 fake_push_client_->SimulatePushClientStateChange(
308 notifier::NOTIFICATIONS_ON);
309 }
310
311 TEST_F(ChromeInvalidationClientTest, StateChangesAuthError) {
312 InSequence dummy;
313 EXPECT_CALL(mock_listener_,
314 OnSyncNotifierStateChange(NOTIFICATIONS_OFF));
315 EXPECT_CALL(mock_listener_,
316 OnSyncNotifierStateChange(NOTIFICATIONS_ON));
317 EXPECT_CALL(mock_listener_,
318 OnSyncNotifierStateChange(CREDENTIALS_REJECTED)).Times(4);
319 EXPECT_CALL(mock_listener_,
320 OnSyncNotifierStateChange(NOTIFICATIONS_ON));
321
322 fake_push_client_->SimulatePushClientStateChange(
323 notifier::NOTIFICATIONS_ON);
324 client_.Ready(NULL);
325
326 client_.InformError(
327 NULL,
328 invalidation::ErrorInfo(
329 invalidation::ErrorReason::AUTH_FAILURE,
330 false /* is_transient */,
331 "auth error",
332 invalidation::ErrorContext()));
333 fake_push_client_->SimulatePushClientStateChange(
334 notifier::NOTIFICATIONS_OFF);
335 fake_push_client_->SimulatePushClientStateChange(
336 notifier::CREDENTIALS_REJECTED);
337 fake_push_client_->SimulatePushClientStateChange(
338 notifier::NOTIFICATIONS_ON);
339 client_.Ready(NULL);
340 }
270 341
271 } // namespace sync_notifier 342 } // namespace sync_notifier
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698