Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: google_apis/gcm/engine/checkin_request_unittest.cc

Issue 98173009: GCM Checkin implementation with unit tests and protobufs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gcm-store
Patch Set: Final patch with gcm::CheckinRequest Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « google_apis/gcm/engine/checkin_request.cc ('k') | google_apis/gcm/gcm.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 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 <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 ResponseScenario {
25 VALID_RESPONSE, // Both android_id and security_token set in response.
26 MISSING_ANDROID_ID, // android_id is missing.
27 MISSING_SECURITY_TOKEN, // security_token is missing.
28 ANDROID_ID_IS_ZER0, // android_id is 0.
29 SECURITY_TOKEN_IS_ZERO // security_token is 0.
30 };
31
32 CheckinRequestTest();
33 virtual ~CheckinRequestTest();
34
35 void FetcherCallback(uint64 android_id, uint64 security_token);
36
37 void CreateRequest(uint64 android_id, uint64 security_token);
38
39 void SetResponseStatusAndString(
40 net::HttpStatusCode status_code,
41 const std::string& response_data);
42
43 void CompleteFetch();
44
45 void SetResponse(ResponseScenario response_scenario);
46
47 protected:
48 uint64 android_id_;
49 uint64 security_token_;
50 int checkin_device_type_;
51 base::MessageLoop message_loop_;
52 net::TestURLFetcherFactory url_fetcher_factory_;
53 scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_;
54 checkin_proto::ChromeBuildProto chrome_build_proto_;
55 scoped_ptr<CheckinRequest> request_;
56 };
57
58 CheckinRequestTest::CheckinRequestTest()
59 : android_id_(kBlankAndroidId),
60 security_token_(kBlankSecurityToken),
61 checkin_device_type_(0),
62 url_request_context_getter_(new net::TestURLRequestContextGetter(
63 message_loop_.message_loop_proxy())) {}
64
65 CheckinRequestTest::~CheckinRequestTest() {}
66
67 void CheckinRequestTest::FetcherCallback(uint64 android_id,
68 uint64 security_token) {
69 android_id_ = android_id;
70 security_token_ = security_token;
71 }
72
73 void CheckinRequestTest::CreateRequest(uint64 android_id,
74 uint64 security_token) {
75 // First setup a chrome_build protobuf.
76 chrome_build_proto_.set_platform(
77 checkin_proto::ChromeBuildProto::PLATFORM_LINUX);
78 chrome_build_proto_.set_channel(
79 checkin_proto::ChromeBuildProto::CHANNEL_CANARY);
80 chrome_build_proto_.set_chrome_version(kChromeVersion);
81 // Then create a request with that protobuf and specified android_id,
82 // security_token.
83 request_.reset(new CheckinRequest(
84 base::Bind(&CheckinRequestTest::FetcherCallback,
85 base::Unretained(this)),
86 chrome_build_proto_,
87 kUserSerialNumber,
88 android_id,
89 security_token,
90 url_request_context_getter_.get()));
91
92 // Setting android_id_ and security_token_ to blank value, not used elsewhere
93 // in the tests.
94 android_id_ = kBlankAndroidId;
95 security_token_ = kBlankSecurityToken;
96 }
97
98 void CheckinRequestTest::SetResponseStatusAndString(
99 net::HttpStatusCode status_code,
100 const std::string& response_data) {
101 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
102 ASSERT_TRUE(fetcher);
103 fetcher->set_response_code(status_code);
104 fetcher->SetResponseString(response_data);
105 }
106
107 void CheckinRequestTest::CompleteFetch() {
108 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
109 ASSERT_TRUE(fetcher);
110 fetcher->delegate()->OnURLFetchComplete(fetcher);
111 }
112
113 void CheckinRequestTest::SetResponse(ResponseScenario response_scenario) {
114 checkin_proto::AndroidCheckinResponse response;
115 response.set_stats_ok(true);
116
117 uint64 android_id = response_scenario == ANDROID_ID_IS_ZER0 ? 0 : kAndroidId;
118 uint64 security_token =
119 response_scenario == SECURITY_TOKEN_IS_ZERO ? 0 : kSecurityToken;
120
121 if (response_scenario != MISSING_ANDROID_ID)
122 response.set_android_id(android_id);
123
124 if (response_scenario != MISSING_SECURITY_TOKEN)
125 response.set_security_token(security_token);
126
127 std::string response_string;
128 response.SerializeToString(&response_string);
129 SetResponseStatusAndString(net::HTTP_OK, response_string);
130 }
131
132 TEST_F(CheckinRequestTest, FetcherData) {
133 CreateRequest(kAndroidId, kSecurityToken);
134 request_->Start();
135
136 // Get data sent by request.
137 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
138 ASSERT_TRUE(fetcher);
139 fetcher->set_response_code(net::HTTP_OK);
140 checkin_proto::AndroidCheckinRequest request_proto;
141 request_proto.ParseFromString(fetcher->upload_data());
142
143 EXPECT_EQ(kAndroidId, static_cast<uint64>(request_proto.id()));
144 EXPECT_EQ(kSecurityToken, request_proto.security_token());
145 EXPECT_EQ(kUserSerialNumber, request_proto.user_serial_number());
146 EXPECT_EQ(chrome_build_proto_.platform(),
147 request_proto.checkin().chrome_build().platform());
148 EXPECT_EQ(chrome_build_proto_.chrome_version(),
149 request_proto.checkin().chrome_build().chrome_version());
150 EXPECT_EQ(chrome_build_proto_.channel(),
151 request_proto.checkin().chrome_build().channel());
152
153 #if defined(CHROME_OS)
154 EXPECT_EQ(checkin_proto::DEVICE_CHROME_OS, request_proto.checkin().type());
155 #else
156 EXPECT_EQ(checkin_proto::DEVICE_CHROME_BROWSER,
157 request_proto.checkin().type());
158 #endif
159 }
160
161 TEST_F(CheckinRequestTest, ResponseBodyEmpty) {
162 CreateRequest(0u, 0u);
163 request_->Start();
164
165 SetResponseStatusAndString(net::HTTP_OK, std::string());
166 CompleteFetch();
167
168 EXPECT_EQ(0u, android_id_);
169 EXPECT_EQ(0u, security_token_);
170 }
171
172 TEST_F(CheckinRequestTest, ResponseBodyCorrupted) {
173 CreateRequest(0u, 0u);
174 request_->Start();
175
176 SetResponseStatusAndString(net::HTTP_OK, "Corrupted response body");
177 CompleteFetch();
178
179 EXPECT_EQ(0u, android_id_);
180 EXPECT_EQ(0u, security_token_);
181 }
182
183 TEST_F(CheckinRequestTest, ResponseHttpStatusNotOK) {
184 CreateRequest(0u, 0u);
185 request_->Start();
186
187 SetResponseStatusAndString(net::HTTP_UNAUTHORIZED, std::string());
188 CompleteFetch();
189
190 EXPECT_EQ(0u, android_id_);
191 EXPECT_EQ(0u, security_token_);
192 }
193
194 TEST_F(CheckinRequestTest, ResponseMissingAndroidId) {
195 CreateRequest(0u, 0u);
196 request_->Start();
197
198 SetResponse(MISSING_ANDROID_ID);
199 CompleteFetch();
200
201 EXPECT_EQ(0u, android_id_);
202 EXPECT_EQ(0u, security_token_);
203 }
204
205 TEST_F(CheckinRequestTest, ResponseMissingSecurityToken) {
206 CreateRequest(0u, 0u);
207 request_->Start();
208
209 SetResponse(MISSING_SECURITY_TOKEN);
210 CompleteFetch();
211
212 EXPECT_EQ(0u, android_id_);
213 EXPECT_EQ(0u, security_token_);
214 }
215
216 TEST_F(CheckinRequestTest, AndroidIdEqualsZeroInResponse) {
217 CreateRequest(0u, 0u);
218 request_->Start();
219
220 SetResponse(ANDROID_ID_IS_ZER0);
221 CompleteFetch();
222
223 EXPECT_EQ(0u, android_id_);
224 EXPECT_EQ(0u, security_token_);
225 }
226
227 TEST_F(CheckinRequestTest, SecurityTokenEqualsZeroInResponse) {
228 CreateRequest(0u, 0u);
229 request_->Start();
230
231 SetResponse(SECURITY_TOKEN_IS_ZERO);
232 CompleteFetch();
233
234 EXPECT_EQ(0u, android_id_);
235 EXPECT_EQ(0u, security_token_);
236 }
237
238 TEST_F(CheckinRequestTest, SuccessfulFirstTimeCheckin) {
239 CreateRequest(0u, 0u);
240 request_->Start();
241
242 SetResponse(VALID_RESPONSE);
243 CompleteFetch();
244
245 EXPECT_EQ(kAndroidId, android_id_);
246 EXPECT_EQ(kSecurityToken, security_token_);
247 }
248
249 TEST_F(CheckinRequestTest, SuccessfulSubsequentCheckin) {
250 CreateRequest(kAndroidId, kSecurityToken);
251 request_->Start();
252
253 SetResponse(VALID_RESPONSE);
254 CompleteFetch();
255
256 EXPECT_EQ(kAndroidId, android_id_);
257 EXPECT_EQ(kSecurityToken, security_token_);
258 }
259
260 } // namespace gcm
OLDNEW
« no previous file with comments | « google_apis/gcm/engine/checkin_request.cc ('k') | google_apis/gcm/gcm.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698