Chromium Code Reviews| Index: sync/notifier/gcm_network_channel_unittest.cc |
| diff --git a/sync/notifier/gcm_network_channel_unittest.cc b/sync/notifier/gcm_network_channel_unittest.cc |
| index a8ef9ac32ae3a375901f9cf602307f1445b6b001..1163f00e8821a8c07a09b97da60d2ac850a83bd1 100644 |
| --- a/sync/notifier/gcm_network_channel_unittest.cc |
| +++ b/sync/notifier/gcm_network_channel_unittest.cc |
| @@ -3,6 +3,7 @@ |
| // found in the LICENSE file. |
| #include "base/run_loop.h" |
| +#include "base/strings/string_util.h" |
| #include "google_apis/gaia/google_service_auth_error.h" |
| #include "net/url_request/test_url_fetcher_factory.h" |
| #include "net/url_request/url_request_test_util.h" |
| @@ -10,7 +11,6 @@ |
| #include "testing/gtest/include/gtest/gtest.h" |
| namespace syncer { |
| -namespace { |
| class TestGCMNetworkChannelDelegate : public GCMNetworkChannelDelegate { |
| public: |
| @@ -73,6 +73,13 @@ class TestGCMNetworkChannel : public GCMNetworkChannel { |
| : GCMNetworkChannel(request_context_getter, delegate.Pass()) { |
| ResetRegisterBackoffEntryForTest(&kTestBackoffPolicy); |
| } |
| + |
| + protected: |
| + // On Android GCMNetworkChannel::BuildUrl hits NOTREACHED(). I still want |
| + // tests to run. |
| + GURL BuildUrl(const std::string& registration_id) { |
| + return GURL("http://test.url.com"); |
| + } |
| }; |
| class GCMNetworkChannelTest |
| @@ -110,6 +117,21 @@ class GCMNetworkChannelTest |
| gcm_network_channel_->RemoveObserver(this); |
| } |
| + // Helper functions to call private methods from test |
| + GURL BuildUrl(const std::string& registration_id) { |
| + return gcm_network_channel_->GCMNetworkChannel::BuildUrl(registration_id); |
| + } |
| + |
| + static void Base64EncodeURLSafe(const std::string& input, |
| + std::string* output) { |
| + GCMNetworkChannel::Base64EncodeURLSafe(input, output); |
| + } |
| + |
| + static bool Base64DecodeURLSafe(const std::string& input, |
| + std::string* output) { |
| + return GCMNetworkChannel::Base64DecodeURLSafe(input, output); |
| + } |
| + |
| virtual void OnNetworkChannelStateChanged( |
| InvalidatorState invalidator_state) OVERRIDE { |
| } |
| @@ -159,8 +181,9 @@ class GCMNetworkChannelTest |
| }; |
| TEST_F(GCMNetworkChannelTest, HappyCase) { |
| - GURL url("http://invalid.url.com"); |
| - url_fetcher_factory()->SetFakeResponse(url, std::string(), net::HTTP_OK, |
| + url_fetcher_factory()->SetFakeResponse(GURL("http://test.url.com"), |
| + std::string(), |
| + net::HTTP_OK, |
| net::URLRequestStatus::SUCCESS); |
| // After construction GCMNetworkChannel should have called Register. |
| @@ -209,9 +232,10 @@ TEST_F(GCMNetworkChannelTest, FailedRegister) { |
| } |
| TEST_F(GCMNetworkChannelTest, RegisterFinishesAfterSendMessage) { |
| - GURL url("http://invalid.url.com"); |
| - url_fetcher_factory()->SetFakeResponse(url, "", net::HTTP_OK, |
| - net::URLRequestStatus::SUCCESS); |
| + url_fetcher_factory()->SetFakeResponse(GURL("http://test.url.com"), |
| + "", |
| + net::HTTP_OK, |
| + net::URLRequestStatus::SUCCESS); |
| // After construction GCMNetworkChannel should have called Register. |
| EXPECT_FALSE(delegate()->register_callback.is_null()); |
| @@ -254,9 +278,10 @@ TEST_F(GCMNetworkChannelTest, RequestTokenFailure) { |
| TEST_F(GCMNetworkChannelTest, AuthErrorFromServer) { |
| // Setup fake response to return AUTH_ERROR. |
| - GURL url("http://invalid.url.com"); |
| - url_fetcher_factory()->SetFakeResponse(url, "", net::HTTP_UNAUTHORIZED, |
| - net::URLRequestStatus::SUCCESS); |
| + url_fetcher_factory()->SetFakeResponse(GURL("http://test.url.com"), |
| + "", |
| + net::HTTP_UNAUTHORIZED, |
| + net::URLRequestStatus::SUCCESS); |
| // After construction GCMNetworkChannel should have called Register. |
| EXPECT_FALSE(delegate()->register_callback.is_null()); |
| @@ -293,5 +318,44 @@ TEST_F(GCMNetworkChannelTest, RequestTokenNeverCompletes) { |
| EXPECT_FALSE(delegate()->request_token_callback.is_null()); |
| } |
| -} // namespace |
| +#ifndef ANDROID |
|
rlarocque
2014/03/07 19:42:20
nit: This looked a little unusual to me. I did so
|
| +TEST_F(GCMNetworkChannelTest, BuildUrl) { |
| + GURL url = BuildUrl("registration.id"); |
| + EXPECT_TRUE(url.SchemeIsHTTPOrHTTPS()); |
| + EXPECT_FALSE(url.host().empty()); |
| + EXPECT_FALSE(url.path().empty()); |
| + std::vector<std::string> parts; |
| + Tokenize(url.path(), "/", &parts); |
| + std::string buffer; |
| + EXPECT_TRUE(Base64DecodeURLSafe(parts[parts.size() - 1], &buffer)); |
| +} |
| +#endif |
| + |
| +TEST_F(GCMNetworkChannelTest, Base64EncodeDecode) { |
| + std::string input; |
| + std::string plain; |
| + std::string base64; |
| + // Empty string. |
| + Base64EncodeURLSafe(input, &base64); |
| + EXPECT_TRUE(base64.empty()); |
| + EXPECT_TRUE(Base64DecodeURLSafe(base64, &plain)); |
| + EXPECT_EQ(input, plain); |
| + // String length: 1..7. |
| + for (int length = 1; length < 8; length++) { |
| + input = "abra.cadabra"; |
| + input.resize(length); |
| + Base64EncodeURLSafe(input, &base64); |
| + // Ensure no padding at the end. |
| + EXPECT_NE(base64[base64.size() - 1], '='); |
| + EXPECT_TRUE(Base64DecodeURLSafe(base64, &plain)); |
| + EXPECT_EQ(input, plain); |
| + } |
| + // Presence of '-', '_'. |
| + input = "\xfb\xff"; |
| + Base64EncodeURLSafe(input, &base64); |
| + EXPECT_EQ("-_8", base64); |
| + EXPECT_TRUE(Base64DecodeURLSafe(base64, &plain)); |
| + EXPECT_EQ(input, plain); |
| +} |
| + |
| } // namespace syncer |