| 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 "chrome/browser/services/gcm/gcm_service.h" | 5 #include "chrome/browser/services/gcm/gcm_service.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 MESSAGE_EVENT, | 67 MESSAGE_EVENT, |
| 68 MESSAGES_DELETED_EVENT, | 68 MESSAGES_DELETED_EVENT, |
| 69 SEND_ERROR_EVENT | 69 SEND_ERROR_EVENT |
| 70 }; | 70 }; |
| 71 | 71 |
| 72 FakeGCMAppHandler(); | 72 FakeGCMAppHandler(); |
| 73 virtual ~FakeGCMAppHandler(); | 73 virtual ~FakeGCMAppHandler(); |
| 74 | 74 |
| 75 const Event& received_event() const { return received_event_; } | 75 const Event& received_event() const { return received_event_; } |
| 76 const std::string& app_id() const { return app_id_; } | 76 const std::string& app_id() const { return app_id_; } |
| 77 const GCMClient::IncomingMessage& message() const { return message_; } | 77 const IncomingMessage& message() const { return message_; } |
| 78 const GCMClient::SendErrorDetails& send_error_details() const { | 78 const SendErrorDetails& send_error_details() const { |
| 79 return send_error_details_; | 79 return send_error_details_; |
| 80 } | 80 } |
| 81 | 81 |
| 82 void WaitForNotification(); | 82 void WaitForNotification(); |
| 83 | 83 |
| 84 // GCMAppHandler: | 84 // GCMAppHandler: |
| 85 virtual void ShutdownHandler() OVERRIDE; | 85 virtual void ShutdownHandler() OVERRIDE; |
| 86 virtual void OnMessage(const std::string& app_id, | 86 virtual void OnMessage(const std::string& app_id, |
| 87 const GCMClient::IncomingMessage& message) OVERRIDE; | 87 const IncomingMessage& message) OVERRIDE; |
| 88 virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE; | 88 virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE; |
| 89 virtual void OnSendError( | 89 virtual void OnSendError( |
| 90 const std::string& app_id, | 90 const std::string& app_id, |
| 91 const GCMClient::SendErrorDetails& send_error_details) OVERRIDE; | 91 const SendErrorDetails& send_error_details) OVERRIDE; |
| 92 | 92 |
| 93 private: | 93 private: |
| 94 void ClearResults(); | 94 void ClearResults(); |
| 95 | 95 |
| 96 scoped_ptr<base::RunLoop> run_loop_; | 96 scoped_ptr<base::RunLoop> run_loop_; |
| 97 | 97 |
| 98 Event received_event_; | 98 Event received_event_; |
| 99 std::string app_id_; | 99 std::string app_id_; |
| 100 GCMClient::IncomingMessage message_; | 100 IncomingMessage message_; |
| 101 GCMClient::SendErrorDetails send_error_details_; | 101 SendErrorDetails send_error_details_; |
| 102 | 102 |
| 103 DISALLOW_COPY_AND_ASSIGN(FakeGCMAppHandler); | 103 DISALLOW_COPY_AND_ASSIGN(FakeGCMAppHandler); |
| 104 }; | 104 }; |
| 105 | 105 |
| 106 class TestGCMService : public GCMService { | 106 class TestGCMService : public GCMService { |
| 107 public: | 107 public: |
| 108 TestGCMService( | 108 TestGCMService( |
| 109 bool start_automatically, | 109 bool start_automatically, |
| 110 scoped_ptr<IdentityProvider> identity_provider, | 110 scoped_ptr<IdentityProvider> identity_provider, |
| 111 const scoped_refptr<net::URLRequestContextGetter>& request_context); | 111 const scoped_refptr<net::URLRequestContextGetter>& request_context); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 135 void FakeGCMAppHandler::WaitForNotification() { | 135 void FakeGCMAppHandler::WaitForNotification() { |
| 136 run_loop_.reset(new base::RunLoop); | 136 run_loop_.reset(new base::RunLoop); |
| 137 run_loop_->Run(); | 137 run_loop_->Run(); |
| 138 run_loop_.reset(); | 138 run_loop_.reset(); |
| 139 } | 139 } |
| 140 | 140 |
| 141 void FakeGCMAppHandler::ShutdownHandler() { | 141 void FakeGCMAppHandler::ShutdownHandler() { |
| 142 } | 142 } |
| 143 | 143 |
| 144 void FakeGCMAppHandler::OnMessage(const std::string& app_id, | 144 void FakeGCMAppHandler::OnMessage(const std::string& app_id, |
| 145 const GCMClient::IncomingMessage& message) { | 145 const IncomingMessage& message) { |
| 146 ClearResults(); | 146 ClearResults(); |
| 147 received_event_ = MESSAGE_EVENT; | 147 received_event_ = MESSAGE_EVENT; |
| 148 app_id_ = app_id; | 148 app_id_ = app_id; |
| 149 message_ = message; | 149 message_ = message; |
| 150 if (run_loop_) | 150 if (run_loop_) |
| 151 run_loop_->Quit(); | 151 run_loop_->Quit(); |
| 152 } | 152 } |
| 153 | 153 |
| 154 void FakeGCMAppHandler::OnMessagesDeleted(const std::string& app_id) { | 154 void FakeGCMAppHandler::OnMessagesDeleted(const std::string& app_id) { |
| 155 ClearResults(); | 155 ClearResults(); |
| 156 received_event_ = MESSAGES_DELETED_EVENT; | 156 received_event_ = MESSAGES_DELETED_EVENT; |
| 157 app_id_ = app_id; | 157 app_id_ = app_id; |
| 158 if (run_loop_) | 158 if (run_loop_) |
| 159 run_loop_->Quit(); | 159 run_loop_->Quit(); |
| 160 } | 160 } |
| 161 | 161 |
| 162 void FakeGCMAppHandler::OnSendError( | 162 void FakeGCMAppHandler::OnSendError( |
| 163 const std::string& app_id, | 163 const std::string& app_id, |
| 164 const GCMClient::SendErrorDetails& send_error_details) { | 164 const SendErrorDetails& send_error_details) { |
| 165 ClearResults(); | 165 ClearResults(); |
| 166 received_event_ = SEND_ERROR_EVENT; | 166 received_event_ = SEND_ERROR_EVENT; |
| 167 app_id_ = app_id; | 167 app_id_ = app_id; |
| 168 send_error_details_ = send_error_details; | 168 send_error_details_ = send_error_details; |
| 169 if (run_loop_) | 169 if (run_loop_) |
| 170 run_loop_->Quit(); | 170 run_loop_->Quit(); |
| 171 } | 171 } |
| 172 | 172 |
| 173 void FakeGCMAppHandler::ClearResults() { | 173 void FakeGCMAppHandler::ClearResults() { |
| 174 received_event_ = NO_EVENT; | 174 received_event_ = NO_EVENT; |
| 175 app_id_.clear(); | 175 app_id_.clear(); |
| 176 message_ = GCMClient::IncomingMessage(); | 176 message_ = IncomingMessage(); |
| 177 send_error_details_ = GCMClient::SendErrorDetails(); | 177 send_error_details_ = SendErrorDetails(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 TestGCMService::TestGCMService( | 180 TestGCMService::TestGCMService( |
| 181 bool start_automatically, | 181 bool start_automatically, |
| 182 scoped_ptr<IdentityProvider> identity_provider, | 182 scoped_ptr<IdentityProvider> identity_provider, |
| 183 const scoped_refptr<net::URLRequestContextGetter>& request_context) | 183 const scoped_refptr<net::URLRequestContextGetter>& request_context) |
| 184 : GCMService(identity_provider.Pass()), | 184 : GCMService(identity_provider.Pass()), |
| 185 request_context_(request_context), | 185 request_context_(request_context), |
| 186 start_automatically_(start_automatically) { | 186 start_automatically_(start_automatically) { |
| 187 if (!temp_dir_.CreateUniqueTempDir()) | 187 if (!temp_dir_.CreateUniqueTempDir()) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 213 WAIT | 213 WAIT |
| 214 }; | 214 }; |
| 215 | 215 |
| 216 explicit TestGCMServiceWrapper( | 216 explicit TestGCMServiceWrapper( |
| 217 const scoped_refptr<net::URLRequestContextGetter>& request_context); | 217 const scoped_refptr<net::URLRequestContextGetter>& request_context); |
| 218 ~TestGCMServiceWrapper(); | 218 ~TestGCMServiceWrapper(); |
| 219 | 219 |
| 220 TestGCMService* service() { return service_.get(); } | 220 TestGCMService* service() { return service_.get(); } |
| 221 FakeGCMAppHandler* gcm_app_handler() { return gcm_app_handler_.get(); } | 221 FakeGCMAppHandler* gcm_app_handler() { return gcm_app_handler_.get(); } |
| 222 const std::string& registration_id() const { return registration_id_; } | 222 const std::string& registration_id() const { return registration_id_; } |
| 223 GCMClient::Result registration_result() const { return registration_result_; } | 223 Result registration_result() const { return registration_result_; } |
| 224 const std::string& send_message_id() const { return send_message_id_; } | 224 const std::string& send_message_id() const { return send_message_id_; } |
| 225 GCMClient::Result send_result() const { return send_result_; } | 225 Result send_result() const { return send_result_; } |
| 226 GCMClient::Result unregistration_result() const { | 226 Result unregistration_result() const { |
| 227 return unregistration_result_; | 227 return unregistration_result_; |
| 228 } | 228 } |
| 229 | 229 |
| 230 void ClearRegistrationResult(); | 230 void ClearRegistrationResult(); |
| 231 void ClearUnregistrationResult(); | 231 void ClearUnregistrationResult(); |
| 232 | 232 |
| 233 bool ServiceHasAppHandlers() const; | 233 bool ServiceHasAppHandlers() const; |
| 234 GCMClientMock* GetGCMClient(); | 234 GCMClientMock* GetGCMClient(); |
| 235 | 235 |
| 236 void CreateService(bool start_automatically, | 236 void CreateService(bool start_automatically, |
| 237 GCMClientMock::LoadingDelay gcm_client_loading_delay); | 237 GCMClientMock::LoadingDelay gcm_client_loading_delay); |
| 238 | 238 |
| 239 void SignIn(const std::string& account_id); | 239 void SignIn(const std::string& account_id); |
| 240 void SignOut(); | 240 void SignOut(); |
| 241 | 241 |
| 242 void Register(const std::string& app_id, | 242 void Register(const std::string& app_id, |
| 243 const std::vector<std::string>& sender_ids, | 243 const std::vector<std::string>& sender_ids, |
| 244 WaitToFinish wait_to_finish); | 244 WaitToFinish wait_to_finish); |
| 245 void Send(const std::string& app_id, | 245 void Send(const std::string& app_id, |
| 246 const std::string& receiver_id, | 246 const std::string& receiver_id, |
| 247 const GCMClient::OutgoingMessage& message, | 247 const OutgoingMessage& message, |
| 248 WaitToFinish wait_to_finish); | 248 WaitToFinish wait_to_finish); |
| 249 void Unregister(const std::string& app_id, WaitToFinish wait_to_finish); | 249 void Unregister(const std::string& app_id, WaitToFinish wait_to_finish); |
| 250 | 250 |
| 251 void WaitForAsyncOperation(); | 251 void WaitForAsyncOperation(); |
| 252 | 252 |
| 253 private: | 253 private: |
| 254 void RegisterCompleted(const std::string& registration_id, | 254 void RegisterCompleted(const std::string& registration_id, |
| 255 GCMClient::Result result); | 255 Result result); |
| 256 void SendCompleted(const std::string& message_id, GCMClient::Result result); | 256 void SendCompleted(const std::string& message_id, Result result); |
| 257 void UnregisterCompleted(GCMClient::Result result); | 257 void UnregisterCompleted(Result result); |
| 258 | 258 |
| 259 scoped_refptr<net::URLRequestContextGetter> request_context_; | 259 scoped_refptr<net::URLRequestContextGetter> request_context_; |
| 260 FakeOAuth2TokenService token_service_; | 260 FakeOAuth2TokenService token_service_; |
| 261 scoped_ptr<FakeIdentityProvider> identity_provider_owner_; | 261 scoped_ptr<FakeIdentityProvider> identity_provider_owner_; |
| 262 FakeIdentityProvider* identity_provider_; | 262 FakeIdentityProvider* identity_provider_; |
| 263 scoped_ptr<TestGCMService> service_; | 263 scoped_ptr<TestGCMService> service_; |
| 264 scoped_ptr<FakeGCMAppHandler> gcm_app_handler_; | 264 scoped_ptr<FakeGCMAppHandler> gcm_app_handler_; |
| 265 | 265 |
| 266 base::Closure async_operation_completed_callback_; | 266 base::Closure async_operation_completed_callback_; |
| 267 | 267 |
| 268 std::string registration_id_; | 268 std::string registration_id_; |
| 269 GCMClient::Result registration_result_; | 269 Result registration_result_; |
| 270 std::string send_message_id_; | 270 std::string send_message_id_; |
| 271 GCMClient::Result send_result_; | 271 Result send_result_; |
| 272 GCMClient::Result unregistration_result_; | 272 Result unregistration_result_; |
| 273 | 273 |
| 274 DISALLOW_COPY_AND_ASSIGN(TestGCMServiceWrapper); | 274 DISALLOW_COPY_AND_ASSIGN(TestGCMServiceWrapper); |
| 275 }; | 275 }; |
| 276 | 276 |
| 277 TestGCMServiceWrapper::TestGCMServiceWrapper( | 277 TestGCMServiceWrapper::TestGCMServiceWrapper( |
| 278 const scoped_refptr<net::URLRequestContextGetter>& request_context) | 278 const scoped_refptr<net::URLRequestContextGetter>& request_context) |
| 279 : request_context_(request_context), | 279 : request_context_(request_context), |
| 280 identity_provider_(NULL), | 280 identity_provider_(NULL), |
| 281 registration_result_(GCMClient::UNKNOWN_ERROR), | 281 registration_result_(RESULT_UNKNOWN_ERROR), |
| 282 send_result_(GCMClient::UNKNOWN_ERROR), | 282 send_result_(RESULT_UNKNOWN_ERROR), |
| 283 unregistration_result_(GCMClient::UNKNOWN_ERROR) { | 283 unregistration_result_(RESULT_UNKNOWN_ERROR) { |
| 284 identity_provider_owner_.reset(new FakeIdentityProvider(&token_service_)); | 284 identity_provider_owner_.reset(new FakeIdentityProvider(&token_service_)); |
| 285 identity_provider_ = identity_provider_owner_.get(); | 285 identity_provider_ = identity_provider_owner_.get(); |
| 286 } | 286 } |
| 287 | 287 |
| 288 TestGCMServiceWrapper::~TestGCMServiceWrapper() { | 288 TestGCMServiceWrapper::~TestGCMServiceWrapper() { |
| 289 if (!service_) | 289 if (!service_) |
| 290 return; | 290 return; |
| 291 | 291 |
| 292 service_->ShutdownService(); | 292 service_->ShutdownService(); |
| 293 service_.reset(); | 293 service_.reset(); |
| 294 PumpIOLoop(); | 294 PumpIOLoop(); |
| 295 } | 295 } |
| 296 | 296 |
| 297 void TestGCMServiceWrapper::ClearRegistrationResult() { | 297 void TestGCMServiceWrapper::ClearRegistrationResult() { |
| 298 registration_id_.clear(); | 298 registration_id_.clear(); |
| 299 registration_result_ = GCMClient::UNKNOWN_ERROR; | 299 registration_result_ = RESULT_UNKNOWN_ERROR; |
| 300 } | 300 } |
| 301 | 301 |
| 302 void TestGCMServiceWrapper::ClearUnregistrationResult() { | 302 void TestGCMServiceWrapper::ClearUnregistrationResult() { |
| 303 unregistration_result_ = GCMClient::UNKNOWN_ERROR; | 303 unregistration_result_ = RESULT_UNKNOWN_ERROR; |
| 304 } | 304 } |
| 305 | 305 |
| 306 bool TestGCMServiceWrapper::ServiceHasAppHandlers() const { | 306 bool TestGCMServiceWrapper::ServiceHasAppHandlers() const { |
| 307 return !service_->app_handlers_.empty(); | 307 return !service_->app_handlers_.empty(); |
| 308 } | 308 } |
| 309 | 309 |
| 310 GCMClientMock* TestGCMServiceWrapper::GetGCMClient() { | 310 GCMClientMock* TestGCMServiceWrapper::GetGCMClient() { |
| 311 return static_cast<GCMClientMock*>(service_->GetGCMClientForTesting()); | 311 return static_cast<GCMClientMock*>(service_->GetGCMClientForTesting()); |
| 312 } | 312 } |
| 313 | 313 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 service_->Register(app_id, | 347 service_->Register(app_id, |
| 348 sender_ids, | 348 sender_ids, |
| 349 base::Bind(&TestGCMServiceWrapper::RegisterCompleted, | 349 base::Bind(&TestGCMServiceWrapper::RegisterCompleted, |
| 350 base::Unretained(this))); | 350 base::Unretained(this))); |
| 351 if (wait_to_finish == WAIT) | 351 if (wait_to_finish == WAIT) |
| 352 run_loop.Run(); | 352 run_loop.Run(); |
| 353 } | 353 } |
| 354 | 354 |
| 355 void TestGCMServiceWrapper::Send(const std::string& app_id, | 355 void TestGCMServiceWrapper::Send(const std::string& app_id, |
| 356 const std::string& receiver_id, | 356 const std::string& receiver_id, |
| 357 const GCMClient::OutgoingMessage& message, | 357 const OutgoingMessage& message, |
| 358 WaitToFinish wait_to_finish) { | 358 WaitToFinish wait_to_finish) { |
| 359 base::RunLoop run_loop; | 359 base::RunLoop run_loop; |
| 360 async_operation_completed_callback_ = run_loop.QuitClosure(); | 360 async_operation_completed_callback_ = run_loop.QuitClosure(); |
| 361 service_->Send(app_id, | 361 service_->Send(app_id, |
| 362 receiver_id, | 362 receiver_id, |
| 363 message, | 363 message, |
| 364 base::Bind(&TestGCMServiceWrapper::SendCompleted, | 364 base::Bind(&TestGCMServiceWrapper::SendCompleted, |
| 365 base::Unretained(this))); | 365 base::Unretained(this))); |
| 366 if (wait_to_finish == WAIT) | 366 if (wait_to_finish == WAIT) |
| 367 run_loop.Run(); | 367 run_loop.Run(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 379 } | 379 } |
| 380 | 380 |
| 381 void TestGCMServiceWrapper::WaitForAsyncOperation() { | 381 void TestGCMServiceWrapper::WaitForAsyncOperation() { |
| 382 base::RunLoop run_loop; | 382 base::RunLoop run_loop; |
| 383 async_operation_completed_callback_ = run_loop.QuitClosure(); | 383 async_operation_completed_callback_ = run_loop.QuitClosure(); |
| 384 run_loop.Run(); | 384 run_loop.Run(); |
| 385 } | 385 } |
| 386 | 386 |
| 387 void TestGCMServiceWrapper::RegisterCompleted( | 387 void TestGCMServiceWrapper::RegisterCompleted( |
| 388 const std::string& registration_id, | 388 const std::string& registration_id, |
| 389 GCMClient::Result result) { | 389 Result result) { |
| 390 registration_id_ = registration_id; | 390 registration_id_ = registration_id; |
| 391 registration_result_ = result; | 391 registration_result_ = result; |
| 392 if (!async_operation_completed_callback_.is_null()) | 392 if (!async_operation_completed_callback_.is_null()) |
| 393 async_operation_completed_callback_.Run(); | 393 async_operation_completed_callback_.Run(); |
| 394 } | 394 } |
| 395 | 395 |
| 396 void TestGCMServiceWrapper::SendCompleted(const std::string& message_id, | 396 void TestGCMServiceWrapper::SendCompleted(const std::string& message_id, |
| 397 GCMClient::Result result) { | 397 Result result) { |
| 398 send_message_id_ = message_id; | 398 send_message_id_ = message_id; |
| 399 send_result_ = result; | 399 send_result_ = result; |
| 400 if (!async_operation_completed_callback_.is_null()) | 400 if (!async_operation_completed_callback_.is_null()) |
| 401 async_operation_completed_callback_.Run(); | 401 async_operation_completed_callback_.Run(); |
| 402 } | 402 } |
| 403 | 403 |
| 404 void TestGCMServiceWrapper::UnregisterCompleted(GCMClient::Result result) { | 404 void TestGCMServiceWrapper::UnregisterCompleted(Result result) { |
| 405 unregistration_result_ = result; | 405 unregistration_result_ = result; |
| 406 if (!async_operation_completed_callback_.is_null()) | 406 if (!async_operation_completed_callback_.is_null()) |
| 407 async_operation_completed_callback_.Run(); | 407 async_operation_completed_callback_.Run(); |
| 408 } | 408 } |
| 409 | 409 |
| 410 class GCMServiceTest : public testing::Test { | 410 class GCMServiceTest : public testing::Test { |
| 411 protected: | 411 protected: |
| 412 GCMServiceTest(); | 412 GCMServiceTest(); |
| 413 virtual ~GCMServiceTest(); | 413 virtual ~GCMServiceTest(); |
| 414 | 414 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 } | 568 } |
| 569 | 569 |
| 570 TEST_F(GCMServiceTest, RegisterWhenNotSignedIn) { | 570 TEST_F(GCMServiceTest, RegisterWhenNotSignedIn) { |
| 571 wrapper_->CreateService(true, GCMClientMock::NO_DELAY_LOADING); | 571 wrapper_->CreateService(true, GCMClientMock::NO_DELAY_LOADING); |
| 572 | 572 |
| 573 std::vector<std::string> sender_ids; | 573 std::vector<std::string> sender_ids; |
| 574 sender_ids.push_back("sender1"); | 574 sender_ids.push_back("sender1"); |
| 575 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 575 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 576 | 576 |
| 577 EXPECT_TRUE(wrapper_->registration_id().empty()); | 577 EXPECT_TRUE(wrapper_->registration_id().empty()); |
| 578 EXPECT_EQ(GCMClient::NOT_SIGNED_IN, wrapper_->registration_result()); | 578 EXPECT_EQ(RESULT_NOT_SIGNED_IN, wrapper_->registration_result()); |
| 579 } | 579 } |
| 580 | 580 |
| 581 TEST_F(GCMServiceTest, RegisterUnderNonPositiveChannelSignal) { | 581 TEST_F(GCMServiceTest, RegisterUnderNonPositiveChannelSignal) { |
| 582 // Non-positive channel signal will prevent GCMClient from checking in during | 582 // Non-positive channel signal will prevent GCMClient from checking in during |
| 583 // sign-in. | 583 // sign-in. |
| 584 wrapper_->CreateService(false, GCMClientMock::NO_DELAY_LOADING); | 584 wrapper_->CreateService(false, GCMClientMock::NO_DELAY_LOADING); |
| 585 wrapper_->SignIn(kTestAccountID1); | 585 wrapper_->SignIn(kTestAccountID1); |
| 586 | 586 |
| 587 // GCMClient should not be checked in. | 587 // GCMClient should not be checked in. |
| 588 EXPECT_FALSE(wrapper_->service()->IsGCMClientReady()); | 588 EXPECT_FALSE(wrapper_->service()->IsGCMClientReady()); |
| 589 EXPECT_EQ(GCMClientMock::UNINITIALIZED, wrapper_->GetGCMClient()->status()); | 589 EXPECT_EQ(GCMClientMock::UNINITIALIZED, wrapper_->GetGCMClient()->status()); |
| 590 | 590 |
| 591 // Invoking register will make GCMClient checked in. | 591 // Invoking register will make GCMClient checked in. |
| 592 std::vector<std::string> sender_ids; | 592 std::vector<std::string> sender_ids; |
| 593 sender_ids.push_back("sender1"); | 593 sender_ids.push_back("sender1"); |
| 594 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 594 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 595 | 595 |
| 596 // GCMClient should be checked in. | 596 // GCMClient should be checked in. |
| 597 EXPECT_TRUE(wrapper_->service()->IsGCMClientReady()); | 597 EXPECT_TRUE(wrapper_->service()->IsGCMClientReady()); |
| 598 EXPECT_EQ(GCMClientMock::LOADED, wrapper_->GetGCMClient()->status()); | 598 EXPECT_EQ(GCMClientMock::LOADED, wrapper_->GetGCMClient()->status()); |
| 599 | 599 |
| 600 // Registration should succeed. | 600 // Registration should succeed. |
| 601 const std::string expected_registration_id = | 601 const std::string expected_registration_id = |
| 602 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); | 602 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); |
| 603 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); | 603 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); |
| 604 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 604 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 605 } | 605 } |
| 606 | 606 |
| 607 TEST_F(GCMServiceTest, SendWhenNotSignedIn) { | 607 TEST_F(GCMServiceTest, SendWhenNotSignedIn) { |
| 608 wrapper_->CreateService(true, GCMClientMock::NO_DELAY_LOADING); | 608 wrapper_->CreateService(true, GCMClientMock::NO_DELAY_LOADING); |
| 609 | 609 |
| 610 GCMClient::OutgoingMessage message; | 610 OutgoingMessage message; |
| 611 message.id = "1"; | 611 message.id = "1"; |
| 612 message.data["key1"] = "value1"; | 612 message.data["key1"] = "value1"; |
| 613 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); | 613 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); |
| 614 | 614 |
| 615 EXPECT_TRUE(wrapper_->send_message_id().empty()); | 615 EXPECT_TRUE(wrapper_->send_message_id().empty()); |
| 616 EXPECT_EQ(GCMClient::NOT_SIGNED_IN, wrapper_->send_result()); | 616 EXPECT_EQ(RESULT_NOT_SIGNED_IN, wrapper_->send_result()); |
| 617 } | 617 } |
| 618 | 618 |
| 619 TEST_F(GCMServiceTest, SendUnderNonPositiveChannelSignal) { | 619 TEST_F(GCMServiceTest, SendUnderNonPositiveChannelSignal) { |
| 620 // Non-positive channel signal will prevent GCMClient from checking in during | 620 // Non-positive channel signal will prevent GCMClient from checking in during |
| 621 // sign-in. | 621 // sign-in. |
| 622 wrapper_->CreateService(false, GCMClientMock::NO_DELAY_LOADING); | 622 wrapper_->CreateService(false, GCMClientMock::NO_DELAY_LOADING); |
| 623 wrapper_->SignIn(kTestAccountID1); | 623 wrapper_->SignIn(kTestAccountID1); |
| 624 | 624 |
| 625 // GCMClient should not be checked in. | 625 // GCMClient should not be checked in. |
| 626 EXPECT_FALSE(wrapper_->service()->IsGCMClientReady()); | 626 EXPECT_FALSE(wrapper_->service()->IsGCMClientReady()); |
| 627 EXPECT_EQ(GCMClientMock::UNINITIALIZED, wrapper_->GetGCMClient()->status()); | 627 EXPECT_EQ(GCMClientMock::UNINITIALIZED, wrapper_->GetGCMClient()->status()); |
| 628 | 628 |
| 629 // Invoking send will make GCMClient checked in. | 629 // Invoking send will make GCMClient checked in. |
| 630 GCMClient::OutgoingMessage message; | 630 OutgoingMessage message; |
| 631 message.id = "1"; | 631 message.id = "1"; |
| 632 message.data["key1"] = "value1"; | 632 message.data["key1"] = "value1"; |
| 633 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); | 633 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); |
| 634 | 634 |
| 635 // GCMClient should be checked in. | 635 // GCMClient should be checked in. |
| 636 EXPECT_TRUE(wrapper_->service()->IsGCMClientReady()); | 636 EXPECT_TRUE(wrapper_->service()->IsGCMClientReady()); |
| 637 EXPECT_EQ(GCMClientMock::LOADED, wrapper_->GetGCMClient()->status()); | 637 EXPECT_EQ(GCMClientMock::LOADED, wrapper_->GetGCMClient()->status()); |
| 638 | 638 |
| 639 // Sending should succeed. | 639 // Sending should succeed. |
| 640 EXPECT_EQ(message.id, wrapper_->send_message_id()); | 640 EXPECT_EQ(message.id, wrapper_->send_message_id()); |
| 641 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->send_result()); | 641 EXPECT_EQ(RESULT_SUCCESS, wrapper_->send_result()); |
| 642 } | 642 } |
| 643 | 643 |
| 644 // Tests a single instance of GCMService. | 644 // Tests a single instance of GCMService. |
| 645 class GCMServiceSingleInstanceTest : public GCMServiceTest { | 645 class GCMServiceSingleInstanceTest : public GCMServiceTest { |
| 646 public: | 646 public: |
| 647 GCMServiceSingleInstanceTest(); | 647 GCMServiceSingleInstanceTest(); |
| 648 virtual ~GCMServiceSingleInstanceTest(); | 648 virtual ~GCMServiceSingleInstanceTest(); |
| 649 | 649 |
| 650 // GCMServiceTest: | 650 // GCMServiceTest: |
| 651 virtual void SetUp() OVERRIDE; | 651 virtual void SetUp() OVERRIDE; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 668 } | 668 } |
| 669 | 669 |
| 670 TEST_F(GCMServiceSingleInstanceTest, Register) { | 670 TEST_F(GCMServiceSingleInstanceTest, Register) { |
| 671 std::vector<std::string> sender_ids; | 671 std::vector<std::string> sender_ids; |
| 672 sender_ids.push_back("sender1"); | 672 sender_ids.push_back("sender1"); |
| 673 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 673 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 674 const std::string expected_registration_id = | 674 const std::string expected_registration_id = |
| 675 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); | 675 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); |
| 676 | 676 |
| 677 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); | 677 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); |
| 678 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 678 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 679 } | 679 } |
| 680 | 680 |
| 681 TEST_F(GCMServiceSingleInstanceTest, RegisterError) { | 681 TEST_F(GCMServiceSingleInstanceTest, RegisterError) { |
| 682 std::vector<std::string> sender_ids; | 682 std::vector<std::string> sender_ids; |
| 683 sender_ids.push_back("sender1@error"); | 683 sender_ids.push_back("sender1@error"); |
| 684 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 684 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 685 | 685 |
| 686 EXPECT_TRUE(wrapper_->registration_id().empty()); | 686 EXPECT_TRUE(wrapper_->registration_id().empty()); |
| 687 EXPECT_NE(GCMClient::SUCCESS, wrapper_->registration_result()); | 687 EXPECT_NE(RESULT_SUCCESS, wrapper_->registration_result()); |
| 688 } | 688 } |
| 689 | 689 |
| 690 TEST_F(GCMServiceSingleInstanceTest, RegisterAgainWithSameSenderIDs) { | 690 TEST_F(GCMServiceSingleInstanceTest, RegisterAgainWithSameSenderIDs) { |
| 691 std::vector<std::string> sender_ids; | 691 std::vector<std::string> sender_ids; |
| 692 sender_ids.push_back("sender1"); | 692 sender_ids.push_back("sender1"); |
| 693 sender_ids.push_back("sender2"); | 693 sender_ids.push_back("sender2"); |
| 694 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 694 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 695 const std::string expected_registration_id = | 695 const std::string expected_registration_id = |
| 696 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); | 696 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); |
| 697 | 697 |
| 698 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); | 698 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); |
| 699 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 699 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 700 | 700 |
| 701 // Clears the results the would be set by the Register callback in preparation | 701 // Clears the results the would be set by the Register callback in preparation |
| 702 // to call register 2nd time. | 702 // to call register 2nd time. |
| 703 wrapper_->ClearRegistrationResult(); | 703 wrapper_->ClearRegistrationResult(); |
| 704 | 704 |
| 705 // Calling register 2nd time with the same set of sender IDs but different | 705 // Calling register 2nd time with the same set of sender IDs but different |
| 706 // ordering will get back the same registration ID. | 706 // ordering will get back the same registration ID. |
| 707 std::vector<std::string> another_sender_ids; | 707 std::vector<std::string> another_sender_ids; |
| 708 another_sender_ids.push_back("sender2"); | 708 another_sender_ids.push_back("sender2"); |
| 709 another_sender_ids.push_back("sender1"); | 709 another_sender_ids.push_back("sender1"); |
| 710 wrapper_->Register(kTestAppID1, | 710 wrapper_->Register(kTestAppID1, |
| 711 another_sender_ids, | 711 another_sender_ids, |
| 712 TestGCMServiceWrapper::WAIT); | 712 TestGCMServiceWrapper::WAIT); |
| 713 | 713 |
| 714 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); | 714 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); |
| 715 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 715 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 716 } | 716 } |
| 717 | 717 |
| 718 TEST_F(GCMServiceSingleInstanceTest, RegisterAgainWithDifferentSenderIDs) { | 718 TEST_F(GCMServiceSingleInstanceTest, RegisterAgainWithDifferentSenderIDs) { |
| 719 std::vector<std::string> sender_ids; | 719 std::vector<std::string> sender_ids; |
| 720 sender_ids.push_back("sender1"); | 720 sender_ids.push_back("sender1"); |
| 721 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 721 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 722 const std::string expected_registration_id = | 722 const std::string expected_registration_id = |
| 723 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); | 723 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); |
| 724 | 724 |
| 725 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); | 725 EXPECT_EQ(expected_registration_id, wrapper_->registration_id()); |
| 726 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 726 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 727 | 727 |
| 728 // Make sender IDs different. | 728 // Make sender IDs different. |
| 729 sender_ids.push_back("sender2"); | 729 sender_ids.push_back("sender2"); |
| 730 const std::string expected_registration_id2 = | 730 const std::string expected_registration_id2 = |
| 731 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); | 731 GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids); |
| 732 | 732 |
| 733 // Calling register 2nd time with the different sender IDs will get back a new | 733 // Calling register 2nd time with the different sender IDs will get back a new |
| 734 // registration ID. | 734 // registration ID. |
| 735 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 735 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 736 EXPECT_EQ(expected_registration_id2, wrapper_->registration_id()); | 736 EXPECT_EQ(expected_registration_id2, wrapper_->registration_id()); |
| 737 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 737 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 738 } | 738 } |
| 739 | 739 |
| 740 TEST_F(GCMServiceSingleInstanceTest, GCMClientNotReadyBeforeRegistration) { | 740 TEST_F(GCMServiceSingleInstanceTest, GCMClientNotReadyBeforeRegistration) { |
| 741 // Make GCMClient not ready initially. | 741 // Make GCMClient not ready initially. |
| 742 wrapper_.reset(new TestGCMServiceWrapper(request_context_)); | 742 wrapper_.reset(new TestGCMServiceWrapper(request_context_)); |
| 743 wrapper_->CreateService(true, GCMClientMock::DELAY_LOADING); | 743 wrapper_->CreateService(true, GCMClientMock::DELAY_LOADING); |
| 744 wrapper_->SignIn(kTestAccountID1); | 744 wrapper_->SignIn(kTestAccountID1); |
| 745 | 745 |
| 746 // The registration is on hold until GCMClient is ready. | 746 // The registration is on hold until GCMClient is ready. |
| 747 std::vector<std::string> sender_ids; | 747 std::vector<std::string> sender_ids; |
| 748 sender_ids.push_back("sender1"); | 748 sender_ids.push_back("sender1"); |
| 749 wrapper_->Register(kTestAppID1, | 749 wrapper_->Register(kTestAppID1, |
| 750 sender_ids, | 750 sender_ids, |
| 751 TestGCMServiceWrapper::DO_NOT_WAIT); | 751 TestGCMServiceWrapper::DO_NOT_WAIT); |
| 752 PumpIOLoop(); | 752 PumpIOLoop(); |
| 753 PumpUILoop(); | 753 PumpUILoop(); |
| 754 EXPECT_TRUE(wrapper_->registration_id().empty()); | 754 EXPECT_TRUE(wrapper_->registration_id().empty()); |
| 755 EXPECT_EQ(GCMClient::UNKNOWN_ERROR, wrapper_->registration_result()); | 755 EXPECT_EQ(RESULT_UNKNOWN_ERROR, wrapper_->registration_result()); |
| 756 | 756 |
| 757 // Register operation will be invoked after GCMClient becomes ready. | 757 // Register operation will be invoked after GCMClient becomes ready. |
| 758 wrapper_->GetGCMClient()->PerformDelayedLoading(); | 758 wrapper_->GetGCMClient()->PerformDelayedLoading(); |
| 759 wrapper_->WaitForAsyncOperation(); | 759 wrapper_->WaitForAsyncOperation(); |
| 760 EXPECT_FALSE(wrapper_->registration_id().empty()); | 760 EXPECT_FALSE(wrapper_->registration_id().empty()); |
| 761 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 761 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 762 } | 762 } |
| 763 | 763 |
| 764 TEST_F(GCMServiceSingleInstanceTest, RegisterAfterSignOut) { | 764 TEST_F(GCMServiceSingleInstanceTest, RegisterAfterSignOut) { |
| 765 // This will trigger check-out. | 765 // This will trigger check-out. |
| 766 wrapper_->SignOut(); | 766 wrapper_->SignOut(); |
| 767 | 767 |
| 768 std::vector<std::string> sender_ids; | 768 std::vector<std::string> sender_ids; |
| 769 sender_ids.push_back("sender1"); | 769 sender_ids.push_back("sender1"); |
| 770 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 770 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 771 | 771 |
| 772 EXPECT_TRUE(wrapper_->registration_id().empty()); | 772 EXPECT_TRUE(wrapper_->registration_id().empty()); |
| 773 EXPECT_EQ(GCMClient::NOT_SIGNED_IN, wrapper_->registration_result()); | 773 EXPECT_EQ(RESULT_NOT_SIGNED_IN, wrapper_->registration_result()); |
| 774 } | 774 } |
| 775 | 775 |
| 776 TEST_F(GCMServiceSingleInstanceTest, UnregisterExplicitly) { | 776 TEST_F(GCMServiceSingleInstanceTest, UnregisterExplicitly) { |
| 777 std::vector<std::string> sender_ids; | 777 std::vector<std::string> sender_ids; |
| 778 sender_ids.push_back("sender1"); | 778 sender_ids.push_back("sender1"); |
| 779 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 779 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 780 | 780 |
| 781 EXPECT_FALSE(wrapper_->registration_id().empty()); | 781 EXPECT_FALSE(wrapper_->registration_id().empty()); |
| 782 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 782 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 783 | 783 |
| 784 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::WAIT); | 784 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::WAIT); |
| 785 | 785 |
| 786 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->unregistration_result()); | 786 EXPECT_EQ(RESULT_SUCCESS, wrapper_->unregistration_result()); |
| 787 } | 787 } |
| 788 | 788 |
| 789 TEST_F(GCMServiceSingleInstanceTest, UnregisterWhenAsyncOperationPending) { | 789 TEST_F(GCMServiceSingleInstanceTest, UnregisterWhenAsyncOperationPending) { |
| 790 std::vector<std::string> sender_ids; | 790 std::vector<std::string> sender_ids; |
| 791 sender_ids.push_back("sender1"); | 791 sender_ids.push_back("sender1"); |
| 792 // First start registration without waiting for it to complete. | 792 // First start registration without waiting for it to complete. |
| 793 wrapper_->Register(kTestAppID1, | 793 wrapper_->Register(kTestAppID1, |
| 794 sender_ids, | 794 sender_ids, |
| 795 TestGCMServiceWrapper::DO_NOT_WAIT); | 795 TestGCMServiceWrapper::DO_NOT_WAIT); |
| 796 | 796 |
| 797 // Test that unregistration fails with async operation pending when there is a | 797 // Test that unregistration fails with async operation pending when there is a |
| 798 // registration already in progress. | 798 // registration already in progress. |
| 799 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::WAIT); | 799 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::WAIT); |
| 800 EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING, | 800 EXPECT_EQ(RESULT_ASYNC_OPERATION_PENDING, |
| 801 wrapper_->unregistration_result()); | 801 wrapper_->unregistration_result()); |
| 802 | 802 |
| 803 // Complete the unregistration. | 803 // Complete the unregistration. |
| 804 wrapper_->WaitForAsyncOperation(); | 804 wrapper_->WaitForAsyncOperation(); |
| 805 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 805 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 806 | 806 |
| 807 // Start unregistration without waiting for it to complete. This time no async | 807 // Start unregistration without waiting for it to complete. This time no async |
| 808 // operation is pending. | 808 // operation is pending. |
| 809 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::DO_NOT_WAIT); | 809 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::DO_NOT_WAIT); |
| 810 | 810 |
| 811 // Test that unregistration fails with async operation pending when there is | 811 // Test that unregistration fails with async operation pending when there is |
| 812 // an unregistration already in progress. | 812 // an unregistration already in progress. |
| 813 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::WAIT); | 813 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::WAIT); |
| 814 EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING, | 814 EXPECT_EQ(RESULT_ASYNC_OPERATION_PENDING, |
| 815 wrapper_->unregistration_result()); | 815 wrapper_->unregistration_result()); |
| 816 wrapper_->ClearUnregistrationResult(); | 816 wrapper_->ClearUnregistrationResult(); |
| 817 | 817 |
| 818 // Complete unregistration. | 818 // Complete unregistration. |
| 819 wrapper_->WaitForAsyncOperation(); | 819 wrapper_->WaitForAsyncOperation(); |
| 820 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->unregistration_result()); | 820 EXPECT_EQ(RESULT_SUCCESS, wrapper_->unregistration_result()); |
| 821 } | 821 } |
| 822 | 822 |
| 823 TEST_F(GCMServiceSingleInstanceTest, RegisterWhenAsyncOperationPending) { | 823 TEST_F(GCMServiceSingleInstanceTest, RegisterWhenAsyncOperationPending) { |
| 824 std::vector<std::string> sender_ids; | 824 std::vector<std::string> sender_ids; |
| 825 sender_ids.push_back("sender1"); | 825 sender_ids.push_back("sender1"); |
| 826 // First start registration without waiting for it to complete. | 826 // First start registration without waiting for it to complete. |
| 827 wrapper_->Register(kTestAppID1, | 827 wrapper_->Register(kTestAppID1, |
| 828 sender_ids, | 828 sender_ids, |
| 829 TestGCMServiceWrapper::DO_NOT_WAIT); | 829 TestGCMServiceWrapper::DO_NOT_WAIT); |
| 830 | 830 |
| 831 // Test that registration fails with async operation pending when there is a | 831 // Test that registration fails with async operation pending when there is a |
| 832 // registration already in progress. | 832 // registration already in progress. |
| 833 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 833 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 834 EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING, | 834 EXPECT_EQ(RESULT_ASYNC_OPERATION_PENDING, |
| 835 wrapper_->registration_result()); | 835 wrapper_->registration_result()); |
| 836 wrapper_->ClearRegistrationResult(); | 836 wrapper_->ClearRegistrationResult(); |
| 837 | 837 |
| 838 // Complete the registration. | 838 // Complete the registration. |
| 839 wrapper_->WaitForAsyncOperation(); | 839 wrapper_->WaitForAsyncOperation(); |
| 840 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 840 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 841 | 841 |
| 842 // Start unregistration without waiting for it to complete. This time no async | 842 // Start unregistration without waiting for it to complete. This time no async |
| 843 // operation is pending. | 843 // operation is pending. |
| 844 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::DO_NOT_WAIT); | 844 wrapper_->Unregister(kTestAppID1, TestGCMServiceWrapper::DO_NOT_WAIT); |
| 845 | 845 |
| 846 // Test that registration fails with async operation pending when there is an | 846 // Test that registration fails with async operation pending when there is an |
| 847 // unregistration already in progress. | 847 // unregistration already in progress. |
| 848 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 848 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 849 EXPECT_EQ(GCMClient::ASYNC_OPERATION_PENDING, | 849 EXPECT_EQ(RESULT_ASYNC_OPERATION_PENDING, |
| 850 wrapper_->registration_result()); | 850 wrapper_->registration_result()); |
| 851 | 851 |
| 852 // Complete the first unregistration expecting success. | 852 // Complete the first unregistration expecting success. |
| 853 wrapper_->WaitForAsyncOperation(); | 853 wrapper_->WaitForAsyncOperation(); |
| 854 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->unregistration_result()); | 854 EXPECT_EQ(RESULT_SUCCESS, wrapper_->unregistration_result()); |
| 855 | 855 |
| 856 // Test that it is ok to register again after unregistration. | 856 // Test that it is ok to register again after unregistration. |
| 857 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 857 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 858 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 858 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 859 } | 859 } |
| 860 | 860 |
| 861 TEST_F(GCMServiceSingleInstanceTest, Send) { | 861 TEST_F(GCMServiceSingleInstanceTest, Send) { |
| 862 GCMClient::OutgoingMessage message; | 862 OutgoingMessage message; |
| 863 message.id = "1"; | 863 message.id = "1"; |
| 864 message.data["key1"] = "value1"; | 864 message.data["key1"] = "value1"; |
| 865 message.data["key2"] = "value2"; | 865 message.data["key2"] = "value2"; |
| 866 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); | 866 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); |
| 867 | 867 |
| 868 EXPECT_EQ(message.id, wrapper_->send_message_id()); | 868 EXPECT_EQ(message.id, wrapper_->send_message_id()); |
| 869 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->send_result()); | 869 EXPECT_EQ(RESULT_SUCCESS, wrapper_->send_result()); |
| 870 } | 870 } |
| 871 | 871 |
| 872 TEST_F(GCMServiceSingleInstanceTest, GCMClientNotReadyBeforeSending) { | 872 TEST_F(GCMServiceSingleInstanceTest, GCMClientNotReadyBeforeSending) { |
| 873 // Make GCMClient not ready initially. | 873 // Make GCMClient not ready initially. |
| 874 wrapper_.reset(new TestGCMServiceWrapper(request_context_)); | 874 wrapper_.reset(new TestGCMServiceWrapper(request_context_)); |
| 875 wrapper_->CreateService(true, GCMClientMock::DELAY_LOADING); | 875 wrapper_->CreateService(true, GCMClientMock::DELAY_LOADING); |
| 876 wrapper_->SignIn(kTestAccountID1); | 876 wrapper_->SignIn(kTestAccountID1); |
| 877 | 877 |
| 878 // The sending is on hold until GCMClient is ready. | 878 // The sending is on hold until GCMClient is ready. |
| 879 GCMClient::OutgoingMessage message; | 879 OutgoingMessage message; |
| 880 message.id = "1"; | 880 message.id = "1"; |
| 881 message.data["key1"] = "value1"; | 881 message.data["key1"] = "value1"; |
| 882 message.data["key2"] = "value2"; | 882 message.data["key2"] = "value2"; |
| 883 wrapper_->Send(kTestAppID1, | 883 wrapper_->Send(kTestAppID1, |
| 884 kUserID1, | 884 kUserID1, |
| 885 message, | 885 message, |
| 886 TestGCMServiceWrapper::DO_NOT_WAIT); | 886 TestGCMServiceWrapper::DO_NOT_WAIT); |
| 887 PumpIOLoop(); | 887 PumpIOLoop(); |
| 888 PumpUILoop(); | 888 PumpUILoop(); |
| 889 | 889 |
| 890 EXPECT_TRUE(wrapper_->send_message_id().empty()); | 890 EXPECT_TRUE(wrapper_->send_message_id().empty()); |
| 891 EXPECT_EQ(GCMClient::UNKNOWN_ERROR, wrapper_->send_result()); | 891 EXPECT_EQ(RESULT_UNKNOWN_ERROR, wrapper_->send_result()); |
| 892 | 892 |
| 893 // Send operation will be invoked after GCMClient becomes ready. | 893 // Send operation will be invoked after GCMClient becomes ready. |
| 894 wrapper_->GetGCMClient()->PerformDelayedLoading(); | 894 wrapper_->GetGCMClient()->PerformDelayedLoading(); |
| 895 wrapper_->WaitForAsyncOperation(); | 895 wrapper_->WaitForAsyncOperation(); |
| 896 EXPECT_EQ(message.id, wrapper_->send_message_id()); | 896 EXPECT_EQ(message.id, wrapper_->send_message_id()); |
| 897 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->send_result()); | 897 EXPECT_EQ(RESULT_SUCCESS, wrapper_->send_result()); |
| 898 } | 898 } |
| 899 | 899 |
| 900 TEST_F(GCMServiceSingleInstanceTest, SendAfterSignOut) { | 900 TEST_F(GCMServiceSingleInstanceTest, SendAfterSignOut) { |
| 901 // This will trigger check-out. | 901 // This will trigger check-out. |
| 902 wrapper_->SignOut(); | 902 wrapper_->SignOut(); |
| 903 | 903 |
| 904 GCMClient::OutgoingMessage message; | 904 OutgoingMessage message; |
| 905 message.id = "1"; | 905 message.id = "1"; |
| 906 message.data["key1"] = "value1"; | 906 message.data["key1"] = "value1"; |
| 907 message.data["key2"] = "value2"; | 907 message.data["key2"] = "value2"; |
| 908 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); | 908 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); |
| 909 | 909 |
| 910 EXPECT_TRUE(wrapper_->send_message_id().empty()); | 910 EXPECT_TRUE(wrapper_->send_message_id().empty()); |
| 911 EXPECT_EQ(GCMClient::NOT_SIGNED_IN, wrapper_->send_result()); | 911 EXPECT_EQ(RESULT_NOT_SIGNED_IN, wrapper_->send_result()); |
| 912 } | 912 } |
| 913 | 913 |
| 914 TEST_F(GCMServiceSingleInstanceTest, SendError) { | 914 TEST_F(GCMServiceSingleInstanceTest, SendError) { |
| 915 GCMClient::OutgoingMessage message; | 915 OutgoingMessage message; |
| 916 // Embedding error in id will tell the mock to simulate the send error. | 916 // Embedding error in id will tell the mock to simulate the send error. |
| 917 message.id = "1@error"; | 917 message.id = "1@error"; |
| 918 message.data["key1"] = "value1"; | 918 message.data["key1"] = "value1"; |
| 919 message.data["key2"] = "value2"; | 919 message.data["key2"] = "value2"; |
| 920 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); | 920 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); |
| 921 | 921 |
| 922 EXPECT_EQ(message.id, wrapper_->send_message_id()); | 922 EXPECT_EQ(message.id, wrapper_->send_message_id()); |
| 923 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->send_result()); | 923 EXPECT_EQ(RESULT_SUCCESS, wrapper_->send_result()); |
| 924 | 924 |
| 925 // Wait for the send error. | 925 // Wait for the send error. |
| 926 wrapper_->gcm_app_handler()->WaitForNotification(); | 926 wrapper_->gcm_app_handler()->WaitForNotification(); |
| 927 EXPECT_EQ(FakeGCMAppHandler::SEND_ERROR_EVENT, | 927 EXPECT_EQ(FakeGCMAppHandler::SEND_ERROR_EVENT, |
| 928 wrapper_->gcm_app_handler()->received_event()); | 928 wrapper_->gcm_app_handler()->received_event()); |
| 929 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); | 929 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); |
| 930 EXPECT_EQ(message.id, | 930 EXPECT_EQ(message.id, |
| 931 wrapper_->gcm_app_handler()->send_error_details().message_id); | 931 wrapper_->gcm_app_handler()->send_error_details().message_id); |
| 932 EXPECT_NE(GCMClient::SUCCESS, | 932 EXPECT_NE(RESULT_SUCCESS, |
| 933 wrapper_->gcm_app_handler()->send_error_details().result); | 933 wrapper_->gcm_app_handler()->send_error_details().result); |
| 934 EXPECT_EQ(message.data, | 934 EXPECT_EQ(message.data, |
| 935 wrapper_->gcm_app_handler()->send_error_details().additional_data); | 935 wrapper_->gcm_app_handler()->send_error_details().additional_data); |
| 936 } | 936 } |
| 937 | 937 |
| 938 TEST_F(GCMServiceSingleInstanceTest, MessageReceived) { | 938 TEST_F(GCMServiceSingleInstanceTest, MessageReceived) { |
| 939 wrapper_->Register(kTestAppID1, | 939 wrapper_->Register(kTestAppID1, |
| 940 ToSenderList("sender"), | 940 ToSenderList("sender"), |
| 941 TestGCMServiceWrapper::WAIT); | 941 TestGCMServiceWrapper::WAIT); |
| 942 GCMClient::IncomingMessage message; | 942 IncomingMessage message; |
| 943 message.data["key1"] = "value1"; | 943 message.data["key1"] = "value1"; |
| 944 message.data["key2"] = "value2"; | 944 message.data["key2"] = "value2"; |
| 945 message.sender_id = "sender"; | 945 message.sender_id = "sender"; |
| 946 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, message); | 946 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, message); |
| 947 wrapper_->gcm_app_handler()->WaitForNotification(); | 947 wrapper_->gcm_app_handler()->WaitForNotification(); |
| 948 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 948 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 949 wrapper_->gcm_app_handler()->received_event()); | 949 wrapper_->gcm_app_handler()->received_event()); |
| 950 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); | 950 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); |
| 951 EXPECT_EQ(message.data, wrapper_->gcm_app_handler()->message().data); | 951 EXPECT_EQ(message.data, wrapper_->gcm_app_handler()->message().data); |
| 952 EXPECT_TRUE(wrapper_->gcm_app_handler()->message().collapse_key.empty()); | 952 EXPECT_TRUE(wrapper_->gcm_app_handler()->message().collapse_key.empty()); |
| 953 EXPECT_EQ(message.sender_id, | 953 EXPECT_EQ(message.sender_id, |
| 954 wrapper_->gcm_app_handler()->message().sender_id); | 954 wrapper_->gcm_app_handler()->message().sender_id); |
| 955 } | 955 } |
| 956 | 956 |
| 957 TEST_F(GCMServiceSingleInstanceTest, MessageWithCollapseKeyReceived) { | 957 TEST_F(GCMServiceSingleInstanceTest, MessageWithCollapseKeyReceived) { |
| 958 wrapper_->Register(kTestAppID1, | 958 wrapper_->Register(kTestAppID1, |
| 959 ToSenderList("sender"), | 959 ToSenderList("sender"), |
| 960 TestGCMServiceWrapper::WAIT); | 960 TestGCMServiceWrapper::WAIT); |
| 961 GCMClient::IncomingMessage message; | 961 IncomingMessage message; |
| 962 message.data["key1"] = "value1"; | 962 message.data["key1"] = "value1"; |
| 963 message.collapse_key = "collapse_key_value"; | 963 message.collapse_key = "collapse_key_value"; |
| 964 message.sender_id = "sender"; | 964 message.sender_id = "sender"; |
| 965 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, message); | 965 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, message); |
| 966 wrapper_->gcm_app_handler()->WaitForNotification(); | 966 wrapper_->gcm_app_handler()->WaitForNotification(); |
| 967 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 967 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 968 wrapper_->gcm_app_handler()->received_event()); | 968 wrapper_->gcm_app_handler()->received_event()); |
| 969 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); | 969 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); |
| 970 EXPECT_EQ(message.data, wrapper_->gcm_app_handler()->message().data); | 970 EXPECT_EQ(message.data, wrapper_->gcm_app_handler()->message().data); |
| 971 EXPECT_EQ(message.collapse_key, | 971 EXPECT_EQ(message.collapse_key, |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1027 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 1027 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 1028 | 1028 |
| 1029 // Register the same app in a different instance. | 1029 // Register the same app in a different instance. |
| 1030 std::vector<std::string> sender_ids2; | 1030 std::vector<std::string> sender_ids2; |
| 1031 sender_ids2.push_back("foo"); | 1031 sender_ids2.push_back("foo"); |
| 1032 sender_ids2.push_back("bar"); | 1032 sender_ids2.push_back("bar"); |
| 1033 wrapper2_->Register(kTestAppID1, sender_ids2, TestGCMServiceWrapper::WAIT); | 1033 wrapper2_->Register(kTestAppID1, sender_ids2, TestGCMServiceWrapper::WAIT); |
| 1034 | 1034 |
| 1035 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids), | 1035 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids), |
| 1036 wrapper_->registration_id()); | 1036 wrapper_->registration_id()); |
| 1037 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 1037 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 1038 | 1038 |
| 1039 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids2), | 1039 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids2), |
| 1040 wrapper2_->registration_id()); | 1040 wrapper2_->registration_id()); |
| 1041 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->registration_result()); | 1041 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->registration_result()); |
| 1042 | 1042 |
| 1043 // Register a different app in a different instance. | 1043 // Register a different app in a different instance. |
| 1044 std::vector<std::string> sender_ids3; | 1044 std::vector<std::string> sender_ids3; |
| 1045 sender_ids3.push_back("sender1"); | 1045 sender_ids3.push_back("sender1"); |
| 1046 sender_ids3.push_back("sender2"); | 1046 sender_ids3.push_back("sender2"); |
| 1047 sender_ids3.push_back("sender3"); | 1047 sender_ids3.push_back("sender3"); |
| 1048 wrapper2_->Register(kTestAppID2, sender_ids3, TestGCMServiceWrapper::WAIT); | 1048 wrapper2_->Register(kTestAppID2, sender_ids3, TestGCMServiceWrapper::WAIT); |
| 1049 | 1049 |
| 1050 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids3), | 1050 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids3), |
| 1051 wrapper2_->registration_id()); | 1051 wrapper2_->registration_id()); |
| 1052 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->registration_result()); | 1052 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->registration_result()); |
| 1053 } | 1053 } |
| 1054 | 1054 |
| 1055 TEST_F(GCMServiceMultipleInstanceTest, Send) { | 1055 TEST_F(GCMServiceMultipleInstanceTest, Send) { |
| 1056 // Send a message from one app in one instance. | 1056 // Send a message from one app in one instance. |
| 1057 GCMClient::OutgoingMessage message; | 1057 OutgoingMessage message; |
| 1058 message.id = "1"; | 1058 message.id = "1"; |
| 1059 message.data["key1"] = "value1"; | 1059 message.data["key1"] = "value1"; |
| 1060 message.data["key2"] = "value2"; | 1060 message.data["key2"] = "value2"; |
| 1061 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); | 1061 wrapper_->Send(kTestAppID1, kUserID1, message, TestGCMServiceWrapper::WAIT); |
| 1062 | 1062 |
| 1063 // Send a message from same app in another instance. | 1063 // Send a message from same app in another instance. |
| 1064 GCMClient::OutgoingMessage message2; | 1064 OutgoingMessage message2; |
| 1065 message2.id = "2"; | 1065 message2.id = "2"; |
| 1066 message2.data["foo"] = "bar"; | 1066 message2.data["foo"] = "bar"; |
| 1067 wrapper2_->Send(kTestAppID1, kUserID2, message2, TestGCMServiceWrapper::WAIT); | 1067 wrapper2_->Send(kTestAppID1, kUserID2, message2, TestGCMServiceWrapper::WAIT); |
| 1068 | 1068 |
| 1069 EXPECT_EQ(message.id, wrapper_->send_message_id()); | 1069 EXPECT_EQ(message.id, wrapper_->send_message_id()); |
| 1070 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->send_result()); | 1070 EXPECT_EQ(RESULT_SUCCESS, wrapper_->send_result()); |
| 1071 | 1071 |
| 1072 EXPECT_EQ(message2.id, wrapper2_->send_message_id()); | 1072 EXPECT_EQ(message2.id, wrapper2_->send_message_id()); |
| 1073 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->send_result()); | 1073 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->send_result()); |
| 1074 | 1074 |
| 1075 // Send another message from different app in another instance. | 1075 // Send another message from different app in another instance. |
| 1076 GCMClient::OutgoingMessage message3; | 1076 OutgoingMessage message3; |
| 1077 message3.id = "3"; | 1077 message3.id = "3"; |
| 1078 message3.data["hello"] = "world"; | 1078 message3.data["hello"] = "world"; |
| 1079 wrapper2_->Send(kTestAppID2, kUserID1, message3, TestGCMServiceWrapper::WAIT); | 1079 wrapper2_->Send(kTestAppID2, kUserID1, message3, TestGCMServiceWrapper::WAIT); |
| 1080 | 1080 |
| 1081 EXPECT_EQ(message3.id, wrapper2_->send_message_id()); | 1081 EXPECT_EQ(message3.id, wrapper2_->send_message_id()); |
| 1082 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->send_result()); | 1082 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->send_result()); |
| 1083 } | 1083 } |
| 1084 | 1084 |
| 1085 TEST_F(GCMServiceMultipleInstanceTest, MessageReceived) { | 1085 TEST_F(GCMServiceMultipleInstanceTest, MessageReceived) { |
| 1086 wrapper_->Register(kTestAppID1, | 1086 wrapper_->Register(kTestAppID1, |
| 1087 ToSenderList("sender"), | 1087 ToSenderList("sender"), |
| 1088 TestGCMServiceWrapper::WAIT); | 1088 TestGCMServiceWrapper::WAIT); |
| 1089 wrapper2_->Register(kTestAppID1, | 1089 wrapper2_->Register(kTestAppID1, |
| 1090 ToSenderList("sender"), | 1090 ToSenderList("sender"), |
| 1091 TestGCMServiceWrapper::WAIT); | 1091 TestGCMServiceWrapper::WAIT); |
| 1092 wrapper2_->Register(kTestAppID2, | 1092 wrapper2_->Register(kTestAppID2, |
| 1093 ToSenderList("sender2"), | 1093 ToSenderList("sender2"), |
| 1094 TestGCMServiceWrapper::WAIT); | 1094 TestGCMServiceWrapper::WAIT); |
| 1095 | 1095 |
| 1096 // Trigger an incoming message for an app in one instance. | 1096 // Trigger an incoming message for an app in one instance. |
| 1097 GCMClient::IncomingMessage message; | 1097 IncomingMessage message; |
| 1098 message.data["key1"] = "value1"; | 1098 message.data["key1"] = "value1"; |
| 1099 message.data["key2"] = "value2"; | 1099 message.data["key2"] = "value2"; |
| 1100 message.sender_id = "sender"; | 1100 message.sender_id = "sender"; |
| 1101 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, message); | 1101 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, message); |
| 1102 wrapper_->gcm_app_handler()->WaitForNotification(); | 1102 wrapper_->gcm_app_handler()->WaitForNotification(); |
| 1103 | 1103 |
| 1104 // Trigger an incoming message for the same app in another instance. | 1104 // Trigger an incoming message for the same app in another instance. |
| 1105 GCMClient::IncomingMessage message2; | 1105 IncomingMessage message2; |
| 1106 message2.data["foo"] = "bar"; | 1106 message2.data["foo"] = "bar"; |
| 1107 message2.sender_id = "sender"; | 1107 message2.sender_id = "sender"; |
| 1108 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID1, message2); | 1108 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID1, message2); |
| 1109 wrapper2_->gcm_app_handler()->WaitForNotification(); | 1109 wrapper2_->gcm_app_handler()->WaitForNotification(); |
| 1110 | 1110 |
| 1111 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 1111 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 1112 wrapper_->gcm_app_handler()->received_event()); | 1112 wrapper_->gcm_app_handler()->received_event()); |
| 1113 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); | 1113 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); |
| 1114 EXPECT_EQ(message.data, wrapper_->gcm_app_handler()->message().data); | 1114 EXPECT_EQ(message.data, wrapper_->gcm_app_handler()->message().data); |
| 1115 EXPECT_EQ("sender", wrapper_->gcm_app_handler()->message().sender_id); | 1115 EXPECT_EQ("sender", wrapper_->gcm_app_handler()->message().sender_id); |
| 1116 | 1116 |
| 1117 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 1117 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 1118 wrapper2_->gcm_app_handler()->received_event()); | 1118 wrapper2_->gcm_app_handler()->received_event()); |
| 1119 EXPECT_EQ(kTestAppID1, wrapper2_->gcm_app_handler()->app_id()); | 1119 EXPECT_EQ(kTestAppID1, wrapper2_->gcm_app_handler()->app_id()); |
| 1120 EXPECT_EQ(message2.data, wrapper2_->gcm_app_handler()->message().data); | 1120 EXPECT_EQ(message2.data, wrapper2_->gcm_app_handler()->message().data); |
| 1121 EXPECT_EQ("sender", wrapper2_->gcm_app_handler()->message().sender_id); | 1121 EXPECT_EQ("sender", wrapper2_->gcm_app_handler()->message().sender_id); |
| 1122 | 1122 |
| 1123 // Trigger another incoming message for a different app in another instance. | 1123 // Trigger another incoming message for a different app in another instance. |
| 1124 GCMClient::IncomingMessage message3; | 1124 IncomingMessage message3; |
| 1125 message3.data["bar1"] = "foo1"; | 1125 message3.data["bar1"] = "foo1"; |
| 1126 message3.data["bar2"] = "foo2"; | 1126 message3.data["bar2"] = "foo2"; |
| 1127 message3.sender_id = "sender2"; | 1127 message3.sender_id = "sender2"; |
| 1128 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID2, message3); | 1128 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID2, message3); |
| 1129 wrapper2_->gcm_app_handler()->WaitForNotification(); | 1129 wrapper2_->gcm_app_handler()->WaitForNotification(); |
| 1130 | 1130 |
| 1131 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 1131 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 1132 wrapper2_->gcm_app_handler()->received_event()); | 1132 wrapper2_->gcm_app_handler()->received_event()); |
| 1133 EXPECT_EQ(kTestAppID2, wrapper2_->gcm_app_handler()->app_id()); | 1133 EXPECT_EQ(kTestAppID2, wrapper2_->gcm_app_handler()->app_id()); |
| 1134 EXPECT_EQ(message3.data, wrapper2_->gcm_app_handler()->message().data); | 1134 EXPECT_EQ(message3.data, wrapper2_->gcm_app_handler()->message().data); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1160 | 1160 |
| 1161 // Register a different app in a different instance. | 1161 // Register a different app in a different instance. |
| 1162 std::vector<std::string> sender_ids3; | 1162 std::vector<std::string> sender_ids3; |
| 1163 sender_ids3.push_back("sender1"); | 1163 sender_ids3.push_back("sender1"); |
| 1164 sender_ids3.push_back("sender2"); | 1164 sender_ids3.push_back("sender2"); |
| 1165 sender_ids3.push_back("sender3"); | 1165 sender_ids3.push_back("sender3"); |
| 1166 wrapper2_->Register(kTestAppID2, sender_ids3, TestGCMServiceWrapper::WAIT); | 1166 wrapper2_->Register(kTestAppID2, sender_ids3, TestGCMServiceWrapper::WAIT); |
| 1167 | 1167 |
| 1168 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids), | 1168 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids), |
| 1169 wrapper_->registration_id()); | 1169 wrapper_->registration_id()); |
| 1170 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->registration_result()); | 1170 EXPECT_EQ(RESULT_SUCCESS, wrapper_->registration_result()); |
| 1171 | 1171 |
| 1172 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids3), | 1172 EXPECT_EQ(GCMClientMock::GetRegistrationIdFromSenderIds(sender_ids3), |
| 1173 wrapper2_->registration_id()); | 1173 wrapper2_->registration_id()); |
| 1174 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->registration_result()); | 1174 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->registration_result()); |
| 1175 | 1175 |
| 1176 // Send a message from one instance. | 1176 // Send a message from one instance. |
| 1177 GCMClient::OutgoingMessage out_message; | 1177 OutgoingMessage out_message; |
| 1178 out_message.id = "1"; | 1178 out_message.id = "1"; |
| 1179 out_message.data["out1"] = "out_data1"; | 1179 out_message.data["out1"] = "out_data1"; |
| 1180 out_message.data["out1_2"] = "out_data1_2"; | 1180 out_message.data["out1_2"] = "out_data1_2"; |
| 1181 wrapper_->Send(kTestAppID1, | 1181 wrapper_->Send(kTestAppID1, |
| 1182 kUserID1, | 1182 kUserID1, |
| 1183 out_message, | 1183 out_message, |
| 1184 TestGCMServiceWrapper::WAIT); | 1184 TestGCMServiceWrapper::WAIT); |
| 1185 | 1185 |
| 1186 EXPECT_EQ(out_message.id, wrapper_->send_message_id()); | 1186 EXPECT_EQ(out_message.id, wrapper_->send_message_id()); |
| 1187 EXPECT_EQ(GCMClient::SUCCESS, wrapper_->send_result()); | 1187 EXPECT_EQ(RESULT_SUCCESS, wrapper_->send_result()); |
| 1188 | 1188 |
| 1189 // Trigger an incoming message for an app in one instance. | 1189 // Trigger an incoming message for an app in one instance. |
| 1190 GCMClient::IncomingMessage in_message; | 1190 IncomingMessage in_message; |
| 1191 in_message.data["in1"] = "in_data1"; | 1191 in_message.data["in1"] = "in_data1"; |
| 1192 in_message.data["in1_2"] = "in_data1_2"; | 1192 in_message.data["in1_2"] = "in_data1_2"; |
| 1193 in_message.sender_id = "sender1"; | 1193 in_message.sender_id = "sender1"; |
| 1194 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, in_message); | 1194 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, in_message); |
| 1195 wrapper_->gcm_app_handler()->WaitForNotification(); | 1195 wrapper_->gcm_app_handler()->WaitForNotification(); |
| 1196 | 1196 |
| 1197 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 1197 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 1198 wrapper_->gcm_app_handler()->received_event()); | 1198 wrapper_->gcm_app_handler()->received_event()); |
| 1199 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); | 1199 EXPECT_EQ(kTestAppID1, wrapper_->gcm_app_handler()->app_id()); |
| 1200 EXPECT_EQ(in_message.data, wrapper_->gcm_app_handler()->message().data); | 1200 EXPECT_EQ(in_message.data, wrapper_->gcm_app_handler()->message().data); |
| 1201 | 1201 |
| 1202 // Trigger 2 incoming messages, one for each app respectively, in another | 1202 // Trigger 2 incoming messages, one for each app respectively, in another |
| 1203 // instance. | 1203 // instance. |
| 1204 GCMClient::IncomingMessage in_message2; | 1204 IncomingMessage in_message2; |
| 1205 in_message2.data["in2"] = "in_data2"; | 1205 in_message2.data["in2"] = "in_data2"; |
| 1206 in_message2.sender_id = "sender3"; | 1206 in_message2.sender_id = "sender3"; |
| 1207 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID2, in_message2); | 1207 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID2, in_message2); |
| 1208 | 1208 |
| 1209 GCMClient::IncomingMessage in_message3; | 1209 IncomingMessage in_message3; |
| 1210 in_message3.data["in3"] = "in_data3"; | 1210 in_message3.data["in3"] = "in_data3"; |
| 1211 in_message3.data["in3_2"] = "in_data3_2"; | 1211 in_message3.data["in3_2"] = "in_data3_2"; |
| 1212 in_message3.sender_id = "foo"; | 1212 in_message3.sender_id = "foo"; |
| 1213 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID1, in_message3); | 1213 wrapper2_->GetGCMClient()->ReceiveMessage(kTestAppID1, in_message3); |
| 1214 | 1214 |
| 1215 wrapper2_->gcm_app_handler()->WaitForNotification(); | 1215 wrapper2_->gcm_app_handler()->WaitForNotification(); |
| 1216 | 1216 |
| 1217 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 1217 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 1218 wrapper2_->gcm_app_handler()->received_event()); | 1218 wrapper2_->gcm_app_handler()->received_event()); |
| 1219 EXPECT_EQ(kTestAppID2, wrapper2_->gcm_app_handler()->app_id()); | 1219 EXPECT_EQ(kTestAppID2, wrapper2_->gcm_app_handler()->app_id()); |
| 1220 EXPECT_EQ(in_message2.data, wrapper2_->gcm_app_handler()->message().data); | 1220 EXPECT_EQ(in_message2.data, wrapper2_->gcm_app_handler()->message().data); |
| 1221 | 1221 |
| 1222 wrapper2_->gcm_app_handler()->WaitForNotification(); | 1222 wrapper2_->gcm_app_handler()->WaitForNotification(); |
| 1223 | 1223 |
| 1224 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 1224 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 1225 wrapper2_->gcm_app_handler()->received_event()); | 1225 wrapper2_->gcm_app_handler()->received_event()); |
| 1226 EXPECT_EQ(kTestAppID1, wrapper2_->gcm_app_handler()->app_id()); | 1226 EXPECT_EQ(kTestAppID1, wrapper2_->gcm_app_handler()->app_id()); |
| 1227 EXPECT_EQ(in_message3.data, wrapper2_->gcm_app_handler()->message().data); | 1227 EXPECT_EQ(in_message3.data, wrapper2_->gcm_app_handler()->message().data); |
| 1228 | 1228 |
| 1229 // Send two messages, one for each app respectively, from another instance. | 1229 // Send two messages, one for each app respectively, from another instance. |
| 1230 GCMClient::OutgoingMessage out_message2; | 1230 OutgoingMessage out_message2; |
| 1231 out_message2.id = "2"; | 1231 out_message2.id = "2"; |
| 1232 out_message2.data["out2"] = "out_data2"; | 1232 out_message2.data["out2"] = "out_data2"; |
| 1233 wrapper2_->Send(kTestAppID1, | 1233 wrapper2_->Send(kTestAppID1, |
| 1234 kUserID2, | 1234 kUserID2, |
| 1235 out_message2, | 1235 out_message2, |
| 1236 TestGCMServiceWrapper::WAIT); | 1236 TestGCMServiceWrapper::WAIT); |
| 1237 | 1237 |
| 1238 GCMClient::OutgoingMessage out_message3; | 1238 OutgoingMessage out_message3; |
| 1239 out_message3.id = "3"; | 1239 out_message3.id = "3"; |
| 1240 out_message3.data["out3"] = "out_data3"; | 1240 out_message3.data["out3"] = "out_data3"; |
| 1241 wrapper2_->Send(kTestAppID2, | 1241 wrapper2_->Send(kTestAppID2, |
| 1242 kUserID2, | 1242 kUserID2, |
| 1243 out_message3, | 1243 out_message3, |
| 1244 TestGCMServiceWrapper::DO_NOT_WAIT); | 1244 TestGCMServiceWrapper::DO_NOT_WAIT); |
| 1245 | 1245 |
| 1246 EXPECT_EQ(out_message2.id, wrapper2_->send_message_id()); | 1246 EXPECT_EQ(out_message2.id, wrapper2_->send_message_id()); |
| 1247 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->send_result()); | 1247 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->send_result()); |
| 1248 | 1248 |
| 1249 wrapper2_->WaitForAsyncOperation(); | 1249 wrapper2_->WaitForAsyncOperation(); |
| 1250 | 1250 |
| 1251 EXPECT_EQ(out_message3.id, wrapper2_->send_message_id()); | 1251 EXPECT_EQ(out_message3.id, wrapper2_->send_message_id()); |
| 1252 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->send_result()); | 1252 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->send_result()); |
| 1253 | 1253 |
| 1254 // Sign out of one instance. | 1254 // Sign out of one instance. |
| 1255 wrapper_->SignOut(); | 1255 wrapper_->SignOut(); |
| 1256 | 1256 |
| 1257 // Register/send stops working for signed-out instance. | 1257 // Register/send stops working for signed-out instance. |
| 1258 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); | 1258 wrapper_->Register(kTestAppID1, sender_ids, TestGCMServiceWrapper::WAIT); |
| 1259 EXPECT_TRUE(wrapper_->registration_id().empty()); | 1259 EXPECT_TRUE(wrapper_->registration_id().empty()); |
| 1260 EXPECT_EQ(GCMClient::NOT_SIGNED_IN, wrapper_->registration_result()); | 1260 EXPECT_EQ(RESULT_NOT_SIGNED_IN, wrapper_->registration_result()); |
| 1261 | 1261 |
| 1262 wrapper_->Send(kTestAppID2, | 1262 wrapper_->Send(kTestAppID2, |
| 1263 kUserID2, | 1263 kUserID2, |
| 1264 out_message3, | 1264 out_message3, |
| 1265 TestGCMServiceWrapper::WAIT); | 1265 TestGCMServiceWrapper::WAIT); |
| 1266 EXPECT_TRUE(wrapper_->send_message_id().empty()); | 1266 EXPECT_TRUE(wrapper_->send_message_id().empty()); |
| 1267 EXPECT_EQ(GCMClient::NOT_SIGNED_IN, wrapper_->send_result()); | 1267 EXPECT_EQ(RESULT_NOT_SIGNED_IN, wrapper_->send_result()); |
| 1268 | 1268 |
| 1269 // Deleted messages event will go through for another signed-in instance. | 1269 // Deleted messages event will go through for another signed-in instance. |
| 1270 wrapper2_->GetGCMClient()->DeleteMessages(kTestAppID2); | 1270 wrapper2_->GetGCMClient()->DeleteMessages(kTestAppID2); |
| 1271 wrapper2_->gcm_app_handler()->WaitForNotification(); | 1271 wrapper2_->gcm_app_handler()->WaitForNotification(); |
| 1272 | 1272 |
| 1273 EXPECT_EQ(FakeGCMAppHandler::MESSAGES_DELETED_EVENT, | 1273 EXPECT_EQ(FakeGCMAppHandler::MESSAGES_DELETED_EVENT, |
| 1274 wrapper2_->gcm_app_handler()->received_event()); | 1274 wrapper2_->gcm_app_handler()->received_event()); |
| 1275 EXPECT_EQ(kTestAppID2, wrapper2_->gcm_app_handler()->app_id()); | 1275 EXPECT_EQ(kTestAppID2, wrapper2_->gcm_app_handler()->app_id()); |
| 1276 | 1276 |
| 1277 // Send error event will go through for another signed-in instance. | 1277 // Send error event will go through for another signed-in instance. |
| 1278 GCMClient::OutgoingMessage out_message4; | 1278 OutgoingMessage out_message4; |
| 1279 out_message4.id = "1@error"; | 1279 out_message4.id = "1@error"; |
| 1280 out_message4.data["out4"] = "out_data4"; | 1280 out_message4.data["out4"] = "out_data4"; |
| 1281 wrapper2_->Send(kTestAppID1, | 1281 wrapper2_->Send(kTestAppID1, |
| 1282 kUserID1, | 1282 kUserID1, |
| 1283 out_message4, | 1283 out_message4, |
| 1284 TestGCMServiceWrapper::WAIT); | 1284 TestGCMServiceWrapper::WAIT); |
| 1285 | 1285 |
| 1286 EXPECT_EQ(out_message4.id, wrapper2_->send_message_id()); | 1286 EXPECT_EQ(out_message4.id, wrapper2_->send_message_id()); |
| 1287 EXPECT_EQ(GCMClient::SUCCESS, wrapper2_->send_result()); | 1287 EXPECT_EQ(RESULT_SUCCESS, wrapper2_->send_result()); |
| 1288 | 1288 |
| 1289 wrapper2_->gcm_app_handler()->WaitForNotification(); | 1289 wrapper2_->gcm_app_handler()->WaitForNotification(); |
| 1290 EXPECT_EQ(FakeGCMAppHandler::SEND_ERROR_EVENT, | 1290 EXPECT_EQ(FakeGCMAppHandler::SEND_ERROR_EVENT, |
| 1291 wrapper2_->gcm_app_handler()->received_event()); | 1291 wrapper2_->gcm_app_handler()->received_event()); |
| 1292 EXPECT_EQ(kTestAppID1, wrapper2_->gcm_app_handler()->app_id()); | 1292 EXPECT_EQ(kTestAppID1, wrapper2_->gcm_app_handler()->app_id()); |
| 1293 EXPECT_EQ(out_message4.id, | 1293 EXPECT_EQ(out_message4.id, |
| 1294 wrapper2_->gcm_app_handler()->send_error_details().message_id); | 1294 wrapper2_->gcm_app_handler()->send_error_details().message_id); |
| 1295 EXPECT_NE(GCMClient::SUCCESS, | 1295 EXPECT_NE(RESULT_SUCCESS, |
| 1296 wrapper2_->gcm_app_handler()->send_error_details().result); | 1296 wrapper2_->gcm_app_handler()->send_error_details().result); |
| 1297 EXPECT_EQ(out_message4.data, | 1297 EXPECT_EQ(out_message4.data, |
| 1298 wrapper2_->gcm_app_handler()->send_error_details().additional_data); | 1298 wrapper2_->gcm_app_handler()->send_error_details().additional_data); |
| 1299 | 1299 |
| 1300 // Sign in with a different account. | 1300 // Sign in with a different account. |
| 1301 wrapper_->SignIn(kTestAccountID3); | 1301 wrapper_->SignIn(kTestAccountID3); |
| 1302 | 1302 |
| 1303 // Signing out cleared all registrations, so we need to register again. | 1303 // Signing out cleared all registrations, so we need to register again. |
| 1304 wrapper_->Register(kTestAppID1, | 1304 wrapper_->Register(kTestAppID1, |
| 1305 ToSenderList("sender1"), | 1305 ToSenderList("sender1"), |
| 1306 TestGCMServiceWrapper::WAIT); | 1306 TestGCMServiceWrapper::WAIT); |
| 1307 | 1307 |
| 1308 // Incoming message will go through for the new signed-in account. | 1308 // Incoming message will go through for the new signed-in account. |
| 1309 GCMClient::IncomingMessage in_message5; | 1309 IncomingMessage in_message5; |
| 1310 in_message5.data["in5"] = "in_data5"; | 1310 in_message5.data["in5"] = "in_data5"; |
| 1311 in_message5.sender_id = "sender1"; | 1311 in_message5.sender_id = "sender1"; |
| 1312 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, in_message5); | 1312 wrapper_->GetGCMClient()->ReceiveMessage(kTestAppID1, in_message5); |
| 1313 | 1313 |
| 1314 wrapper_->gcm_app_handler()->WaitForNotification(); | 1314 wrapper_->gcm_app_handler()->WaitForNotification(); |
| 1315 | 1315 |
| 1316 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, | 1316 EXPECT_EQ(FakeGCMAppHandler::MESSAGE_EVENT, |
| 1317 wrapper_->gcm_app_handler()->received_event()); | 1317 wrapper_->gcm_app_handler()->received_event()); |
| 1318 EXPECT_EQ(in_message5.data, wrapper_->gcm_app_handler()->message().data); | 1318 EXPECT_EQ(in_message5.data, wrapper_->gcm_app_handler()->message().data); |
| 1319 } | 1319 } |
| 1320 | 1320 |
| 1321 } // namespace gcm | 1321 } // namespace gcm |
| OLD | NEW |