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 |