| 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 for (std::map<std::string, std::string>::const_iterator iter = data.begin(); | 61 for (std::map<std::string, std::string>::const_iterator iter = data.begin(); |
| 62 iter != data.end(); | 62 iter != data.end(); |
| 63 ++iter) { | 63 ++iter) { |
| 64 mcs_proto::AppData* app_data = data_message.add_app_data(); | 64 mcs_proto::AppData* app_data = data_message.add_app_data(); |
| 65 app_data->set_key(iter->first); | 65 app_data->set_key(iter->first); |
| 66 app_data->set_value(iter->second); | 66 app_data->set_value(iter->second); |
| 67 } | 67 } |
| 68 return MCSMessage(kDataMessageStanzaTag, data_message); | 68 return MCSMessage(kDataMessageStanzaTag, data_message); |
| 69 } | 69 } |
| 70 | 70 |
| 71 GCMClient::AccountTokenInfo MakeAccountToken(const std::string& email, |
| 72 const std::string& token) { |
| 73 GCMClient::AccountTokenInfo account_token; |
| 74 account_token.email = email; |
| 75 account_token.access_token = token; |
| 76 return account_token; |
| 77 } |
| 78 |
| 79 std::map<std::string, std::string> MakeEmailToTokenMap( |
| 80 const std::vector<GCMClient::AccountTokenInfo>& account_tokens) { |
| 81 std::map<std::string, std::string> email_token_map; |
| 82 for (std::vector<GCMClient::AccountTokenInfo>::const_iterator iter = |
| 83 account_tokens.begin(); iter != account_tokens.end(); ++iter) { |
| 84 email_token_map[iter->email] = iter->access_token; |
| 85 } |
| 86 return email_token_map; |
| 87 } |
| 88 |
| 71 class FakeMCSClient : public MCSClient { | 89 class FakeMCSClient : public MCSClient { |
| 72 public: | 90 public: |
| 73 FakeMCSClient(base::Clock* clock, | 91 FakeMCSClient(base::Clock* clock, |
| 74 ConnectionFactory* connection_factory, | 92 ConnectionFactory* connection_factory, |
| 75 GCMStore* gcm_store, | 93 GCMStore* gcm_store, |
| 76 GCMStatsRecorder* recorder); | 94 GCMStatsRecorder* recorder); |
| 77 virtual ~FakeMCSClient(); | 95 virtual ~FakeMCSClient(); |
| 78 virtual void Login(uint64 android_id, uint64 security_token) OVERRIDE; | 96 virtual void Login(uint64 android_id, uint64 security_token) OVERRIDE; |
| 79 virtual void SendMessage(const MCSMessage& message) OVERRIDE; | 97 virtual void SendMessage(const MCSMessage& message) OVERRIDE; |
| 80 | 98 |
| (...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); | 854 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
| 837 settings["checkin_url"] = "http://alternative.url/checkin"; | 855 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 838 settings["gcm_hostname"] = "alternative.gcm.host"; | 856 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 839 settings["gcm_secure_port"] = "7777"; | 857 settings["gcm_secure_port"] = "7777"; |
| 840 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 858 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 841 CompleteCheckin(kDeviceAndroidId, | 859 CompleteCheckin(kDeviceAndroidId, |
| 842 kDeviceSecurityToken, | 860 kDeviceSecurityToken, |
| 843 GServicesSettings::CalculateDigest(settings), | 861 GServicesSettings::CalculateDigest(settings), |
| 844 settings); | 862 settings); |
| 845 | 863 |
| 846 std::map<std::string, std::string> account_tokens; | 864 std::vector<GCMClient::AccountTokenInfo> account_tokens; |
| 847 account_tokens["test_user1@gmail.com"] = "token1"; | 865 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); |
| 848 account_tokens["test_user2@gmail.com"] = "token2"; | 866 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); |
| 849 gcm_client()->SetAccountsForCheckin(account_tokens); | 867 gcm_client()->SetAccountTokens(account_tokens); |
| 850 | 868 |
| 851 EXPECT_TRUE(device_checkin_info().last_checkin_accounts.empty()); | 869 EXPECT_TRUE(device_checkin_info().last_checkin_accounts.empty()); |
| 852 EXPECT_TRUE(device_checkin_info().accounts_set); | 870 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 853 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); | 871 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 872 device_checkin_info().account_tokens); |
| 854 | 873 |
| 855 PumpLoopUntilIdle(); | 874 PumpLoopUntilIdle(); |
| 856 CompleteCheckin(kDeviceAndroidId, | 875 CompleteCheckin(kDeviceAndroidId, |
| 857 kDeviceSecurityToken, | 876 kDeviceSecurityToken, |
| 858 GServicesSettings::CalculateDigest(settings), | 877 GServicesSettings::CalculateDigest(settings), |
| 859 settings); | 878 settings); |
| 860 | 879 |
| 861 std::set<std::string> accounts; | 880 std::set<std::string> accounts; |
| 862 accounts.insert("test_user1@gmail.com"); | 881 accounts.insert("test_user1@gmail.com"); |
| 863 accounts.insert("test_user2@gmail.com"); | 882 accounts.insert("test_user2@gmail.com"); |
| 864 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 883 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 865 EXPECT_TRUE(device_checkin_info().accounts_set); | 884 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 866 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); | 885 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 886 device_checkin_info().account_tokens); |
| 867 } | 887 } |
| 868 | 888 |
| 869 // This test only checks that periodic checkin happens. | 889 // This test only checks that periodic checkin happens. |
| 870 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountRemoved) { | 890 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountRemoved) { |
| 871 std::map<std::string, std::string> settings; | 891 std::map<std::string, std::string> settings; |
| 872 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); | 892 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
| 873 settings["checkin_url"] = "http://alternative.url/checkin"; | 893 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 874 settings["gcm_hostname"] = "alternative.gcm.host"; | 894 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 875 settings["gcm_secure_port"] = "7777"; | 895 settings["gcm_secure_port"] = "7777"; |
| 876 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 896 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 877 CompleteCheckin(kDeviceAndroidId, | 897 CompleteCheckin(kDeviceAndroidId, |
| 878 kDeviceSecurityToken, | 898 kDeviceSecurityToken, |
| 879 GServicesSettings::CalculateDigest(settings), | 899 GServicesSettings::CalculateDigest(settings), |
| 880 settings); | 900 settings); |
| 881 | 901 |
| 882 std::map<std::string, std::string> account_tokens; | 902 std::vector<GCMClient::AccountTokenInfo> account_tokens; |
| 883 account_tokens["test_user1@gmail.com"] = "token1"; | 903 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); |
| 884 account_tokens["test_user2@gmail.com"] = "token2"; | 904 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); |
| 885 gcm_client()->SetAccountsForCheckin(account_tokens); | 905 gcm_client()->SetAccountTokens(account_tokens); |
| 886 PumpLoopUntilIdle(); | 906 PumpLoopUntilIdle(); |
| 887 CompleteCheckin(kDeviceAndroidId, | 907 CompleteCheckin(kDeviceAndroidId, |
| 888 kDeviceSecurityToken, | 908 kDeviceSecurityToken, |
| 889 GServicesSettings::CalculateDigest(settings), | 909 GServicesSettings::CalculateDigest(settings), |
| 890 settings); | 910 settings); |
| 891 | 911 |
| 892 EXPECT_EQ(2UL, device_checkin_info().last_checkin_accounts.size()); | 912 EXPECT_EQ(2UL, device_checkin_info().last_checkin_accounts.size()); |
| 893 EXPECT_TRUE(device_checkin_info().accounts_set); | 913 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 894 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); | 914 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 915 device_checkin_info().account_tokens); |
| 895 | 916 |
| 896 account_tokens.erase(account_tokens.find("test_user2@gmail.com")); | 917 account_tokens.erase(account_tokens.begin() + 1); |
| 897 gcm_client()->SetAccountsForCheckin(account_tokens); | 918 gcm_client()->SetAccountTokens(account_tokens); |
| 898 | 919 |
| 899 PumpLoopUntilIdle(); | 920 PumpLoopUntilIdle(); |
| 900 CompleteCheckin(kDeviceAndroidId, | 921 CompleteCheckin(kDeviceAndroidId, |
| 901 kDeviceSecurityToken, | 922 kDeviceSecurityToken, |
| 902 GServicesSettings::CalculateDigest(settings), | 923 GServicesSettings::CalculateDigest(settings), |
| 903 settings); | 924 settings); |
| 904 | 925 |
| 905 std::set<std::string> accounts; | 926 std::set<std::string> accounts; |
| 906 accounts.insert("test_user1@gmail.com"); | 927 accounts.insert("test_user1@gmail.com"); |
| 907 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 928 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 908 EXPECT_TRUE(device_checkin_info().accounts_set); | 929 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 909 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); | 930 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 931 device_checkin_info().account_tokens); |
| 910 } | 932 } |
| 911 | 933 |
| 912 // This test only checks that periodic checkin happens. | 934 // This test only checks that periodic checkin happens. |
| 913 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountReplaced) { | 935 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountReplaced) { |
| 914 std::map<std::string, std::string> settings; | 936 std::map<std::string, std::string> settings; |
| 915 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); | 937 settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
| 916 settings["checkin_url"] = "http://alternative.url/checkin"; | 938 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 917 settings["gcm_hostname"] = "alternative.gcm.host"; | 939 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 918 settings["gcm_secure_port"] = "7777"; | 940 settings["gcm_secure_port"] = "7777"; |
| 919 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 941 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 920 CompleteCheckin(kDeviceAndroidId, | 942 CompleteCheckin(kDeviceAndroidId, |
| 921 kDeviceSecurityToken, | 943 kDeviceSecurityToken, |
| 922 GServicesSettings::CalculateDigest(settings), | 944 GServicesSettings::CalculateDigest(settings), |
| 923 settings); | 945 settings); |
| 924 | 946 |
| 925 std::map<std::string, std::string> account_tokens; | 947 std::vector<GCMClient::AccountTokenInfo> account_tokens; |
| 926 account_tokens["test_user1@gmail.com"] = "token1"; | 948 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); |
| 927 gcm_client()->SetAccountsForCheckin(account_tokens); | 949 gcm_client()->SetAccountTokens(account_tokens); |
| 928 | 950 |
| 929 PumpLoopUntilIdle(); | 951 PumpLoopUntilIdle(); |
| 930 CompleteCheckin(kDeviceAndroidId, | 952 CompleteCheckin(kDeviceAndroidId, |
| 931 kDeviceSecurityToken, | 953 kDeviceSecurityToken, |
| 932 GServicesSettings::CalculateDigest(settings), | 954 GServicesSettings::CalculateDigest(settings), |
| 933 settings); | 955 settings); |
| 934 | 956 |
| 935 std::set<std::string> accounts; | 957 std::set<std::string> accounts; |
| 936 accounts.insert("test_user1@gmail.com"); | 958 accounts.insert("test_user1@gmail.com"); |
| 937 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 959 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 938 | 960 |
| 939 // This should trigger another checkin, because the list of accounts is | 961 // This should trigger another checkin, because the list of accounts is |
| 940 // different. | 962 // different. |
| 941 account_tokens.erase(account_tokens.find("test_user1@gmail.com")); | 963 account_tokens.clear(); |
| 942 account_tokens["test_user2@gmail.com"] = "token2"; | 964 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); |
| 943 gcm_client()->SetAccountsForCheckin(account_tokens); | 965 gcm_client()->SetAccountTokens(account_tokens); |
| 944 | 966 |
| 945 PumpLoopUntilIdle(); | 967 PumpLoopUntilIdle(); |
| 946 CompleteCheckin(kDeviceAndroidId, | 968 CompleteCheckin(kDeviceAndroidId, |
| 947 kDeviceSecurityToken, | 969 kDeviceSecurityToken, |
| 948 GServicesSettings::CalculateDigest(settings), | 970 GServicesSettings::CalculateDigest(settings), |
| 949 settings); | 971 settings); |
| 950 | 972 |
| 951 accounts.clear(); | 973 accounts.clear(); |
| 952 accounts.insert("test_user2@gmail.com"); | 974 accounts.insert("test_user2@gmail.com"); |
| 953 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 975 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 954 EXPECT_TRUE(device_checkin_info().accounts_set); | 976 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 955 EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); | 977 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 978 device_checkin_info().account_tokens); |
| 956 } | 979 } |
| 957 | 980 |
| 958 class GCMClientImplStartAndStopTest : public GCMClientImplTest { | 981 class GCMClientImplStartAndStopTest : public GCMClientImplTest { |
| 959 public: | 982 public: |
| 960 GCMClientImplStartAndStopTest(); | 983 GCMClientImplStartAndStopTest(); |
| 961 virtual ~GCMClientImplStartAndStopTest(); | 984 virtual ~GCMClientImplStartAndStopTest(); |
| 962 | 985 |
| 963 virtual void SetUp() OVERRIDE; | 986 virtual void SetUp() OVERRIDE; |
| 964 }; | 987 }; |
| 965 | 988 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1002 TEST_F(GCMClientImplStartAndStopTest, StartStopAndRestartImmediately) { | 1025 TEST_F(GCMClientImplStartAndStopTest, StartStopAndRestartImmediately) { |
| 1003 // Start the GCM and then stop and restart it immediately. | 1026 // Start the GCM and then stop and restart it immediately. |
| 1004 gcm_client()->Start(); | 1027 gcm_client()->Start(); |
| 1005 gcm_client()->Stop(); | 1028 gcm_client()->Stop(); |
| 1006 gcm_client()->Start(); | 1029 gcm_client()->Start(); |
| 1007 | 1030 |
| 1008 PumpLoopUntilIdle(); | 1031 PumpLoopUntilIdle(); |
| 1009 } | 1032 } |
| 1010 | 1033 |
| 1011 } // namespace gcm | 1034 } // namespace gcm |
| OLD | NEW |