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 |