OLD | NEW |
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 "google/cacheinvalidation/types.pb.h" | 5 #include "google/cacheinvalidation/types.pb.h" |
6 #include "sync/notifier/mock_sync_notifier_observer.h" | 6 #include "sync/notifier/mock_sync_notifier_observer.h" |
| 7 #include "sync/notifier/object_id_state_map_test_util.h" |
7 #include "sync/notifier/sync_notifier_registrar.h" | 8 #include "sync/notifier/sync_notifier_registrar.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
9 | 10 |
10 namespace syncer { | 11 namespace syncer { |
11 | 12 |
12 namespace { | 13 namespace { |
13 | 14 |
14 using testing::InSequence; | 15 using testing::InSequence; |
15 using testing::Mock; | 16 using testing::Mock; |
16 using testing::StrictMock; | 17 using testing::StrictMock; |
(...skipping 16 matching lines...) Expand all Loading... |
33 // Register a handler, register some IDs for that handler, and then unregister | 34 // Register a handler, register some IDs for that handler, and then unregister |
34 // the handler, dispatching invalidations in between. The handler should only | 35 // the handler, dispatching invalidations in between. The handler should only |
35 // see invalidations when its registered and its IDs are registered. | 36 // see invalidations when its registered and its IDs are registered. |
36 TEST_F(SyncNotifierRegistrarTest, Basic) { | 37 TEST_F(SyncNotifierRegistrarTest, Basic) { |
37 StrictMock<MockSyncNotifierObserver> handler; | 38 StrictMock<MockSyncNotifierObserver> handler; |
38 | 39 |
39 SyncNotifierRegistrar registrar; | 40 SyncNotifierRegistrar registrar; |
40 | 41 |
41 registrar.RegisterHandler(&handler); | 42 registrar.RegisterHandler(&handler); |
42 | 43 |
43 ObjectIdPayloadMap payloads; | 44 ObjectIdStateMap states; |
44 payloads[kObjectId1] = "1"; | 45 states[kObjectId1].payload = "1"; |
45 payloads[kObjectId2] = "2"; | 46 states[kObjectId2].payload = "2"; |
46 payloads[kObjectId3] = "3"; | 47 states[kObjectId3].payload = "3"; |
47 | 48 |
48 // Should be ignored since no IDs are registered to |handler|. | 49 // Should be ignored since no IDs are registered to |handler|. |
49 registrar.DispatchInvalidationsToHandlers(payloads, REMOTE_NOTIFICATION); | 50 registrar.DispatchInvalidationsToHandlers(states, REMOTE_NOTIFICATION); |
50 | 51 |
51 Mock::VerifyAndClearExpectations(&handler); | 52 Mock::VerifyAndClearExpectations(&handler); |
52 | 53 |
53 ObjectIdSet ids; | 54 ObjectIdSet ids; |
54 ids.insert(kObjectId1); | 55 ids.insert(kObjectId1); |
55 ids.insert(kObjectId2); | 56 ids.insert(kObjectId2); |
56 registrar.UpdateRegisteredIds(&handler, ids); | 57 registrar.UpdateRegisteredIds(&handler, ids); |
57 | 58 |
58 { | 59 { |
59 ObjectIdPayloadMap expected_payloads; | 60 ObjectIdStateMap expected_states; |
60 expected_payloads[kObjectId1] = "1"; | 61 expected_states[kObjectId1].payload = "1"; |
61 expected_payloads[kObjectId2] = "2"; | 62 expected_states[kObjectId2].payload = "2"; |
62 EXPECT_CALL(handler, OnIncomingNotification(expected_payloads, | 63 EXPECT_CALL(handler, OnIncomingNotification( |
63 REMOTE_NOTIFICATION)); | 64 expected_states, REMOTE_NOTIFICATION)); |
64 } | 65 } |
65 | 66 |
66 registrar.DispatchInvalidationsToHandlers(payloads, REMOTE_NOTIFICATION); | 67 registrar.DispatchInvalidationsToHandlers(states, REMOTE_NOTIFICATION); |
67 | 68 |
68 Mock::VerifyAndClearExpectations(&handler); | 69 Mock::VerifyAndClearExpectations(&handler); |
69 | 70 |
70 ids.erase(kObjectId1); | 71 ids.erase(kObjectId1); |
71 ids.insert(kObjectId3); | 72 ids.insert(kObjectId3); |
72 registrar.UpdateRegisteredIds(&handler, ids); | 73 registrar.UpdateRegisteredIds(&handler, ids); |
73 | 74 |
74 { | 75 { |
75 ObjectIdPayloadMap expected_payloads; | 76 ObjectIdStateMap expected_states; |
76 expected_payloads[kObjectId2] = "2"; | 77 expected_states[kObjectId2].payload = "2"; |
77 expected_payloads[kObjectId3] = "3"; | 78 expected_states[kObjectId3].payload = "3"; |
78 EXPECT_CALL(handler, OnIncomingNotification(expected_payloads, | 79 EXPECT_CALL(handler, OnIncomingNotification( |
79 REMOTE_NOTIFICATION)); | 80 expected_states, REMOTE_NOTIFICATION)); |
80 } | 81 } |
81 | 82 |
82 // Removed object IDs should not be notified, newly-added ones should. | 83 // Removed object IDs should not be notified, newly-added ones should. |
83 registrar.DispatchInvalidationsToHandlers(payloads, REMOTE_NOTIFICATION); | 84 registrar.DispatchInvalidationsToHandlers(states, REMOTE_NOTIFICATION); |
84 | 85 |
85 Mock::VerifyAndClearExpectations(&handler); | 86 Mock::VerifyAndClearExpectations(&handler); |
86 | 87 |
87 registrar.UnregisterHandler(&handler); | 88 registrar.UnregisterHandler(&handler); |
88 | 89 |
89 // Should be ignored since |handler| isn't registered anymore. | 90 // Should be ignored since |handler| isn't registered anymore. |
90 registrar.DispatchInvalidationsToHandlers(payloads, REMOTE_NOTIFICATION); | 91 registrar.DispatchInvalidationsToHandlers(states, REMOTE_NOTIFICATION); |
91 } | 92 } |
92 | 93 |
93 // Register handlers and some IDs for those handlers, register a handler with | 94 // Register handlers and some IDs for those handlers, register a handler with |
94 // no IDs, and register a handler with some IDs but unregister it. Then, | 95 // no IDs, and register a handler with some IDs but unregister it. Then, |
95 // dispatch some notifications and invalidations. Handlers that are registered | 96 // dispatch some notifications and invalidations. Handlers that are registered |
96 // should get notifications, and the ones that have registered IDs should | 97 // should get notifications, and the ones that have registered IDs should |
97 // receive invalidations for those IDs. | 98 // receive invalidations for those IDs. |
98 TEST_F(SyncNotifierRegistrarTest, MultipleHandlers) { | 99 TEST_F(SyncNotifierRegistrarTest, MultipleHandlers) { |
99 StrictMock<MockSyncNotifierObserver> handler1; | 100 StrictMock<MockSyncNotifierObserver> handler1; |
100 EXPECT_CALL(handler1, OnNotificationsEnabled()); | 101 EXPECT_CALL(handler1, OnNotificationsEnabled()); |
101 { | 102 { |
102 ObjectIdPayloadMap expected_payloads; | 103 ObjectIdStateMap expected_states; |
103 expected_payloads[kObjectId1] = "1"; | 104 expected_states[kObjectId1].payload = "1"; |
104 expected_payloads[kObjectId2] = "2"; | 105 expected_states[kObjectId2].payload = "2"; |
105 EXPECT_CALL(handler1, OnIncomingNotification(expected_payloads, | 106 EXPECT_CALL(handler1, OnIncomingNotification( |
106 REMOTE_NOTIFICATION)); | 107 expected_states, REMOTE_NOTIFICATION)); |
107 } | 108 } |
108 EXPECT_CALL(handler1, | 109 EXPECT_CALL(handler1, |
109 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); | 110 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
110 | 111 |
111 StrictMock<MockSyncNotifierObserver> handler2; | 112 StrictMock<MockSyncNotifierObserver> handler2; |
112 EXPECT_CALL(handler2, OnNotificationsEnabled()); | 113 EXPECT_CALL(handler2, OnNotificationsEnabled()); |
113 { | 114 { |
114 ObjectIdPayloadMap expected_payloads; | 115 ObjectIdStateMap expected_states; |
115 expected_payloads[kObjectId3] = "3"; | 116 expected_states[kObjectId3].payload = "3"; |
116 EXPECT_CALL(handler2, OnIncomingNotification(expected_payloads, | 117 EXPECT_CALL(handler2, OnIncomingNotification( |
117 REMOTE_NOTIFICATION)); | 118 expected_states, REMOTE_NOTIFICATION)); |
118 } | 119 } |
119 EXPECT_CALL(handler2, | 120 EXPECT_CALL(handler2, |
120 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); | 121 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
121 | 122 |
122 StrictMock<MockSyncNotifierObserver> handler3; | 123 StrictMock<MockSyncNotifierObserver> handler3; |
123 EXPECT_CALL(handler3, OnNotificationsEnabled()); | 124 EXPECT_CALL(handler3, OnNotificationsEnabled()); |
124 EXPECT_CALL(handler3, | 125 EXPECT_CALL(handler3, |
125 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); | 126 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
126 | 127 |
127 StrictMock<MockSyncNotifierObserver> handler4; | 128 StrictMock<MockSyncNotifierObserver> handler4; |
(...skipping 23 matching lines...) Expand all Loading... |
151 { | 152 { |
152 ObjectIdSet ids; | 153 ObjectIdSet ids; |
153 ids.insert(kObjectId4); | 154 ids.insert(kObjectId4); |
154 registrar.UpdateRegisteredIds(&handler4, ids); | 155 registrar.UpdateRegisteredIds(&handler4, ids); |
155 } | 156 } |
156 | 157 |
157 registrar.UnregisterHandler(&handler4); | 158 registrar.UnregisterHandler(&handler4); |
158 | 159 |
159 registrar.EmitOnNotificationsEnabled(); | 160 registrar.EmitOnNotificationsEnabled(); |
160 { | 161 { |
161 ObjectIdPayloadMap payloads; | 162 ObjectIdStateMap states; |
162 payloads[kObjectId1] = "1"; | 163 states[kObjectId1].payload = "1"; |
163 payloads[kObjectId2] = "2"; | 164 states[kObjectId2].payload = "2"; |
164 payloads[kObjectId3] = "3"; | 165 states[kObjectId3].payload = "3"; |
165 payloads[kObjectId4] = "4"; | 166 states[kObjectId4].payload = "4"; |
166 registrar.DispatchInvalidationsToHandlers(payloads, REMOTE_NOTIFICATION); | 167 registrar.DispatchInvalidationsToHandlers(states, REMOTE_NOTIFICATION); |
167 } | 168 } |
168 registrar.EmitOnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR); | 169 registrar.EmitOnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR); |
169 } | 170 } |
170 | 171 |
171 // Multiple registrations by different handlers on the same object ID should | 172 // Multiple registrations by different handlers on the same object ID should |
172 // cause a CHECK. | 173 // cause a CHECK. |
173 TEST_F(SyncNotifierRegistrarTest, MultipleRegistration) { | 174 TEST_F(SyncNotifierRegistrarTest, MultipleRegistration) { |
174 SyncNotifierRegistrar registrar; | 175 SyncNotifierRegistrar registrar; |
175 | 176 |
176 StrictMock<MockSyncNotifierObserver> handler1; | 177 StrictMock<MockSyncNotifierObserver> handler1; |
(...skipping 18 matching lines...) Expand all Loading... |
195 TEST_F(SyncNotifierRegistrarTest, EmptySetUnregisters) { | 196 TEST_F(SyncNotifierRegistrarTest, EmptySetUnregisters) { |
196 StrictMock<MockSyncNotifierObserver> handler1; | 197 StrictMock<MockSyncNotifierObserver> handler1; |
197 EXPECT_CALL(handler1, OnNotificationsEnabled()); | 198 EXPECT_CALL(handler1, OnNotificationsEnabled()); |
198 EXPECT_CALL(handler1, | 199 EXPECT_CALL(handler1, |
199 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); | 200 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
200 | 201 |
201 // Control observer. | 202 // Control observer. |
202 StrictMock<MockSyncNotifierObserver> handler2; | 203 StrictMock<MockSyncNotifierObserver> handler2; |
203 EXPECT_CALL(handler2, OnNotificationsEnabled()); | 204 EXPECT_CALL(handler2, OnNotificationsEnabled()); |
204 { | 205 { |
205 ObjectIdPayloadMap expected_payloads; | 206 ObjectIdStateMap expected_states; |
206 expected_payloads[kObjectId3] = "3"; | 207 expected_states[kObjectId3].payload = "3"; |
207 EXPECT_CALL(handler2, OnIncomingNotification(expected_payloads, | 208 EXPECT_CALL(handler2, OnIncomingNotification( |
208 REMOTE_NOTIFICATION)); | 209 expected_states, REMOTE_NOTIFICATION)); |
209 } | 210 } |
210 EXPECT_CALL(handler2, | 211 EXPECT_CALL(handler2, |
211 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); | 212 OnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR)); |
212 | 213 |
213 SyncNotifierRegistrar registrar; | 214 SyncNotifierRegistrar registrar; |
214 | 215 |
215 registrar.RegisterHandler(&handler1); | 216 registrar.RegisterHandler(&handler1); |
216 registrar.RegisterHandler(&handler2); | 217 registrar.RegisterHandler(&handler2); |
217 | 218 |
218 { | 219 { |
219 ObjectIdSet ids; | 220 ObjectIdSet ids; |
220 ids.insert(kObjectId1); | 221 ids.insert(kObjectId1); |
221 ids.insert(kObjectId2); | 222 ids.insert(kObjectId2); |
222 registrar.UpdateRegisteredIds(&handler1, ids); | 223 registrar.UpdateRegisteredIds(&handler1, ids); |
223 } | 224 } |
224 | 225 |
225 { | 226 { |
226 ObjectIdSet ids; | 227 ObjectIdSet ids; |
227 ids.insert(kObjectId3); | 228 ids.insert(kObjectId3); |
228 registrar.UpdateRegisteredIds(&handler2, ids); | 229 registrar.UpdateRegisteredIds(&handler2, ids); |
229 } | 230 } |
230 | 231 |
231 // Unregister the IDs for the first observer. It should not receive any | 232 // Unregister the IDs for the first observer. It should not receive any |
232 // further invalidations. | 233 // further invalidations. |
233 registrar.UpdateRegisteredIds(&handler1, ObjectIdSet()); | 234 registrar.UpdateRegisteredIds(&handler1, ObjectIdSet()); |
234 | 235 |
235 registrar.EmitOnNotificationsEnabled(); | 236 registrar.EmitOnNotificationsEnabled(); |
236 { | 237 { |
237 ObjectIdPayloadMap payloads; | 238 ObjectIdStateMap states; |
238 payloads[kObjectId1] = "1"; | 239 states[kObjectId1].payload = "1"; |
239 payloads[kObjectId2] = "2"; | 240 states[kObjectId2].payload = "2"; |
240 payloads[kObjectId3] = "3"; | 241 states[kObjectId3].payload = "3"; |
241 registrar.DispatchInvalidationsToHandlers(payloads, | 242 registrar.DispatchInvalidationsToHandlers(states, REMOTE_NOTIFICATION); |
242 REMOTE_NOTIFICATION); | |
243 } | 243 } |
244 registrar.EmitOnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR); | 244 registrar.EmitOnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR); |
245 } | 245 } |
246 | 246 |
247 } // namespace | 247 } // namespace |
248 | 248 |
249 } // namespace syncer | 249 } // namespace syncer |
OLD | NEW |