| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "chrome/browser/local_discovery/privet_confirm_api_flow.h" | 7 #include "chrome/browser/local_discovery/privet_confirm_api_flow.h" |
| 8 #include "content/public/test/test_browser_thread.h" | 8 #include "content/public/test/test_browser_thread.h" |
| 9 #include "google_apis/gaia/fake_oauth2_token_service.h" | 9 #include "google_apis/gaia/fake_oauth2_token_service.h" |
| 10 #include "google_apis/gaia/google_service_auth_error.h" | 10 #include "google_apis/gaia/google_service_auth_error.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 "}"; | 27 "}"; |
| 28 | 28 |
| 29 const char kFailedConfirmResponse[] = "{" | 29 const char kFailedConfirmResponse[] = "{" |
| 30 " \"success\": false" | 30 " \"success\": false" |
| 31 "}"; | 31 "}"; |
| 32 | 32 |
| 33 const char kFailedConfirmResponseBadJson[] = "[" | 33 const char kFailedConfirmResponseBadJson[] = "[" |
| 34 " \"success\"" | 34 " \"success\"" |
| 35 "]"; | 35 "]"; |
| 36 | 36 |
| 37 const char kGCDConfirmResponse[] = | |
| 38 "{" | |
| 39 " \"kind\": \"clouddevices#registrationTicket\"" | |
| 40 "}"; | |
| 41 | |
| 42 const char kAccountId[] = "account_id"; | 37 const char kAccountId[] = "account_id"; |
| 43 | 38 |
| 44 class MockableConfirmCallback { | 39 class MockableConfirmCallback { |
| 45 public: | 40 public: |
| 46 MOCK_METHOD1(ConfirmCallback, void(GCDBaseApiFlow::Status)); | 41 MOCK_METHOD1(ConfirmCallback, void(GCDBaseApiFlow::Status)); |
| 47 | 42 |
| 48 PrivetConfirmApiCallFlow::ResponseCallback callback() { | 43 PrivetConfirmApiCallFlow::ResponseCallback callback() { |
| 49 return base::Bind(&MockableConfirmCallback::ConfirmCallback, | 44 return base::Bind(&MockableConfirmCallback::ConfirmCallback, |
| 50 base::Unretained(this)); | 45 base::Unretained(this)); |
| 51 } | 46 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 74 net::TestURLFetcherFactory fetcher_factory_; | 69 net::TestURLFetcherFactory fetcher_factory_; |
| 75 FakeOAuth2TokenService token_service_; | 70 FakeOAuth2TokenService token_service_; |
| 76 MockableConfirmCallback callback_; | 71 MockableConfirmCallback callback_; |
| 77 std::string account_id_; | 72 std::string account_id_; |
| 78 }; | 73 }; |
| 79 | 74 |
| 80 TEST_F(PrivetConfirmApiFlowTest, SuccessOAuth2) { | 75 TEST_F(PrivetConfirmApiFlowTest, SuccessOAuth2) { |
| 81 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 76 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
| 82 &token_service_, | 77 &token_service_, |
| 83 account_id_, | 78 account_id_, |
| 84 true, | |
| 85 "SomeToken", | 79 "SomeToken", |
| 86 callback_.callback()); | 80 callback_.callback()); |
| 87 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 81 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
| 88 | 82 |
| 89 confirm_flow.Start(); | 83 confirm_flow.Start(); |
| 90 | 84 |
| 91 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | 85 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); |
| 92 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | 86 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); |
| 93 | 87 |
| 94 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), | 88 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 110 | 104 |
| 111 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS)); | 105 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS)); |
| 112 | 106 |
| 113 fetcher->delegate()->OnURLFetchComplete(fetcher); | 107 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 114 } | 108 } |
| 115 | 109 |
| 116 TEST_F(PrivetConfirmApiFlowTest, BadToken) { | 110 TEST_F(PrivetConfirmApiFlowTest, BadToken) { |
| 117 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 111 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
| 118 &token_service_, | 112 &token_service_, |
| 119 account_id_, | 113 account_id_, |
| 120 true, | |
| 121 "SomeCloudprintToken", | 114 "SomeCloudprintToken", |
| 122 callback_.callback()); | 115 callback_.callback()); |
| 123 | 116 |
| 124 confirm_flow.Start(); | 117 confirm_flow.Start(); |
| 125 | 118 |
| 126 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 119 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
| 127 | 120 |
| 128 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_TOKEN)); | 121 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_TOKEN)); |
| 129 cloudprint_flow->OnGetTokenFailure(NULL, GoogleServiceAuthError( | 122 cloudprint_flow->OnGetTokenFailure(NULL, GoogleServiceAuthError( |
| 130 GoogleServiceAuthError::USER_NOT_SIGNED_UP)); | 123 GoogleServiceAuthError::USER_NOT_SIGNED_UP)); |
| 131 } | 124 } |
| 132 | 125 |
| 133 TEST_F(PrivetConfirmApiFlowTest, ServerFailure) { | 126 TEST_F(PrivetConfirmApiFlowTest, ServerFailure) { |
| 134 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 127 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
| 135 &token_service_, | 128 &token_service_, |
| 136 account_id_, | 129 account_id_, |
| 137 true, | |
| 138 "SomeToken", | 130 "SomeToken", |
| 139 callback_.callback()); | 131 callback_.callback()); |
| 140 | 132 |
| 141 confirm_flow.Start(); | 133 confirm_flow.Start(); |
| 142 | 134 |
| 143 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 135 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
| 144 | 136 |
| 145 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | 137 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); |
| 146 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | 138 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); |
| 147 | 139 |
| 148 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), | 140 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), |
| 149 fetcher->GetOriginalURL()); | 141 fetcher->GetOriginalURL()); |
| 150 | 142 |
| 151 fetcher->SetResponseString(kFailedConfirmResponse); | 143 fetcher->SetResponseString(kFailedConfirmResponse); |
| 152 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, | 144 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, |
| 153 net::OK)); | 145 net::OK)); |
| 154 fetcher->set_response_code(200); | 146 fetcher->set_response_code(200); |
| 155 | 147 |
| 156 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_FROM_SERVER)); | 148 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_FROM_SERVER)); |
| 157 | 149 |
| 158 fetcher->delegate()->OnURLFetchComplete(fetcher); | 150 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 159 } | 151 } |
| 160 | 152 |
| 161 TEST_F(PrivetConfirmApiFlowTest, BadJson) { | 153 TEST_F(PrivetConfirmApiFlowTest, BadJson) { |
| 162 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 154 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
| 163 &token_service_, | 155 &token_service_, |
| 164 account_id_, | 156 account_id_, |
| 165 true, | |
| 166 "SomeToken", | 157 "SomeToken", |
| 167 callback_.callback()); | 158 callback_.callback()); |
| 168 | 159 |
| 169 confirm_flow.Start(); | 160 confirm_flow.Start(); |
| 170 | 161 |
| 171 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 162 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
| 172 | 163 |
| 173 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | 164 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); |
| 174 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | 165 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); |
| 175 | 166 |
| 176 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), | 167 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), |
| 177 fetcher->GetOriginalURL()); | 168 fetcher->GetOriginalURL()); |
| 178 | 169 |
| 179 fetcher->SetResponseString(kFailedConfirmResponseBadJson); | 170 fetcher->SetResponseString(kFailedConfirmResponseBadJson); |
| 180 fetcher->set_status(net::URLRequestStatus( | 171 fetcher->set_status(net::URLRequestStatus( |
| 181 net::URLRequestStatus::SUCCESS, | 172 net::URLRequestStatus::SUCCESS, |
| 182 net::OK)); | 173 net::OK)); |
| 183 fetcher->set_response_code(200); | 174 fetcher->set_response_code(200); |
| 184 | 175 |
| 185 EXPECT_CALL(callback_, | 176 EXPECT_CALL(callback_, |
| 186 ConfirmCallback(GCDBaseApiFlow::ERROR_MALFORMED_RESPONSE)); | 177 ConfirmCallback(GCDBaseApiFlow::ERROR_MALFORMED_RESPONSE)); |
| 187 | 178 |
| 188 fetcher->delegate()->OnURLFetchComplete(fetcher); | 179 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 189 } | 180 } |
| 190 | 181 |
| 191 TEST_F(PrivetConfirmApiFlowTest, SuccessGCD) { | |
| 192 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | |
| 193 &token_service_, | |
| 194 account_id_, | |
| 195 false, | |
| 196 "SomeGcdToken", | |
| 197 callback_.callback()); | |
| 198 GCDBaseApiFlow* gcd_flow = confirm_flow.GetBaseApiFlowForTests(); | |
| 199 | |
| 200 confirm_flow.Start(); | |
| 201 | |
| 202 gcd_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | |
| 203 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | |
| 204 | |
| 205 EXPECT_EQ(GURL("https://www.googleapis.com/clouddevices/v1/" | |
| 206 "registrationTickets/SomeGcdToken"), | |
| 207 fetcher->GetOriginalURL()); | |
| 208 | |
| 209 EXPECT_EQ("{ \"userEmail\": \"me\" }", fetcher->upload_data()); | |
| 210 | |
| 211 net::HttpRequestHeaders headers; | |
| 212 fetcher->GetExtraRequestHeaders(&headers); | |
| 213 std::string oauth_header; | |
| 214 std::string proxy; | |
| 215 EXPECT_TRUE(headers.GetHeader("Authorization", &oauth_header)); | |
| 216 EXPECT_EQ("Bearer SomeToken", oauth_header); | |
| 217 EXPECT_FALSE(headers.GetHeader("X-Cloudprint-Proxy", &proxy)); | |
| 218 | |
| 219 fetcher->SetResponseString(kGCDConfirmResponse); | |
| 220 fetcher->set_status( | |
| 221 net::URLRequestStatus(net::URLRequestStatus::SUCCESS, net::OK)); | |
| 222 fetcher->set_response_code(200); | |
| 223 | |
| 224 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS)); | |
| 225 | |
| 226 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
| 227 } | |
| 228 | |
| 229 } // namespace | 182 } // namespace |
| 230 | 183 |
| 231 } // namespace local_discovery | 184 } // namespace local_discovery |
| OLD | NEW |