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 <stdint.h> | 7 #include <stdint.h> |
| 8 |
| 9 #include <memory> |
8 #include <string> | 10 #include <string> |
9 #include <utility> | 11 #include <utility> |
10 #include <vector> | 12 #include <vector> |
11 | 13 |
12 #include "base/bind.h" | 14 #include "base/bind.h" |
13 #include "base/command_line.h" | 15 #include "base/command_line.h" |
14 #include "base/files/file_path.h" | 16 #include "base/files/file_path.h" |
15 #include "base/files/scoped_temp_dir.h" | 17 #include "base/files/scoped_temp_dir.h" |
16 #include "base/memory/scoped_ptr.h" | 18 #include "base/memory/ptr_util.h" |
17 #include "base/strings/string_number_conversions.h" | 19 #include "base/strings/string_number_conversions.h" |
18 #include "base/test/test_simple_task_runner.h" | 20 #include "base/test/test_simple_task_runner.h" |
19 #include "base/thread_task_runner_handle.h" | 21 #include "base/thread_task_runner_handle.h" |
20 #include "google_apis/gcm/base/fake_encryptor.h" | 22 #include "google_apis/gcm/base/fake_encryptor.h" |
21 #include "google_apis/gcm/base/mcs_message.h" | 23 #include "google_apis/gcm/base/mcs_message.h" |
22 #include "google_apis/gcm/base/mcs_util.h" | 24 #include "google_apis/gcm/base/mcs_util.h" |
23 #include "google_apis/gcm/protocol/mcs.pb.h" | 25 #include "google_apis/gcm/protocol/mcs.pb.h" |
24 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
25 | 27 |
26 namespace gcm { | 28 namespace gcm { |
(...skipping 14 matching lines...) Expand all Loading... |
41 const char kCategoryName[] = "my_category"; | 43 const char kCategoryName[] = "my_category"; |
42 | 44 |
43 const uint64_t kDeviceId = 22; | 45 const uint64_t kDeviceId = 22; |
44 const uint64_t kDeviceToken = 55; | 46 const uint64_t kDeviceToken = 55; |
45 | 47 |
46 class GCMStoreImplTest : public testing::Test { | 48 class GCMStoreImplTest : public testing::Test { |
47 public: | 49 public: |
48 GCMStoreImplTest(); | 50 GCMStoreImplTest(); |
49 ~GCMStoreImplTest() override; | 51 ~GCMStoreImplTest() override; |
50 | 52 |
51 scoped_ptr<GCMStoreImpl> BuildGCMStore(); | 53 std::unique_ptr<GCMStoreImpl> BuildGCMStore(); |
52 void LoadGCMStore( | 54 void LoadGCMStore(GCMStoreImpl* gcm_store, |
53 GCMStoreImpl* gcm_store, scoped_ptr<GCMStore::LoadResult>* result_dst); | 55 std::unique_ptr<GCMStore::LoadResult>* result_dst); |
54 | 56 |
55 std::string GetNextPersistentId(); | 57 std::string GetNextPersistentId(); |
56 | 58 |
57 void PumpLoop(); | 59 void PumpLoop(); |
58 | 60 |
59 void LoadCallback(scoped_ptr<GCMStore::LoadResult>* result_dst, | 61 void LoadCallback(std::unique_ptr<GCMStore::LoadResult>* result_dst, |
60 scoped_ptr<GCMStore::LoadResult> result); | 62 std::unique_ptr<GCMStore::LoadResult> result); |
61 void LoadWithoutCheckCallback(scoped_ptr<GCMStore::LoadResult>* result_dst, | 63 void LoadWithoutCheckCallback( |
62 scoped_ptr<GCMStore::LoadResult> result); | 64 std::unique_ptr<GCMStore::LoadResult>* result_dst, |
| 65 std::unique_ptr<GCMStore::LoadResult> result); |
63 void UpdateCallback(bool success); | 66 void UpdateCallback(bool success); |
64 | 67 |
65 protected: | 68 protected: |
66 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 69 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
67 base::ThreadTaskRunnerHandle task_runner_handle_; | 70 base::ThreadTaskRunnerHandle task_runner_handle_; |
68 base::ScopedTempDir temp_directory_; | 71 base::ScopedTempDir temp_directory_; |
69 bool expected_success_; | 72 bool expected_success_; |
70 uint64_t next_persistent_id_; | 73 uint64_t next_persistent_id_; |
71 }; | 74 }; |
72 | 75 |
73 GCMStoreImplTest::GCMStoreImplTest() | 76 GCMStoreImplTest::GCMStoreImplTest() |
74 : task_runner_(new base::TestSimpleTaskRunner()), | 77 : task_runner_(new base::TestSimpleTaskRunner()), |
75 task_runner_handle_(task_runner_), | 78 task_runner_handle_(task_runner_), |
76 expected_success_(true), | 79 expected_success_(true), |
77 next_persistent_id_(base::Time::Now().ToInternalValue()) { | 80 next_persistent_id_(base::Time::Now().ToInternalValue()) { |
78 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir()); | 81 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir()); |
79 } | 82 } |
80 | 83 |
81 GCMStoreImplTest::~GCMStoreImplTest() {} | 84 GCMStoreImplTest::~GCMStoreImplTest() {} |
82 | 85 |
83 scoped_ptr<GCMStoreImpl> GCMStoreImplTest::BuildGCMStore() { | 86 std::unique_ptr<GCMStoreImpl> GCMStoreImplTest::BuildGCMStore() { |
84 return scoped_ptr<GCMStoreImpl>(new GCMStoreImpl( | 87 return std::unique_ptr<GCMStoreImpl>(new GCMStoreImpl( |
85 // Pass an non-existent directory as store path to match the exact | 88 // Pass an non-existent directory as store path to match the exact |
86 // behavior in the production code. Currently GCMStoreImpl checks if | 89 // behavior in the production code. Currently GCMStoreImpl checks if |
87 // the directory exist or not to determine the store existence. | 90 // the directory exist or not to determine the store existence. |
88 temp_directory_.path().Append(FILE_PATH_LITERAL("GCM Store")), | 91 temp_directory_.path().Append(FILE_PATH_LITERAL("GCM Store")), |
89 task_runner_, | 92 task_runner_, base::WrapUnique<Encryptor>(new FakeEncryptor))); |
90 make_scoped_ptr<Encryptor>(new FakeEncryptor))); | |
91 } | 93 } |
92 | 94 |
93 void GCMStoreImplTest::LoadGCMStore( | 95 void GCMStoreImplTest::LoadGCMStore( |
94 GCMStoreImpl* gcm_store, scoped_ptr<GCMStore::LoadResult>* result_dst) { | 96 GCMStoreImpl* gcm_store, |
| 97 std::unique_ptr<GCMStore::LoadResult>* result_dst) { |
95 gcm_store->Load( | 98 gcm_store->Load( |
96 GCMStore::CREATE_IF_MISSING, | 99 GCMStore::CREATE_IF_MISSING, |
97 base::Bind(&GCMStoreImplTest::LoadCallback, | 100 base::Bind(&GCMStoreImplTest::LoadCallback, |
98 base::Unretained(this), | 101 base::Unretained(this), |
99 result_dst)); | 102 result_dst)); |
100 PumpLoop(); | 103 PumpLoop(); |
101 } | 104 } |
102 | 105 |
103 std::string GCMStoreImplTest::GetNextPersistentId() { | 106 std::string GCMStoreImplTest::GetNextPersistentId() { |
104 return base::Uint64ToString(next_persistent_id_++); | 107 return base::Uint64ToString(next_persistent_id_++); |
105 } | 108 } |
106 | 109 |
107 void GCMStoreImplTest::PumpLoop() { task_runner_->RunUntilIdle(); } | 110 void GCMStoreImplTest::PumpLoop() { task_runner_->RunUntilIdle(); } |
108 | 111 |
109 void GCMStoreImplTest::LoadCallback( | 112 void GCMStoreImplTest::LoadCallback( |
110 scoped_ptr<GCMStore::LoadResult>* result_dst, | 113 std::unique_ptr<GCMStore::LoadResult>* result_dst, |
111 scoped_ptr<GCMStore::LoadResult> result) { | 114 std::unique_ptr<GCMStore::LoadResult> result) { |
112 ASSERT_TRUE(result->success); | 115 ASSERT_TRUE(result->success); |
113 LoadWithoutCheckCallback(result_dst, std::move(result)); | 116 LoadWithoutCheckCallback(result_dst, std::move(result)); |
114 } | 117 } |
115 | 118 |
116 void GCMStoreImplTest::LoadWithoutCheckCallback( | 119 void GCMStoreImplTest::LoadWithoutCheckCallback( |
117 scoped_ptr<GCMStore::LoadResult>* result_dst, | 120 std::unique_ptr<GCMStore::LoadResult>* result_dst, |
118 scoped_ptr<GCMStore::LoadResult> result) { | 121 std::unique_ptr<GCMStore::LoadResult> result) { |
119 *result_dst = std::move(result); | 122 *result_dst = std::move(result); |
120 } | 123 } |
121 | 124 |
122 void GCMStoreImplTest::UpdateCallback(bool success) { | 125 void GCMStoreImplTest::UpdateCallback(bool success) { |
123 ASSERT_EQ(expected_success_, success); | 126 ASSERT_EQ(expected_success_, success); |
124 } | 127 } |
125 | 128 |
126 // Verify creating a new database and loading it. | 129 // Verify creating a new database and loading it. |
127 TEST_F(GCMStoreImplTest, LoadNew) { | 130 TEST_F(GCMStoreImplTest, LoadNew) { |
128 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 131 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
129 scoped_ptr<GCMStore::LoadResult> load_result; | 132 std::unique_ptr<GCMStore::LoadResult> load_result; |
130 LoadGCMStore(gcm_store.get(), &load_result); | 133 LoadGCMStore(gcm_store.get(), &load_result); |
131 | 134 |
132 EXPECT_EQ(0U, load_result->device_android_id); | 135 EXPECT_EQ(0U, load_result->device_android_id); |
133 EXPECT_EQ(0U, load_result->device_security_token); | 136 EXPECT_EQ(0U, load_result->device_security_token); |
134 EXPECT_TRUE(load_result->incoming_messages.empty()); | 137 EXPECT_TRUE(load_result->incoming_messages.empty()); |
135 EXPECT_TRUE(load_result->outgoing_messages.empty()); | 138 EXPECT_TRUE(load_result->outgoing_messages.empty()); |
136 EXPECT_TRUE(load_result->gservices_settings.empty()); | 139 EXPECT_TRUE(load_result->gservices_settings.empty()); |
137 EXPECT_EQ(base::Time::FromInternalValue(0LL), load_result->last_checkin_time); | 140 EXPECT_EQ(base::Time::FromInternalValue(0LL), load_result->last_checkin_time); |
138 } | 141 } |
139 | 142 |
140 // Verify new database is not created when DO_NOT_CREATE_NEW_STORE is passed. | 143 // Verify new database is not created when DO_NOT_CREATE_NEW_STORE is passed. |
141 TEST_F(GCMStoreImplTest, LoadWithoutCreatingNewStore) { | 144 TEST_F(GCMStoreImplTest, LoadWithoutCreatingNewStore) { |
142 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 145 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
143 scoped_ptr<GCMStore::LoadResult> load_result; | 146 std::unique_ptr<GCMStore::LoadResult> load_result; |
144 gcm_store->Load( | 147 gcm_store->Load( |
145 GCMStore::DO_NOT_CREATE, | 148 GCMStore::DO_NOT_CREATE, |
146 base::Bind(&GCMStoreImplTest::LoadWithoutCheckCallback, | 149 base::Bind(&GCMStoreImplTest::LoadWithoutCheckCallback, |
147 base::Unretained(this), | 150 base::Unretained(this), |
148 &load_result)); | 151 &load_result)); |
149 PumpLoop(); | 152 PumpLoop(); |
150 | 153 |
151 EXPECT_FALSE(load_result->success); | 154 EXPECT_FALSE(load_result->success); |
152 EXPECT_TRUE(load_result->store_does_not_exist); | 155 EXPECT_TRUE(load_result->store_does_not_exist); |
153 } | 156 } |
154 | 157 |
155 TEST_F(GCMStoreImplTest, DeviceCredentials) { | 158 TEST_F(GCMStoreImplTest, DeviceCredentials) { |
156 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 159 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
157 scoped_ptr<GCMStore::LoadResult> load_result; | 160 std::unique_ptr<GCMStore::LoadResult> load_result; |
158 LoadGCMStore(gcm_store.get(), &load_result); | 161 LoadGCMStore(gcm_store.get(), &load_result); |
159 | 162 |
160 gcm_store->SetDeviceCredentials( | 163 gcm_store->SetDeviceCredentials( |
161 kDeviceId, | 164 kDeviceId, |
162 kDeviceToken, | 165 kDeviceToken, |
163 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 166 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
164 PumpLoop(); | 167 PumpLoop(); |
165 | 168 |
166 gcm_store = BuildGCMStore(); | 169 gcm_store = BuildGCMStore(); |
167 LoadGCMStore(gcm_store.get(), &load_result); | 170 LoadGCMStore(gcm_store.get(), &load_result); |
168 | 171 |
169 ASSERT_EQ(kDeviceId, load_result->device_android_id); | 172 ASSERT_EQ(kDeviceId, load_result->device_android_id); |
170 ASSERT_EQ(kDeviceToken, load_result->device_security_token); | 173 ASSERT_EQ(kDeviceToken, load_result->device_security_token); |
171 } | 174 } |
172 | 175 |
173 TEST_F(GCMStoreImplTest, LastCheckinInfo) { | 176 TEST_F(GCMStoreImplTest, LastCheckinInfo) { |
174 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 177 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
175 scoped_ptr<GCMStore::LoadResult> load_result; | 178 std::unique_ptr<GCMStore::LoadResult> load_result; |
176 LoadGCMStore(gcm_store.get(), &load_result); | 179 LoadGCMStore(gcm_store.get(), &load_result); |
177 | 180 |
178 base::Time last_checkin_time = base::Time::Now(); | 181 base::Time last_checkin_time = base::Time::Now(); |
179 std::set<std::string> accounts; | 182 std::set<std::string> accounts; |
180 accounts.insert("test_user1@gmail.com"); | 183 accounts.insert("test_user1@gmail.com"); |
181 accounts.insert("test_user2@gmail.com"); | 184 accounts.insert("test_user2@gmail.com"); |
182 | 185 |
183 gcm_store->SetLastCheckinInfo( | 186 gcm_store->SetLastCheckinInfo( |
184 last_checkin_time, | 187 last_checkin_time, |
185 accounts, | 188 accounts, |
(...skipping 11 matching lines...) Expand all Loading... |
197 "gibberish", | 200 "gibberish", |
198 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 201 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
199 PumpLoop(); | 202 PumpLoop(); |
200 | 203 |
201 gcm_store = BuildGCMStore(); | 204 gcm_store = BuildGCMStore(); |
202 LoadGCMStore(gcm_store.get(), &load_result); | 205 LoadGCMStore(gcm_store.get(), &load_result); |
203 EXPECT_EQ(base::Time(), load_result->last_checkin_time); | 206 EXPECT_EQ(base::Time(), load_result->last_checkin_time); |
204 } | 207 } |
205 | 208 |
206 TEST_F(GCMStoreImplTest, GServicesSettings_ProtocolV2) { | 209 TEST_F(GCMStoreImplTest, GServicesSettings_ProtocolV2) { |
207 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 210 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
208 scoped_ptr<GCMStore::LoadResult> load_result; | 211 std::unique_ptr<GCMStore::LoadResult> load_result; |
209 LoadGCMStore(gcm_store.get(), &load_result); | 212 LoadGCMStore(gcm_store.get(), &load_result); |
210 | 213 |
211 std::map<std::string, std::string> settings; | 214 std::map<std::string, std::string> settings; |
212 settings["checkin_interval"] = "12345"; | 215 settings["checkin_interval"] = "12345"; |
213 settings["mcs_port"] = "438"; | 216 settings["mcs_port"] = "438"; |
214 settings["checkin_url"] = "http://checkin.google.com"; | 217 settings["checkin_url"] = "http://checkin.google.com"; |
215 std::string digest = "digest1"; | 218 std::string digest = "digest1"; |
216 | 219 |
217 gcm_store->SetGServicesSettings( | 220 gcm_store->SetGServicesSettings( |
218 settings, | 221 settings, |
(...skipping 20 matching lines...) Expand all Loading... |
239 PumpLoop(); | 242 PumpLoop(); |
240 | 243 |
241 gcm_store = BuildGCMStore(); | 244 gcm_store = BuildGCMStore(); |
242 LoadGCMStore(gcm_store.get(), &load_result); | 245 LoadGCMStore(gcm_store.get(), &load_result); |
243 | 246 |
244 ASSERT_EQ(settings, load_result->gservices_settings); | 247 ASSERT_EQ(settings, load_result->gservices_settings); |
245 ASSERT_EQ(digest, load_result->gservices_digest); | 248 ASSERT_EQ(digest, load_result->gservices_digest); |
246 } | 249 } |
247 | 250 |
248 TEST_F(GCMStoreImplTest, Registrations) { | 251 TEST_F(GCMStoreImplTest, Registrations) { |
249 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 252 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
250 scoped_ptr<GCMStore::LoadResult> load_result; | 253 std::unique_ptr<GCMStore::LoadResult> load_result; |
251 LoadGCMStore(gcm_store.get(), &load_result); | 254 LoadGCMStore(gcm_store.get(), &load_result); |
252 | 255 |
253 // Add one registration with one sender. | 256 // Add one registration with one sender. |
254 std::string registration = "sender1=registration1"; | 257 std::string registration = "sender1=registration1"; |
255 gcm_store->AddRegistration( | 258 gcm_store->AddRegistration( |
256 kAppName, | 259 kAppName, |
257 registration, | 260 registration, |
258 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 261 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
259 PumpLoop(); | 262 PumpLoop(); |
260 | 263 |
(...skipping 26 matching lines...) Expand all Loading... |
287 | 290 |
288 ASSERT_EQ(1u, load_result->registrations.size()); | 291 ASSERT_EQ(1u, load_result->registrations.size()); |
289 ASSERT_TRUE(load_result->registrations.find(kAppName) != | 292 ASSERT_TRUE(load_result->registrations.find(kAppName) != |
290 load_result->registrations.end()); | 293 load_result->registrations.end()); |
291 EXPECT_EQ(registration, load_result->registrations[kAppName]); | 294 EXPECT_EQ(registration, load_result->registrations[kAppName]); |
292 } | 295 } |
293 | 296 |
294 // Verify saving some incoming messages, reopening the directory, and then | 297 // Verify saving some incoming messages, reopening the directory, and then |
295 // removing those incoming messages. | 298 // removing those incoming messages. |
296 TEST_F(GCMStoreImplTest, IncomingMessages) { | 299 TEST_F(GCMStoreImplTest, IncomingMessages) { |
297 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 300 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
298 scoped_ptr<GCMStore::LoadResult> load_result; | 301 std::unique_ptr<GCMStore::LoadResult> load_result; |
299 LoadGCMStore(gcm_store.get(), &load_result); | 302 LoadGCMStore(gcm_store.get(), &load_result); |
300 | 303 |
301 std::vector<std::string> persistent_ids; | 304 std::vector<std::string> persistent_ids; |
302 for (int i = 0; i < kNumPersistentIds; ++i) { | 305 for (int i = 0; i < kNumPersistentIds; ++i) { |
303 persistent_ids.push_back(GetNextPersistentId()); | 306 persistent_ids.push_back(GetNextPersistentId()); |
304 gcm_store->AddIncomingMessage( | 307 gcm_store->AddIncomingMessage( |
305 persistent_ids.back(), | 308 persistent_ids.back(), |
306 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 309 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
307 PumpLoop(); | 310 PumpLoop(); |
308 } | 311 } |
(...skipping 13 matching lines...) Expand all Loading... |
322 load_result->incoming_messages.clear(); | 325 load_result->incoming_messages.clear(); |
323 LoadGCMStore(gcm_store.get(), &load_result); | 326 LoadGCMStore(gcm_store.get(), &load_result); |
324 | 327 |
325 ASSERT_TRUE(load_result->incoming_messages.empty()); | 328 ASSERT_TRUE(load_result->incoming_messages.empty()); |
326 ASSERT_TRUE(load_result->outgoing_messages.empty()); | 329 ASSERT_TRUE(load_result->outgoing_messages.empty()); |
327 } | 330 } |
328 | 331 |
329 // Verify saving some outgoing messages, reopening the directory, and then | 332 // Verify saving some outgoing messages, reopening the directory, and then |
330 // removing those outgoing messages. | 333 // removing those outgoing messages. |
331 TEST_F(GCMStoreImplTest, OutgoingMessages) { | 334 TEST_F(GCMStoreImplTest, OutgoingMessages) { |
332 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 335 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
333 scoped_ptr<GCMStore::LoadResult> load_result; | 336 std::unique_ptr<GCMStore::LoadResult> load_result; |
334 LoadGCMStore(gcm_store.get(), &load_result); | 337 LoadGCMStore(gcm_store.get(), &load_result); |
335 | 338 |
336 std::vector<std::string> persistent_ids; | 339 std::vector<std::string> persistent_ids; |
337 const int kNumPersistentIds = 10; | 340 const int kNumPersistentIds = 10; |
338 for (int i = 0; i < kNumPersistentIds; ++i) { | 341 for (int i = 0; i < kNumPersistentIds; ++i) { |
339 persistent_ids.push_back(GetNextPersistentId()); | 342 persistent_ids.push_back(GetNextPersistentId()); |
340 mcs_proto::DataMessageStanza message; | 343 mcs_proto::DataMessageStanza message; |
341 message.set_from(kAppName + persistent_ids.back()); | 344 message.set_from(kAppName + persistent_ids.back()); |
342 message.set_category(kCategoryName + persistent_ids.back()); | 345 message.set_category(kCategoryName + persistent_ids.back()); |
343 gcm_store->AddOutgoingMessage( | 346 gcm_store->AddOutgoingMessage( |
(...skipping 26 matching lines...) Expand all Loading... |
370 gcm_store = BuildGCMStore(); | 373 gcm_store = BuildGCMStore(); |
371 load_result->outgoing_messages.clear(); | 374 load_result->outgoing_messages.clear(); |
372 LoadGCMStore(gcm_store.get(), &load_result); | 375 LoadGCMStore(gcm_store.get(), &load_result); |
373 | 376 |
374 ASSERT_TRUE(load_result->incoming_messages.empty()); | 377 ASSERT_TRUE(load_result->incoming_messages.empty()); |
375 ASSERT_TRUE(load_result->outgoing_messages.empty()); | 378 ASSERT_TRUE(load_result->outgoing_messages.empty()); |
376 } | 379 } |
377 | 380 |
378 // Verify incoming and outgoing messages don't conflict. | 381 // Verify incoming and outgoing messages don't conflict. |
379 TEST_F(GCMStoreImplTest, IncomingAndOutgoingMessages) { | 382 TEST_F(GCMStoreImplTest, IncomingAndOutgoingMessages) { |
380 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 383 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
381 scoped_ptr<GCMStore::LoadResult> load_result; | 384 std::unique_ptr<GCMStore::LoadResult> load_result; |
382 LoadGCMStore(gcm_store.get(), &load_result); | 385 LoadGCMStore(gcm_store.get(), &load_result); |
383 | 386 |
384 std::vector<std::string> persistent_ids; | 387 std::vector<std::string> persistent_ids; |
385 const int kNumPersistentIds = 10; | 388 const int kNumPersistentIds = 10; |
386 for (int i = 0; i < kNumPersistentIds; ++i) { | 389 for (int i = 0; i < kNumPersistentIds; ++i) { |
387 persistent_ids.push_back(GetNextPersistentId()); | 390 persistent_ids.push_back(GetNextPersistentId()); |
388 gcm_store->AddIncomingMessage( | 391 gcm_store->AddIncomingMessage( |
389 persistent_ids.back(), | 392 persistent_ids.back(), |
390 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 393 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
391 PumpLoop(); | 394 PumpLoop(); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 load_result->outgoing_messages.clear(); | 432 load_result->outgoing_messages.clear(); |
430 LoadGCMStore(gcm_store.get(), &load_result); | 433 LoadGCMStore(gcm_store.get(), &load_result); |
431 | 434 |
432 ASSERT_TRUE(load_result->incoming_messages.empty()); | 435 ASSERT_TRUE(load_result->incoming_messages.empty()); |
433 ASSERT_TRUE(load_result->outgoing_messages.empty()); | 436 ASSERT_TRUE(load_result->outgoing_messages.empty()); |
434 } | 437 } |
435 | 438 |
436 // Test that per-app message limits are enforced, persisted across restarts, | 439 // Test that per-app message limits are enforced, persisted across restarts, |
437 // and updated as messages are removed. | 440 // and updated as messages are removed. |
438 TEST_F(GCMStoreImplTest, PerAppMessageLimits) { | 441 TEST_F(GCMStoreImplTest, PerAppMessageLimits) { |
439 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 442 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
440 scoped_ptr<GCMStore::LoadResult> load_result; | 443 std::unique_ptr<GCMStore::LoadResult> load_result; |
441 LoadGCMStore(gcm_store.get(), &load_result); | 444 LoadGCMStore(gcm_store.get(), &load_result); |
442 | 445 |
443 // Add the initial (below app limit) messages. | 446 // Add the initial (below app limit) messages. |
444 for (int i = 0; i < kNumMessagesPerApp; ++i) { | 447 for (int i = 0; i < kNumMessagesPerApp; ++i) { |
445 mcs_proto::DataMessageStanza message; | 448 mcs_proto::DataMessageStanza message; |
446 message.set_from(kAppName); | 449 message.set_from(kAppName); |
447 message.set_category(kCategoryName); | 450 message.set_category(kCategoryName); |
448 EXPECT_TRUE(gcm_store->AddOutgoingMessage( | 451 EXPECT_TRUE(gcm_store->AddOutgoingMessage( |
449 base::IntToString(i), | 452 base::IntToString(i), |
450 MCSMessage(message), | 453 MCSMessage(message), |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 EXPECT_TRUE(gcm_store->AddOutgoingMessage( | 503 EXPECT_TRUE(gcm_store->AddOutgoingMessage( |
501 base::IntToString(i + kNumMessagesPerApp), | 504 base::IntToString(i + kNumMessagesPerApp), |
502 MCSMessage(message), | 505 MCSMessage(message), |
503 base::Bind(&GCMStoreImplTest::UpdateCallback, | 506 base::Bind(&GCMStoreImplTest::UpdateCallback, |
504 base::Unretained(this)))); | 507 base::Unretained(this)))); |
505 PumpLoop(); | 508 PumpLoop(); |
506 } | 509 } |
507 } | 510 } |
508 | 511 |
509 TEST_F(GCMStoreImplTest, AccountMapping) { | 512 TEST_F(GCMStoreImplTest, AccountMapping) { |
510 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 513 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
511 scoped_ptr<GCMStore::LoadResult> load_result; | 514 std::unique_ptr<GCMStore::LoadResult> load_result; |
512 LoadGCMStore(gcm_store.get(), &load_result); | 515 LoadGCMStore(gcm_store.get(), &load_result); |
513 | 516 |
514 // Add account mappings. | 517 // Add account mappings. |
515 AccountMapping account_mapping1; | 518 AccountMapping account_mapping1; |
516 account_mapping1.account_id = "account_id_1"; | 519 account_mapping1.account_id = "account_id_1"; |
517 account_mapping1.email = "account_id_1@gmail.com"; | 520 account_mapping1.email = "account_id_1@gmail.com"; |
518 account_mapping1.access_token = "account_token1"; | 521 account_mapping1.access_token = "account_token1"; |
519 account_mapping1.status = AccountMapping::ADDING; | 522 account_mapping1.status = AccountMapping::ADDING; |
520 account_mapping1.status_change_timestamp = base::Time(); | 523 account_mapping1.status_change_timestamp = base::Time(); |
521 account_mapping1.last_message_id = "message_1"; | 524 account_mapping1.last_message_id = "message_1"; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 EXPECT_EQ(account_mapping2.account_id, iter->account_id); | 576 EXPECT_EQ(account_mapping2.account_id, iter->account_id); |
574 EXPECT_EQ(account_mapping2.email, iter->email); | 577 EXPECT_EQ(account_mapping2.email, iter->email); |
575 EXPECT_TRUE(iter->access_token.empty()); | 578 EXPECT_TRUE(iter->access_token.empty()); |
576 EXPECT_EQ(AccountMapping::REMOVING, iter->status); | 579 EXPECT_EQ(AccountMapping::REMOVING, iter->status); |
577 EXPECT_EQ(account_mapping2.status_change_timestamp, | 580 EXPECT_EQ(account_mapping2.status_change_timestamp, |
578 iter->status_change_timestamp); | 581 iter->status_change_timestamp); |
579 EXPECT_EQ(account_mapping2.last_message_id, iter->last_message_id); | 582 EXPECT_EQ(account_mapping2.last_message_id, iter->last_message_id); |
580 } | 583 } |
581 | 584 |
582 TEST_F(GCMStoreImplTest, HeartbeatInterval) { | 585 TEST_F(GCMStoreImplTest, HeartbeatInterval) { |
583 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 586 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
584 scoped_ptr<GCMStore::LoadResult> load_result; | 587 std::unique_ptr<GCMStore::LoadResult> load_result; |
585 LoadGCMStore(gcm_store.get(), &load_result); | 588 LoadGCMStore(gcm_store.get(), &load_result); |
586 | 589 |
587 std::string scope1 = "scope1"; | 590 std::string scope1 = "scope1"; |
588 std::string scope2 = "scope2"; | 591 std::string scope2 = "scope2"; |
589 int heartbeat1 = 120 * 1000; | 592 int heartbeat1 = 120 * 1000; |
590 int heartbeat2 = 360 * 1000; | 593 int heartbeat2 = 360 * 1000; |
591 | 594 |
592 gcm_store->AddHeartbeatInterval( | 595 gcm_store->AddHeartbeatInterval( |
593 scope1, | 596 scope1, |
594 heartbeat1, | 597 heartbeat1, |
(...skipping 27 matching lines...) Expand all Loading... |
622 EXPECT_EQ(1UL, load_result->heartbeat_intervals.size()); | 625 EXPECT_EQ(1UL, load_result->heartbeat_intervals.size()); |
623 ASSERT_TRUE(load_result->heartbeat_intervals.find(scope1) != | 626 ASSERT_TRUE(load_result->heartbeat_intervals.find(scope1) != |
624 load_result->heartbeat_intervals.end()); | 627 load_result->heartbeat_intervals.end()); |
625 EXPECT_EQ(heartbeat1, load_result->heartbeat_intervals[scope1]); | 628 EXPECT_EQ(heartbeat1, load_result->heartbeat_intervals[scope1]); |
626 } | 629 } |
627 | 630 |
628 // When the database is destroyed, all database updates should fail. At the | 631 // When the database is destroyed, all database updates should fail. At the |
629 // same time, they per-app message counts should not go up, as failures should | 632 // same time, they per-app message counts should not go up, as failures should |
630 // result in decrementing the counts. | 633 // result in decrementing the counts. |
631 TEST_F(GCMStoreImplTest, AddMessageAfterDestroy) { | 634 TEST_F(GCMStoreImplTest, AddMessageAfterDestroy) { |
632 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 635 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
633 scoped_ptr<GCMStore::LoadResult> load_result; | 636 std::unique_ptr<GCMStore::LoadResult> load_result; |
634 LoadGCMStore(gcm_store.get(), &load_result); | 637 LoadGCMStore(gcm_store.get(), &load_result); |
635 gcm_store->Destroy(base::Bind(&GCMStoreImplTest::UpdateCallback, | 638 gcm_store->Destroy(base::Bind(&GCMStoreImplTest::UpdateCallback, |
636 base::Unretained(this))); | 639 base::Unretained(this))); |
637 PumpLoop(); | 640 PumpLoop(); |
638 | 641 |
639 expected_success_ = false; | 642 expected_success_ = false; |
640 for (int i = 0; i < kNumMessagesPerApp * 2; ++i) { | 643 for (int i = 0; i < kNumMessagesPerApp * 2; ++i) { |
641 mcs_proto::DataMessageStanza message; | 644 mcs_proto::DataMessageStanza message; |
642 message.set_from(kAppName); | 645 message.set_from(kAppName); |
643 message.set_category(kCategoryName); | 646 message.set_category(kCategoryName); |
644 // Because all adds are failing, none should hit the per-app message limits. | 647 // Because all adds are failing, none should hit the per-app message limits. |
645 EXPECT_TRUE(gcm_store->AddOutgoingMessage( | 648 EXPECT_TRUE(gcm_store->AddOutgoingMessage( |
646 base::IntToString(i), | 649 base::IntToString(i), |
647 MCSMessage(message), | 650 MCSMessage(message), |
648 base::Bind(&GCMStoreImplTest::UpdateCallback, | 651 base::Bind(&GCMStoreImplTest::UpdateCallback, |
649 base::Unretained(this)))); | 652 base::Unretained(this)))); |
650 PumpLoop(); | 653 PumpLoop(); |
651 } | 654 } |
652 } | 655 } |
653 | 656 |
654 TEST_F(GCMStoreImplTest, ReloadAfterClose) { | 657 TEST_F(GCMStoreImplTest, ReloadAfterClose) { |
655 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 658 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
656 scoped_ptr<GCMStore::LoadResult> load_result; | 659 std::unique_ptr<GCMStore::LoadResult> load_result; |
657 LoadGCMStore(gcm_store.get(), &load_result); | 660 LoadGCMStore(gcm_store.get(), &load_result); |
658 | 661 |
659 gcm_store->Close(); | 662 gcm_store->Close(); |
660 PumpLoop(); | 663 PumpLoop(); |
661 | 664 |
662 LoadGCMStore(gcm_store.get(), &load_result); | 665 LoadGCMStore(gcm_store.get(), &load_result); |
663 } | 666 } |
664 | 667 |
665 TEST_F(GCMStoreImplTest, LastTokenFetchTime) { | 668 TEST_F(GCMStoreImplTest, LastTokenFetchTime) { |
666 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 669 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
667 scoped_ptr<GCMStore::LoadResult> load_result; | 670 std::unique_ptr<GCMStore::LoadResult> load_result; |
668 LoadGCMStore(gcm_store.get(), &load_result); | 671 LoadGCMStore(gcm_store.get(), &load_result); |
669 EXPECT_EQ(base::Time(), load_result->last_token_fetch_time); | 672 EXPECT_EQ(base::Time(), load_result->last_token_fetch_time); |
670 | 673 |
671 base::Time last_token_fetch_time = base::Time::Now(); | 674 base::Time last_token_fetch_time = base::Time::Now(); |
672 gcm_store->SetLastTokenFetchTime( | 675 gcm_store->SetLastTokenFetchTime( |
673 last_token_fetch_time, | 676 last_token_fetch_time, |
674 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 677 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
675 PumpLoop(); | 678 PumpLoop(); |
676 | 679 |
677 gcm_store = BuildGCMStore(); | 680 gcm_store = BuildGCMStore(); |
678 LoadGCMStore(gcm_store.get(), &load_result); | 681 LoadGCMStore(gcm_store.get(), &load_result); |
679 EXPECT_EQ(last_token_fetch_time, load_result->last_token_fetch_time); | 682 EXPECT_EQ(last_token_fetch_time, load_result->last_token_fetch_time); |
680 | 683 |
681 // Negative cases, where the value read is gibberish. | 684 // Negative cases, where the value read is gibberish. |
682 gcm_store->SetValueForTesting( | 685 gcm_store->SetValueForTesting( |
683 "last_token_fetch_time", | 686 "last_token_fetch_time", |
684 "gibberish", | 687 "gibberish", |
685 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 688 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
686 PumpLoop(); | 689 PumpLoop(); |
687 | 690 |
688 gcm_store = BuildGCMStore(); | 691 gcm_store = BuildGCMStore(); |
689 LoadGCMStore(gcm_store.get(), &load_result); | 692 LoadGCMStore(gcm_store.get(), &load_result); |
690 EXPECT_EQ(base::Time(), load_result->last_token_fetch_time); | 693 EXPECT_EQ(base::Time(), load_result->last_token_fetch_time); |
691 } | 694 } |
692 | 695 |
693 TEST_F(GCMStoreImplTest, InstanceIDData) { | 696 TEST_F(GCMStoreImplTest, InstanceIDData) { |
694 scoped_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); | 697 std::unique_ptr<GCMStoreImpl> gcm_store(BuildGCMStore()); |
695 scoped_ptr<GCMStore::LoadResult> load_result; | 698 std::unique_ptr<GCMStore::LoadResult> load_result; |
696 LoadGCMStore(gcm_store.get(), &load_result); | 699 LoadGCMStore(gcm_store.get(), &load_result); |
697 | 700 |
698 std::string instance_id_data("Foo"); | 701 std::string instance_id_data("Foo"); |
699 gcm_store->AddInstanceIDData( | 702 gcm_store->AddInstanceIDData( |
700 kAppName, | 703 kAppName, |
701 instance_id_data, | 704 instance_id_data, |
702 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); | 705 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
703 PumpLoop(); | 706 PumpLoop(); |
704 | 707 |
705 std::string instance_id_data2("Hello Instance ID"); | 708 std::string instance_id_data2("Hello Instance ID"); |
(...skipping 24 matching lines...) Expand all Loading... |
730 | 733 |
731 ASSERT_EQ(1u, load_result->instance_id_data.size()); | 734 ASSERT_EQ(1u, load_result->instance_id_data.size()); |
732 ASSERT_TRUE(load_result->instance_id_data.find(kAppName2) != | 735 ASSERT_TRUE(load_result->instance_id_data.find(kAppName2) != |
733 load_result->instance_id_data.end()); | 736 load_result->instance_id_data.end()); |
734 EXPECT_EQ(instance_id_data2, load_result->instance_id_data[kAppName2]); | 737 EXPECT_EQ(instance_id_data2, load_result->instance_id_data[kAppName2]); |
735 } | 738 } |
736 | 739 |
737 } // namespace | 740 } // namespace |
738 | 741 |
739 } // namespace gcm | 742 } // namespace gcm |
OLD | NEW |