OLD | NEW |
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 "google_apis/gcm/engine/gcm_store_impl.h" | 5 #include "google_apis/gcm/engine/gcm_store_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); | 101 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); |
102 scoped_ptr<GCMStore::LoadResult> load_result; | 102 scoped_ptr<GCMStore::LoadResult> load_result; |
103 gcm_store->Load(base::Bind( | 103 gcm_store->Load(base::Bind( |
104 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | 104 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
105 PumpLoop(); | 105 PumpLoop(); |
106 | 106 |
107 EXPECT_EQ(0U, load_result->device_android_id); | 107 EXPECT_EQ(0U, load_result->device_android_id); |
108 EXPECT_EQ(0U, load_result->device_security_token); | 108 EXPECT_EQ(0U, load_result->device_security_token); |
109 EXPECT_TRUE(load_result->incoming_messages.empty()); | 109 EXPECT_TRUE(load_result->incoming_messages.empty()); |
110 EXPECT_TRUE(load_result->outgoing_messages.empty()); | 110 EXPECT_TRUE(load_result->outgoing_messages.empty()); |
111 EXPECT_EQ(1LL, load_result->serial_number_mappings.next_serial_number); | |
112 EXPECT_TRUE(load_result->serial_number_mappings.user_serial_numbers.empty()); | |
113 } | 111 } |
114 | 112 |
115 TEST_F(GCMStoreImplTest, DeviceCredentials) { | 113 TEST_F(GCMStoreImplTest, DeviceCredentials) { |
116 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); | 114 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); |
117 scoped_ptr<GCMStore::LoadResult> load_result; | 115 scoped_ptr<GCMStore::LoadResult> load_result; |
118 gcm_store->Load(base::Bind( | 116 gcm_store->Load(base::Bind( |
119 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | 117 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
120 PumpLoop(); | 118 PumpLoop(); |
121 | 119 |
122 gcm_store->SetDeviceCredentials( | 120 gcm_store->SetDeviceCredentials( |
123 kDeviceId, | 121 kDeviceId, |
124 kDeviceToken, | 122 kDeviceToken, |
125 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 123 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
126 PumpLoop(); | 124 PumpLoop(); |
127 | 125 |
128 gcm_store = BuildGCMStore().Pass(); | 126 gcm_store = BuildGCMStore().Pass(); |
129 gcm_store->Load(base::Bind( | 127 gcm_store->Load(base::Bind( |
130 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | 128 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
131 PumpLoop(); | 129 PumpLoop(); |
132 | 130 |
133 ASSERT_EQ(kDeviceId, load_result->device_android_id); | 131 ASSERT_EQ(kDeviceId, load_result->device_android_id); |
134 ASSERT_EQ(kDeviceToken, load_result->device_security_token); | 132 ASSERT_EQ(kDeviceToken, load_result->device_security_token); |
135 } | 133 } |
136 | 134 |
| 135 TEST_F(GCMStoreImplTest, Registrations) { |
| 136 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); |
| 137 scoped_ptr<GCMStore::LoadResult> load_result; |
| 138 gcm_store->Load(base::Bind( |
| 139 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
| 140 PumpLoop(); |
| 141 |
| 142 // Add one registration with one sender. |
| 143 linked_ptr<RegistrationInfo> registration1(new RegistrationInfo); |
| 144 registration1->sender_ids.push_back("sender1"); |
| 145 registration1->registration_id = "registration1"; |
| 146 gcm_store->AddRegistration( |
| 147 "app1", |
| 148 registration1, |
| 149 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
| 150 PumpLoop(); |
| 151 |
| 152 // Add one registration with multiple senders. |
| 153 linked_ptr<RegistrationInfo> registration2(new RegistrationInfo); |
| 154 registration2->sender_ids.push_back("sender2_1"); |
| 155 registration2->sender_ids.push_back("sender2_2"); |
| 156 registration2->registration_id = "registration2"; |
| 157 gcm_store->AddRegistration( |
| 158 "app2", |
| 159 registration2, |
| 160 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
| 161 PumpLoop(); |
| 162 |
| 163 gcm_store = BuildGCMStore().Pass(); |
| 164 gcm_store->Load(base::Bind( |
| 165 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
| 166 PumpLoop(); |
| 167 |
| 168 ASSERT_EQ(2, load_result->registrations.size()); |
| 169 ASSERT_TRUE(load_result->registrations.find("app1") != |
| 170 load_result->registrations.end()); |
| 171 EXPECT_EQ(registration1->registration_id, |
| 172 load_result->registrations["app1"]->registration_id); |
| 173 ASSERT_EQ(1, load_result->registrations["app1"]->sender_ids.size()); |
| 174 EXPECT_EQ(registration1->sender_ids[0], |
| 175 load_result->registrations["app1"]->sender_ids[0]); |
| 176 ASSERT_TRUE(load_result->registrations.find("app2") != |
| 177 load_result->registrations.end()); |
| 178 EXPECT_EQ(registration2->registration_id, |
| 179 load_result->registrations["app2"]->registration_id); |
| 180 ASSERT_EQ(2, load_result->registrations["app2"]->sender_ids.size()); |
| 181 EXPECT_EQ(registration2->sender_ids[0], |
| 182 load_result->registrations["app2"]->sender_ids[0]); |
| 183 EXPECT_EQ(registration2->sender_ids[1], |
| 184 load_result->registrations["app2"]->sender_ids[1]); |
| 185 } |
| 186 |
137 // Verify saving some incoming messages, reopening the directory, and then | 187 // Verify saving some incoming messages, reopening the directory, and then |
138 // removing those incoming messages. | 188 // removing those incoming messages. |
139 TEST_F(GCMStoreImplTest, IncomingMessages) { | 189 TEST_F(GCMStoreImplTest, IncomingMessages) { |
140 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); | 190 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); |
141 scoped_ptr<GCMStore::LoadResult> load_result; | 191 scoped_ptr<GCMStore::LoadResult> load_result; |
142 gcm_store->Load(base::Bind( | 192 gcm_store->Load(base::Bind( |
143 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | 193 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
144 PumpLoop(); | 194 PumpLoop(); |
145 | 195 |
146 std::vector<std::string> persistent_ids; | 196 std::vector<std::string> persistent_ids; |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 load_result->incoming_messages.clear(); | 337 load_result->incoming_messages.clear(); |
288 load_result->outgoing_messages.clear(); | 338 load_result->outgoing_messages.clear(); |
289 gcm_store->Load(base::Bind( | 339 gcm_store->Load(base::Bind( |
290 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | 340 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
291 PumpLoop(); | 341 PumpLoop(); |
292 | 342 |
293 ASSERT_TRUE(load_result->incoming_messages.empty()); | 343 ASSERT_TRUE(load_result->incoming_messages.empty()); |
294 ASSERT_TRUE(load_result->outgoing_messages.empty()); | 344 ASSERT_TRUE(load_result->outgoing_messages.empty()); |
295 } | 345 } |
296 | 346 |
297 // Verify that the next serial number of persisted properly. | |
298 TEST_F(GCMStoreImplTest, NextSerialNumber) { | |
299 const int64 kNextSerialNumber = 77LL; | |
300 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); | |
301 scoped_ptr<GCMStore::LoadResult> load_result; | |
302 gcm_store->Load(base::Bind( | |
303 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | |
304 PumpLoop(); | |
305 | |
306 gcm_store->SetNextSerialNumber( | |
307 kNextSerialNumber, | |
308 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | |
309 PumpLoop(); | |
310 | |
311 gcm_store = BuildGCMStore().Pass(); | |
312 gcm_store->Load(base::Bind( | |
313 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | |
314 PumpLoop(); | |
315 | |
316 EXPECT_EQ(kNextSerialNumber, | |
317 load_result->serial_number_mappings.next_serial_number); | |
318 } | |
319 | |
320 // Verify that user serial number mappings are persisted properly. | |
321 TEST_F(GCMStoreImplTest, UserSerialNumberMappings) { | |
322 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); | |
323 scoped_ptr<GCMStore::LoadResult> load_result; | |
324 gcm_store->Load(base::Bind( | |
325 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | |
326 PumpLoop(); | |
327 | |
328 std::string username1 = "username1"; | |
329 int64 serial_number1 = 34LL; | |
330 gcm_store->AddUserSerialNumber( | |
331 username1, | |
332 serial_number1, | |
333 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | |
334 | |
335 std::string username2 = "username2"; | |
336 int64 serial_number2 = 56LL; | |
337 gcm_store->AddUserSerialNumber( | |
338 username2, | |
339 serial_number2, | |
340 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | |
341 PumpLoop(); | |
342 | |
343 gcm_store = BuildGCMStore().Pass(); | |
344 gcm_store->Load(base::Bind( | |
345 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); | |
346 PumpLoop(); | |
347 | |
348 ASSERT_EQ(2u, load_result->serial_number_mappings.user_serial_numbers.size()); | |
349 ASSERT_NE( | |
350 load_result->serial_number_mappings.user_serial_numbers.end(), | |
351 load_result->serial_number_mappings.user_serial_numbers.find(username1)); | |
352 EXPECT_EQ(serial_number1, | |
353 load_result->serial_number_mappings.user_serial_numbers[username1]); | |
354 ASSERT_NE( | |
355 load_result->serial_number_mappings.user_serial_numbers.end(), | |
356 load_result->serial_number_mappings.user_serial_numbers.find(username2)); | |
357 EXPECT_EQ(serial_number2, | |
358 load_result->serial_number_mappings.user_serial_numbers[username2]); | |
359 } | |
360 | |
361 // Test that per-app message limits are enforced, persisted across restarts, | 347 // Test that per-app message limits are enforced, persisted across restarts, |
362 // and updated as messages are removed. | 348 // and updated as messages are removed. |
363 TEST_F(GCMStoreImplTest, PerAppMessageLimits) { | 349 TEST_F(GCMStoreImplTest, PerAppMessageLimits) { |
364 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); | 350 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); |
365 scoped_ptr<GCMStore::LoadResult> load_result; | 351 scoped_ptr<GCMStore::LoadResult> load_result; |
366 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, | 352 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, |
367 base::Unretained(this), | 353 base::Unretained(this), |
368 &load_result)); | 354 &load_result)); |
369 | 355 |
370 // Add the initial (below app limit) messages. | 356 // Add the initial (below app limit) messages. |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 | 464 |
479 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, | 465 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, |
480 base::Unretained(this), | 466 base::Unretained(this), |
481 &load_result)); | 467 &load_result)); |
482 PumpLoop(); | 468 PumpLoop(); |
483 } | 469 } |
484 | 470 |
485 } // namespace | 471 } // namespace |
486 | 472 |
487 } // namespace gcm | 473 } // namespace gcm |
OLD | NEW |