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 "base/values.h" | |
|
fgorski
2014/01/04 00:54:07
I probably don't need that.
fgorski
2014/01/06 20:34:12
Done.
| |
| 8 #include "google_apis/gcm/engine/gcm_checkin_request.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 #if defined(CHROME_OS) | |
| 23 const int kExpectedDeviceType = 4; | |
|
jianli
2014/01/04 01:34:10
Can we use the enum defined in the proto file?
fgorski
2014/01/06 20:34:12
Done.
| |
| 24 #else | |
| 25 const int kExpectedDeviceType = 3; | |
| 26 #endif | |
| 27 | |
| 28 class GCMCheckinRequestTest : public testing::Test { | |
| 29 public: | |
| 30 GCMCheckinRequestTest(); | |
| 31 virtual ~GCMCheckinRequestTest(); | |
| 32 | |
| 33 GCMClient::ChromeCheckInInfo CreateCheckInInfo(); | |
| 34 | |
| 35 void FetcherCallback(uint64 android_id, uint64 security_token); | |
| 36 | |
| 37 void SetResponse(net::TestURLFetcher* fetcher, | |
| 38 uint64 android_id, | |
| 39 uint64 security_token); | |
| 40 | |
| 41 protected: | |
| 42 int64 android_id_; | |
|
jianli
2014/01/04 01:34:10
Should we use uint64?
fgorski
2014/01/06 20:34:12
No, actually I've not found a protobuf that would
| |
| 43 uint64 security_token_; | |
| 44 int checkin_device_type_; | |
| 45 GCMClient::CheckInInfo user_checkin_info_; | |
|
fgorski
2014/01/04 00:54:07
I'll remove that.
fgorski
2014/01/06 20:34:12
Done.
| |
| 46 GCMClient::ChromeCheckInInfo chrome_checkin_info_; | |
| 47 base::MessageLoop message_loop_; | |
| 48 net::TestURLFetcherFactory factory_; | |
| 49 scoped_refptr<net::TestURLRequestContextGetter> getter_; | |
| 50 }; | |
| 51 | |
| 52 GCMCheckinRequestTest::GCMCheckinRequestTest() | |
| 53 : android_id_(kBlankAndroidId), | |
| 54 security_token_(kBlankSecurityToken), | |
| 55 checkin_device_type_(0), | |
| 56 getter_(new net::TestURLRequestContextGetter( | |
| 57 message_loop_.message_loop_proxy())) {} | |
| 58 | |
| 59 GCMCheckinRequestTest::~GCMCheckinRequestTest() {} | |
| 60 | |
| 61 GCMClient::ChromeCheckInInfo GCMCheckinRequestTest::CreateCheckInInfo() { | |
| 62 GCMClient::ChromeCheckInInfo chrome_checkin_info; | |
| 63 chrome_checkin_info.platform = | |
| 64 checkin_proto::ChromeBuildProto::PLATFORM_LINUX; | |
| 65 chrome_checkin_info.channel = checkin_proto::ChromeBuildProto::CHANNEL_CANARY; | |
| 66 chrome_checkin_info.chrome_version = kChromeVersion; | |
| 67 return chrome_checkin_info; | |
| 68 } | |
| 69 | |
| 70 void GCMCheckinRequestTest::FetcherCallback(uint64 android_id, | |
| 71 uint64 security_token) { | |
| 72 android_id_ = android_id; | |
| 73 security_token_ = security_token; | |
| 74 } | |
| 75 | |
| 76 void GCMCheckinRequestTest::SetResponse(net::TestURLFetcher* fetcher, | |
| 77 uint64 android_id, | |
| 78 uint64 security_token) { | |
| 79 checkin_proto::AndroidCheckinResponse response; | |
| 80 response.set_stats_ok(true); | |
| 81 response.set_android_id(android_id); | |
| 82 response.set_security_token(security_token); | |
| 83 | |
| 84 std::string response_string; | |
| 85 response.SerializeToString(&response_string); | |
| 86 fetcher->SetResponseString(response_string); | |
| 87 } | |
| 88 | |
| 89 TEST_F(GCMCheckinRequestTest, EmptyResponseBody) { | |
|
jianli
2014/01/04 01:34:10
Do we also need to have the test coverage for the
jianli
2014/01/06 21:00:01
???
fgorski
2014/01/06 21:58:03
Done.
| |
| 90 GCMClient::ChromeCheckInInfo chrome_checkin_info = CreateCheckInInfo(); | |
| 91 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, | |
| 92 base::Unretained(this)), | |
| 93 getter_.get(), | |
| 94 chrome_checkin_info, | |
| 95 kUserSerialNumber, | |
| 96 user_checkin_info_); | |
| 97 request.Start(); | |
|
Nicolas Zea
2014/01/04 01:40:19
nit: newline after (to match other tests)
fgorski
2014/01/06 20:34:12
Done.
| |
| 98 EXPECT_EQ(kBlankAndroidId, android_id_); | |
| 99 EXPECT_EQ(kBlankSecurityToken, security_token_); | |
| 100 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | |
| 101 ASSERT_TRUE(fetcher); | |
| 102 fetcher->set_response_code(net::HTTP_OK); | |
| 103 fetcher->SetResponseString(std::string()); | |
| 104 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 105 EXPECT_EQ(0u, android_id_); | |
| 106 EXPECT_EQ(0u, security_token_); | |
| 107 } | |
| 108 | |
| 109 TEST_F(GCMCheckinRequestTest, FetcherData) { | |
| 110 GCMClient::ChromeCheckInInfo chrome_checkin_info = CreateCheckInInfo(); | |
| 111 user_checkin_info_.android_id = kAndroidId; | |
| 112 user_checkin_info_.secret = kSecurityToken; | |
| 113 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, | |
| 114 base::Unretained(this)), | |
| 115 getter_.get(), | |
| 116 chrome_checkin_info, | |
| 117 kUserSerialNumber, | |
| 118 user_checkin_info_); | |
| 119 request.Start(); | |
| 120 | |
| 121 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | |
| 122 ASSERT_TRUE(fetcher); | |
| 123 fetcher->set_response_code(net::HTTP_OK); | |
| 124 checkin_proto::AndroidCheckinRequest request_proto; | |
| 125 request_proto.ParseFromString(fetcher->upload_data()); | |
| 126 EXPECT_EQ(kAndroidId, request_proto.id()); | |
| 127 EXPECT_EQ(kSecurityToken, request_proto.security_token()); | |
| 128 EXPECT_EQ(kUserSerialNumber, request_proto.user_serial_number()); | |
| 129 EXPECT_EQ(chrome_checkin_info.platform, | |
| 130 request_proto.checkin().chrome_build().platform()); | |
| 131 EXPECT_EQ(chrome_checkin_info.chrome_version, | |
| 132 request_proto.checkin().chrome_build().chrome_version()); | |
| 133 EXPECT_EQ(chrome_checkin_info.channel, | |
| 134 request_proto.checkin().chrome_build().channel()); | |
| 135 EXPECT_EQ(kExpectedDeviceType, request_proto.checkin().type()); | |
| 136 } | |
| 137 | |
| 138 TEST_F(GCMCheckinRequestTest, SuccessfulCheckin) { | |
|
jianli
2014/01/04 01:34:10
Is this to test subsequent checkin? If so, better
fgorski
2014/01/06 20:34:12
Done.
jianli
2014/01/06 21:00:01
It is still the old name in your new patch.
| |
| 139 GCMClient::ChromeCheckInInfo chrome_checkin_info = CreateCheckInInfo(); | |
| 140 user_checkin_info_.android_id = kAndroidId; | |
| 141 user_checkin_info_.secret = kSecurityToken; | |
| 142 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, | |
| 143 base::Unretained(this)), | |
| 144 getter_.get(), | |
| 145 chrome_checkin_info, | |
| 146 kUserSerialNumber, | |
| 147 user_checkin_info_); | |
| 148 request.Start(); | |
|
Nicolas Zea
2014/01/04 01:40:19
nit: newline after (to match other tests)
fgorski
2014/01/06 20:34:12
Done.
| |
| 149 EXPECT_EQ(kBlankAndroidId, android_id_); | |
| 150 EXPECT_EQ(kBlankSecurityToken, security_token_); | |
| 151 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | |
| 152 ASSERT_TRUE(fetcher); | |
| 153 fetcher->set_response_code(net::HTTP_OK); | |
| 154 SetResponse(fetcher, kAndroidId, kSecurityToken); | |
| 155 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 156 EXPECT_EQ(kAndroidId, android_id_); | |
| 157 EXPECT_EQ(kSecurityToken, security_token_); | |
| 158 } | |
| 159 | |
| 160 TEST_F(GCMCheckinRequestTest, SuccessfulFirstTimeCheckin) { | |
| 161 GCMClient::ChromeCheckInInfo chrome_checkin_info = CreateCheckInInfo(); | |
| 162 GCMCheckinRequest request(base::Bind(&GCMCheckinRequestTest::FetcherCallback, | |
| 163 base::Unretained(this)), | |
| 164 getter_.get(), | |
| 165 chrome_checkin_info, | |
| 166 kUserSerialNumber, | |
| 167 user_checkin_info_); | |
| 168 request.Start(); | |
| 169 | |
| 170 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | |
| 171 ASSERT_TRUE(fetcher); | |
| 172 fetcher->set_response_code(net::HTTP_OK); | |
| 173 SetResponse(fetcher, kAndroidId, kSecurityToken); | |
| 174 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 175 EXPECT_EQ(kAndroidId, android_id_); | |
| 176 EXPECT_EQ(kSecurityToken, security_token_); | |
| 177 } | |
| 178 | |
| 179 } // namespace gcm | |
| OLD | NEW |