| 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 |