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

Side by Side Diff: sync/notifier/gcm_network_channel_unittest.cc

Issue 182333003: Build correct URL for cacheinvalidation endpoint. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@RollCacheInvalidations
Patch Set: fix build Created 6 years, 9 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 | « sync/notifier/gcm_network_channel.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/run_loop.h" 5 #include "base/run_loop.h"
6 #include "base/strings/string_util.h"
6 #include "google_apis/gaia/google_service_auth_error.h" 7 #include "google_apis/gaia/google_service_auth_error.h"
7 #include "net/url_request/test_url_fetcher_factory.h" 8 #include "net/url_request/test_url_fetcher_factory.h"
8 #include "net/url_request/url_request_test_util.h" 9 #include "net/url_request/url_request_test_util.h"
9 #include "sync/notifier/gcm_network_channel.h" 10 #include "sync/notifier/gcm_network_channel.h"
10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
11 12
12 namespace syncer { 13 namespace syncer {
13 namespace {
14 14
15 class TestGCMNetworkChannelDelegate : public GCMNetworkChannelDelegate { 15 class TestGCMNetworkChannelDelegate : public GCMNetworkChannelDelegate {
16 public: 16 public:
17 TestGCMNetworkChannelDelegate() 17 TestGCMNetworkChannelDelegate()
18 : register_call_count_(0) {} 18 : register_call_count_(0) {}
19 19
20 virtual void Initialize() OVERRIDE {} 20 virtual void Initialize() OVERRIDE {}
21 21
22 virtual void RequestToken(RequestTokenCallback callback) OVERRIDE { 22 virtual void RequestToken(RequestTokenCallback callback) OVERRIDE {
23 request_token_callback = callback; 23 request_token_callback = callback;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 }; 66 };
67 67
68 class TestGCMNetworkChannel : public GCMNetworkChannel { 68 class TestGCMNetworkChannel : public GCMNetworkChannel {
69 public: 69 public:
70 TestGCMNetworkChannel( 70 TestGCMNetworkChannel(
71 scoped_refptr<net::URLRequestContextGetter> request_context_getter, 71 scoped_refptr<net::URLRequestContextGetter> request_context_getter,
72 scoped_ptr<GCMNetworkChannelDelegate> delegate) 72 scoped_ptr<GCMNetworkChannelDelegate> delegate)
73 : GCMNetworkChannel(request_context_getter, delegate.Pass()) { 73 : GCMNetworkChannel(request_context_getter, delegate.Pass()) {
74 ResetRegisterBackoffEntryForTest(&kTestBackoffPolicy); 74 ResetRegisterBackoffEntryForTest(&kTestBackoffPolicy);
75 } 75 }
76
77 protected:
78 // On Android GCMNetworkChannel::BuildUrl hits NOTREACHED(). I still want
79 // tests to run.
80 virtual GURL BuildUrl(const std::string& registration_id) OVERRIDE {
81 return GURL("http://test.url.com");
82 }
76 }; 83 };
77 84
78 class GCMNetworkChannelTest 85 class GCMNetworkChannelTest
79 : public ::testing::Test, 86 : public ::testing::Test,
80 public SyncNetworkChannel::Observer { 87 public SyncNetworkChannel::Observer {
81 protected: 88 protected:
82 GCMNetworkChannelTest() 89 GCMNetworkChannelTest()
83 : delegate_(NULL), 90 : delegate_(NULL),
84 url_fetchers_created_count_(0) { 91 url_fetchers_created_count_(0) {
85 } 92 }
(...skipping 17 matching lines...) Expand all
103 this, &GCMNetworkChannelTest::OnIncomingMessage)); 110 this, &GCMNetworkChannelTest::OnIncomingMessage));
104 url_fetcher_factory_.reset(new net::FakeURLFetcherFactory(NULL, 111 url_fetcher_factory_.reset(new net::FakeURLFetcherFactory(NULL,
105 base::Bind(&GCMNetworkChannelTest::CreateURLFetcher, 112 base::Bind(&GCMNetworkChannelTest::CreateURLFetcher,
106 base::Unretained(this)))); 113 base::Unretained(this))));
107 } 114 }
108 115
109 virtual void TearDown() { 116 virtual void TearDown() {
110 gcm_network_channel_->RemoveObserver(this); 117 gcm_network_channel_->RemoveObserver(this);
111 } 118 }
112 119
120 // Helper functions to call private methods from test
121 GURL BuildUrl(const std::string& registration_id) {
122 return gcm_network_channel_->GCMNetworkChannel::BuildUrl(registration_id);
123 }
124
125 static void Base64EncodeURLSafe(const std::string& input,
126 std::string* output) {
127 GCMNetworkChannel::Base64EncodeURLSafe(input, output);
128 }
129
130 static bool Base64DecodeURLSafe(const std::string& input,
131 std::string* output) {
132 return GCMNetworkChannel::Base64DecodeURLSafe(input, output);
133 }
134
113 virtual void OnNetworkChannelStateChanged( 135 virtual void OnNetworkChannelStateChanged(
114 InvalidatorState invalidator_state) OVERRIDE { 136 InvalidatorState invalidator_state) OVERRIDE {
115 } 137 }
116 138
117 void OnIncomingMessage(std::string incoming_message) { 139 void OnIncomingMessage(std::string incoming_message) {
118 } 140 }
119 141
120 GCMNetworkChannel* network_channel() { 142 GCMNetworkChannel* network_channel() {
121 return gcm_network_channel_.get(); 143 return gcm_network_channel_.get();
122 } 144 }
(...skipping 29 matching lines...) Expand all
152 private: 174 private:
153 base::MessageLoop message_loop_; 175 base::MessageLoop message_loop_;
154 TestGCMNetworkChannelDelegate* delegate_; 176 TestGCMNetworkChannelDelegate* delegate_;
155 scoped_ptr<GCMNetworkChannel> gcm_network_channel_; 177 scoped_ptr<GCMNetworkChannel> gcm_network_channel_;
156 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; 178 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
157 scoped_ptr<net::FakeURLFetcherFactory> url_fetcher_factory_; 179 scoped_ptr<net::FakeURLFetcherFactory> url_fetcher_factory_;
158 int url_fetchers_created_count_; 180 int url_fetchers_created_count_;
159 }; 181 };
160 182
161 TEST_F(GCMNetworkChannelTest, HappyCase) { 183 TEST_F(GCMNetworkChannelTest, HappyCase) {
162 GURL url("http://invalid.url.com"); 184 url_fetcher_factory()->SetFakeResponse(GURL("http://test.url.com"),
163 url_fetcher_factory()->SetFakeResponse(url, std::string(), net::HTTP_OK, 185 std::string(),
186 net::HTTP_OK,
164 net::URLRequestStatus::SUCCESS); 187 net::URLRequestStatus::SUCCESS);
165 188
166 // After construction GCMNetworkChannel should have called Register. 189 // After construction GCMNetworkChannel should have called Register.
167 EXPECT_FALSE(delegate()->register_callback.is_null()); 190 EXPECT_FALSE(delegate()->register_callback.is_null());
168 // Return valid registration id. 191 // Return valid registration id.
169 delegate()->register_callback.Run("registration.id", gcm::GCMClient::SUCCESS); 192 delegate()->register_callback.Run("registration.id", gcm::GCMClient::SUCCESS);
170 193
171 network_channel()->SendMessage("abra.cadabra"); 194 network_channel()->SendMessage("abra.cadabra");
172 // SendMessage should have triggered RequestToken. No HTTP request should be 195 // SendMessage should have triggered RequestToken. No HTTP request should be
173 // started yet. 196 // started yet.
(...skipping 28 matching lines...) Expand all
202 // GcmNetworkChannel should give up trying. 225 // GcmNetworkChannel should give up trying.
203 EXPECT_EQ(2, delegate()->register_call_count_); 226 EXPECT_EQ(2, delegate()->register_call_count_);
204 227
205 network_channel()->SendMessage("abra.cadabra"); 228 network_channel()->SendMessage("abra.cadabra");
206 // SendMessage shouldn't trigger RequestToken. 229 // SendMessage shouldn't trigger RequestToken.
207 EXPECT_TRUE(delegate()->request_token_callback.is_null()); 230 EXPECT_TRUE(delegate()->request_token_callback.is_null());
208 EXPECT_EQ(0, url_fetchers_created_count()); 231 EXPECT_EQ(0, url_fetchers_created_count());
209 } 232 }
210 233
211 TEST_F(GCMNetworkChannelTest, RegisterFinishesAfterSendMessage) { 234 TEST_F(GCMNetworkChannelTest, RegisterFinishesAfterSendMessage) {
212 GURL url("http://invalid.url.com"); 235 url_fetcher_factory()->SetFakeResponse(GURL("http://test.url.com"),
213 url_fetcher_factory()->SetFakeResponse(url, "", net::HTTP_OK, 236 "",
214 net::URLRequestStatus::SUCCESS); 237 net::HTTP_OK,
238 net::URLRequestStatus::SUCCESS);
215 239
216 // After construction GCMNetworkChannel should have called Register. 240 // After construction GCMNetworkChannel should have called Register.
217 EXPECT_FALSE(delegate()->register_callback.is_null()); 241 EXPECT_FALSE(delegate()->register_callback.is_null());
218 242
219 network_channel()->SendMessage("abra.cadabra"); 243 network_channel()->SendMessage("abra.cadabra");
220 // SendMessage shouldn't trigger RequestToken. 244 // SendMessage shouldn't trigger RequestToken.
221 EXPECT_TRUE(delegate()->request_token_callback.is_null()); 245 EXPECT_TRUE(delegate()->request_token_callback.is_null());
222 EXPECT_EQ(url_fetchers_created_count(), 0); 246 EXPECT_EQ(url_fetchers_created_count(), 0);
223 247
224 // Return valid registration id. 248 // Return valid registration id.
(...skipping 22 matching lines...) Expand all
247 // RequestToken returns failure. 271 // RequestToken returns failure.
248 delegate()->request_token_callback.Run( 272 delegate()->request_token_callback.Run(
249 GoogleServiceAuthError::FromConnectionError(1), ""); 273 GoogleServiceAuthError::FromConnectionError(1), "");
250 274
251 // Should be no HTTP requests. 275 // Should be no HTTP requests.
252 EXPECT_EQ(url_fetchers_created_count(), 0); 276 EXPECT_EQ(url_fetchers_created_count(), 0);
253 } 277 }
254 278
255 TEST_F(GCMNetworkChannelTest, AuthErrorFromServer) { 279 TEST_F(GCMNetworkChannelTest, AuthErrorFromServer) {
256 // Setup fake response to return AUTH_ERROR. 280 // Setup fake response to return AUTH_ERROR.
257 GURL url("http://invalid.url.com"); 281 url_fetcher_factory()->SetFakeResponse(GURL("http://test.url.com"),
258 url_fetcher_factory()->SetFakeResponse(url, "", net::HTTP_UNAUTHORIZED, 282 "",
259 net::URLRequestStatus::SUCCESS); 283 net::HTTP_UNAUTHORIZED,
284 net::URLRequestStatus::SUCCESS);
260 285
261 // After construction GCMNetworkChannel should have called Register. 286 // After construction GCMNetworkChannel should have called Register.
262 EXPECT_FALSE(delegate()->register_callback.is_null()); 287 EXPECT_FALSE(delegate()->register_callback.is_null());
263 // Return valid registration id. 288 // Return valid registration id.
264 delegate()->register_callback.Run("registration.id", gcm::GCMClient::SUCCESS); 289 delegate()->register_callback.Run("registration.id", gcm::GCMClient::SUCCESS);
265 290
266 network_channel()->SendMessage("abra.cadabra"); 291 network_channel()->SendMessage("abra.cadabra");
267 // SendMessage should have triggered RequestToken. No HTTP request should be 292 // SendMessage should have triggered RequestToken. No HTTP request should be
268 // started yet. 293 // started yet.
269 EXPECT_FALSE(delegate()->request_token_callback.is_null()); 294 EXPECT_FALSE(delegate()->request_token_callback.is_null());
(...skipping 16 matching lines...) Expand all
286 311
287 TEST_F(GCMNetworkChannelTest, RequestTokenNeverCompletes) { 312 TEST_F(GCMNetworkChannelTest, RequestTokenNeverCompletes) {
288 network_channel()->SendMessage("abra.cadabra"); 313 network_channel()->SendMessage("abra.cadabra");
289 // Return valid registration id. 314 // Return valid registration id.
290 delegate()->register_callback.Run("registration.id", gcm::GCMClient::SUCCESS); 315 delegate()->register_callback.Run("registration.id", gcm::GCMClient::SUCCESS);
291 // RequestToken should be called by now. Let's not complete and see what 316 // RequestToken should be called by now. Let's not complete and see what
292 // happens. 317 // happens.
293 EXPECT_FALSE(delegate()->request_token_callback.is_null()); 318 EXPECT_FALSE(delegate()->request_token_callback.is_null());
294 } 319 }
295 320
296 } // namespace 321 #if !defined(ANDROID)
322 TEST_F(GCMNetworkChannelTest, BuildUrl) {
323 GURL url = BuildUrl("registration.id");
324 EXPECT_TRUE(url.SchemeIsHTTPOrHTTPS());
325 EXPECT_FALSE(url.host().empty());
326 EXPECT_FALSE(url.path().empty());
327 std::vector<std::string> parts;
328 Tokenize(url.path(), "/", &parts);
329 std::string buffer;
330 EXPECT_TRUE(Base64DecodeURLSafe(parts[parts.size() - 1], &buffer));
331 }
332 #endif
333
334 TEST_F(GCMNetworkChannelTest, Base64EncodeDecode) {
335 std::string input;
336 std::string plain;
337 std::string base64;
338 // Empty string.
339 Base64EncodeURLSafe(input, &base64);
340 EXPECT_TRUE(base64.empty());
341 EXPECT_TRUE(Base64DecodeURLSafe(base64, &plain));
342 EXPECT_EQ(input, plain);
343 // String length: 1..7.
344 for (int length = 1; length < 8; length++) {
345 input = "abra.cadabra";
346 input.resize(length);
347 Base64EncodeURLSafe(input, &base64);
348 // Ensure no padding at the end.
349 EXPECT_NE(base64[base64.size() - 1], '=');
350 EXPECT_TRUE(Base64DecodeURLSafe(base64, &plain));
351 EXPECT_EQ(input, plain);
352 }
353 // Presence of '-', '_'.
354 input = "\xfb\xff";
355 Base64EncodeURLSafe(input, &base64);
356 EXPECT_EQ("-_8", base64);
357 EXPECT_TRUE(Base64DecodeURLSafe(base64, &plain));
358 EXPECT_EQ(input, plain);
359 }
360
297 } // namespace syncer 361 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/notifier/gcm_network_channel.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698