OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // A complete set of unit tests for OAuth2MintTokenFlow. | 5 // A complete set of unit tests for OAuth2MintTokenFlow. |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 using net::URLFetcher; | 22 using net::URLFetcher; |
23 using net::URLRequestStatus; | 23 using net::URLRequestStatus; |
24 using testing::_; | 24 using testing::_; |
25 using testing::StrictMock; | 25 using testing::StrictMock; |
26 | 26 |
27 namespace { | 27 namespace { |
28 | 28 |
29 static const char kValidTokenResponse[] = | 29 static const char kValidTokenResponse[] = |
30 "{" | 30 "{" |
31 " \"token\": \"at1\"," | 31 " \"token\": \"at1\"," |
32 " \"issueAdvice\": \"Auto\"" | 32 " \"issueAdvice\": \"Auto\"," |
| 33 " \"expiresIn\": \"3600\"" |
33 "}"; | 34 "}"; |
34 static const char kTokenResponseNoAccessToken[] = | 35 static const char kTokenResponseNoAccessToken[] = |
35 "{" | 36 "{" |
36 " \"issueAdvice\": \"Auto\"" | 37 " \"issueAdvice\": \"Auto\"" |
37 "}"; | 38 "}"; |
38 | 39 |
39 static const char kValidIssueAdviceResponse[] = | 40 static const char kValidIssueAdviceResponse[] = |
40 "{" | 41 "{" |
41 " \"issueAdvice\": \"consent\"," | 42 " \"issueAdvice\": \"consent\"," |
42 " \"consent\": {" | 43 " \"consent\": {" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 e2.details.push_back(ASCIIToUTF16("Upload new documents")); | 120 e2.details.push_back(ASCIIToUTF16("Upload new documents")); |
120 ia.push_back(e2); | 121 ia.push_back(e2); |
121 return ia; | 122 return ia; |
122 } | 123 } |
123 | 124 |
124 class MockDelegate : public OAuth2MintTokenFlow::Delegate { | 125 class MockDelegate : public OAuth2MintTokenFlow::Delegate { |
125 public: | 126 public: |
126 MockDelegate() {} | 127 MockDelegate() {} |
127 ~MockDelegate() {} | 128 ~MockDelegate() {} |
128 | 129 |
129 MOCK_METHOD1(OnMintTokenSuccess, void(const std::string& access_token)); | 130 MOCK_METHOD2(OnMintTokenSuccess, void(const std::string& access_token, |
| 131 int time_to_live)); |
130 MOCK_METHOD1(OnIssueAdviceSuccess, | 132 MOCK_METHOD1(OnIssueAdviceSuccess, |
131 void (const IssueAdviceInfo& issue_advice)); | 133 void (const IssueAdviceInfo& issue_advice)); |
132 MOCK_METHOD1(OnMintTokenFailure, | 134 MOCK_METHOD1(OnMintTokenFailure, |
133 void(const GoogleServiceAuthError& error)); | 135 void(const GoogleServiceAuthError& error)); |
134 }; | 136 }; |
135 | 137 |
136 class MockMintTokenFlow : public OAuth2MintTokenFlow { | 138 class MockMintTokenFlow : public OAuth2MintTokenFlow { |
137 public: | 139 public: |
138 explicit MockMintTokenFlow(MockDelegate* delegate, | 140 explicit MockMintTokenFlow(MockDelegate* delegate, |
139 const OAuth2MintTokenFlow::Parameters& parameters ) | 141 const OAuth2MintTokenFlow::Parameters& parameters ) |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 "&origin=ext1"); | 225 "&origin=ext1"); |
224 EXPECT_EQ(expected_body, body); | 226 EXPECT_EQ(expected_body, body); |
225 } | 227 } |
226 } | 228 } |
227 | 229 |
228 TEST_F(OAuth2MintTokenFlowTest, ParseMintTokenResponse) { | 230 TEST_F(OAuth2MintTokenFlowTest, ParseMintTokenResponse) { |
229 { // Access token missing. | 231 { // Access token missing. |
230 scoped_ptr<base::DictionaryValue> json( | 232 scoped_ptr<base::DictionaryValue> json( |
231 ParseJson(kTokenResponseNoAccessToken)); | 233 ParseJson(kTokenResponseNoAccessToken)); |
232 std::string at; | 234 std::string at; |
233 EXPECT_FALSE(OAuth2MintTokenFlow::ParseMintTokenResponse(json.get(), &at)); | 235 int ttl; |
| 236 EXPECT_FALSE(OAuth2MintTokenFlow::ParseMintTokenResponse(json.get(), &at, |
| 237 &ttl)); |
234 EXPECT_TRUE(at.empty()); | 238 EXPECT_TRUE(at.empty()); |
235 } | 239 } |
236 { // All good. | 240 { // All good. |
237 scoped_ptr<base::DictionaryValue> json(ParseJson(kValidTokenResponse)); | 241 scoped_ptr<base::DictionaryValue> json(ParseJson(kValidTokenResponse)); |
238 std::string at; | 242 std::string at; |
239 EXPECT_TRUE(OAuth2MintTokenFlow::ParseMintTokenResponse(json.get(), &at)); | 243 int ttl; |
| 244 EXPECT_TRUE(OAuth2MintTokenFlow::ParseMintTokenResponse(json.get(), &at, |
| 245 &ttl)); |
240 EXPECT_EQ("at1", at); | 246 EXPECT_EQ("at1", at); |
| 247 EXPECT_EQ(3600, ttl); |
241 } | 248 } |
242 } | 249 } |
243 | 250 |
244 TEST_F(OAuth2MintTokenFlowTest, ParseIssueAdviceResponse) { | 251 TEST_F(OAuth2MintTokenFlowTest, ParseIssueAdviceResponse) { |
245 { // Description missing. | 252 { // Description missing. |
246 scoped_ptr<base::DictionaryValue> json( | 253 scoped_ptr<base::DictionaryValue> json( |
247 ParseJson(kIssueAdviceResponseNoDescription)); | 254 ParseJson(kIssueAdviceResponseNoDescription)); |
248 IssueAdviceInfo ia; | 255 IssueAdviceInfo ia; |
249 EXPECT_FALSE(OAuth2MintTokenFlow::ParseIssueAdviceResponse( | 256 EXPECT_FALSE(OAuth2MintTokenFlow::ParseIssueAdviceResponse( |
250 json.get(), &ia)); | 257 json.get(), &ia)); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 TestURLFetcher url_fetcher(1, GURL("http://www.google.com"), NULL); | 295 TestURLFetcher url_fetcher(1, GURL("http://www.google.com"), NULL); |
289 url_fetcher.SetResponseString(kTokenResponseNoAccessToken); | 296 url_fetcher.SetResponseString(kTokenResponseNoAccessToken); |
290 CreateFlow(OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE); | 297 CreateFlow(OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE); |
291 EXPECT_CALL(delegate_, OnMintTokenFailure(_)); | 298 EXPECT_CALL(delegate_, OnMintTokenFailure(_)); |
292 flow_->ProcessApiCallSuccess(&url_fetcher); | 299 flow_->ProcessApiCallSuccess(&url_fetcher); |
293 } | 300 } |
294 { // Valid json: good token response. | 301 { // Valid json: good token response. |
295 TestURLFetcher url_fetcher(1, GURL("http://www.google.com"), NULL); | 302 TestURLFetcher url_fetcher(1, GURL("http://www.google.com"), NULL); |
296 url_fetcher.SetResponseString(kValidTokenResponse); | 303 url_fetcher.SetResponseString(kValidTokenResponse); |
297 CreateFlow(OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE); | 304 CreateFlow(OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE); |
298 EXPECT_CALL(delegate_, OnMintTokenSuccess("at1")); | 305 EXPECT_CALL(delegate_, OnMintTokenSuccess("at1", 3600)); |
299 flow_->ProcessApiCallSuccess(&url_fetcher); | 306 flow_->ProcessApiCallSuccess(&url_fetcher); |
300 } | 307 } |
301 { // Valid json: no description. | 308 { // Valid json: no description. |
302 TestURLFetcher url_fetcher(1, GURL("http://www.google.com"), NULL); | 309 TestURLFetcher url_fetcher(1, GURL("http://www.google.com"), NULL); |
303 url_fetcher.SetResponseString(kIssueAdviceResponseNoDescription); | 310 url_fetcher.SetResponseString(kIssueAdviceResponseNoDescription); |
304 CreateFlow(OAuth2MintTokenFlow::MODE_ISSUE_ADVICE); | 311 CreateFlow(OAuth2MintTokenFlow::MODE_ISSUE_ADVICE); |
305 EXPECT_CALL(delegate_, OnMintTokenFailure(_)); | 312 EXPECT_CALL(delegate_, OnMintTokenFailure(_)); |
306 flow_->ProcessApiCallSuccess(&url_fetcher); | 313 flow_->ProcessApiCallSuccess(&url_fetcher); |
307 } | 314 } |
308 { // Valid json: no detail. | 315 { // Valid json: no detail. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 } | 355 } |
349 | 356 |
350 { // Non-null delegate. | 357 { // Non-null delegate. |
351 GoogleServiceAuthError error( | 358 GoogleServiceAuthError error( |
352 GoogleServiceAuthError::FromConnectionError(101)); | 359 GoogleServiceAuthError::FromConnectionError(101)); |
353 CreateFlow(OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE); | 360 CreateFlow(OAuth2MintTokenFlow::MODE_MINT_TOKEN_NO_FORCE); |
354 EXPECT_CALL(delegate_, OnMintTokenFailure(error)); | 361 EXPECT_CALL(delegate_, OnMintTokenFailure(error)); |
355 flow_->ProcessMintAccessTokenFailure(error); | 362 flow_->ProcessMintAccessTokenFailure(error); |
356 } | 363 } |
357 } | 364 } |
OLD | NEW |