| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "remoting/test/access_token_fetcher.h" | 5 #include "remoting/test/access_token_fetcher.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 namespace remoting { | 49 namespace remoting { |
| 50 namespace test { | 50 namespace test { |
| 51 | 51 |
| 52 // Provides base functionality for the AccessTokenFetcher Tests below. The | 52 // Provides base functionality for the AccessTokenFetcher Tests below. The |
| 53 // FakeURLFetcherFactory allows us to override the response data and payload for | 53 // FakeURLFetcherFactory allows us to override the response data and payload for |
| 54 // specified URLs. We use this to stub out network calls made by the | 54 // specified URLs. We use this to stub out network calls made by the |
| 55 // AccessTokenFetcher. This fixture also creates an IO MessageLoop, if | 55 // AccessTokenFetcher. This fixture also creates an IO MessageLoop, if |
| 56 // necessary, for use by the AccessTokenFetcher. | 56 // necessary, for use by the AccessTokenFetcher. |
| 57 class AccessTokenFetcherTest : public ::testing::Test { | 57 class AccessTokenFetcherTest : public ::testing::Test { |
| 58 public: | 58 public: |
| 59 AccessTokenFetcherTest() : | 59 AccessTokenFetcherTest(); |
| 60 url_fetcher_factory_(nullptr) {} | 60 ~AccessTokenFetcherTest() override; |
| 61 ~AccessTokenFetcherTest() override {} | |
| 62 | 61 |
| 63 void OnAccessTokenRetrieved( | 62 void OnAccessTokenRetrieved(base::Closure done_closure, |
| 64 base::Closure done_closure, | 63 const std::string& access_token, |
| 65 const std::string& access_token, | 64 const std::string& refresh_token); |
| 66 const std::string& refresh_token) { | |
| 67 access_token_retrieved_ = access_token; | |
| 68 refresh_token_retrieved_ = refresh_token; | |
| 69 | |
| 70 done_closure.Run(); | |
| 71 } | |
| 72 | 65 |
| 73 protected: | 66 protected: |
| 74 // Test interface. | 67 // Test interface. |
| 75 void SetUp() override { | 68 void SetUp() override; |
| 76 if (!base::MessageLoop::current()) { | |
| 77 // Create a temporary message loop if the current thread does not already | |
| 78 // have one so we can use its task runner to create a request object. | |
| 79 message_loop_.reset(new base::MessageLoopForIO); | |
| 80 } | |
| 81 } | |
| 82 | 69 |
| 83 void SetFakeResponse(const GURL& url, | 70 void SetFakeResponse(const GURL& url, |
| 84 const std::string& data, | 71 const std::string& data, |
| 85 net::HttpStatusCode code, | 72 net::HttpStatusCode code, |
| 86 net::URLRequestStatus::Status status) { | 73 net::URLRequestStatus::Status status); |
| 87 url_fetcher_factory_.SetFakeResponse(url, data, code, status); | |
| 88 } | |
| 89 | 74 |
| 90 // Used for result verification | 75 // Used for result verification |
| 91 std::string access_token_retrieved_; | 76 std::string access_token_retrieved_; |
| 92 std::string refresh_token_retrieved_; | 77 std::string refresh_token_retrieved_; |
| 93 | 78 |
| 94 private: | 79 private: |
| 95 net::FakeURLFetcherFactory url_fetcher_factory_; | 80 net::FakeURLFetcherFactory url_fetcher_factory_; |
| 96 scoped_ptr<base::MessageLoopForIO> message_loop_; | 81 scoped_ptr<base::MessageLoopForIO> message_loop_; |
| 97 | 82 |
| 98 DISALLOW_COPY_AND_ASSIGN(AccessTokenFetcherTest); | 83 DISALLOW_COPY_AND_ASSIGN(AccessTokenFetcherTest); |
| 99 }; | 84 }; |
| 100 | 85 |
| 86 AccessTokenFetcherTest::AccessTokenFetcherTest() |
| 87 : url_fetcher_factory_(nullptr) { |
| 88 } |
| 89 |
| 90 AccessTokenFetcherTest::~AccessTokenFetcherTest() { |
| 91 } |
| 92 |
| 93 void AccessTokenFetcherTest::OnAccessTokenRetrieved( |
| 94 base::Closure done_closure, |
| 95 const std::string& access_token, |
| 96 const std::string& refresh_token) { |
| 97 access_token_retrieved_ = access_token; |
| 98 refresh_token_retrieved_ = refresh_token; |
| 99 |
| 100 done_closure.Run(); |
| 101 } |
| 102 |
| 103 void AccessTokenFetcherTest::SetUp() { |
| 104 if (!base::MessageLoop::current()) { |
| 105 // Create a temporary message loop if the current thread does not already |
| 106 // have one so we can use its task runner to create a request object. |
| 107 message_loop_.reset(new base::MessageLoopForIO); |
| 108 } |
| 109 } |
| 110 |
| 111 void AccessTokenFetcherTest::SetFakeResponse( |
| 112 const GURL& url, |
| 113 const std::string& data, |
| 114 net::HttpStatusCode code, |
| 115 net::URLRequestStatus::Status status) { |
| 116 url_fetcher_factory_.SetFakeResponse(url, data, code, status); |
| 117 } |
| 118 |
| 101 TEST_F(AccessTokenFetcherTest, ExchangeAuthCodeForAccessToken) { | 119 TEST_F(AccessTokenFetcherTest, ExchangeAuthCodeForAccessToken) { |
| 102 SetFakeResponse( | 120 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 103 GaiaUrls::GetInstance()->oauth2_token_url(), | 121 kAuthCodeExchangeValidResponse, net::HTTP_OK, |
| 104 kAuthCodeExchangeValidResponse, | 122 net::URLRequestStatus::SUCCESS); |
| 105 net::HTTP_OK, | |
| 106 net::URLRequestStatus::SUCCESS); | |
| 107 | 123 |
| 108 SetFakeResponse( | 124 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_info_url(), |
| 109 GaiaUrls::GetInstance()->oauth2_token_info_url(), | 125 kValidTokenInfoResponse, net::HTTP_OK, |
| 110 kValidTokenInfoResponse, | 126 net::URLRequestStatus::SUCCESS); |
| 111 net::HTTP_OK, | |
| 112 net::URLRequestStatus::SUCCESS); | |
| 113 | 127 |
| 114 base::RunLoop run_loop; | 128 base::RunLoop run_loop; |
| 115 AccessTokenCallback access_token_callback = | 129 AccessTokenCallback access_token_callback = |
| 116 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 130 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 117 base::Unretained(this), | 131 base::Unretained(this), run_loop.QuitClosure()); |
| 118 run_loop.QuitClosure()); | |
| 119 | 132 |
| 120 AccessTokenFetcher access_token_fetcher; | 133 AccessTokenFetcher access_token_fetcher; |
| 121 access_token_fetcher.GetAccessTokenFromAuthCode( | 134 access_token_fetcher.GetAccessTokenFromAuthCode(kAuthCodeValue, |
| 122 kAuthCodeValue, | 135 access_token_callback); |
| 123 access_token_callback); | |
| 124 | 136 |
| 125 run_loop.Run(); | 137 run_loop.Run(); |
| 126 | 138 |
| 127 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); | 139 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); |
| 128 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); | 140 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); |
| 129 } | 141 } |
| 130 | 142 |
| 131 TEST_F(AccessTokenFetcherTest, ExchangeRefreshTokenForAccessToken) { | 143 TEST_F(AccessTokenFetcherTest, ExchangeRefreshTokenForAccessToken) { |
| 132 SetFakeResponse( | 144 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 133 GaiaUrls::GetInstance()->oauth2_token_url(), | 145 kRefreshTokenExchangeValidResponse, net::HTTP_OK, |
| 134 kRefreshTokenExchangeValidResponse, | 146 net::URLRequestStatus::SUCCESS); |
| 135 net::HTTP_OK, | |
| 136 net::URLRequestStatus::SUCCESS); | |
| 137 | 147 |
| 138 SetFakeResponse( | 148 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_info_url(), |
| 139 GaiaUrls::GetInstance()->oauth2_token_info_url(), | 149 kValidTokenInfoResponse, net::HTTP_OK, |
| 140 kValidTokenInfoResponse, | 150 net::URLRequestStatus::SUCCESS); |
| 141 net::HTTP_OK, | |
| 142 net::URLRequestStatus::SUCCESS); | |
| 143 | 151 |
| 144 base::RunLoop run_loop; | 152 base::RunLoop run_loop; |
| 145 AccessTokenCallback access_token_callback = | 153 AccessTokenCallback access_token_callback = |
| 146 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 154 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 147 base::Unretained(this), | 155 base::Unretained(this), run_loop.QuitClosure()); |
| 148 run_loop.QuitClosure()); | |
| 149 | 156 |
| 150 AccessTokenFetcher access_token_fetcher; | 157 AccessTokenFetcher access_token_fetcher; |
| 151 access_token_fetcher.GetAccessTokenFromRefreshToken( | 158 access_token_fetcher.GetAccessTokenFromRefreshToken(kRefreshTokenValue, |
| 152 kRefreshTokenValue, | 159 access_token_callback); |
| 153 access_token_callback); | |
| 154 | 160 |
| 155 run_loop.Run(); | 161 run_loop.Run(); |
| 156 | 162 |
| 157 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); | 163 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); |
| 158 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); | 164 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); |
| 159 } | 165 } |
| 160 | 166 |
| 161 TEST_F(AccessTokenFetcherTest, MultipleAccessTokenCalls) { | 167 TEST_F(AccessTokenFetcherTest, MultipleAccessTokenCalls) { |
| 162 SetFakeResponse( | 168 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 163 GaiaUrls::GetInstance()->oauth2_token_url(), | 169 kAuthCodeExchangeValidResponse, net::HTTP_OK, |
| 164 kAuthCodeExchangeValidResponse, | 170 net::URLRequestStatus::SUCCESS); |
| 165 net::HTTP_OK, | |
| 166 net::URLRequestStatus::SUCCESS); | |
| 167 | 171 |
| 168 SetFakeResponse( | 172 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_info_url(), |
| 169 GaiaUrls::GetInstance()->oauth2_token_info_url(), | 173 kValidTokenInfoResponse, net::HTTP_OK, |
| 170 kValidTokenInfoResponse, | 174 net::URLRequestStatus::SUCCESS); |
| 171 net::HTTP_OK, | |
| 172 net::URLRequestStatus::SUCCESS); | |
| 173 | 175 |
| 174 scoped_ptr<base::RunLoop> run_loop; | 176 scoped_ptr<base::RunLoop> run_loop; |
| 175 run_loop.reset(new base::RunLoop()); | 177 run_loop.reset(new base::RunLoop()); |
| 176 AccessTokenCallback access_token_callback = | 178 AccessTokenCallback access_token_callback = |
| 177 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 179 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 178 base::Unretained(this), | 180 base::Unretained(this), run_loop->QuitClosure()); |
| 179 run_loop->QuitClosure()); | |
| 180 | 181 |
| 181 AccessTokenFetcher access_token_fetcher; | 182 AccessTokenFetcher access_token_fetcher; |
| 182 access_token_fetcher.GetAccessTokenFromAuthCode( | 183 access_token_fetcher.GetAccessTokenFromAuthCode(kAuthCodeValue, |
| 183 kAuthCodeValue, | 184 access_token_callback); |
| 184 access_token_callback); | |
| 185 | 185 |
| 186 run_loop->Run(); | 186 run_loop->Run(); |
| 187 | 187 |
| 188 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); | 188 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); |
| 189 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); | 189 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); |
| 190 | 190 |
| 191 // Reset our token data for the next iteration. | 191 // Reset our token data for the next iteration. |
| 192 access_token_retrieved_.clear(); | 192 access_token_retrieved_.clear(); |
| 193 refresh_token_retrieved_.clear(); | 193 refresh_token_retrieved_.clear(); |
| 194 | 194 |
| 195 // Update the response since we will call the refresh token method next. | 195 // Update the response since we will call the refresh token method next. |
| 196 SetFakeResponse( | 196 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 197 GaiaUrls::GetInstance()->oauth2_token_url(), | 197 kRefreshTokenExchangeValidResponse, net::HTTP_OK, |
| 198 kRefreshTokenExchangeValidResponse, | 198 net::URLRequestStatus::SUCCESS); |
| 199 net::HTTP_OK, | |
| 200 net::URLRequestStatus::SUCCESS); | |
| 201 | 199 |
| 202 run_loop.reset(new base::RunLoop()); | 200 run_loop.reset(new base::RunLoop()); |
| 203 access_token_callback = | 201 access_token_callback = |
| 204 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 202 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 205 base::Unretained(this), | 203 base::Unretained(this), run_loop->QuitClosure()); |
| 206 run_loop->QuitClosure()); | |
| 207 | 204 |
| 208 access_token_fetcher.GetAccessTokenFromRefreshToken( | 205 access_token_fetcher.GetAccessTokenFromRefreshToken(kRefreshTokenValue, |
| 209 kRefreshTokenValue, | 206 access_token_callback); |
| 210 access_token_callback); | |
| 211 | 207 |
| 212 run_loop->Run(); | 208 run_loop->Run(); |
| 213 | 209 |
| 214 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); | 210 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); |
| 215 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); | 211 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); |
| 216 | 212 |
| 217 run_loop.reset(new base::RunLoop()); | 213 run_loop.reset(new base::RunLoop()); |
| 218 access_token_callback = | 214 access_token_callback = |
| 219 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 215 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 220 base::Unretained(this), | 216 base::Unretained(this), run_loop->QuitClosure()); |
| 221 run_loop->QuitClosure()); | |
| 222 | 217 |
| 223 // Reset our token data for the next iteration. | 218 // Reset our token data for the next iteration. |
| 224 access_token_retrieved_.clear(); | 219 access_token_retrieved_.clear(); |
| 225 refresh_token_retrieved_.clear(); | 220 refresh_token_retrieved_.clear(); |
| 226 | 221 |
| 227 access_token_fetcher.GetAccessTokenFromRefreshToken( | 222 access_token_fetcher.GetAccessTokenFromRefreshToken(kRefreshTokenValue, |
| 228 kRefreshTokenValue, | 223 access_token_callback); |
| 229 access_token_callback); | |
| 230 | 224 |
| 231 run_loop->Run(); | 225 run_loop->Run(); |
| 232 | 226 |
| 233 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); | 227 EXPECT_EQ(access_token_retrieved_.compare(kAccessTokenValue), 0); |
| 234 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); | 228 EXPECT_EQ(refresh_token_retrieved_.compare(kRefreshTokenValue), 0); |
| 235 } | 229 } |
| 236 | 230 |
| 237 TEST_F(AccessTokenFetcherTest, ExchangeAuthCode_Unauthorized_Error) { | 231 TEST_F(AccessTokenFetcherTest, ExchangeAuthCode_Unauthorized_Error) { |
| 238 SetFakeResponse( | 232 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 239 GaiaUrls::GetInstance()->oauth2_token_url(), | 233 kAuthCodeExchangeValidResponse, net::HTTP_UNAUTHORIZED, |
| 240 kAuthCodeExchangeValidResponse, | 234 net::URLRequestStatus::FAILED); |
| 241 net::HTTP_UNAUTHORIZED, | |
| 242 net::URLRequestStatus::FAILED); | |
| 243 | 235 |
| 244 base::RunLoop run_loop; | 236 base::RunLoop run_loop; |
| 245 AccessTokenCallback access_token_callback = | 237 AccessTokenCallback access_token_callback = |
| 246 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 238 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 247 base::Unretained(this), | 239 base::Unretained(this), run_loop.QuitClosure()); |
| 248 run_loop.QuitClosure()); | |
| 249 | 240 |
| 250 AccessTokenFetcher access_token_fetcher; | 241 AccessTokenFetcher access_token_fetcher; |
| 251 access_token_fetcher.GetAccessTokenFromAuthCode( | 242 access_token_fetcher.GetAccessTokenFromAuthCode(kAuthCodeValue, |
| 252 kAuthCodeValue, | 243 access_token_callback); |
| 253 access_token_callback); | |
| 254 | 244 |
| 255 run_loop.Run(); | 245 run_loop.Run(); |
| 256 | 246 |
| 257 // Our callback should have been called with empty strings. | 247 // Our callback should have been called with empty strings. |
| 258 EXPECT_TRUE(access_token_retrieved_.empty()); | 248 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 259 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 249 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 260 } | 250 } |
| 261 | 251 |
| 262 TEST_F(AccessTokenFetcherTest, ExchangeRefreshToken_Unauthorized_Error) { | 252 TEST_F(AccessTokenFetcherTest, ExchangeRefreshToken_Unauthorized_Error) { |
| 263 SetFakeResponse( | 253 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 264 GaiaUrls::GetInstance()->oauth2_token_url(), | 254 kRefreshTokenExchangeValidResponse, net::HTTP_UNAUTHORIZED, |
| 265 kRefreshTokenExchangeValidResponse, | 255 net::URLRequestStatus::FAILED); |
| 266 net::HTTP_UNAUTHORIZED, | |
| 267 net::URLRequestStatus::FAILED); | |
| 268 | 256 |
| 269 base::RunLoop run_loop; | 257 base::RunLoop run_loop; |
| 270 AccessTokenCallback access_token_callback = | 258 AccessTokenCallback access_token_callback = |
| 271 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 259 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 272 base::Unretained(this), | 260 base::Unretained(this), run_loop.QuitClosure()); |
| 273 run_loop.QuitClosure()); | |
| 274 | 261 |
| 275 AccessTokenFetcher access_token_fetcher; | 262 AccessTokenFetcher access_token_fetcher; |
| 276 access_token_fetcher.GetAccessTokenFromRefreshToken( | 263 access_token_fetcher.GetAccessTokenFromRefreshToken(kRefreshTokenValue, |
| 277 kRefreshTokenValue, | 264 access_token_callback); |
| 278 access_token_callback); | |
| 279 | 265 |
| 280 run_loop.Run(); | 266 run_loop.Run(); |
| 281 | 267 |
| 282 // Our callback should have been called with empty strings. | 268 // Our callback should have been called with empty strings. |
| 283 EXPECT_TRUE(access_token_retrieved_.empty()); | 269 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 284 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 270 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 285 } | 271 } |
| 286 | 272 |
| 287 TEST_F(AccessTokenFetcherTest, ExchangeAuthCode_NetworkError) { | 273 TEST_F(AccessTokenFetcherTest, ExchangeAuthCode_NetworkError) { |
| 288 SetFakeResponse( | 274 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 289 GaiaUrls::GetInstance()->oauth2_token_url(), | 275 kAuthCodeExchangeValidResponse, net::HTTP_NOT_FOUND, |
| 290 kAuthCodeExchangeValidResponse, | 276 net::URLRequestStatus::FAILED); |
| 291 net::HTTP_NOT_FOUND, | |
| 292 net::URLRequestStatus::FAILED); | |
| 293 | 277 |
| 294 base::RunLoop run_loop; | 278 base::RunLoop run_loop; |
| 295 AccessTokenCallback access_token_callback = | 279 AccessTokenCallback access_token_callback = |
| 296 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 280 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 297 base::Unretained(this), | 281 base::Unretained(this), run_loop.QuitClosure()); |
| 298 run_loop.QuitClosure()); | |
| 299 | 282 |
| 300 AccessTokenFetcher access_token_fetcher; | 283 AccessTokenFetcher access_token_fetcher; |
| 301 access_token_fetcher.GetAccessTokenFromAuthCode( | 284 access_token_fetcher.GetAccessTokenFromAuthCode(kAuthCodeValue, |
| 302 kAuthCodeValue, | 285 access_token_callback); |
| 303 access_token_callback); | |
| 304 | 286 |
| 305 run_loop.Run(); | 287 run_loop.Run(); |
| 306 | 288 |
| 307 // Our callback should have been called with empty strings. | 289 // Our callback should have been called with empty strings. |
| 308 EXPECT_TRUE(access_token_retrieved_.empty()); | 290 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 309 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 291 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 310 } | 292 } |
| 311 | 293 |
| 312 TEST_F(AccessTokenFetcherTest, ExchangeRefreshToken_NetworkError) { | 294 TEST_F(AccessTokenFetcherTest, ExchangeRefreshToken_NetworkError) { |
| 313 SetFakeResponse( | 295 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 314 GaiaUrls::GetInstance()->oauth2_token_url(), | 296 kRefreshTokenExchangeValidResponse, net::HTTP_NOT_FOUND, |
| 315 kRefreshTokenExchangeValidResponse, | 297 net::URLRequestStatus::FAILED); |
| 316 net::HTTP_NOT_FOUND, | |
| 317 net::URLRequestStatus::FAILED); | |
| 318 | 298 |
| 319 base::RunLoop run_loop; | 299 base::RunLoop run_loop; |
| 320 AccessTokenCallback access_token_callback = | 300 AccessTokenCallback access_token_callback = |
| 321 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 301 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 322 base::Unretained(this), | 302 base::Unretained(this), run_loop.QuitClosure()); |
| 323 run_loop.QuitClosure()); | |
| 324 | 303 |
| 325 AccessTokenFetcher access_token_fetcher; | 304 AccessTokenFetcher access_token_fetcher; |
| 326 access_token_fetcher.GetAccessTokenFromRefreshToken( | 305 access_token_fetcher.GetAccessTokenFromRefreshToken(kRefreshTokenValue, |
| 327 kRefreshTokenValue, | 306 access_token_callback); |
| 328 access_token_callback); | |
| 329 | 307 |
| 330 run_loop.Run(); | 308 run_loop.Run(); |
| 331 | 309 |
| 332 // Our callback should have been called with empty strings. | 310 // Our callback should have been called with empty strings. |
| 333 EXPECT_TRUE(access_token_retrieved_.empty()); | 311 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 334 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 312 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 335 } | 313 } |
| 336 | 314 |
| 337 TEST_F(AccessTokenFetcherTest, AuthCode_GetTokenInfoResponse_InvalidToken) { | 315 TEST_F(AccessTokenFetcherTest, AuthCode_GetTokenInfoResponse_InvalidToken) { |
| 338 SetFakeResponse( | 316 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 339 GaiaUrls::GetInstance()->oauth2_token_url(), | 317 kAuthCodeExchangeValidResponse, net::HTTP_OK, |
| 340 kAuthCodeExchangeValidResponse, | 318 net::URLRequestStatus::SUCCESS); |
| 341 net::HTTP_OK, | |
| 342 net::URLRequestStatus::SUCCESS); | |
| 343 | 319 |
| 344 SetFakeResponse( | 320 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_info_url(), |
| 345 GaiaUrls::GetInstance()->oauth2_token_info_url(), | 321 kInvalidTokenInfoResponse, net::HTTP_OK, |
| 346 kInvalidTokenInfoResponse, | 322 net::URLRequestStatus::SUCCESS); |
| 347 net::HTTP_OK, | |
| 348 net::URLRequestStatus::SUCCESS); | |
| 349 | 323 |
| 350 base::RunLoop run_loop; | 324 base::RunLoop run_loop; |
| 351 AccessTokenCallback access_token_callback = | 325 AccessTokenCallback access_token_callback = |
| 352 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 326 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 353 base::Unretained(this), | 327 base::Unretained(this), run_loop.QuitClosure()); |
| 354 run_loop.QuitClosure()); | |
| 355 | 328 |
| 356 AccessTokenFetcher access_token_fetcher; | 329 AccessTokenFetcher access_token_fetcher; |
| 357 access_token_fetcher.GetAccessTokenFromAuthCode( | 330 access_token_fetcher.GetAccessTokenFromAuthCode(kAuthCodeValue, |
| 358 kAuthCodeValue, | 331 access_token_callback); |
| 359 access_token_callback); | |
| 360 | 332 |
| 361 run_loop.Run(); | 333 run_loop.Run(); |
| 362 | 334 |
| 363 // Our callback should have been called with empty strings. | 335 // Our callback should have been called with empty strings. |
| 364 EXPECT_TRUE(access_token_retrieved_.empty()); | 336 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 365 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 337 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 366 } | 338 } |
| 367 | 339 |
| 368 TEST_F(AccessTokenFetcherTest, ExchangeAuthCodeForAccessToken_EmptyToken) { | 340 TEST_F(AccessTokenFetcherTest, ExchangeAuthCodeForAccessToken_EmptyToken) { |
| 369 SetFakeResponse( | 341 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 370 GaiaUrls::GetInstance()->oauth2_token_url(), | 342 kAuthCodeExchangeEmptyResponse, net::HTTP_OK, |
| 371 kAuthCodeExchangeEmptyResponse, | 343 net::URLRequestStatus::SUCCESS); |
| 372 net::HTTP_OK, | |
| 373 net::URLRequestStatus::SUCCESS); | |
| 374 | 344 |
| 375 base::RunLoop run_loop; | 345 base::RunLoop run_loop; |
| 376 AccessTokenCallback access_token_callback = | 346 AccessTokenCallback access_token_callback = |
| 377 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 347 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 378 base::Unretained(this), | 348 base::Unretained(this), run_loop.QuitClosure()); |
| 379 run_loop.QuitClosure()); | |
| 380 | 349 |
| 381 AccessTokenFetcher access_token_fetcher; | 350 AccessTokenFetcher access_token_fetcher; |
| 382 access_token_fetcher.GetAccessTokenFromAuthCode( | 351 access_token_fetcher.GetAccessTokenFromAuthCode(kAuthCodeValue, |
| 383 kAuthCodeValue, | 352 access_token_callback); |
| 384 access_token_callback); | |
| 385 | 353 |
| 386 run_loop.Run(); | 354 run_loop.Run(); |
| 387 | 355 |
| 388 // Our callback should have been called with empty strings. | 356 // Our callback should have been called with empty strings. |
| 389 EXPECT_TRUE(access_token_retrieved_.empty()); | 357 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 390 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 358 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 391 } | 359 } |
| 392 | 360 |
| 393 TEST_F(AccessTokenFetcherTest, RefreshToken_GetTokenInfoResponse_InvalidToken) { | 361 TEST_F(AccessTokenFetcherTest, RefreshToken_GetTokenInfoResponse_InvalidToken) { |
| 394 SetFakeResponse( | 362 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 395 GaiaUrls::GetInstance()->oauth2_token_url(), | 363 kRefreshTokenExchangeValidResponse, net::HTTP_OK, |
| 396 kRefreshTokenExchangeValidResponse, | 364 net::URLRequestStatus::SUCCESS); |
| 397 net::HTTP_OK, | |
| 398 net::URLRequestStatus::SUCCESS); | |
| 399 | 365 |
| 400 SetFakeResponse( | 366 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_info_url(), |
| 401 GaiaUrls::GetInstance()->oauth2_token_info_url(), | 367 kInvalidTokenInfoResponse, net::HTTP_OK, |
| 402 kInvalidTokenInfoResponse, | 368 net::URLRequestStatus::SUCCESS); |
| 403 net::HTTP_OK, | |
| 404 net::URLRequestStatus::SUCCESS); | |
| 405 | 369 |
| 406 base::RunLoop run_loop; | 370 base::RunLoop run_loop; |
| 407 AccessTokenCallback access_token_callback = | 371 AccessTokenCallback access_token_callback = |
| 408 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 372 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 409 base::Unretained(this), | 373 base::Unretained(this), run_loop.QuitClosure()); |
| 410 run_loop.QuitClosure()); | |
| 411 | 374 |
| 412 AccessTokenFetcher access_token_fetcher; | 375 AccessTokenFetcher access_token_fetcher; |
| 413 access_token_fetcher.GetAccessTokenFromRefreshToken( | 376 access_token_fetcher.GetAccessTokenFromRefreshToken(kRefreshTokenValue, |
| 414 kRefreshTokenValue, | 377 access_token_callback); |
| 415 access_token_callback); | |
| 416 | 378 |
| 417 run_loop.Run(); | 379 run_loop.Run(); |
| 418 | 380 |
| 419 // Our callback should have been called with empty strings. | 381 // Our callback should have been called with empty strings. |
| 420 EXPECT_TRUE(access_token_retrieved_.empty()); | 382 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 421 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 383 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 422 } | 384 } |
| 423 | 385 |
| 424 TEST_F(AccessTokenFetcherTest, ExchangeRefreshTokenForAccessToken_EmptyToken) { | 386 TEST_F(AccessTokenFetcherTest, ExchangeRefreshTokenForAccessToken_EmptyToken) { |
| 425 SetFakeResponse( | 387 SetFakeResponse(GaiaUrls::GetInstance()->oauth2_token_url(), |
| 426 GaiaUrls::GetInstance()->oauth2_token_url(), | 388 kRefreshTokenExchangeEmptyResponse, net::HTTP_OK, |
| 427 kRefreshTokenExchangeEmptyResponse, | 389 net::URLRequestStatus::SUCCESS); |
| 428 net::HTTP_OK, | |
| 429 net::URLRequestStatus::SUCCESS); | |
| 430 | 390 |
| 431 base::RunLoop run_loop; | 391 base::RunLoop run_loop; |
| 432 AccessTokenCallback access_token_callback = | 392 AccessTokenCallback access_token_callback = |
| 433 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, | 393 base::Bind(&AccessTokenFetcherTest::OnAccessTokenRetrieved, |
| 434 base::Unretained(this), | 394 base::Unretained(this), run_loop.QuitClosure()); |
| 435 run_loop.QuitClosure()); | |
| 436 | 395 |
| 437 AccessTokenFetcher access_token_fetcher; | 396 AccessTokenFetcher access_token_fetcher; |
| 438 access_token_fetcher.GetAccessTokenFromRefreshToken( | 397 access_token_fetcher.GetAccessTokenFromRefreshToken(kRefreshTokenValue, |
| 439 kRefreshTokenValue, | 398 access_token_callback); |
| 440 access_token_callback); | |
| 441 | 399 |
| 442 run_loop.Run(); | 400 run_loop.Run(); |
| 443 | 401 |
| 444 // Our callback should have been called with empty strings. | 402 // Our callback should have been called with empty strings. |
| 445 EXPECT_TRUE(access_token_retrieved_.empty()); | 403 EXPECT_TRUE(access_token_retrieved_.empty()); |
| 446 EXPECT_TRUE(refresh_token_retrieved_.empty()); | 404 EXPECT_TRUE(refresh_token_retrieved_.empty()); |
| 447 } | 405 } |
| 448 | 406 |
| 449 } // namespace test | 407 } // namespace test |
| 450 } // namespace remoting | 408 } // namespace remoting |
| OLD | NEW |