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 "components/gcm_driver/gcm_client_impl.h" | 5 #include "components/gcm_driver/gcm_client_impl.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 virtual void OnDisconnected() OVERRIDE {} | 255 virtual void OnDisconnected() OVERRIDE {} |
256 | 256 |
257 GCMClientImpl* gcm_client() const { return gcm_client_.get(); } | 257 GCMClientImpl* gcm_client() const { return gcm_client_.get(); } |
258 FakeMCSClient* mcs_client() const { | 258 FakeMCSClient* mcs_client() const { |
259 return reinterpret_cast<FakeMCSClient*>(gcm_client_->mcs_client_.get()); | 259 return reinterpret_cast<FakeMCSClient*>(gcm_client_->mcs_client_.get()); |
260 } | 260 } |
261 ConnectionFactory* connection_factory() const { | 261 ConnectionFactory* connection_factory() const { |
262 return gcm_client_->connection_factory_.get(); | 262 return gcm_client_->connection_factory_.get(); |
263 } | 263 } |
264 | 264 |
| 265 const GCMClientImpl::CheckinInfo& device_checkin_info() const { |
| 266 return gcm_client_->device_checkin_info_; |
| 267 } |
| 268 |
265 void reset_last_event() { | 269 void reset_last_event() { |
266 last_event_ = NONE; | 270 last_event_ = NONE; |
267 last_app_id_.clear(); | 271 last_app_id_.clear(); |
268 last_registration_id_.clear(); | 272 last_registration_id_.clear(); |
269 last_message_id_.clear(); | 273 last_message_id_.clear(); |
270 last_result_ = GCMClient::UNKNOWN_ERROR; | 274 last_result_ = GCMClient::UNKNOWN_ERROR; |
271 } | 275 } |
272 | 276 |
273 LastEvent last_event() const { return last_event_; } | 277 LastEvent last_event() const { return last_event_; } |
274 const std::string& last_app_id() const { return last_app_id_; } | 278 const std::string& last_app_id() const { return last_app_id_; } |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 } | 516 } |
513 | 517 |
514 int64 GCMClientImplTest::CurrentTime() { | 518 int64 GCMClientImplTest::CurrentTime() { |
515 return clock()->Now().ToInternalValue() / base::Time::kMicrosecondsPerSecond; | 519 return clock()->Now().ToInternalValue() / base::Time::kMicrosecondsPerSecond; |
516 } | 520 } |
517 | 521 |
518 TEST_F(GCMClientImplTest, LoadingCompleted) { | 522 TEST_F(GCMClientImplTest, LoadingCompleted) { |
519 EXPECT_EQ(LOADING_COMPLETED, last_event()); | 523 EXPECT_EQ(LOADING_COMPLETED, last_event()); |
520 EXPECT_EQ(kDeviceAndroidId, mcs_client()->last_android_id()); | 524 EXPECT_EQ(kDeviceAndroidId, mcs_client()->last_android_id()); |
521 EXPECT_EQ(kDeviceSecurityToken, mcs_client()->last_security_token()); | 525 EXPECT_EQ(kDeviceSecurityToken, mcs_client()->last_security_token()); |
| 526 |
| 527 // Checking freshly loaded CheckinInfo. |
| 528 EXPECT_EQ(kDeviceAndroidId, device_checkin_info().android_id); |
| 529 EXPECT_EQ(kDeviceSecurityToken, device_checkin_info().secret); |
| 530 EXPECT_TRUE(device_checkin_info().last_checkin_accounts.empty()); |
| 531 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 532 EXPECT_TRUE(device_checkin_info().account_tokens.empty()); |
522 } | 533 } |
523 | 534 |
524 TEST_F(GCMClientImplTest, CheckOut) { | 535 TEST_F(GCMClientImplTest, CheckOut) { |
525 EXPECT_TRUE(mcs_client()); | 536 EXPECT_TRUE(mcs_client()); |
526 EXPECT_TRUE(connection_factory()); | 537 EXPECT_TRUE(connection_factory()); |
527 gcm_client()->CheckOut(); | 538 gcm_client()->CheckOut(); |
528 EXPECT_FALSE(mcs_client()); | 539 EXPECT_FALSE(mcs_client()); |
529 EXPECT_FALSE(connection_factory()); | 540 EXPECT_FALSE(connection_factory()); |
530 } | 541 } |
531 | 542 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 std::map<std::string, std::string> settings; | 752 std::map<std::string, std::string> settings; |
742 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); | 753 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
743 settings["checkin_url"] = "http://alternative.url/checkin"; | 754 settings["checkin_url"] = "http://alternative.url/checkin"; |
744 settings["gcm_hostname"] = "alternative.gcm.host"; | 755 settings["gcm_hostname"] = "alternative.gcm.host"; |
745 settings["gcm_secure_port"] = "7777"; | 756 settings["gcm_secure_port"] = "7777"; |
746 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 757 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
747 CompleteCheckin(kDeviceAndroidId, | 758 CompleteCheckin(kDeviceAndroidId, |
748 kDeviceSecurityToken, | 759 kDeviceSecurityToken, |
749 GServicesSettings::CalculateDigest(settings), | 760 GServicesSettings::CalculateDigest(settings), |
750 settings); | 761 settings); |
| 762 |
751 EXPECT_EQ(2, clock()->call_count()); | 763 EXPECT_EQ(2, clock()->call_count()); |
752 | 764 |
753 PumpLoopUntilIdle(); | 765 PumpLoopUntilIdle(); |
754 CompleteCheckin(kDeviceAndroidId, | 766 CompleteCheckin(kDeviceAndroidId, |
755 kDeviceSecurityToken, | 767 kDeviceSecurityToken, |
756 GServicesSettings::CalculateDigest(settings), | 768 GServicesSettings::CalculateDigest(settings), |
757 settings); | 769 settings); |
758 } | 770 } |
759 | 771 |
760 TEST_F(GCMClientImplCheckinTest, LoadGSettingsFromStore) { | 772 TEST_F(GCMClientImplCheckinTest, LoadGSettingsFromStore) { |
(...skipping 17 matching lines...) Expand all Loading... |
778 EXPECT_EQ(GURL("http://alternative.url/checkin"), | 790 EXPECT_EQ(GURL("http://alternative.url/checkin"), |
779 gservices_settings().GetCheckinURL()); | 791 gservices_settings().GetCheckinURL()); |
780 EXPECT_EQ(GURL("http://alternative.url/registration"), | 792 EXPECT_EQ(GURL("http://alternative.url/registration"), |
781 gservices_settings().GetRegistrationURL()); | 793 gservices_settings().GetRegistrationURL()); |
782 EXPECT_EQ(GURL("https://alternative.gcm.host:7777"), | 794 EXPECT_EQ(GURL("https://alternative.gcm.host:7777"), |
783 gservices_settings().GetMCSMainEndpoint()); | 795 gservices_settings().GetMCSMainEndpoint()); |
784 EXPECT_EQ(GURL("https://alternative.gcm.host:443"), | 796 EXPECT_EQ(GURL("https://alternative.gcm.host:443"), |
785 gservices_settings().GetMCSFallbackEndpoint()); | 797 gservices_settings().GetMCSFallbackEndpoint()); |
786 } | 798 } |
787 | 799 |
| 800 // This test only checks that periodic checkin happens. |
| 801 TEST_F(GCMClientImplCheckinTest, CheckinWithAccounts) { |
| 802 std::map<std::string, std::string> settings; |
| 803 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
| 804 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 805 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 806 settings["gcm_secure_port"] = "7777"; |
| 807 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 808 CompleteCheckin(kDeviceAndroidId, |
| 809 kDeviceSecurityToken, |
| 810 GServicesSettings::CalculateDigest(settings), |
| 811 settings); |
| 812 |
| 813 std::map<std::string, std::string> account_tokens; |
| 814 account_tokens["test_user1@gmail.com"] = "token1"; |
| 815 account_tokens["test_user2@gmail.com"] = "token2"; |
| 816 gcm_client()->SetAccountsForCheckin(account_tokens); |
| 817 |
| 818 EXPECT_TRUE(device_checkin_info().last_checkin_accounts.empty()); |
| 819 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 820 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
| 821 |
| 822 PumpLoopUntilIdle(); |
| 823 CompleteCheckin(kDeviceAndroidId, |
| 824 kDeviceSecurityToken, |
| 825 GServicesSettings::CalculateDigest(settings), |
| 826 settings); |
| 827 |
| 828 std::set<std::string> accounts; |
| 829 accounts.insert("test_user1@gmail.com"); |
| 830 accounts.insert("test_user2@gmail.com"); |
| 831 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 832 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 833 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
| 834 } |
| 835 |
| 836 // This test only checks that periodic checkin happens. |
| 837 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountRemoved) { |
| 838 std::map<std::string, std::string> settings; |
| 839 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
| 840 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 841 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 842 settings["gcm_secure_port"] = "7777"; |
| 843 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 844 CompleteCheckin(kDeviceAndroidId, |
| 845 kDeviceSecurityToken, |
| 846 GServicesSettings::CalculateDigest(settings), |
| 847 settings); |
| 848 |
| 849 std::map<std::string, std::string> account_tokens; |
| 850 account_tokens["test_user1@gmail.com"] = "token1"; |
| 851 account_tokens["test_user2@gmail.com"] = "token2"; |
| 852 gcm_client()->SetAccountsForCheckin(account_tokens); |
| 853 PumpLoopUntilIdle(); |
| 854 CompleteCheckin(kDeviceAndroidId, |
| 855 kDeviceSecurityToken, |
| 856 GServicesSettings::CalculateDigest(settings), |
| 857 settings); |
| 858 |
| 859 EXPECT_EQ(2UL, device_checkin_info().last_checkin_accounts.size()); |
| 860 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 861 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
| 862 |
| 863 account_tokens.erase(account_tokens.find("test_user2@gmail.com")); |
| 864 gcm_client()->SetAccountsForCheckin(account_tokens); |
| 865 |
| 866 PumpLoopUntilIdle(); |
| 867 CompleteCheckin(kDeviceAndroidId, |
| 868 kDeviceSecurityToken, |
| 869 GServicesSettings::CalculateDigest(settings), |
| 870 settings); |
| 871 |
| 872 std::set<std::string> accounts; |
| 873 accounts.insert("test_user1@gmail.com"); |
| 874 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 875 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 876 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
| 877 } |
| 878 |
| 879 // This test only checks that periodic checkin happens. |
| 880 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountReplaced) { |
| 881 std::map<std::string, std::string> settings; |
| 882 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
| 883 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 884 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 885 settings["gcm_secure_port"] = "7777"; |
| 886 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 887 CompleteCheckin(kDeviceAndroidId, |
| 888 kDeviceSecurityToken, |
| 889 GServicesSettings::CalculateDigest(settings), |
| 890 settings); |
| 891 |
| 892 std::map<std::string, std::string> account_tokens; |
| 893 account_tokens["test_user1@gmail.com"] = "token1"; |
| 894 gcm_client()->SetAccountsForCheckin(account_tokens); |
| 895 |
| 896 PumpLoopUntilIdle(); |
| 897 CompleteCheckin(kDeviceAndroidId, |
| 898 kDeviceSecurityToken, |
| 899 GServicesSettings::CalculateDigest(settings), |
| 900 settings); |
| 901 |
| 902 std::set<std::string> accounts; |
| 903 accounts.insert("test_user1@gmail.com"); |
| 904 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 905 |
| 906 // This should trigger another checkin, because the list of accounts is |
| 907 // different. |
| 908 account_tokens.erase(account_tokens.find("test_user1@gmail.com")); |
| 909 account_tokens["test_user2@gmail.com"] = "token2"; |
| 910 gcm_client()->SetAccountsForCheckin(account_tokens); |
| 911 |
| 912 PumpLoopUntilIdle(); |
| 913 CompleteCheckin(kDeviceAndroidId, |
| 914 kDeviceSecurityToken, |
| 915 GServicesSettings::CalculateDigest(settings), |
| 916 settings); |
| 917 |
| 918 accounts.clear(); |
| 919 accounts.insert("test_user2@gmail.com"); |
| 920 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 921 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 922 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
| 923 } |
| 924 |
788 class GCMClientImplStartAndStopTest : public GCMClientImplTest { | 925 class GCMClientImplStartAndStopTest : public GCMClientImplTest { |
789 public: | 926 public: |
790 GCMClientImplStartAndStopTest(); | 927 GCMClientImplStartAndStopTest(); |
791 virtual ~GCMClientImplStartAndStopTest(); | 928 virtual ~GCMClientImplStartAndStopTest(); |
792 | 929 |
793 virtual void SetUp() OVERRIDE; | 930 virtual void SetUp() OVERRIDE; |
794 }; | 931 }; |
795 | 932 |
796 GCMClientImplStartAndStopTest::GCMClientImplStartAndStopTest() { | 933 GCMClientImplStartAndStopTest::GCMClientImplStartAndStopTest() { |
797 } | 934 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 TEST_F(GCMClientImplStartAndStopTest, StartStopAndRestartImmediately) { | 969 TEST_F(GCMClientImplStartAndStopTest, StartStopAndRestartImmediately) { |
833 // Start the GCM and then stop and restart it immediately. | 970 // Start the GCM and then stop and restart it immediately. |
834 gcm_client()->Start(); | 971 gcm_client()->Start(); |
835 gcm_client()->Stop(); | 972 gcm_client()->Stop(); |
836 gcm_client()->Start(); | 973 gcm_client()->Start(); |
837 | 974 |
838 PumpLoopUntilIdle(); | 975 PumpLoopUntilIdle(); |
839 } | 976 } |
840 | 977 |
841 } // namespace gcm | 978 } // namespace gcm |
OLD | NEW |