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/gcm_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 int64 kAndroidId = 42; |
| 16 const int64 kBlankAndroidId = -1; |
| 17 const uint64 kBlankSecurityToken = 999999; |
| 18 const char kChromeVersion[] = "Version String"; |
| 19 const uint64 kSecurityToken = 77; |
| 20 const int64 kUserSerialNumber = 7; |
| 21 |
| 22 class GCMCheckinRequestTest : public testing::Test { |
| 23 public: |
| 24 GCMCheckinRequestTest(); |
| 25 virtual ~GCMCheckinRequestTest(); |
| 26 |
| 27 checkin_proto::ChromeBuildProto CreateChromeBuildProto(); |
| 28 |
| 29 void FetcherCallback(uint64 android_id, uint64 security_token); |
| 30 |
| 31 void SetResponse(net::TestURLFetcher* fetcher, |
| 32 uint64 android_id, |
| 33 uint64 security_token); |
| 34 |
| 35 protected: |
| 36 int64 android_id_; |
| 37 uint64 security_token_; |
| 38 int checkin_device_type_; |
| 39 GCMClient::CheckInInfo user_checkin_info_; |
| 40 base::MessageLoop message_loop_; |
| 41 net::TestURLFetcherFactory factory_; |
| 42 scoped_refptr<net::TestURLRequestContextGetter> getter_; |
| 43 }; |
| 44 |
| 45 GCMCheckinRequestTest::GCMCheckinRequestTest() |
| 46 : android_id_(kBlankAndroidId), |
| 47 security_token_(kBlankSecurityToken), |
| 48 checkin_device_type_(0), |
| 49 getter_(new net::TestURLRequestContextGetter( |
| 50 message_loop_.message_loop_proxy())) {} |
| 51 |
| 52 GCMCheckinRequestTest::~GCMCheckinRequestTest() {} |
| 53 |
| 54 checkin_proto::ChromeBuildProto |
| 55 GCMCheckinRequestTest::CreateChromeBuildProto() { |
| 56 checkin_proto::ChromeBuildProto chrome_build_proto; |
| 57 chrome_build_proto.set_platform( |
| 58 checkin_proto::ChromeBuildProto::PLATFORM_LINUX); |
| 59 chrome_build_proto.set_channel( |
| 60 checkin_proto::ChromeBuildProto::CHANNEL_CANARY); |
| 61 chrome_build_proto.set_chrome_version(kChromeVersion); |
| 62 return chrome_build_proto; |
| 63 } |
| 64 |
| 65 void GCMCheckinRequestTest::FetcherCallback(uint64 android_id, |
| 66 uint64 security_token) { |
| 67 android_id_ = android_id; |
| 68 security_token_ = security_token; |
| 69 } |
| 70 |
| 71 void GCMCheckinRequestTest::SetResponse(net::TestURLFetcher* fetcher, |
| 72 uint64 android_id, |
| 73 uint64 security_token) { |
| 74 checkin_proto::AndroidCheckinResponse response; |
| 75 response.set_stats_ok(true); |
| 76 response.set_android_id(android_id); |
| 77 response.set_security_token(security_token); |
| 78 |
| 79 std::string response_string; |
| 80 response.SerializeToString(&response_string); |
| 81 fetcher->SetResponseString(response_string); |
| 82 } |
| 83 |
| 84 TEST_F(GCMCheckinRequestTest, EmptyResponseBody) { |
| 85 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); |
| 86 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, |
| 87 base::Unretained(this)), |
| 88 chrome_build_proto, |
| 89 kUserSerialNumber, |
| 90 user_checkin_info_, |
| 91 getter_.get()); |
| 92 request.Start(); |
| 93 |
| 94 EXPECT_EQ(kBlankAndroidId, android_id_); |
| 95 EXPECT_EQ(kBlankSecurityToken, security_token_); |
| 96 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 97 ASSERT_TRUE(fetcher); |
| 98 fetcher->set_response_code(net::HTTP_OK); |
| 99 fetcher->SetResponseString(std::string()); |
| 100 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 101 EXPECT_EQ(0u, android_id_); |
| 102 EXPECT_EQ(0u, security_token_); |
| 103 } |
| 104 |
| 105 TEST_F(GCMCheckinRequestTest, FetcherData) { |
| 106 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); |
| 107 user_checkin_info_.android_id = kAndroidId; |
| 108 user_checkin_info_.secret = kSecurityToken; |
| 109 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, |
| 110 base::Unretained(this)), |
| 111 chrome_build_proto, |
| 112 kUserSerialNumber, |
| 113 user_checkin_info_, |
| 114 getter_.get()); |
| 115 request.Start(); |
| 116 |
| 117 net::TestURLFetcher* 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, 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(GCMCheckinRequestTest, SuccessfulCheckin) { |
| 141 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); |
| 142 user_checkin_info_.android_id = kAndroidId; |
| 143 user_checkin_info_.secret = kSecurityToken; |
| 144 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, |
| 145 base::Unretained(this)), |
| 146 chrome_build_proto, |
| 147 kUserSerialNumber, |
| 148 user_checkin_info_, |
| 149 getter_.get()); |
| 150 request.Start(); |
| 151 |
| 152 EXPECT_EQ(kBlankAndroidId, android_id_); |
| 153 EXPECT_EQ(kBlankSecurityToken, security_token_); |
| 154 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 155 ASSERT_TRUE(fetcher); |
| 156 fetcher->set_response_code(net::HTTP_OK); |
| 157 SetResponse(fetcher, kAndroidId, kSecurityToken); |
| 158 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 159 EXPECT_EQ(kAndroidId, android_id_); |
| 160 EXPECT_EQ(kSecurityToken, security_token_); |
| 161 } |
| 162 |
| 163 TEST_F(GCMCheckinRequestTest, SuccessfulFirstTimeCheckin) { |
| 164 checkin_proto::ChromeBuildProto chrome_build_proto = CreateChromeBuildProto(); |
| 165 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, |
| 166 base::Unretained(this)), |
| 167 chrome_build_proto, |
| 168 kUserSerialNumber, |
| 169 user_checkin_info_, |
| 170 getter_.get()); |
| 171 request.Start(); |
| 172 |
| 173 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 174 ASSERT_TRUE(fetcher); |
| 175 fetcher->set_response_code(net::HTTP_OK); |
| 176 SetResponse(fetcher, kAndroidId, kSecurityToken); |
| 177 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 178 EXPECT_EQ(kAndroidId, android_id_); |
| 179 EXPECT_EQ(kSecurityToken, security_token_); |
| 180 } |
| 181 |
| 182 } // namespace gcm |
OLD | NEW |