Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1100)

Unified Diff: google_apis/gcm/engine/gservices_settings_unittest.cc

Issue 288433002: G-services settings v3 implementation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressing CR feedback Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « google_apis/gcm/engine/gservices_settings.cc ('k') | google_apis/gcm/gcm_client_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: google_apis/gcm/engine/gservices_settings_unittest.cc
diff --git a/google_apis/gcm/engine/gservices_settings_unittest.cc b/google_apis/gcm/engine/gservices_settings_unittest.cc
index 12623e348128c8af6b7ffa78fbdde76bd4749b12..0b2d063ff2595f87123914b71f3bb42ef0129b09 100644
--- a/google_apis/gcm/engine/gservices_settings_unittest.cc
+++ b/google_apis/gcm/engine/gservices_settings_unittest.cc
@@ -23,6 +23,24 @@ const int64 kDefaultCheckinInterval = 2 * 24 * 60 * 60; // seconds = 2 days.
const char kDefaultCheckinURL[] = "https://android.clients.google.com/checkin";
const char kDefaultRegistrationURL[] =
"https://android.clients.google.com/c2dm/register3";
+const char kDefaultSettingsDigest[] =
+ "1-da39a3ee5e6b4b0d3255bfef95601890afd80709";
+const char kAlternativeSettingsDigest[] =
+ "1-7da4aa4eb38a8bd3e330e3751cc0899924499134";
+
+void AddSettingsToResponse(
+ checkin_proto::AndroidCheckinResponse& checkin_response,
+ const GServicesSettings::SettingsMap& settings,
+ bool settings_diff) {
+ for (GServicesSettings::SettingsMap::const_iterator iter = settings.begin();
+ iter != settings.end();
+ ++iter) {
+ checkin_proto::GservicesSetting* setting = checkin_response.add_setting();
+ setting->set_name(iter->first);
+ setting->set_value(iter->second);
+ }
+ checkin_response.set_settings_diff(settings_diff);
+}
} // namespace
@@ -31,23 +49,12 @@ class GServicesSettingsTest : public testing::Test {
GServicesSettingsTest();
virtual ~GServicesSettingsTest();
- virtual void SetUp() OVERRIDE;
-
void CheckAllSetToDefault();
- void CheckAllSetToAlternative();
- void SetWithAlternativeSettings(
- checkin_proto::AndroidCheckinResponse& checkin_response);
GServicesSettings& settings() {
return gserivces_settings_;
}
- const std::map<std::string, std::string>& alternative_settings() {
- return alternative_settings_;
- }
-
- std::map<std::string, std::string> alternative_settings_;
-
private:
GServicesSettings gserivces_settings_;
};
@@ -58,159 +65,273 @@ GServicesSettingsTest::GServicesSettingsTest()
GServicesSettingsTest::~GServicesSettingsTest() {}
-void GServicesSettingsTest::SetUp() {
- alternative_settings_["checkin_interval"] =
- base::Int64ToString(kAlternativeCheckinInterval);
- alternative_settings_["checkin_url"] = kAlternativeCheckinURL;
- alternative_settings_["gcm_hostname"] = kAlternativeMCSHostname;
- alternative_settings_["gcm_secure_port"] =
- base::IntToString(kAlternativeMCSSecurePort);
- alternative_settings_["gcm_registration_url"] = kAlternativeRegistrationURL;
-}
-
void GServicesSettingsTest::CheckAllSetToDefault() {
EXPECT_EQ(base::TimeDelta::FromSeconds(kDefaultCheckinInterval),
- settings().checkin_interval());
- EXPECT_EQ(GURL(kDefaultCheckinURL), settings().checkin_url());
+ settings().GetCheckinInterval());
+ EXPECT_EQ(GURL(kDefaultCheckinURL), settings().GetCheckinURL());
EXPECT_EQ(GURL("https://mtalk.google.com:5228"),
- settings().mcs_main_endpoint());
+ settings().GetMCSMainEndpoint());
EXPECT_EQ(GURL("https://mtalk.google.com:443"),
- settings().mcs_fallback_endpoint());
- EXPECT_EQ(GURL(kDefaultRegistrationURL), settings().registration_url());
-}
-
-void GServicesSettingsTest::CheckAllSetToAlternative() {
- EXPECT_EQ(base::TimeDelta::FromSeconds(kAlternativeCheckinInterval),
- settings().checkin_interval());
- EXPECT_EQ(GURL(kAlternativeCheckinURL), settings().checkin_url());
- EXPECT_EQ(GURL("https://alternative.gcm.host:7777"),
- settings().mcs_main_endpoint());
- EXPECT_EQ(GURL("https://alternative.gcm.host:443"),
- settings().mcs_fallback_endpoint());
- EXPECT_EQ(GURL(kAlternativeRegistrationURL), settings().registration_url());
-}
-
-void GServicesSettingsTest::SetWithAlternativeSettings(
- checkin_proto::AndroidCheckinResponse& checkin_response) {
- for (std::map<std::string, std::string>::const_iterator iter =
- alternative_settings_.begin();
- iter != alternative_settings_.end(); ++iter) {
- checkin_proto::GservicesSetting* setting = checkin_response.add_setting();
- setting->set_name(iter->first);
- setting->set_value(iter->second);
- }
+ settings().GetMCSFallbackEndpoint());
+ EXPECT_EQ(GURL(kDefaultRegistrationURL), settings().GetRegistrationURL());
}
// Verifies default values of the G-services settings and settings digest.
TEST_F(GServicesSettingsTest, DefaultSettingsAndDigest) {
CheckAllSetToDefault();
- EXPECT_EQ(std::string(), settings().digest());
+ EXPECT_EQ(kDefaultSettingsDigest, settings().digest());
+ EXPECT_EQ(kDefaultSettingsDigest,
+ GServicesSettings::CalculateDigest(settings().settings_map()));
+}
+
+// Verifies digest calculation for the sample provided by protocol owners.
+TEST_F(GServicesSettingsTest, CalculateDigest) {
+ GServicesSettings::SettingsMap settings_map;
+ settings_map["android_id"] = "55XXXXXXXXXXXXXXXX0";
+ settings_map["checkin_interval"] = "86400";
+ settings_map["checkin_url"] =
+ "https://fake.address.google.com/canary/checkin";
+ settings_map["chrome_device"] = "1";
+ settings_map["device_country"] = "us";
+ settings_map["gcm_hostname"] = "fake.address.google.com";
+ settings_map["gcm_secure_port"] = "443";
+
+ EXPECT_EQ("1-33381ccd1cf5791dc0e6dfa234266fa9f1259197",
+ GServicesSettings::CalculateDigest(settings_map));
}
// Verifies that settings are not updated when load result is empty.
TEST_F(GServicesSettingsTest, UpdateFromEmptyLoadResult) {
GCMStore::LoadResult result;
- result.gservices_digest = "digest_value";
+ result.gservices_digest = "";
settings().UpdateFromLoadResult(result);
CheckAllSetToDefault();
- EXPECT_EQ(std::string(), settings().digest());
+ EXPECT_EQ(kDefaultSettingsDigest, settings().digest());
}
-// Verifies that settings are not updated when one of them is missing.
+// Verifies that settings are not when digest value does not match.
TEST_F(GServicesSettingsTest, UpdateFromLoadResultWithSettingMissing) {
GCMStore::LoadResult result;
- result.gservices_settings = alternative_settings();
+ result.gservices_settings["checkin_internval"] = "100000";
result.gservices_digest = "digest_value";
- result.gservices_settings.erase("gcm_hostname");
settings().UpdateFromLoadResult(result);
CheckAllSetToDefault();
- EXPECT_EQ(std::string(), settings().digest());
+ EXPECT_EQ(kDefaultSettingsDigest, settings().digest());
}
// Verifies that the settings are set correctly based on the load result.
TEST_F(GServicesSettingsTest, UpdateFromLoadResult) {
GCMStore::LoadResult result;
- result.gservices_settings = alternative_settings();
- result.gservices_digest = "digest_value";
+ result.gservices_settings["checkin_interval"] =
+ base::Int64ToString(kAlternativeCheckinInterval);
+ result.gservices_settings["checkin_url"] = kAlternativeCheckinURL;
+ result.gservices_settings["gcm_hostname"] = kAlternativeMCSHostname;
+ result.gservices_settings["gcm_secure_port"] =
+ base::IntToString(kAlternativeMCSSecurePort);
+ result.gservices_settings["gcm_registration_url"] =
+ kAlternativeRegistrationURL;
+ result.gservices_digest = kAlternativeSettingsDigest;
settings().UpdateFromLoadResult(result);
- CheckAllSetToAlternative();
- EXPECT_EQ("digest_value", settings().digest());
+ EXPECT_EQ(base::TimeDelta::FromSeconds(kAlternativeCheckinInterval),
+ settings().GetCheckinInterval());
+ EXPECT_EQ(GURL(kAlternativeCheckinURL), settings().GetCheckinURL());
+ EXPECT_EQ(GURL("https://alternative.gcm.host:7777"),
+ settings().GetMCSMainEndpoint());
+ EXPECT_EQ(GURL("https://alternative.gcm.host:443"),
+ settings().GetMCSFallbackEndpoint());
+ EXPECT_EQ(GURL(kAlternativeRegistrationURL), settings().GetRegistrationURL());
+ EXPECT_EQ(GServicesSettings::CalculateDigest(result.gservices_settings),
+ settings().digest());
}
-// Verifies that the settings are set correctly after parsing a checkin
-// response.
-TEST_F(GServicesSettingsTest, UpdateFromCheckinResponse) {
+// Verifies that the checkin interval is updated to minimum if the original
+// value is less than minimum.
+TEST_F(GServicesSettingsTest, CheckinResponseMinimumCheckinInterval) {
+ // Setting the checkin interval to less than minimum.
checkin_proto::AndroidCheckinResponse checkin_response;
-
- checkin_response.set_digest("digest_value");
- SetWithAlternativeSettings(checkin_response);
+ GServicesSettings::SettingsMap new_settings;
+ new_settings["checkin_interval"] = "3600";
+ AddSettingsToResponse(checkin_response, new_settings, false);
EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
- CheckAllSetToAlternative();
- EXPECT_EQ(alternative_settings_, settings().GetSettingsMap());
- EXPECT_EQ("digest_value", settings().digest());
+ EXPECT_EQ(GServicesSettings::MinimumCheckinInterval(),
+ settings().GetCheckinInterval());
+ EXPECT_EQ(GServicesSettings::CalculateDigest(new_settings),
+ settings().digest());
}
-// Verifies that the checkin interval is updated to minimum if the original
-// value is less than minimum.
-TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseMinimumCheckinInterval) {
+// Verifies that default checkin interval can be selectively overwritten.
+TEST_F(GServicesSettingsTest, CheckinResponseUpdateCheckinInterval) {
checkin_proto::AndroidCheckinResponse checkin_response;
+ GServicesSettings::SettingsMap new_settings;
+ new_settings["checkin_interval"] = "86400";
+ AddSettingsToResponse(checkin_response, new_settings, false);
- checkin_response.set_digest("digest_value");
- // Setting the checkin interval to less than minimum.
- alternative_settings_["checkin_interval"] = base::IntToString(3600);
- SetWithAlternativeSettings(checkin_response);
+ EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
+
+ // Only the checkin interval was updated:
+ EXPECT_EQ(base::TimeDelta::FromSeconds(86400),
+ settings().GetCheckinInterval());
+
+ // Other settings still set to default.
+ EXPECT_EQ(GURL("https://mtalk.google.com:5228"),
+ settings().GetMCSMainEndpoint());
+ EXPECT_EQ(GURL("https://mtalk.google.com:443"),
+ settings().GetMCSFallbackEndpoint());
+ EXPECT_EQ(GURL(kDefaultCheckinURL), settings().GetCheckinURL());
+ EXPECT_EQ(GURL(kDefaultRegistrationURL), settings().GetRegistrationURL());
+
+ EXPECT_EQ(GServicesSettings::CalculateDigest(new_settings),
+ settings().digest());
+}
+
+// Verifies that default registration URL can be selectively overwritten.
+TEST_F(GServicesSettingsTest, CheckinResponseUpdateRegistrationURL) {
+ checkin_proto::AndroidCheckinResponse checkin_response;
+ GServicesSettings::SettingsMap new_settings;
+ new_settings["gcm_registration_url"] = "https://new.registration.url";
+ AddSettingsToResponse(checkin_response, new_settings, false);
EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
- EXPECT_EQ(GServicesSettings::MinimumCheckinInterval(),
- settings().checkin_interval());
- EXPECT_EQ("digest_value", settings().digest());
+ // Only the registration URL was updated:
+ EXPECT_EQ(GURL("https://new.registration.url"),
+ settings().GetRegistrationURL());
+
+ // Other settings still set to default.
+ EXPECT_EQ(base::TimeDelta::FromSeconds(kDefaultCheckinInterval),
+ settings().GetCheckinInterval());
+ EXPECT_EQ(GURL("https://mtalk.google.com:5228"),
+ settings().GetMCSMainEndpoint());
+ EXPECT_EQ(GURL("https://mtalk.google.com:443"),
+ settings().GetMCSFallbackEndpoint());
+ EXPECT_EQ(GURL(kDefaultCheckinURL), settings().GetCheckinURL());
+
+ EXPECT_EQ(GServicesSettings::CalculateDigest(new_settings),
+ settings().digest());
}
-// Verifies that settings are not updated when one of them is missing.
-TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseWithSettingMissing) {
+// Verifies that default checkin URL can be selectively overwritten.
+TEST_F(GServicesSettingsTest, CheckinResponseUpdateCheckinURL) {
checkin_proto::AndroidCheckinResponse checkin_response;
+ GServicesSettings::SettingsMap new_settings;
+ new_settings["checkin_url"] = "https://new.checkin.url";
+ AddSettingsToResponse(checkin_response, new_settings, false);
- checkin_response.set_digest("digest_value");
- alternative_settings_.erase("gcm_hostname");
- SetWithAlternativeSettings(checkin_response);
+ EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
- EXPECT_FALSE(settings().UpdateFromCheckinResponse(checkin_response));
+ // Only the checkin URL was updated:
+ EXPECT_EQ(GURL("https://new.checkin.url"), settings().GetCheckinURL());
- CheckAllSetToDefault();
- EXPECT_EQ(std::string(), settings().digest());
+ // Other settings still set to default.
+ EXPECT_EQ(base::TimeDelta::FromSeconds(kDefaultCheckinInterval),
+ settings().GetCheckinInterval());
+ EXPECT_EQ(GURL("https://mtalk.google.com:5228"),
+ settings().GetMCSMainEndpoint());
+ EXPECT_EQ(GURL("https://mtalk.google.com:443"),
+ settings().GetMCSFallbackEndpoint());
+ EXPECT_EQ(GURL(kDefaultRegistrationURL), settings().GetRegistrationURL());
+
+ EXPECT_EQ(GServicesSettings::CalculateDigest(new_settings),
+ settings().digest());
}
-// Verifies that no update is done, when a checkin response misses digest.
-TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseNoDigest) {
+// Verifies that default MCS hostname can be selectively overwritten.
+TEST_F(GServicesSettingsTest, CheckinResponseUpdateMCSHostname) {
checkin_proto::AndroidCheckinResponse checkin_response;
+ GServicesSettings::SettingsMap new_settings;
+ new_settings["gcm_hostname"] = "new.gcm.hostname";
+ AddSettingsToResponse(checkin_response, new_settings, false);
- SetWithAlternativeSettings(checkin_response);
- EXPECT_FALSE(settings().UpdateFromCheckinResponse(checkin_response));
+ EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
- CheckAllSetToDefault();
- EXPECT_EQ(std::string(), settings().digest());
+ // Only the MCS endpoints were updated:
+ EXPECT_EQ(GURL("https://new.gcm.hostname:5228"),
+ settings().GetMCSMainEndpoint());
+ EXPECT_EQ(GURL("https://new.gcm.hostname:443"),
+ settings().GetMCSFallbackEndpoint());
+
+ // Other settings still set to default.
+ EXPECT_EQ(base::TimeDelta::FromSeconds(kDefaultCheckinInterval),
+ settings().GetCheckinInterval());
+ EXPECT_EQ(GURL(kDefaultCheckinURL), settings().GetCheckinURL());
+ EXPECT_EQ(GURL(kDefaultRegistrationURL), settings().GetRegistrationURL());
+
+ EXPECT_EQ(GServicesSettings::CalculateDigest(new_settings),
+ settings().digest());
}
-// Verifies that no update is done, when a checkin response digest is the same.
-TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseSameDigest) {
- GCMStore::LoadResult load_result;
- load_result.gservices_digest = "old_digest";
- load_result.gservices_settings = alternative_settings();
- settings().UpdateFromLoadResult(load_result);
+// Verifies that default MCS secure port can be selectively overwritten.
+TEST_F(GServicesSettingsTest, CheckinResponseUpdateMCSSecurePort) {
+ checkin_proto::AndroidCheckinResponse checkin_response;
+ GServicesSettings::SettingsMap new_settings;
+ new_settings["gcm_secure_port"] = "5229";
+ AddSettingsToResponse(checkin_response, new_settings, false);
+
+ EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
+
+ // Only the main MCS endpoint was updated:
+ EXPECT_EQ(GURL("https://mtalk.google.com:5229"),
+ settings().GetMCSMainEndpoint());
+ // Other settings still set to default.
+ EXPECT_EQ(base::TimeDelta::FromSeconds(kDefaultCheckinInterval),
+ settings().GetCheckinInterval());
+ EXPECT_EQ(GURL(kDefaultCheckinURL), settings().GetCheckinURL());
+ EXPECT_EQ(GURL("https://mtalk.google.com:443"),
+ settings().GetMCSFallbackEndpoint());
+ EXPECT_EQ(GURL(kDefaultRegistrationURL), settings().GetRegistrationURL());
+
+ EXPECT_EQ(GServicesSettings::CalculateDigest(new_settings),
+ settings().digest());
+}
+
+// Update from checkin response should also do incremental update for both cases
+// where some settings are removed or added.
+TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseSettingsDiff) {
checkin_proto::AndroidCheckinResponse checkin_response;
- checkin_response.set_digest("old_digest");
- SetWithAlternativeSettings(checkin_response);
- EXPECT_FALSE(settings().UpdateFromCheckinResponse(checkin_response));
- CheckAllSetToAlternative();
- EXPECT_EQ("old_digest", settings().digest());
+ // Only the new settings will be included in the response with settings diff.
+ GServicesSettings::SettingsMap settings_diff;
+ settings_diff["new_setting_1"] = "new_setting_1_value";
+ settings_diff["new_setting_2"] = "new_setting_2_value";
+ settings_diff["gcm_secure_port"] = "5229";
+
+ // Full settings are necessary to calculate digest.
+ GServicesSettings::SettingsMap full_settings(settings_diff);
+ std::string digest = GServicesSettings::CalculateDigest(full_settings);
+
+ checkin_response.Clear();
+ AddSettingsToResponse(checkin_response, settings_diff, true);
+ EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
+ EXPECT_EQ(full_settings, settings().settings_map());
+ // Default setting overwritten by settings diff.
+ EXPECT_EQ(GURL("https://mtalk.google.com:5229"),
+ settings().GetMCSMainEndpoint());
+
+ // Setting up diff removing some of the values (including default setting).
+ settings_diff.clear();
+ settings_diff["delete_new_setting_1"] = "";
+ settings_diff["delete_gcm_secure_port"] = "";
+ settings_diff["new_setting_3"] = "new_setting_3_value";
+
+ // Updating full settings to calculate digest.
+ full_settings.erase(full_settings.find("new_setting_1"));
+ full_settings.erase(full_settings.find("gcm_secure_port"));
+ full_settings["new_setting_3"] = "new_setting_3_value";
+ digest = GServicesSettings::CalculateDigest(full_settings);
+
+ checkin_response.Clear();
+ AddSettingsToResponse(checkin_response, settings_diff, true);
+ EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
+ EXPECT_EQ(full_settings, settings().settings_map());
+ // Default setting back to norm.
+ EXPECT_EQ(GURL("https://mtalk.google.com:5228"),
+ settings().GetMCSMainEndpoint());
}
} // namespace gcm
« no previous file with comments | « google_apis/gcm/engine/gservices_settings.cc ('k') | google_apis/gcm/gcm_client_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698