| 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 <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 | 415 |
| 416 GCMClientImplTest::~GCMClientImplTest() {} | 416 GCMClientImplTest::~GCMClientImplTest() {} |
| 417 | 417 |
| 418 void GCMClientImplTest::SetUp() { | 418 void GCMClientImplTest::SetUp() { |
| 419 testing::Test::SetUp(); | 419 testing::Test::SetUp(); |
| 420 ASSERT_TRUE(CreateUniqueTempDir()); | 420 ASSERT_TRUE(CreateUniqueTempDir()); |
| 421 BuildGCMClient(base::TimeDelta()); | 421 BuildGCMClient(base::TimeDelta()); |
| 422 InitializeGCMClient(); | 422 InitializeGCMClient(); |
| 423 StartGCMClient(); | 423 StartGCMClient(); |
| 424 SetUpUrlFetcherFactory(); | 424 SetUpUrlFetcherFactory(); |
| 425 CompleteCheckin(kDeviceAndroidId, | 425 ASSERT_NO_FATAL_FAILURE( |
| 426 kDeviceSecurityToken, | 426 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, std::string(), |
| 427 std::string(), | 427 std::map<std::string, std::string>())); |
| 428 std::map<std::string, std::string>()); | |
| 429 } | 428 } |
| 430 | 429 |
| 431 void GCMClientImplTest::SetUpUrlFetcherFactory() { | 430 void GCMClientImplTest::SetUpUrlFetcherFactory() { |
| 432 url_fetcher_factory_.set_remove_fetcher_on_delete(true); | 431 url_fetcher_factory_.set_remove_fetcher_on_delete(true); |
| 433 } | 432 } |
| 434 | 433 |
| 435 void GCMClientImplTest::PumpLoopUntilIdle() { | 434 void GCMClientImplTest::PumpLoopUntilIdle() { |
| 436 task_runner_->RunUntilIdle(); | 435 task_runner_->RunUntilIdle(); |
| 437 } | 436 } |
| 438 | 437 |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 651 base::FilePath store_file_path = | 650 base::FilePath store_file_path = |
| 652 gcm_store_path().Append(FILE_PATH_LITERAL("CURRENT")); | 651 gcm_store_path().Append(FILE_PATH_LITERAL("CURRENT")); |
| 653 ASSERT_TRUE(base::AppendToFile(store_file_path, "A", 1)); | 652 ASSERT_TRUE(base::AppendToFile(store_file_path, "A", 1)); |
| 654 | 653 |
| 655 // Restart GCM client. The store should be reset and the loading should | 654 // Restart GCM client. The store should be reset and the loading should |
| 656 // complete successfully. | 655 // complete successfully. |
| 657 reset_last_event(); | 656 reset_last_event(); |
| 658 BuildGCMClient(base::TimeDelta()); | 657 BuildGCMClient(base::TimeDelta()); |
| 659 InitializeGCMClient(); | 658 InitializeGCMClient(); |
| 660 StartGCMClient(); | 659 StartGCMClient(); |
| 661 CompleteCheckin(kDeviceAndroidId2, | 660 ASSERT_NO_FATAL_FAILURE( |
| 662 kDeviceSecurityToken2, | 661 CompleteCheckin(kDeviceAndroidId2, kDeviceSecurityToken2, std::string(), |
| 663 std::string(), | 662 std::map<std::string, std::string>())); |
| 664 std::map<std::string, std::string>()); | |
| 665 | 663 |
| 666 EXPECT_EQ(LOADING_COMPLETED, last_event()); | 664 EXPECT_EQ(LOADING_COMPLETED, last_event()); |
| 667 EXPECT_EQ(kDeviceAndroidId2, mcs_client()->last_android_id()); | 665 EXPECT_EQ(kDeviceAndroidId2, mcs_client()->last_android_id()); |
| 668 EXPECT_EQ(kDeviceSecurityToken2, mcs_client()->last_security_token()); | 666 EXPECT_EQ(kDeviceSecurityToken2, mcs_client()->last_security_token()); |
| 669 } | 667 } |
| 670 | 668 |
| 671 TEST_F(GCMClientImplTest, DestroyStoreWhenNotNeeded) { | 669 TEST_F(GCMClientImplTest, DestroyStoreWhenNotNeeded) { |
| 672 // Close the GCM store. | 670 // Close the GCM store. |
| 673 gcm_client()->Stop(); | 671 gcm_client()->Stop(); |
| 674 PumpLoopUntilIdle(); | 672 PumpLoopUntilIdle(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 692 EXPECT_FALSE(device_checkin_info().android_id); | 690 EXPECT_FALSE(device_checkin_info().android_id); |
| 693 EXPECT_FALSE(device_checkin_info().secret); | 691 EXPECT_FALSE(device_checkin_info().secret); |
| 694 } | 692 } |
| 695 | 693 |
| 696 TEST_F(GCMClientImplTest, RegisterApp) { | 694 TEST_F(GCMClientImplTest, RegisterApp) { |
| 697 EXPECT_FALSE(ExistsRegistration(kAppId)); | 695 EXPECT_FALSE(ExistsRegistration(kAppId)); |
| 698 | 696 |
| 699 std::vector<std::string> senders; | 697 std::vector<std::string> senders; |
| 700 senders.push_back("sender"); | 698 senders.push_back("sender"); |
| 701 Register(kAppId, senders); | 699 Register(kAppId, senders); |
| 702 CompleteRegistration("reg_id"); | 700 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); |
| 703 | 701 |
| 704 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 702 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 705 EXPECT_EQ(kAppId, last_app_id()); | 703 EXPECT_EQ(kAppId, last_app_id()); |
| 706 EXPECT_EQ("reg_id", last_registration_id()); | 704 EXPECT_EQ("reg_id", last_registration_id()); |
| 707 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 705 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 708 EXPECT_TRUE(ExistsRegistration(kAppId)); | 706 EXPECT_TRUE(ExistsRegistration(kAppId)); |
| 709 } | 707 } |
| 710 | 708 |
| 711 TEST_F(GCMClientImplTest, DISABLED_RegisterAppFromCache) { | 709 TEST_F(GCMClientImplTest, DISABLED_RegisterAppFromCache) { |
| 712 EXPECT_FALSE(ExistsRegistration(kAppId)); | 710 EXPECT_FALSE(ExistsRegistration(kAppId)); |
| 713 | 711 |
| 714 std::vector<std::string> senders; | 712 std::vector<std::string> senders; |
| 715 senders.push_back("sender"); | 713 senders.push_back("sender"); |
| 716 Register(kAppId, senders); | 714 Register(kAppId, senders); |
| 717 CompleteRegistration("reg_id"); | 715 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); |
| 718 EXPECT_TRUE(ExistsRegistration(kAppId)); | 716 EXPECT_TRUE(ExistsRegistration(kAppId)); |
| 719 | 717 |
| 720 EXPECT_EQ(kAppId, last_app_id()); | 718 EXPECT_EQ(kAppId, last_app_id()); |
| 721 EXPECT_EQ("reg_id", last_registration_id()); | 719 EXPECT_EQ("reg_id", last_registration_id()); |
| 722 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 720 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 723 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 721 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 724 | 722 |
| 725 // Recreate GCMClient in order to load from the persistent store. | 723 // Recreate GCMClient in order to load from the persistent store. |
| 726 BuildGCMClient(base::TimeDelta()); | 724 BuildGCMClient(base::TimeDelta()); |
| 727 InitializeGCMClient(); | 725 InitializeGCMClient(); |
| 728 StartGCMClient(); | 726 StartGCMClient(); |
| 729 | 727 |
| 730 EXPECT_TRUE(ExistsRegistration(kAppId)); | 728 EXPECT_TRUE(ExistsRegistration(kAppId)); |
| 731 } | 729 } |
| 732 | 730 |
| 733 TEST_F(GCMClientImplTest, RegisterPreviousSenderAgain) { | 731 TEST_F(GCMClientImplTest, RegisterPreviousSenderAgain) { |
| 734 EXPECT_FALSE(ExistsRegistration(kAppId)); | 732 EXPECT_FALSE(ExistsRegistration(kAppId)); |
| 735 | 733 |
| 736 // Register a sender. | 734 // Register a sender. |
| 737 std::vector<std::string> senders; | 735 std::vector<std::string> senders; |
| 738 senders.push_back("sender"); | 736 senders.push_back("sender"); |
| 739 Register(kAppId, senders); | 737 Register(kAppId, senders); |
| 740 CompleteRegistration("reg_id"); | 738 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); |
| 741 | 739 |
| 742 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 740 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 743 EXPECT_EQ(kAppId, last_app_id()); | 741 EXPECT_EQ(kAppId, last_app_id()); |
| 744 EXPECT_EQ("reg_id", last_registration_id()); | 742 EXPECT_EQ("reg_id", last_registration_id()); |
| 745 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 743 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 746 EXPECT_TRUE(ExistsRegistration(kAppId)); | 744 EXPECT_TRUE(ExistsRegistration(kAppId)); |
| 747 | 745 |
| 748 reset_last_event(); | 746 reset_last_event(); |
| 749 | 747 |
| 750 // Register a different sender. Different registration ID from previous one | 748 // Register a different sender. Different registration ID from previous one |
| 751 // should be returned. | 749 // should be returned. |
| 752 std::vector<std::string> senders2; | 750 std::vector<std::string> senders2; |
| 753 senders2.push_back("sender2"); | 751 senders2.push_back("sender2"); |
| 754 Register(kAppId, senders2); | 752 Register(kAppId, senders2); |
| 755 CompleteRegistration("reg_id2"); | 753 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id2")); |
| 756 | 754 |
| 757 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 755 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 758 EXPECT_EQ(kAppId, last_app_id()); | 756 EXPECT_EQ(kAppId, last_app_id()); |
| 759 EXPECT_EQ("reg_id2", last_registration_id()); | 757 EXPECT_EQ("reg_id2", last_registration_id()); |
| 760 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 758 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 761 EXPECT_TRUE(ExistsRegistration(kAppId)); | 759 EXPECT_TRUE(ExistsRegistration(kAppId)); |
| 762 | 760 |
| 763 reset_last_event(); | 761 reset_last_event(); |
| 764 | 762 |
| 765 // Register the 1st sender again. Different registration ID from previous one | 763 // Register the 1st sender again. Different registration ID from previous one |
| 766 // should be returned. | 764 // should be returned. |
| 767 std::vector<std::string> senders3; | 765 std::vector<std::string> senders3; |
| 768 senders3.push_back("sender"); | 766 senders3.push_back("sender"); |
| 769 Register(kAppId, senders3); | 767 Register(kAppId, senders3); |
| 770 CompleteRegistration("reg_id"); | 768 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); |
| 771 | 769 |
| 772 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 770 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 773 EXPECT_EQ(kAppId, last_app_id()); | 771 EXPECT_EQ(kAppId, last_app_id()); |
| 774 EXPECT_EQ("reg_id", last_registration_id()); | 772 EXPECT_EQ("reg_id", last_registration_id()); |
| 775 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 773 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 776 EXPECT_TRUE(ExistsRegistration(kAppId)); | 774 EXPECT_TRUE(ExistsRegistration(kAppId)); |
| 777 } | 775 } |
| 778 | 776 |
| 779 TEST_F(GCMClientImplTest, UnregisterApp) { | 777 TEST_F(GCMClientImplTest, UnregisterApp) { |
| 780 EXPECT_FALSE(ExistsRegistration(kAppId)); | 778 EXPECT_FALSE(ExistsRegistration(kAppId)); |
| 781 | 779 |
| 782 std::vector<std::string> senders; | 780 std::vector<std::string> senders; |
| 783 senders.push_back("sender"); | 781 senders.push_back("sender"); |
| 784 Register(kAppId, senders); | 782 Register(kAppId, senders); |
| 785 CompleteRegistration("reg_id"); | 783 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); |
| 786 EXPECT_TRUE(ExistsRegistration(kAppId)); | 784 EXPECT_TRUE(ExistsRegistration(kAppId)); |
| 787 | 785 |
| 788 Unregister(kAppId); | 786 Unregister(kAppId); |
| 789 CompleteUnregistration(kAppId); | 787 ASSERT_NO_FATAL_FAILURE(CompleteUnregistration(kAppId)); |
| 790 | 788 |
| 791 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); | 789 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); |
| 792 EXPECT_EQ(kAppId, last_app_id()); | 790 EXPECT_EQ(kAppId, last_app_id()); |
| 793 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 791 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 794 EXPECT_FALSE(ExistsRegistration(kAppId)); | 792 EXPECT_FALSE(ExistsRegistration(kAppId)); |
| 795 } | 793 } |
| 796 | 794 |
| 797 // Tests that stopping the GCMClient also deletes pending registration requests. | 795 // Tests that stopping the GCMClient also deletes pending registration requests. |
| 798 // This is tested by checking that url fetcher contained in the request was | 796 // This is tested by checking that url fetcher contained in the request was |
| 799 // deleted. | 797 // deleted. |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 960 StartGCMClient(); | 958 StartGCMClient(); |
| 961 } | 959 } |
| 962 | 960 |
| 963 TEST_F(GCMClientImplCheckinTest, GServicesSettingsAfterInitialCheckin) { | 961 TEST_F(GCMClientImplCheckinTest, GServicesSettingsAfterInitialCheckin) { |
| 964 std::map<std::string, std::string> settings; | 962 std::map<std::string, std::string> settings; |
| 965 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); | 963 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); |
| 966 settings["checkin_url"] = "http://alternative.url/checkin"; | 964 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 967 settings["gcm_hostname"] = "alternative.gcm.host"; | 965 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 968 settings["gcm_secure_port"] = "7777"; | 966 settings["gcm_secure_port"] = "7777"; |
| 969 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 967 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 970 CompleteCheckin(kDeviceAndroidId, | 968 ASSERT_NO_FATAL_FAILURE( |
| 971 kDeviceSecurityToken, | 969 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 972 GServicesSettings::CalculateDigest(settings), | 970 GServicesSettings::CalculateDigest(settings), settings)); |
| 973 settings); | |
| 974 EXPECT_EQ(base::TimeDelta::FromSeconds(kSettingsCheckinInterval), | 971 EXPECT_EQ(base::TimeDelta::FromSeconds(kSettingsCheckinInterval), |
| 975 gservices_settings().GetCheckinInterval()); | 972 gservices_settings().GetCheckinInterval()); |
| 976 EXPECT_EQ(GURL("http://alternative.url/checkin"), | 973 EXPECT_EQ(GURL("http://alternative.url/checkin"), |
| 977 gservices_settings().GetCheckinURL()); | 974 gservices_settings().GetCheckinURL()); |
| 978 EXPECT_EQ(GURL("http://alternative.url/registration"), | 975 EXPECT_EQ(GURL("http://alternative.url/registration"), |
| 979 gservices_settings().GetRegistrationURL()); | 976 gservices_settings().GetRegistrationURL()); |
| 980 EXPECT_EQ(GURL("https://alternative.gcm.host:7777"), | 977 EXPECT_EQ(GURL("https://alternative.gcm.host:7777"), |
| 981 gservices_settings().GetMCSMainEndpoint()); | 978 gservices_settings().GetMCSMainEndpoint()); |
| 982 EXPECT_EQ(GURL("https://alternative.gcm.host:443"), | 979 EXPECT_EQ(GURL("https://alternative.gcm.host:443"), |
| 983 gservices_settings().GetMCSFallbackEndpoint()); | 980 gservices_settings().GetMCSFallbackEndpoint()); |
| 984 } | 981 } |
| 985 | 982 |
| 986 // This test only checks that periodic checkin happens. | 983 // This test only checks that periodic checkin happens. |
| 987 TEST_F(GCMClientImplCheckinTest, PeriodicCheckin) { | 984 TEST_F(GCMClientImplCheckinTest, PeriodicCheckin) { |
| 988 std::map<std::string, std::string> settings; | 985 std::map<std::string, std::string> settings; |
| 989 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); | 986 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); |
| 990 settings["checkin_url"] = "http://alternative.url/checkin"; | 987 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 991 settings["gcm_hostname"] = "alternative.gcm.host"; | 988 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 992 settings["gcm_secure_port"] = "7777"; | 989 settings["gcm_secure_port"] = "7777"; |
| 993 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 990 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 994 CompleteCheckin(kDeviceAndroidId, | 991 ASSERT_NO_FATAL_FAILURE( |
| 995 kDeviceSecurityToken, | 992 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 996 GServicesSettings::CalculateDigest(settings), | 993 GServicesSettings::CalculateDigest(settings), settings)); |
| 997 settings); | |
| 998 | 994 |
| 999 EXPECT_EQ(2, clock()->call_count()); | 995 EXPECT_EQ(2, clock()->call_count()); |
| 1000 | 996 |
| 1001 PumpLoopUntilIdle(); | 997 PumpLoopUntilIdle(); |
| 1002 CompleteCheckin(kDeviceAndroidId, | 998 ASSERT_NO_FATAL_FAILURE( |
| 1003 kDeviceSecurityToken, | 999 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1004 GServicesSettings::CalculateDigest(settings), | 1000 GServicesSettings::CalculateDigest(settings), settings)); |
| 1005 settings); | |
| 1006 } | 1001 } |
| 1007 | 1002 |
| 1008 TEST_F(GCMClientImplCheckinTest, LoadGSettingsFromStore) { | 1003 TEST_F(GCMClientImplCheckinTest, LoadGSettingsFromStore) { |
| 1009 std::map<std::string, std::string> settings; | 1004 std::map<std::string, std::string> settings; |
| 1010 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); | 1005 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); |
| 1011 settings["checkin_url"] = "http://alternative.url/checkin"; | 1006 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 1012 settings["gcm_hostname"] = "alternative.gcm.host"; | 1007 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 1013 settings["gcm_secure_port"] = "7777"; | 1008 settings["gcm_secure_port"] = "7777"; |
| 1014 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 1009 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 1015 CompleteCheckin(kDeviceAndroidId, | 1010 ASSERT_NO_FATAL_FAILURE( |
| 1016 kDeviceSecurityToken, | 1011 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1017 GServicesSettings::CalculateDigest(settings), | 1012 GServicesSettings::CalculateDigest(settings), settings)); |
| 1018 settings); | |
| 1019 | 1013 |
| 1020 BuildGCMClient(base::TimeDelta()); | 1014 BuildGCMClient(base::TimeDelta()); |
| 1021 InitializeGCMClient(); | 1015 InitializeGCMClient(); |
| 1022 StartGCMClient(); | 1016 StartGCMClient(); |
| 1023 | 1017 |
| 1024 EXPECT_EQ(base::TimeDelta::FromSeconds(kSettingsCheckinInterval), | 1018 EXPECT_EQ(base::TimeDelta::FromSeconds(kSettingsCheckinInterval), |
| 1025 gservices_settings().GetCheckinInterval()); | 1019 gservices_settings().GetCheckinInterval()); |
| 1026 EXPECT_EQ(GURL("http://alternative.url/checkin"), | 1020 EXPECT_EQ(GURL("http://alternative.url/checkin"), |
| 1027 gservices_settings().GetCheckinURL()); | 1021 gservices_settings().GetCheckinURL()); |
| 1028 EXPECT_EQ(GURL("http://alternative.url/registration"), | 1022 EXPECT_EQ(GURL("http://alternative.url/registration"), |
| 1029 gservices_settings().GetRegistrationURL()); | 1023 gservices_settings().GetRegistrationURL()); |
| 1030 EXPECT_EQ(GURL("https://alternative.gcm.host:7777"), | 1024 EXPECT_EQ(GURL("https://alternative.gcm.host:7777"), |
| 1031 gservices_settings().GetMCSMainEndpoint()); | 1025 gservices_settings().GetMCSMainEndpoint()); |
| 1032 EXPECT_EQ(GURL("https://alternative.gcm.host:443"), | 1026 EXPECT_EQ(GURL("https://alternative.gcm.host:443"), |
| 1033 gservices_settings().GetMCSFallbackEndpoint()); | 1027 gservices_settings().GetMCSFallbackEndpoint()); |
| 1034 } | 1028 } |
| 1035 | 1029 |
| 1036 // This test only checks that periodic checkin happens. | 1030 // This test only checks that periodic checkin happens. |
| 1037 TEST_F(GCMClientImplCheckinTest, CheckinWithAccounts) { | 1031 TEST_F(GCMClientImplCheckinTest, CheckinWithAccounts) { |
| 1038 std::map<std::string, std::string> settings; | 1032 std::map<std::string, std::string> settings; |
| 1039 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); | 1033 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); |
| 1040 settings["checkin_url"] = "http://alternative.url/checkin"; | 1034 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 1041 settings["gcm_hostname"] = "alternative.gcm.host"; | 1035 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 1042 settings["gcm_secure_port"] = "7777"; | 1036 settings["gcm_secure_port"] = "7777"; |
| 1043 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 1037 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 1044 CompleteCheckin(kDeviceAndroidId, | 1038 ASSERT_NO_FATAL_FAILURE( |
| 1045 kDeviceSecurityToken, | 1039 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1046 GServicesSettings::CalculateDigest(settings), | 1040 GServicesSettings::CalculateDigest(settings), settings)); |
| 1047 settings); | |
| 1048 | 1041 |
| 1049 std::vector<GCMClient::AccountTokenInfo> account_tokens; | 1042 std::vector<GCMClient::AccountTokenInfo> account_tokens; |
| 1050 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); | 1043 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); |
| 1051 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); | 1044 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); |
| 1052 gcm_client()->SetAccountTokens(account_tokens); | 1045 gcm_client()->SetAccountTokens(account_tokens); |
| 1053 | 1046 |
| 1054 EXPECT_TRUE(device_checkin_info().last_checkin_accounts.empty()); | 1047 EXPECT_TRUE(device_checkin_info().last_checkin_accounts.empty()); |
| 1055 EXPECT_TRUE(device_checkin_info().accounts_set); | 1048 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 1056 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), | 1049 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 1057 device_checkin_info().account_tokens); | 1050 device_checkin_info().account_tokens); |
| 1058 | 1051 |
| 1059 PumpLoopUntilIdle(); | 1052 PumpLoopUntilIdle(); |
| 1060 CompleteCheckin(kDeviceAndroidId, | 1053 ASSERT_NO_FATAL_FAILURE( |
| 1061 kDeviceSecurityToken, | 1054 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1062 GServicesSettings::CalculateDigest(settings), | 1055 GServicesSettings::CalculateDigest(settings), settings)); |
| 1063 settings); | |
| 1064 | 1056 |
| 1065 std::set<std::string> accounts; | 1057 std::set<std::string> accounts; |
| 1066 accounts.insert("test_user1@gmail.com"); | 1058 accounts.insert("test_user1@gmail.com"); |
| 1067 accounts.insert("test_user2@gmail.com"); | 1059 accounts.insert("test_user2@gmail.com"); |
| 1068 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 1060 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 1069 EXPECT_TRUE(device_checkin_info().accounts_set); | 1061 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 1070 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), | 1062 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 1071 device_checkin_info().account_tokens); | 1063 device_checkin_info().account_tokens); |
| 1072 } | 1064 } |
| 1073 | 1065 |
| 1074 // This test only checks that periodic checkin happens. | 1066 // This test only checks that periodic checkin happens. |
| 1075 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountRemoved) { | 1067 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountRemoved) { |
| 1076 std::map<std::string, std::string> settings; | 1068 std::map<std::string, std::string> settings; |
| 1077 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); | 1069 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); |
| 1078 settings["checkin_url"] = "http://alternative.url/checkin"; | 1070 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 1079 settings["gcm_hostname"] = "alternative.gcm.host"; | 1071 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 1080 settings["gcm_secure_port"] = "7777"; | 1072 settings["gcm_secure_port"] = "7777"; |
| 1081 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 1073 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 1082 CompleteCheckin(kDeviceAndroidId, | 1074 ASSERT_NO_FATAL_FAILURE( |
| 1083 kDeviceSecurityToken, | 1075 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1084 GServicesSettings::CalculateDigest(settings), | 1076 GServicesSettings::CalculateDigest(settings), settings)); |
| 1085 settings); | |
| 1086 | 1077 |
| 1087 std::vector<GCMClient::AccountTokenInfo> account_tokens; | 1078 std::vector<GCMClient::AccountTokenInfo> account_tokens; |
| 1088 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); | 1079 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); |
| 1089 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); | 1080 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); |
| 1090 gcm_client()->SetAccountTokens(account_tokens); | 1081 gcm_client()->SetAccountTokens(account_tokens); |
| 1091 PumpLoopUntilIdle(); | 1082 PumpLoopUntilIdle(); |
| 1092 CompleteCheckin(kDeviceAndroidId, | 1083 ASSERT_NO_FATAL_FAILURE( |
| 1093 kDeviceSecurityToken, | 1084 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1094 GServicesSettings::CalculateDigest(settings), | 1085 GServicesSettings::CalculateDigest(settings), settings)); |
| 1095 settings); | |
| 1096 | 1086 |
| 1097 EXPECT_EQ(2UL, device_checkin_info().last_checkin_accounts.size()); | 1087 EXPECT_EQ(2UL, device_checkin_info().last_checkin_accounts.size()); |
| 1098 EXPECT_TRUE(device_checkin_info().accounts_set); | 1088 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 1099 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), | 1089 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 1100 device_checkin_info().account_tokens); | 1090 device_checkin_info().account_tokens); |
| 1101 | 1091 |
| 1102 account_tokens.erase(account_tokens.begin() + 1); | 1092 account_tokens.erase(account_tokens.begin() + 1); |
| 1103 gcm_client()->SetAccountTokens(account_tokens); | 1093 gcm_client()->SetAccountTokens(account_tokens); |
| 1104 | 1094 |
| 1105 PumpLoopUntilIdle(); | 1095 PumpLoopUntilIdle(); |
| 1106 CompleteCheckin(kDeviceAndroidId, | 1096 ASSERT_NO_FATAL_FAILURE( |
| 1107 kDeviceSecurityToken, | 1097 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1108 GServicesSettings::CalculateDigest(settings), | 1098 GServicesSettings::CalculateDigest(settings), settings)); |
| 1109 settings); | |
| 1110 | 1099 |
| 1111 std::set<std::string> accounts; | 1100 std::set<std::string> accounts; |
| 1112 accounts.insert("test_user1@gmail.com"); | 1101 accounts.insert("test_user1@gmail.com"); |
| 1113 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 1102 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 1114 EXPECT_TRUE(device_checkin_info().accounts_set); | 1103 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 1115 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), | 1104 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 1116 device_checkin_info().account_tokens); | 1105 device_checkin_info().account_tokens); |
| 1117 } | 1106 } |
| 1118 | 1107 |
| 1119 // This test only checks that periodic checkin happens. | 1108 // This test only checks that periodic checkin happens. |
| 1120 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountReplaced) { | 1109 TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountReplaced) { |
| 1121 std::map<std::string, std::string> settings; | 1110 std::map<std::string, std::string> settings; |
| 1122 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); | 1111 settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval); |
| 1123 settings["checkin_url"] = "http://alternative.url/checkin"; | 1112 settings["checkin_url"] = "http://alternative.url/checkin"; |
| 1124 settings["gcm_hostname"] = "alternative.gcm.host"; | 1113 settings["gcm_hostname"] = "alternative.gcm.host"; |
| 1125 settings["gcm_secure_port"] = "7777"; | 1114 settings["gcm_secure_port"] = "7777"; |
| 1126 settings["gcm_registration_url"] = "http://alternative.url/registration"; | 1115 settings["gcm_registration_url"] = "http://alternative.url/registration"; |
| 1127 CompleteCheckin(kDeviceAndroidId, | 1116 ASSERT_NO_FATAL_FAILURE( |
| 1128 kDeviceSecurityToken, | 1117 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1129 GServicesSettings::CalculateDigest(settings), | 1118 GServicesSettings::CalculateDigest(settings), settings)); |
| 1130 settings); | |
| 1131 | 1119 |
| 1132 std::vector<GCMClient::AccountTokenInfo> account_tokens; | 1120 std::vector<GCMClient::AccountTokenInfo> account_tokens; |
| 1133 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); | 1121 account_tokens.push_back(MakeAccountToken("test_user1@gmail.com", "token1")); |
| 1134 gcm_client()->SetAccountTokens(account_tokens); | 1122 gcm_client()->SetAccountTokens(account_tokens); |
| 1135 | 1123 |
| 1136 PumpLoopUntilIdle(); | 1124 PumpLoopUntilIdle(); |
| 1137 CompleteCheckin(kDeviceAndroidId, | 1125 ASSERT_NO_FATAL_FAILURE( |
| 1138 kDeviceSecurityToken, | 1126 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1139 GServicesSettings::CalculateDigest(settings), | 1127 GServicesSettings::CalculateDigest(settings), settings)); |
| 1140 settings); | |
| 1141 | 1128 |
| 1142 std::set<std::string> accounts; | 1129 std::set<std::string> accounts; |
| 1143 accounts.insert("test_user1@gmail.com"); | 1130 accounts.insert("test_user1@gmail.com"); |
| 1144 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 1131 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 1145 | 1132 |
| 1146 // This should trigger another checkin, because the list of accounts is | 1133 // This should trigger another checkin, because the list of accounts is |
| 1147 // different. | 1134 // different. |
| 1148 account_tokens.clear(); | 1135 account_tokens.clear(); |
| 1149 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); | 1136 account_tokens.push_back(MakeAccountToken("test_user2@gmail.com", "token2")); |
| 1150 gcm_client()->SetAccountTokens(account_tokens); | 1137 gcm_client()->SetAccountTokens(account_tokens); |
| 1151 | 1138 |
| 1152 PumpLoopUntilIdle(); | 1139 PumpLoopUntilIdle(); |
| 1153 CompleteCheckin(kDeviceAndroidId, | 1140 ASSERT_NO_FATAL_FAILURE( |
| 1154 kDeviceSecurityToken, | 1141 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, |
| 1155 GServicesSettings::CalculateDigest(settings), | 1142 GServicesSettings::CalculateDigest(settings), settings)); |
| 1156 settings); | |
| 1157 | 1143 |
| 1158 accounts.clear(); | 1144 accounts.clear(); |
| 1159 accounts.insert("test_user2@gmail.com"); | 1145 accounts.insert("test_user2@gmail.com"); |
| 1160 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); | 1146 EXPECT_EQ(accounts, device_checkin_info().last_checkin_accounts); |
| 1161 EXPECT_TRUE(device_checkin_info().accounts_set); | 1147 EXPECT_TRUE(device_checkin_info().accounts_set); |
| 1162 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), | 1148 EXPECT_EQ(MakeEmailToTokenMap(account_tokens), |
| 1163 device_checkin_info().account_tokens); | 1149 device_checkin_info().account_tokens); |
| 1164 } | 1150 } |
| 1165 | 1151 |
| 1166 class GCMClientImplStartAndStopTest : public GCMClientImplTest { | 1152 class GCMClientImplStartAndStopTest : public GCMClientImplTest { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1181 | 1167 |
| 1182 void GCMClientImplStartAndStopTest::SetUp() { | 1168 void GCMClientImplStartAndStopTest::SetUp() { |
| 1183 testing::Test::SetUp(); | 1169 testing::Test::SetUp(); |
| 1184 ASSERT_TRUE(CreateUniqueTempDir()); | 1170 ASSERT_TRUE(CreateUniqueTempDir()); |
| 1185 BuildGCMClient(base::TimeDelta()); | 1171 BuildGCMClient(base::TimeDelta()); |
| 1186 InitializeGCMClient(); | 1172 InitializeGCMClient(); |
| 1187 } | 1173 } |
| 1188 | 1174 |
| 1189 void GCMClientImplStartAndStopTest::DefaultCompleteCheckin() { | 1175 void GCMClientImplStartAndStopTest::DefaultCompleteCheckin() { |
| 1190 SetUpUrlFetcherFactory(); | 1176 SetUpUrlFetcherFactory(); |
| 1191 CompleteCheckin(kDeviceAndroidId, | 1177 ASSERT_NO_FATAL_FAILURE( |
| 1192 kDeviceSecurityToken, | 1178 CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken, std::string(), |
| 1193 std::string(), | 1179 std::map<std::string, std::string>())); |
| 1194 std::map<std::string, std::string>()); | |
| 1195 PumpLoopUntilIdle(); | 1180 PumpLoopUntilIdle(); |
| 1196 } | 1181 } |
| 1197 | 1182 |
| 1198 TEST_F(GCMClientImplStartAndStopTest, StartStopAndRestart) { | 1183 TEST_F(GCMClientImplStartAndStopTest, StartStopAndRestart) { |
| 1199 // GCMClientImpl should be in INITIALIZED state at first. | 1184 // GCMClientImpl should be in INITIALIZED state at first. |
| 1200 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1185 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1201 | 1186 |
| 1202 // Delay start the GCM. | 1187 // Delay start the GCM. |
| 1203 gcm_client()->Start(GCMClient::DELAYED_START); | 1188 gcm_client()->Start(GCMClient::DELAYED_START); |
| 1204 PumpLoopUntilIdle(); | 1189 PumpLoopUntilIdle(); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1262 } | 1247 } |
| 1263 | 1248 |
| 1264 TEST_F(GCMClientImplStartAndStopTest, ImmediateStartAndThenImmediateStart) { | 1249 TEST_F(GCMClientImplStartAndStopTest, ImmediateStartAndThenImmediateStart) { |
| 1265 // GCMClientImpl should be in INITIALIZED state at first. | 1250 // GCMClientImpl should be in INITIALIZED state at first. |
| 1266 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1251 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1267 | 1252 |
| 1268 // Start the GCM immediately and complete the checkin. | 1253 // Start the GCM immediately and complete the checkin. |
| 1269 gcm_client()->Start(GCMClient::IMMEDIATE_START); | 1254 gcm_client()->Start(GCMClient::IMMEDIATE_START); |
| 1270 PumpLoopUntilIdle(); | 1255 PumpLoopUntilIdle(); |
| 1271 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); | 1256 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); |
| 1272 DefaultCompleteCheckin(); | 1257 ASSERT_NO_FATAL_FAILURE(DefaultCompleteCheckin()); |
| 1273 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); | 1258 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); |
| 1274 | 1259 |
| 1275 // Stop the GCM. | 1260 // Stop the GCM. |
| 1276 gcm_client()->Stop(); | 1261 gcm_client()->Stop(); |
| 1277 PumpLoopUntilIdle(); | 1262 PumpLoopUntilIdle(); |
| 1278 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1263 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1279 | 1264 |
| 1280 // Start the GCM immediately. GCMClientImpl should be in READY state. | 1265 // Start the GCM immediately. GCMClientImpl should be in READY state. |
| 1281 BuildGCMClient(base::TimeDelta()); | 1266 BuildGCMClient(base::TimeDelta()); |
| 1282 InitializeGCMClient(); | 1267 InitializeGCMClient(); |
| 1283 gcm_client()->Start(GCMClient::IMMEDIATE_START); | 1268 gcm_client()->Start(GCMClient::IMMEDIATE_START); |
| 1284 PumpLoopUntilIdle(); | 1269 PumpLoopUntilIdle(); |
| 1285 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); | 1270 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); |
| 1286 } | 1271 } |
| 1287 | 1272 |
| 1288 TEST_F(GCMClientImplStartAndStopTest, ImmediateStartAndThenDelayStart) { | 1273 TEST_F(GCMClientImplStartAndStopTest, ImmediateStartAndThenDelayStart) { |
| 1289 // GCMClientImpl should be in INITIALIZED state at first. | 1274 // GCMClientImpl should be in INITIALIZED state at first. |
| 1290 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1275 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1291 | 1276 |
| 1292 // Start the GCM immediately and complete the checkin. | 1277 // Start the GCM immediately and complete the checkin. |
| 1293 gcm_client()->Start(GCMClient::IMMEDIATE_START); | 1278 gcm_client()->Start(GCMClient::IMMEDIATE_START); |
| 1294 PumpLoopUntilIdle(); | 1279 PumpLoopUntilIdle(); |
| 1295 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); | 1280 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); |
| 1296 DefaultCompleteCheckin(); | 1281 ASSERT_NO_FATAL_FAILURE(DefaultCompleteCheckin()); |
| 1297 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); | 1282 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); |
| 1298 | 1283 |
| 1299 // Stop the GCM. | 1284 // Stop the GCM. |
| 1300 gcm_client()->Stop(); | 1285 gcm_client()->Stop(); |
| 1301 PumpLoopUntilIdle(); | 1286 PumpLoopUntilIdle(); |
| 1302 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1287 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1303 | 1288 |
| 1304 // Delay start the GCM. GCMClientImpl should be in LOADED state. | 1289 // Delay start the GCM. GCMClientImpl should be in LOADED state. |
| 1305 BuildGCMClient(base::TimeDelta()); | 1290 BuildGCMClient(base::TimeDelta()); |
| 1306 InitializeGCMClient(); | 1291 InitializeGCMClient(); |
| 1307 gcm_client()->Start(GCMClient::DELAYED_START); | 1292 gcm_client()->Start(GCMClient::DELAYED_START); |
| 1308 PumpLoopUntilIdle(); | 1293 PumpLoopUntilIdle(); |
| 1309 EXPECT_EQ(GCMClientImpl::LOADED, gcm_client_state()); | 1294 EXPECT_EQ(GCMClientImpl::LOADED, gcm_client_state()); |
| 1310 } | 1295 } |
| 1311 | 1296 |
| 1312 TEST_F(GCMClientImplStartAndStopTest, DelayedStartRace) { | 1297 TEST_F(GCMClientImplStartAndStopTest, DelayedStartRace) { |
| 1313 // GCMClientImpl should be in INITIALIZED state at first. | 1298 // GCMClientImpl should be in INITIALIZED state at first. |
| 1314 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1299 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1315 | 1300 |
| 1316 // Delay start the GCM, then start it immediately while it's still loading. | 1301 // Delay start the GCM, then start it immediately while it's still loading. |
| 1317 gcm_client()->Start(GCMClient::DELAYED_START); | 1302 gcm_client()->Start(GCMClient::DELAYED_START); |
| 1318 gcm_client()->Start(GCMClient::IMMEDIATE_START); | 1303 gcm_client()->Start(GCMClient::IMMEDIATE_START); |
| 1319 PumpLoopUntilIdle(); | 1304 PumpLoopUntilIdle(); |
| 1320 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); | 1305 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); |
| 1321 DefaultCompleteCheckin(); | 1306 ASSERT_NO_FATAL_FAILURE(DefaultCompleteCheckin()); |
| 1322 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); | 1307 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); |
| 1323 } | 1308 } |
| 1324 | 1309 |
| 1325 TEST_F(GCMClientImplStartAndStopTest, DelayedStart) { | 1310 TEST_F(GCMClientImplStartAndStopTest, DelayedStart) { |
| 1326 // GCMClientImpl should be in INITIALIZED state at first. | 1311 // GCMClientImpl should be in INITIALIZED state at first. |
| 1327 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1312 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1328 | 1313 |
| 1329 // Delay start the GCM. The store will not be loaded and GCMClientImpl should | 1314 // Delay start the GCM. The store will not be loaded and GCMClientImpl should |
| 1330 // still be in INITIALIZED state. | 1315 // still be in INITIALIZED state. |
| 1331 gcm_client()->Start(GCMClient::DELAYED_START); | 1316 gcm_client()->Start(GCMClient::DELAYED_START); |
| 1332 PumpLoopUntilIdle(); | 1317 PumpLoopUntilIdle(); |
| 1333 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1318 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1334 | 1319 |
| 1335 // Start the GCM immediately and complete the checkin. | 1320 // Start the GCM immediately and complete the checkin. |
| 1336 gcm_client()->Start(GCMClient::IMMEDIATE_START); | 1321 gcm_client()->Start(GCMClient::IMMEDIATE_START); |
| 1337 PumpLoopUntilIdle(); | 1322 PumpLoopUntilIdle(); |
| 1338 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); | 1323 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); |
| 1339 DefaultCompleteCheckin(); | 1324 ASSERT_NO_FATAL_FAILURE(DefaultCompleteCheckin()); |
| 1340 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); | 1325 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); |
| 1341 | 1326 |
| 1342 // Registration. | 1327 // Registration. |
| 1343 std::vector<std::string> senders; | 1328 std::vector<std::string> senders; |
| 1344 senders.push_back("sender"); | 1329 senders.push_back("sender"); |
| 1345 Register(kAppId, senders); | 1330 Register(kAppId, senders); |
| 1346 CompleteRegistration("reg_id"); | 1331 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); |
| 1347 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); | 1332 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); |
| 1348 | 1333 |
| 1349 // Stop the GCM. | 1334 // Stop the GCM. |
| 1350 gcm_client()->Stop(); | 1335 gcm_client()->Stop(); |
| 1351 PumpLoopUntilIdle(); | 1336 PumpLoopUntilIdle(); |
| 1352 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); | 1337 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); |
| 1353 | 1338 |
| 1354 // Delay start the GCM. GCM is indeed started without delay because the | 1339 // Delay start the GCM. GCM is indeed started without delay because the |
| 1355 // registration record has been found. | 1340 // registration record has been found. |
| 1356 BuildGCMClient(base::TimeDelta()); | 1341 BuildGCMClient(base::TimeDelta()); |
| 1357 InitializeGCMClient(); | 1342 InitializeGCMClient(); |
| 1358 gcm_client()->Start(GCMClient::DELAYED_START); | 1343 gcm_client()->Start(GCMClient::DELAYED_START); |
| 1359 PumpLoopUntilIdle(); | 1344 PumpLoopUntilIdle(); |
| 1360 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); | 1345 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); |
| 1361 } | 1346 } |
| 1362 | 1347 |
| 1363 // Test for known account mappings and last token fetching time being passed | 1348 // Test for known account mappings and last token fetching time being passed |
| 1364 // to OnGCMReady. | 1349 // to OnGCMReady. |
| 1365 TEST_F(GCMClientImplStartAndStopTest, OnGCMReadyAccountsAndTokenFetchingTime) { | 1350 TEST_F(GCMClientImplStartAndStopTest, OnGCMReadyAccountsAndTokenFetchingTime) { |
| 1366 // Start the GCM and wait until it is ready. | 1351 // Start the GCM and wait until it is ready. |
| 1367 gcm_client()->Start(GCMClient::IMMEDIATE_START); | 1352 gcm_client()->Start(GCMClient::IMMEDIATE_START); |
| 1368 PumpLoopUntilIdle(); | 1353 PumpLoopUntilIdle(); |
| 1369 DefaultCompleteCheckin(); | 1354 ASSERT_NO_FATAL_FAILURE(DefaultCompleteCheckin()); |
| 1370 | 1355 |
| 1371 base::Time expected_time = base::Time::Now(); | 1356 base::Time expected_time = base::Time::Now(); |
| 1372 gcm_client()->SetLastTokenFetchTime(expected_time); | 1357 gcm_client()->SetLastTokenFetchTime(expected_time); |
| 1373 AccountMapping expected_mapping; | 1358 AccountMapping expected_mapping; |
| 1374 expected_mapping.account_id = "accId"; | 1359 expected_mapping.account_id = "accId"; |
| 1375 expected_mapping.email = "email@gmail.com"; | 1360 expected_mapping.email = "email@gmail.com"; |
| 1376 expected_mapping.status = AccountMapping::MAPPED; | 1361 expected_mapping.status = AccountMapping::MAPPED; |
| 1377 expected_mapping.status_change_timestamp = expected_time; | 1362 expected_mapping.status_change_timestamp = expected_time; |
| 1378 gcm_client()->UpdateAccountMapping(expected_mapping); | 1363 gcm_client()->UpdateAccountMapping(expected_mapping); |
| 1379 PumpLoopUntilIdle(); | 1364 PumpLoopUntilIdle(); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1479 return gcm_client()->registrations_.count( | 1464 return gcm_client()->registrations_.count( |
| 1480 make_linked_ptr<RegistrationInfo>(instance_id_info.release())) > 0; | 1465 make_linked_ptr<RegistrationInfo>(instance_id_info.release())) > 0; |
| 1481 } | 1466 } |
| 1482 | 1467 |
| 1483 TEST_F(GCMClientInstanceIDTest, GetToken) { | 1468 TEST_F(GCMClientInstanceIDTest, GetToken) { |
| 1484 AddInstanceID(kAppId, kInstanceID); | 1469 AddInstanceID(kAppId, kInstanceID); |
| 1485 | 1470 |
| 1486 // Get a token. | 1471 // Get a token. |
| 1487 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); | 1472 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); |
| 1488 GetToken(kAppId, kSender, kScope); | 1473 GetToken(kAppId, kSender, kScope); |
| 1489 CompleteRegistration("token1"); | 1474 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1")); |
| 1490 | 1475 |
| 1491 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 1476 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 1492 EXPECT_EQ(kAppId, last_app_id()); | 1477 EXPECT_EQ(kAppId, last_app_id()); |
| 1493 EXPECT_EQ("token1", last_registration_id()); | 1478 EXPECT_EQ("token1", last_registration_id()); |
| 1494 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1479 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1495 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); | 1480 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); |
| 1496 | 1481 |
| 1497 // Get another token. | 1482 // Get another token. |
| 1498 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); | 1483 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); |
| 1499 GetToken(kAppId, kSender2, kScope); | 1484 GetToken(kAppId, kSender2, kScope); |
| 1500 CompleteRegistration("token2"); | 1485 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2")); |
| 1501 | 1486 |
| 1502 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 1487 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 1503 EXPECT_EQ(kAppId, last_app_id()); | 1488 EXPECT_EQ(kAppId, last_app_id()); |
| 1504 EXPECT_EQ("token2", last_registration_id()); | 1489 EXPECT_EQ("token2", last_registration_id()); |
| 1505 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1490 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1506 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); | 1491 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); |
| 1507 // The 1st token still exists. | 1492 // The 1st token still exists. |
| 1508 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); | 1493 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); |
| 1509 } | 1494 } |
| 1510 | 1495 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1529 EXPECT_EQ(kAppId, last_app_id()); | 1514 EXPECT_EQ(kAppId, last_app_id()); |
| 1530 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result()); | 1515 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result()); |
| 1531 } | 1516 } |
| 1532 | 1517 |
| 1533 TEST_F(GCMClientInstanceIDTest, DeleteSingleToken) { | 1518 TEST_F(GCMClientInstanceIDTest, DeleteSingleToken) { |
| 1534 AddInstanceID(kAppId, kInstanceID); | 1519 AddInstanceID(kAppId, kInstanceID); |
| 1535 | 1520 |
| 1536 // Get a token. | 1521 // Get a token. |
| 1537 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); | 1522 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); |
| 1538 GetToken(kAppId, kSender, kScope); | 1523 GetToken(kAppId, kSender, kScope); |
| 1539 CompleteRegistration("token1"); | 1524 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1")); |
| 1540 | 1525 |
| 1541 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 1526 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 1542 EXPECT_EQ(kAppId, last_app_id()); | 1527 EXPECT_EQ(kAppId, last_app_id()); |
| 1543 EXPECT_EQ("token1", last_registration_id()); | 1528 EXPECT_EQ("token1", last_registration_id()); |
| 1544 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1529 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1545 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); | 1530 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); |
| 1546 | 1531 |
| 1547 reset_last_event(); | 1532 reset_last_event(); |
| 1548 | 1533 |
| 1549 // Get another token. | 1534 // Get another token. |
| 1550 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); | 1535 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); |
| 1551 GetToken(kAppId, kSender2, kScope); | 1536 GetToken(kAppId, kSender2, kScope); |
| 1552 CompleteRegistration("token2"); | 1537 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2")); |
| 1553 | 1538 |
| 1554 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 1539 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 1555 EXPECT_EQ(kAppId, last_app_id()); | 1540 EXPECT_EQ(kAppId, last_app_id()); |
| 1556 EXPECT_EQ("token2", last_registration_id()); | 1541 EXPECT_EQ("token2", last_registration_id()); |
| 1557 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1542 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1558 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); | 1543 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); |
| 1559 // The 1st token still exists. | 1544 // The 1st token still exists. |
| 1560 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); | 1545 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); |
| 1561 | 1546 |
| 1562 reset_last_event(); | 1547 reset_last_event(); |
| 1563 | 1548 |
| 1564 // Delete the 2nd token. | 1549 // Delete the 2nd token. |
| 1565 DeleteToken(kAppId, kSender2, kScope); | 1550 DeleteToken(kAppId, kSender2, kScope); |
| 1566 CompleteDeleteToken(); | 1551 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken()); |
| 1567 | 1552 |
| 1568 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); | 1553 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); |
| 1569 EXPECT_EQ(kAppId, last_app_id()); | 1554 EXPECT_EQ(kAppId, last_app_id()); |
| 1570 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1555 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1571 // The 2nd token is gone while the 1st token still exists. | 1556 // The 2nd token is gone while the 1st token still exists. |
| 1572 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); | 1557 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); |
| 1573 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); | 1558 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); |
| 1574 | 1559 |
| 1575 reset_last_event(); | 1560 reset_last_event(); |
| 1576 | 1561 |
| 1577 // Delete the 1st token. | 1562 // Delete the 1st token. |
| 1578 DeleteToken(kAppId, kSender, kScope); | 1563 DeleteToken(kAppId, kSender, kScope); |
| 1579 CompleteDeleteToken(); | 1564 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken()); |
| 1580 | 1565 |
| 1581 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); | 1566 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); |
| 1582 EXPECT_EQ(kAppId, last_app_id()); | 1567 EXPECT_EQ(kAppId, last_app_id()); |
| 1583 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1568 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1584 // Both tokens are gone now. | 1569 // Both tokens are gone now. |
| 1585 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); | 1570 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); |
| 1586 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); | 1571 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); |
| 1587 | 1572 |
| 1588 reset_last_event(); | 1573 reset_last_event(); |
| 1589 | 1574 |
| 1590 // Trying to delete the token again will get an error. | 1575 // Trying to delete the token again will get an error. |
| 1591 DeleteToken(kAppId, kSender, kScope); | 1576 DeleteToken(kAppId, kSender, kScope); |
| 1592 PumpLoopUntilIdle(); | 1577 PumpLoopUntilIdle(); |
| 1593 | 1578 |
| 1594 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); | 1579 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); |
| 1595 EXPECT_EQ(kAppId, last_app_id()); | 1580 EXPECT_EQ(kAppId, last_app_id()); |
| 1596 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result()); | 1581 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result()); |
| 1597 } | 1582 } |
| 1598 | 1583 |
| 1599 TEST_F(GCMClientInstanceIDTest, DeleteAllTokens) { | 1584 TEST_F(GCMClientInstanceIDTest, DeleteAllTokens) { |
| 1600 AddInstanceID(kAppId, kInstanceID); | 1585 AddInstanceID(kAppId, kInstanceID); |
| 1601 | 1586 |
| 1602 // Get a token. | 1587 // Get a token. |
| 1603 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); | 1588 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); |
| 1604 GetToken(kAppId, kSender, kScope); | 1589 GetToken(kAppId, kSender, kScope); |
| 1605 CompleteRegistration("token1"); | 1590 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1")); |
| 1606 | 1591 |
| 1607 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 1592 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 1608 EXPECT_EQ(kAppId, last_app_id()); | 1593 EXPECT_EQ(kAppId, last_app_id()); |
| 1609 EXPECT_EQ("token1", last_registration_id()); | 1594 EXPECT_EQ("token1", last_registration_id()); |
| 1610 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1595 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1611 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); | 1596 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); |
| 1612 | 1597 |
| 1613 reset_last_event(); | 1598 reset_last_event(); |
| 1614 | 1599 |
| 1615 // Get another token. | 1600 // Get another token. |
| 1616 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); | 1601 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); |
| 1617 GetToken(kAppId, kSender2, kScope); | 1602 GetToken(kAppId, kSender2, kScope); |
| 1618 CompleteRegistration("token2"); | 1603 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2")); |
| 1619 | 1604 |
| 1620 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); | 1605 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); |
| 1621 EXPECT_EQ(kAppId, last_app_id()); | 1606 EXPECT_EQ(kAppId, last_app_id()); |
| 1622 EXPECT_EQ("token2", last_registration_id()); | 1607 EXPECT_EQ("token2", last_registration_id()); |
| 1623 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1608 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1624 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); | 1609 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); |
| 1625 // The 1st token still exists. | 1610 // The 1st token still exists. |
| 1626 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); | 1611 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); |
| 1627 | 1612 |
| 1628 reset_last_event(); | 1613 reset_last_event(); |
| 1629 | 1614 |
| 1630 // Delete all tokens. | 1615 // Delete all tokens. |
| 1631 DeleteToken(kAppId, "*", "*"); | 1616 DeleteToken(kAppId, "*", "*"); |
| 1632 CompleteDeleteToken(); | 1617 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken()); |
| 1633 | 1618 |
| 1634 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); | 1619 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); |
| 1635 EXPECT_EQ(kAppId, last_app_id()); | 1620 EXPECT_EQ(kAppId, last_app_id()); |
| 1636 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1621 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1637 // All tokens are gone now. | 1622 // All tokens are gone now. |
| 1638 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); | 1623 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); |
| 1639 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); | 1624 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); |
| 1640 } | 1625 } |
| 1641 | 1626 |
| 1642 TEST_F(GCMClientInstanceIDTest, DeleteAllTokensBeforeGetAnyToken) { | 1627 TEST_F(GCMClientInstanceIDTest, DeleteAllTokensBeforeGetAnyToken) { |
| 1643 AddInstanceID(kAppId, kInstanceID); | 1628 AddInstanceID(kAppId, kInstanceID); |
| 1644 | 1629 |
| 1645 // Delete all tokens without getting a token first. | 1630 // Delete all tokens without getting a token first. |
| 1646 DeleteToken(kAppId, "*", "*"); | 1631 DeleteToken(kAppId, "*", "*"); |
| 1647 // No need to call CompleteDeleteToken since unregistration request should | 1632 // No need to call CompleteDeleteToken since unregistration request should |
| 1648 // not be triggered. | 1633 // not be triggered. |
| 1649 PumpLoopUntilIdle(); | 1634 PumpLoopUntilIdle(); |
| 1650 | 1635 |
| 1651 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); | 1636 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); |
| 1652 EXPECT_EQ(kAppId, last_app_id()); | 1637 EXPECT_EQ(kAppId, last_app_id()); |
| 1653 EXPECT_EQ(GCMClient::SUCCESS, last_result()); | 1638 EXPECT_EQ(GCMClient::SUCCESS, last_result()); |
| 1654 } | 1639 } |
| 1655 | 1640 |
| 1656 } // namespace gcm | 1641 } // namespace gcm |
| OLD | NEW |