Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2013 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 <string> | |
| 6 | |
| 7 #include "google_apis/gcm/engine/checkin_request.h" | |
| 8 #include "google_apis/gcm/protocol/checkin.pb.h" | |
| 9 #include "net/url_request/test_url_fetcher_factory.h" | |
| 10 #include "net/url_request/url_request_test_util.h" | |
| 11 #include "testing/gtest/include/gtest/gtest.h" | |
| 12 | |
| 13 namespace gcm { | |
| 14 | |
| 15 const uint64 kAndroidId = 42UL; | |
| 16 const uint64 kBlankAndroidId = 999999UL; | |
| 17 const uint64 kBlankSecurityToken = 999999UL; | |
| 18 const char kChromeVersion[] = "Version String"; | |
| 19 const uint64 kSecurityToken = 77; | |
| 20 const int64 kUserSerialNumber = 7; | |
| 21 | |
| 22 class CheckinRequestTest : public testing::Test { | |
| 23 public: | |
| 24 enum MissingValue { | |
| 25 MISSING_ANDROID_ID, | |
| 26 MISSING_SECURITY_TOKEN | |
| 27 }; | |
| 28 | |
| 29 CheckinRequestTest(); | |
| 30 virtual ~CheckinRequestTest(); | |
| 31 | |
| 32 checkin_proto::ChromeBuildProto CreateChromeBuildProto(); | |
| 33 | |
| 34 void FetcherCallback(uint64 android_id, uint64 security_token); | |
| 35 | |
| 36 void SetResponse(net::TestURLFetcher* fetcher, | |
| 37 uint64 android_id, | |
| 38 uint64 security_token); | |
| 39 | |
| 40 void SetResponseMissingValue(net::TestURLFetcher* fetcher, | |
|
Nicolas Zea
2014/01/07 00:41:52
Can you just have a single SetResponse(ValueState
fgorski
2014/01/07 23:46:44
I actually dealt without ever storing the fetcher.
| |
| 41 MissingValue missing_value); | |
| 42 | |
| 43 protected: | |
| 44 uint64 android_id_; | |
| 45 uint64 security_token_; | |
| 46 int checkin_device_type_; | |
| 47 GCMClient::CheckinInfo user_checkin_info_; | |
| 48 base::MessageLoop message_loop_; | |
| 49 net::TestURLFetcherFactory url_fetcher_factory_; | |
| 50 scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_; | |
| 51 }; | |
| 52 | |
| 53 CheckinRequestTest::CheckinRequestTest() | |
| 54 : android_id_(kBlankAndroidId), | |
| 55 security_token_(kBlankSecurityToken), | |
| 56 checkin_device_type_(0), | |
| 57 url_request_context_getter_(new net::TestURLRequestContextGetter( | |
| 58 message_loop_.message_loop_proxy())) {} | |
| 59 | |
| 60 CheckinRequestTest::~CheckinRequestTest() {} | |
| 61 | |
| 62 checkin_proto::ChromeBuildProto CheckinRequestTest::CreateChromeBuildProto() { | |
| 63 checkin_proto::ChromeBuildProto chrome_build_proto; | |
| 64 chrome_build_proto.set_platform( | |
| 65 checkin_proto::ChromeBuildProto::PLATFORM_LINUX); | |
| 66 chrome_build_proto.set_channel( | |
| 67 checkin_proto::ChromeBuildProto::CHANNEL_CANARY); | |
| 68 chrome_build_proto.set_chrome_version(kChromeVersion); | |
| 69 return chrome_build_proto; | |
| 70 } | |
| 71 | |
| 72 void CheckinRequestTest::FetcherCallback(uint64 android_id, | |
| 73 uint64 security_token) { | |
| 74 android_id_ = android_id; | |
| 75 security_token_ = security_token; | |
| 76 } | |
| 77 | |
| 78 void CheckinRequestTest::SetResponse(net::TestURLFetcher* fetcher, | |
| 79 uint64 android_id, | |
| 80 uint64 security_token) { | |
| 81 checkin_proto::AndroidCheckinResponse response; | |
| 82 response.set_stats_ok(true); | |
| 83 response.set_android_id(android_id); | |
| 84 response.set_security_token(security_token); | |
| 85 | |
| 86 std::string response_string; | |
| 87 response.SerializeToString(&response_string); | |
| 88 fetcher->SetResponseString(response_string); | |
| 89 } | |
| 90 | |
| 91 void CheckinRequestTest::SetResponseMissingValue(net::TestURLFetcher* fetcher, | |
| 92 MissingValue missing_value) { | |
| 93 checkin_proto::AndroidCheckinResponse response; | |
| 94 response.set_stats_ok(true); | |
| 95 if (missing_value != MISSING_ANDROID_ID) | |
| 96 response.set_android_id(kAndroidId); | |
| 97 else | |
| 98 response.set_security_token(kSecurityToken); | |
| 99 | |
| 100 std::string response_string; | |
| 101 response.SerializeToString(&response_string); | |
| 102 fetcher->SetResponseString(response_string); | |
| 103 } | |
| 104 | |
| 105 TEST_F(CheckinRequestTest, FetcherData) { | |
| 106 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 107 user_checkin_info_.android_id = kAndroidId; | |
| 108 user_checkin_info_.secret = kSecurityToken; | |
| 109 CheckinRequest request( | |
| 110 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 111 chrome_build_proto, | |
| 112 kUserSerialNumber, | |
| 113 user_checkin_info_, | |
| 114 url_request_context_getter_.get()); | |
| 115 request.Start(); | |
| 116 | |
| 117 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 118 ASSERT_TRUE(fetcher); | |
| 119 fetcher->set_response_code(net::HTTP_OK); | |
| 120 checkin_proto::AndroidCheckinRequest request_proto; | |
| 121 request_proto.ParseFromString(fetcher->upload_data()); | |
| 122 EXPECT_EQ(kAndroidId, static_cast<uint64>(request_proto.id())); | |
| 123 EXPECT_EQ(kSecurityToken, request_proto.security_token()); | |
| 124 EXPECT_EQ(kUserSerialNumber, request_proto.user_serial_number()); | |
| 125 EXPECT_EQ(chrome_build_proto.platform(), | |
| 126 request_proto.checkin().chrome_build().platform()); | |
| 127 EXPECT_EQ(chrome_build_proto.chrome_version(), | |
| 128 request_proto.checkin().chrome_build().chrome_version()); | |
| 129 EXPECT_EQ(chrome_build_proto.channel(), | |
| 130 request_proto.checkin().chrome_build().channel()); | |
| 131 | |
| 132 #if defined(CHROME_OS) | |
| 133 EXPECT_EQ(checkin_proto::DEVICE_CHROME_OS, request_proto.checkin().type()); | |
| 134 #else | |
| 135 EXPECT_EQ(checkin_proto::DEVICE_CHROME_BROWSER, | |
| 136 request_proto.checkin().type()); | |
| 137 #endif | |
| 138 } | |
| 139 | |
| 140 TEST_F(CheckinRequestTest, ResponseBodyEmpty) { | |
| 141 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 142 CheckinRequest request( | |
| 143 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 144 chrome_build_proto, | |
| 145 kUserSerialNumber, | |
| 146 user_checkin_info_, | |
| 147 url_request_context_getter_.get()); | |
| 148 request.Start(); | |
| 149 | |
| 150 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 151 ASSERT_TRUE(fetcher); | |
| 152 fetcher->set_response_code(net::HTTP_OK); | |
| 153 fetcher->SetResponseString(std::string()); | |
| 154 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 155 EXPECT_EQ(0u, android_id_); | |
| 156 EXPECT_EQ(0u, security_token_); | |
| 157 } | |
| 158 | |
| 159 TEST_F(CheckinRequestTest, ResponseBodyCorrupted) { | |
| 160 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 161 CheckinRequest request( | |
| 162 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 163 chrome_build_proto, | |
| 164 kUserSerialNumber, | |
| 165 user_checkin_info_, | |
| 166 url_request_context_getter_.get()); | |
| 167 request.Start(); | |
| 168 | |
| 169 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 170 ASSERT_TRUE(fetcher); | |
| 171 fetcher->set_response_code(net::HTTP_OK); | |
| 172 fetcher->SetResponseString("Corrupted response body"); | |
| 173 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 174 EXPECT_EQ(0u, android_id_); | |
| 175 EXPECT_EQ(0u, security_token_); | |
| 176 } | |
| 177 | |
| 178 TEST_F(CheckinRequestTest, ResponseHttpStatusNotOK) { | |
| 179 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 180 CheckinRequest request( | |
| 181 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 182 chrome_build_proto, | |
| 183 kUserSerialNumber, | |
| 184 user_checkin_info_, | |
| 185 url_request_context_getter_.get()); | |
| 186 request.Start(); | |
| 187 | |
| 188 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 189 ASSERT_TRUE(fetcher); | |
| 190 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | |
| 191 fetcher->SetResponseString(std::string()); | |
| 192 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 193 EXPECT_EQ(0u, android_id_); | |
| 194 EXPECT_EQ(0u, security_token_); | |
| 195 } | |
| 196 | |
| 197 TEST_F(CheckinRequestTest, ResponseMissingAndroidId) { | |
| 198 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 199 CheckinRequest request( | |
| 200 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 201 chrome_build_proto, | |
| 202 kUserSerialNumber, | |
| 203 user_checkin_info_, | |
| 204 url_request_context_getter_.get()); | |
| 205 request.Start(); | |
| 206 | |
| 207 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 208 ASSERT_TRUE(fetcher); | |
| 209 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | |
| 210 SetResponseMissingValue(fetcher, MISSING_ANDROID_ID); | |
| 211 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 212 EXPECT_EQ(0u, android_id_); | |
| 213 EXPECT_EQ(0u, security_token_); | |
| 214 } | |
| 215 | |
| 216 TEST_F(CheckinRequestTest, ResponseMissingSecurityToken) { | |
| 217 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 218 CheckinRequest request( | |
| 219 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 220 chrome_build_proto, | |
| 221 kUserSerialNumber, | |
| 222 user_checkin_info_, | |
| 223 url_request_context_getter_.get()); | |
| 224 request.Start(); | |
| 225 | |
| 226 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 227 ASSERT_TRUE(fetcher); | |
| 228 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | |
| 229 SetResponseMissingValue(fetcher, MISSING_SECURITY_TOKEN); | |
| 230 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 231 EXPECT_EQ(0u, android_id_); | |
| 232 EXPECT_EQ(0u, security_token_); | |
| 233 } | |
| 234 | |
| 235 TEST_F(CheckinRequestTest, ResponseValueOfAndroidIdIsZero) { | |
|
jianli
2014/01/06 23:28:43
nit: ResponseContainingZeroAndroidId
fgorski
2014/01/07 23:46:44
Done.
| |
| 236 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 237 CheckinRequest request( | |
| 238 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 239 chrome_build_proto, | |
| 240 kUserSerialNumber, | |
| 241 user_checkin_info_, | |
| 242 url_request_context_getter_.get()); | |
| 243 request.Start(); | |
| 244 | |
| 245 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 246 ASSERT_TRUE(fetcher); | |
| 247 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | |
| 248 SetResponse(fetcher, 0, kSecurityToken); | |
| 249 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 250 EXPECT_EQ(0u, android_id_); | |
| 251 EXPECT_EQ(0u, security_token_); | |
| 252 } | |
| 253 | |
| 254 TEST_F(CheckinRequestTest, ResponseValueOfSecurityTokenIsZero) { | |
|
jianli
2014/01/06 23:28:43
nit: ditto
fgorski
2014/01/07 23:46:44
Done.
| |
| 255 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 256 CheckinRequest request( | |
| 257 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 258 chrome_build_proto, | |
| 259 kUserSerialNumber, | |
| 260 user_checkin_info_, | |
| 261 url_request_context_getter_.get()); | |
| 262 request.Start(); | |
| 263 | |
| 264 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 265 ASSERT_TRUE(fetcher); | |
| 266 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | |
| 267 SetResponse(fetcher, kAndroidId, 0); | |
| 268 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 269 EXPECT_EQ(0u, android_id_); | |
| 270 EXPECT_EQ(0u, security_token_); | |
| 271 } | |
| 272 | |
| 273 TEST_F(CheckinRequestTest, SuccessfulFirstTimeCheckin) { | |
| 274 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 275 CheckinRequest request( | |
| 276 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 277 chrome_build_proto, | |
| 278 kUserSerialNumber, | |
| 279 user_checkin_info_, | |
| 280 url_request_context_getter_.get()); | |
| 281 request.Start(); | |
| 282 | |
| 283 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 284 ASSERT_TRUE(fetcher); | |
| 285 fetcher->set_response_code(net::HTTP_OK); | |
| 286 SetResponse(fetcher, kAndroidId, kSecurityToken); | |
| 287 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 288 EXPECT_EQ(kAndroidId, android_id_); | |
| 289 EXPECT_EQ(kSecurityToken, security_token_); | |
| 290 } | |
| 291 | |
| 292 TEST_F(CheckinRequestTest, SuccessfulSubsequentCheckin) { | |
| 293 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); | |
| 294 // Having non-zero android_id and secret indicate it is a subsequent check in. | |
| 295 user_checkin_info_.android_id = kAndroidId; | |
| 296 user_checkin_info_.secret = kSecurityToken; | |
| 297 CheckinRequest request( | |
| 298 base::Bind(&CheckinRequestTest::FetcherCallback, base::Unretained(this)), | |
| 299 chrome_build_proto, | |
| 300 kUserSerialNumber, | |
| 301 user_checkin_info_, | |
| 302 url_request_context_getter_.get()); | |
| 303 request.Start(); | |
| 304 | |
| 305 EXPECT_EQ(kBlankAndroidId, android_id_); | |
| 306 EXPECT_EQ(kBlankSecurityToken, security_token_); | |
| 307 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | |
| 308 ASSERT_TRUE(fetcher); | |
| 309 fetcher->set_response_code(net::HTTP_OK); | |
| 310 SetResponse(fetcher, kAndroidId, kSecurityToken); | |
| 311 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 312 EXPECT_EQ(kAndroidId, android_id_); | |
| 313 EXPECT_EQ(kSecurityToken, security_token_); | |
| 314 } | |
| 315 | |
| 316 } // namespace gcm | |
| OLD | NEW |