Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / google_apis / gcm / engine / gservices_settings_unittest.cc
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
3 // found in the LICENSE file.
4
5 #include "base/strings/string_number_conversions.h"
6 #include "google_apis/gcm/engine/gservices_settings.h"
7 #include "google_apis/gcm/engine/registration_info.h"
8 #include "google_apis/gcm/gcm_client.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace gcm {
12
13 namespace {
14
15 const int64 kAlternativeCheckinInterval = 16 * 60 * 60;
16 const char kAlternativeCheckinURL[] = "http://alternative.url/checkin";
17 const char kAlternativeMCSHostname[] = "http://alternative.gcm.host";
18 const int kAlternativeMCSSecurePort = 443;
19 const char kAlternativeRegistrationURL[] =
20     "http://alternative.url/registration";
21
22 const int64 kDefaultCheckinInterval = 2 * 24 * 60 * 60;  // seconds = 2 days.
23 const char kDefaultCheckinURL[] = "https://android.clients.google.com/checkin";
24 const char kDefaultMCSHostname[] = "https://mtalk.google.com";
25 const int kDefaultMCSSecurePort = 5228;
26 const char kDefaultRegistrationURL[] =
27     "https://android.clients.google.com/c2dm/register3";
28
29 }  // namespace
30
31 class GServicesSettingsTest : public testing::Test {
32  public:
33   GServicesSettingsTest();
34   virtual ~GServicesSettingsTest();
35
36   virtual void SetUp() OVERRIDE;
37
38   void CheckAllSetToDefault();
39   void CheckAllSetToAlternative();
40   void SetWithAlternativeSettings(
41       checkin_proto::AndroidCheckinResponse& checkin_response);
42
43   GServicesSettings& settings() {
44     return gserivces_settings_;
45   }
46
47   const std::map<std::string, std::string>& alternative_settings() {
48     return alternative_settings_;
49   }
50
51   std::map<std::string, std::string> alternative_settings_;
52
53  private:
54   GServicesSettings gserivces_settings_;
55 };
56
57 GServicesSettingsTest::GServicesSettingsTest()
58     : gserivces_settings_() {
59 }
60
61 GServicesSettingsTest::~GServicesSettingsTest() {}
62
63 void GServicesSettingsTest::SetUp() {
64   alternative_settings_["checkin_interval"] =
65       base::Int64ToString(kAlternativeCheckinInterval);
66   alternative_settings_["checkin_url"] = kAlternativeCheckinURL;
67   alternative_settings_["gcm_hostname"] = kAlternativeMCSHostname;
68   alternative_settings_["gcm_secure_port"] =
69       base::IntToString(kAlternativeMCSSecurePort);
70   alternative_settings_["gcm_registration_url"] = kAlternativeRegistrationURL;
71 }
72
73 void GServicesSettingsTest::CheckAllSetToDefault() {
74   EXPECT_EQ(base::TimeDelta::FromSeconds(kDefaultCheckinInterval),
75             settings().checkin_interval());
76   EXPECT_EQ(GURL(kDefaultCheckinURL), settings().checkin_url());
77   EXPECT_EQ(kDefaultMCSHostname, settings().mcs_hostname());
78   EXPECT_EQ(kDefaultMCSSecurePort, settings().mcs_secure_port());
79   EXPECT_EQ(GURL(kDefaultRegistrationURL), settings().registration_url());
80 }
81
82 void GServicesSettingsTest::CheckAllSetToAlternative() {
83   EXPECT_EQ(base::TimeDelta::FromSeconds(kAlternativeCheckinInterval),
84             settings().checkin_interval());
85   EXPECT_EQ(GURL(kAlternativeCheckinURL), settings().checkin_url());
86   EXPECT_EQ(kAlternativeMCSHostname, settings().mcs_hostname());
87   EXPECT_EQ(kAlternativeMCSSecurePort, settings().mcs_secure_port());
88   EXPECT_EQ(GURL(kAlternativeRegistrationURL), settings().registration_url());
89 }
90
91 void GServicesSettingsTest::SetWithAlternativeSettings(
92     checkin_proto::AndroidCheckinResponse& checkin_response) {
93   for (std::map<std::string, std::string>::const_iterator iter =
94            alternative_settings_.begin();
95        iter != alternative_settings_.end(); ++iter) {
96     checkin_proto::GservicesSetting* setting = checkin_response.add_setting();
97     setting->set_name(iter->first);
98     setting->set_value(iter->second);
99   }
100 }
101
102 // Verifies default values of the G-services settings and settings digest.
103 TEST_F(GServicesSettingsTest, DefaultSettingsAndDigest) {
104   CheckAllSetToDefault();
105   EXPECT_EQ(std::string(), settings().digest());
106 }
107
108 // Verifies that settings are not updated when load result is empty.
109 TEST_F(GServicesSettingsTest, UpdateFromEmptyLoadResult) {
110   GCMStore::LoadResult result;
111   result.gservices_digest = "digest_value";
112   settings().UpdateFromLoadResult(result);
113
114   CheckAllSetToDefault();
115   EXPECT_EQ(std::string(), settings().digest());
116 }
117
118 // Verifies that settings are not updated when one of them is missing.
119 TEST_F(GServicesSettingsTest, UpdateFromLoadResultWithSettingMissing) {
120   GCMStore::LoadResult result;
121   result.gservices_settings = alternative_settings();
122   result.gservices_digest = "digest_value";
123   result.gservices_settings.erase("gcm_hostname");
124   settings().UpdateFromLoadResult(result);
125
126   CheckAllSetToDefault();
127   EXPECT_EQ(std::string(), settings().digest());
128 }
129
130 // Verifies that the settings are set correctly based on the load result.
131 TEST_F(GServicesSettingsTest, UpdateFromLoadResult) {
132   GCMStore::LoadResult result;
133   result.gservices_settings = alternative_settings();
134   result.gservices_digest = "digest_value";
135   settings().UpdateFromLoadResult(result);
136
137   CheckAllSetToAlternative();
138   EXPECT_EQ("digest_value", settings().digest());
139 }
140
141 // Verifies that the settings are set correctly after parsing a checkin
142 // response.
143 TEST_F(GServicesSettingsTest, UpdateFromCheckinResponse) {
144   checkin_proto::AndroidCheckinResponse checkin_response;
145
146   checkin_response.set_digest("digest_value");
147   SetWithAlternativeSettings(checkin_response);
148
149   EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
150
151   CheckAllSetToAlternative();
152   EXPECT_EQ(alternative_settings_, settings().GetSettingsMap());
153   EXPECT_EQ("digest_value", settings().digest());
154 }
155
156 // Verifies that the checkin interval is updated to minimum if the original
157 // value is less than minimum.
158 TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseMinimumCheckinInterval) {
159   checkin_proto::AndroidCheckinResponse checkin_response;
160
161   checkin_response.set_digest("digest_value");
162   // Setting the checkin interval to less than minimum.
163   alternative_settings_["checkin_interval"] = base::IntToString(3600);
164   SetWithAlternativeSettings(checkin_response);
165
166   EXPECT_TRUE(settings().UpdateFromCheckinResponse(checkin_response));
167
168   EXPECT_EQ(GServicesSettings::MinimumCheckinInterval(),
169             settings().checkin_interval());
170   EXPECT_EQ("digest_value", settings().digest());
171 }
172
173 // Verifies that settings are not updated when one of them is missing.
174 TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseWithSettingMissing) {
175   checkin_proto::AndroidCheckinResponse checkin_response;
176
177   checkin_response.set_digest("digest_value");
178   alternative_settings_.erase("gcm_hostname");
179   SetWithAlternativeSettings(checkin_response);
180
181   EXPECT_FALSE(settings().UpdateFromCheckinResponse(checkin_response));
182
183   CheckAllSetToDefault();
184   EXPECT_EQ(std::string(), settings().digest());
185 }
186
187 // Verifies that no update is done, when a checkin response misses digest.
188 TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseNoDigest) {
189   checkin_proto::AndroidCheckinResponse checkin_response;
190
191   SetWithAlternativeSettings(checkin_response);
192   EXPECT_FALSE(settings().UpdateFromCheckinResponse(checkin_response));
193
194   CheckAllSetToDefault();
195   EXPECT_EQ(std::string(), settings().digest());
196 }
197
198 // Verifies that no update is done, when a checkin response digest is the same.
199 TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseSameDigest) {
200   GCMStore::LoadResult load_result;
201   load_result.gservices_digest = "old_digest";
202   load_result.gservices_settings = alternative_settings();
203   settings().UpdateFromLoadResult(load_result);
204
205   checkin_proto::AndroidCheckinResponse checkin_response;
206   checkin_response.set_digest("old_digest");
207   SetWithAlternativeSettings(checkin_response);
208   EXPECT_FALSE(settings().UpdateFromCheckinResponse(checkin_response));
209
210   CheckAllSetToAlternative();
211   EXPECT_EQ("old_digest", settings().digest());
212 }
213
214 }  // namespace gcm