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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "google_apis/gaia/gaia_constants.h" | 9 #include "google_apis/gaia/gaia_constants.h" |
10 #include "google_apis/gaia/google_service_auth_error.h" | 10 #include "google_apis/gaia/google_service_auth_error.h" |
11 #include "google_apis/gaia/oauth2_access_token_consumer.h" | 11 #include "google_apis/gaia/oauth2_access_token_consumer.h" |
12 #include "google_apis/gaia/oauth2_access_token_fetcher.h" | 12 #include "google_apis/gaia/oauth2_access_token_fetcher.h" |
13 #include "google_apis/gaia/oauth2_token_service.h" | 13 #include "google_apis/gaia/oauth2_token_service.h" |
14 #include "google_apis/gaia/oauth2_token_service_test_util.h" | 14 #include "google_apis/gaia/oauth2_token_service_test_util.h" |
15 #include "net/http/http_status_code.h" | 15 #include "net/http/http_status_code.h" |
16 #include "net/url_request/test_url_fetcher_factory.h" | 16 #include "net/url_request/test_url_fetcher_factory.h" |
17 #include "net/url_request/url_fetcher_delegate.h" | 17 #include "net/url_request/url_fetcher_delegate.h" |
18 #include "net/url_request/url_request_test_util.h" | 18 #include "net/url_request/url_request_test_util.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
20 | 20 |
21 // A testing consumer that retries on error. | 21 // A testing consumer that retries on error. |
22 class RetryingTestingOAuth2TokenServiceConsumer | 22 class RetryingTestingOAuth2TokenServiceConsumer |
23 : public TestingOAuth2TokenServiceConsumer { | 23 : public TestingOAuth2TokenServiceConsumer { |
24 public: | 24 public: |
25 RetryingTestingOAuth2TokenServiceConsumer( | 25 RetryingTestingOAuth2TokenServiceConsumer( |
26 OAuth2TokenService* oauth2_service) | 26 OAuth2TokenService* oauth2_service, |
27 : oauth2_service_(oauth2_service) {} | 27 const std::string& account_id) |
| 28 : oauth2_service_(oauth2_service), |
| 29 account_id_(account_id) {} |
28 virtual ~RetryingTestingOAuth2TokenServiceConsumer() {} | 30 virtual ~RetryingTestingOAuth2TokenServiceConsumer() {} |
29 | 31 |
30 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, | 32 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
31 const GoogleServiceAuthError& error) OVERRIDE { | 33 const GoogleServiceAuthError& error) OVERRIDE { |
32 TestingOAuth2TokenServiceConsumer::OnGetTokenFailure(request, error); | 34 TestingOAuth2TokenServiceConsumer::OnGetTokenFailure(request, error); |
33 request_.reset(oauth2_service_->StartRequest( | 35 request_.reset(oauth2_service_->StartRequest( |
34 std::set<std::string>(), this).release()); | 36 account_id_, OAuth2TokenService::ScopeSet(), this).release()); |
35 } | 37 } |
36 | 38 |
37 OAuth2TokenService* oauth2_service_; | 39 OAuth2TokenService* oauth2_service_; |
| 40 std::string account_id_; |
38 scoped_ptr<OAuth2TokenService::Request> request_; | 41 scoped_ptr<OAuth2TokenService::Request> request_; |
39 }; | 42 }; |
40 | 43 |
41 class TestOAuth2TokenService : public OAuth2TokenService { | 44 class TestOAuth2TokenService : public OAuth2TokenService { |
42 public: | 45 public: |
43 explicit TestOAuth2TokenService(net::TestURLRequestContextGetter* getter) | 46 explicit TestOAuth2TokenService(net::TestURLRequestContextGetter* getter) |
44 : request_context_getter_(getter) { | 47 : request_context_getter_(getter) { |
45 } | 48 } |
46 | 49 |
47 void CancelAllRequestsForTest() { CancelAllRequests(); } | 50 void CancelAllRequestsForTest() { CancelAllRequests(); } |
48 | 51 |
49 void CancelRequestsForTokenForTest(const std::string& refresh_token) { | 52 void CancelRequestsForTokenForTest(const std::string& refresh_token) { |
50 CancelRequestsForToken(refresh_token); | 53 CancelRequestsForToken(refresh_token); |
51 } | 54 } |
52 | 55 |
53 // For testing: set the refresh token to be used. | 56 // For testing: set the refresh token to be used. |
54 void set_refresh_token(const std::string& refresh_token) { | 57 void set_refresh_token(const std::string& refresh_token) { |
55 refresh_token_ = refresh_token; | 58 refresh_token_ = refresh_token; |
56 } | 59 } |
57 | 60 |
58 protected: | 61 protected: |
59 virtual std::string GetRefreshToken() OVERRIDE { return refresh_token_; } | 62 virtual std::string GetRefreshToken(const std::string& account_id) OVERRIDE { |
| 63 // account_id explicitly ignored. |
| 64 return refresh_token_; |
| 65 } |
60 | 66 |
61 private: | 67 private: |
62 // OAuth2TokenService implementation. | 68 // OAuth2TokenService implementation. |
63 virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE { | 69 virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE { |
64 return request_context_getter_.get(); | 70 return request_context_getter_.get(); |
65 } | 71 } |
66 | 72 |
67 std::string refresh_token_; | 73 std::string refresh_token_; |
68 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; | 74 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; |
69 }; | 75 }; |
70 | 76 |
71 class OAuth2TokenServiceTest : public testing::Test { | 77 class OAuth2TokenServiceTest : public testing::Test { |
72 public: | 78 public: |
73 virtual void SetUp() OVERRIDE { | 79 virtual void SetUp() OVERRIDE { |
74 oauth2_service_.reset( | 80 oauth2_service_.reset( |
75 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( | 81 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( |
76 message_loop_.message_loop_proxy()))); | 82 message_loop_.message_loop_proxy()))); |
| 83 account_id_ = "test_user@gmail.com"; |
77 } | 84 } |
78 | 85 |
79 virtual void TearDown() OVERRIDE { | 86 virtual void TearDown() OVERRIDE { |
80 // Makes sure that all the clean up tasks are run. | 87 // Makes sure that all the clean up tasks are run. |
81 base::RunLoop().RunUntilIdle(); | 88 base::RunLoop().RunUntilIdle(); |
82 } | 89 } |
83 | 90 |
84 protected: | 91 protected: |
85 base::MessageLoopForIO message_loop_; // net:: stuff needs IO message loop. | 92 base::MessageLoopForIO message_loop_; // net:: stuff needs IO message loop. |
86 net::TestURLFetcherFactory factory_; | 93 net::TestURLFetcherFactory factory_; |
87 scoped_ptr<TestOAuth2TokenService> oauth2_service_; | 94 scoped_ptr<TestOAuth2TokenService> oauth2_service_; |
| 95 std::string account_id_; |
88 TestingOAuth2TokenServiceConsumer consumer_; | 96 TestingOAuth2TokenServiceConsumer consumer_; |
89 }; | 97 }; |
90 | 98 |
91 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { | 99 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { |
92 scoped_ptr<OAuth2TokenService::Request> request( | 100 scoped_ptr<OAuth2TokenService::Request> request( |
93 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 101 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 102 &consumer_)); |
94 base::RunLoop().RunUntilIdle(); | 103 base::RunLoop().RunUntilIdle(); |
95 | 104 |
96 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 105 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
97 EXPECT_EQ(1, consumer_.number_of_errors_); | 106 EXPECT_EQ(1, consumer_.number_of_errors_); |
98 } | 107 } |
99 | 108 |
100 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { | 109 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
101 oauth2_service_->set_refresh_token("refreshToken"); | 110 oauth2_service_->set_refresh_token("refreshToken"); |
102 scoped_ptr<OAuth2TokenService::Request> request( | 111 scoped_ptr<OAuth2TokenService::Request> request( |
103 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 112 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 113 &consumer_)); |
104 base::RunLoop().RunUntilIdle(); | 114 base::RunLoop().RunUntilIdle(); |
105 | 115 |
106 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 116 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
107 EXPECT_EQ(0, consumer_.number_of_errors_); | 117 EXPECT_EQ(0, consumer_.number_of_errors_); |
108 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 118 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
109 ASSERT_TRUE(fetcher); | 119 ASSERT_TRUE(fetcher); |
110 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 120 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
111 fetcher->SetResponseString(std::string()); | 121 fetcher->SetResponseString(std::string()); |
112 fetcher->delegate()->OnURLFetchComplete(fetcher); | 122 fetcher->delegate()->OnURLFetchComplete(fetcher); |
113 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 123 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
114 EXPECT_EQ(1, consumer_.number_of_errors_); | 124 EXPECT_EQ(1, consumer_.number_of_errors_); |
115 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 125 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
116 } | 126 } |
117 | 127 |
118 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { | 128 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { |
119 oauth2_service_->set_refresh_token("refreshToken"); | 129 oauth2_service_->set_refresh_token("refreshToken"); |
120 scoped_ptr<OAuth2TokenService::Request> request( | 130 scoped_ptr<OAuth2TokenService::Request> request( |
121 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 131 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 132 &consumer_)); |
122 base::RunLoop().RunUntilIdle(); | 133 base::RunLoop().RunUntilIdle(); |
123 | 134 |
124 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 135 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
125 EXPECT_EQ(0, consumer_.number_of_errors_); | 136 EXPECT_EQ(0, consumer_.number_of_errors_); |
126 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 137 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
127 ASSERT_TRUE(fetcher); | 138 ASSERT_TRUE(fetcher); |
128 fetcher->set_response_code(net::HTTP_OK); | 139 fetcher->set_response_code(net::HTTP_OK); |
129 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 140 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
130 fetcher->delegate()->OnURLFetchComplete(fetcher); | 141 fetcher->delegate()->OnURLFetchComplete(fetcher); |
131 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 142 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
132 EXPECT_EQ(0, consumer_.number_of_errors_); | 143 EXPECT_EQ(0, consumer_.number_of_errors_); |
133 EXPECT_EQ("token", consumer_.last_token_); | 144 EXPECT_EQ("token", consumer_.last_token_); |
134 } | 145 } |
135 | 146 |
136 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { | 147 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
137 std::set<std::string> scopes1; | 148 OAuth2TokenService::ScopeSet scopes1; |
138 scopes1.insert("s1"); | 149 scopes1.insert("s1"); |
139 scopes1.insert("s2"); | 150 scopes1.insert("s2"); |
140 std::set<std::string> scopes1_same; | 151 OAuth2TokenService::ScopeSet scopes1_same; |
141 scopes1_same.insert("s2"); | 152 scopes1_same.insert("s2"); |
142 scopes1_same.insert("s1"); | 153 scopes1_same.insert("s1"); |
143 std::set<std::string> scopes2; | 154 OAuth2TokenService::ScopeSet scopes2; |
144 scopes2.insert("s3"); | 155 scopes2.insert("s3"); |
145 | 156 |
146 oauth2_service_->set_refresh_token("refreshToken"); | 157 oauth2_service_->set_refresh_token("refreshToken"); |
147 | 158 |
148 // First request. | 159 // First request. |
149 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 160 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
150 scopes1, &consumer_)); | 161 account_id_, scopes1, &consumer_)); |
151 base::RunLoop().RunUntilIdle(); | 162 base::RunLoop().RunUntilIdle(); |
152 | 163 |
153 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 164 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
154 EXPECT_EQ(0, consumer_.number_of_errors_); | 165 EXPECT_EQ(0, consumer_.number_of_errors_); |
155 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 166 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
156 ASSERT_TRUE(fetcher); | 167 ASSERT_TRUE(fetcher); |
157 fetcher->set_response_code(net::HTTP_OK); | 168 fetcher->set_response_code(net::HTTP_OK); |
158 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 169 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
159 fetcher->delegate()->OnURLFetchComplete(fetcher); | 170 fetcher->delegate()->OnURLFetchComplete(fetcher); |
160 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 171 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
161 EXPECT_EQ(0, consumer_.number_of_errors_); | 172 EXPECT_EQ(0, consumer_.number_of_errors_); |
162 EXPECT_EQ("token", consumer_.last_token_); | 173 EXPECT_EQ("token", consumer_.last_token_); |
163 | 174 |
164 // Second request to the same set of scopes, should return the same token | 175 // Second request to the same set of scopes, should return the same token |
165 // without needing a network request. | 176 // without needing a network request. |
166 scoped_ptr<OAuth2TokenService::Request> request2( | 177 scoped_ptr<OAuth2TokenService::Request> request2( |
167 oauth2_service_->StartRequest(scopes1_same, &consumer_)); | 178 oauth2_service_->StartRequest(account_id_, scopes1_same, &consumer_)); |
168 base::RunLoop().RunUntilIdle(); | 179 base::RunLoop().RunUntilIdle(); |
169 | 180 |
170 // No new network fetcher. | 181 // No new network fetcher. |
171 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 182 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
172 EXPECT_EQ(0, consumer_.number_of_errors_); | 183 EXPECT_EQ(0, consumer_.number_of_errors_); |
173 EXPECT_EQ("token", consumer_.last_token_); | 184 EXPECT_EQ("token", consumer_.last_token_); |
174 | 185 |
175 // Third request to a new set of scopes, should return another token. | 186 // Third request to a new set of scopes, should return another token. |
176 scoped_ptr<OAuth2TokenService::Request> request3( | 187 scoped_ptr<OAuth2TokenService::Request> request3( |
177 oauth2_service_->StartRequest(scopes2, &consumer_)); | 188 oauth2_service_->StartRequest(account_id_, scopes2, &consumer_)); |
178 base::RunLoop().RunUntilIdle(); | 189 base::RunLoop().RunUntilIdle(); |
179 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 190 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
180 EXPECT_EQ(0, consumer_.number_of_errors_); | 191 EXPECT_EQ(0, consumer_.number_of_errors_); |
181 fetcher = factory_.GetFetcherByID(0); | 192 fetcher = factory_.GetFetcherByID(0); |
182 ASSERT_TRUE(fetcher); | 193 ASSERT_TRUE(fetcher); |
183 fetcher->set_response_code(net::HTTP_OK); | 194 fetcher->set_response_code(net::HTTP_OK); |
184 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 195 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
185 fetcher->delegate()->OnURLFetchComplete(fetcher); | 196 fetcher->delegate()->OnURLFetchComplete(fetcher); |
186 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 197 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
187 EXPECT_EQ(0, consumer_.number_of_errors_); | 198 EXPECT_EQ(0, consumer_.number_of_errors_); |
188 EXPECT_EQ("token2", consumer_.last_token_); | 199 EXPECT_EQ("token2", consumer_.last_token_); |
189 } | 200 } |
190 | 201 |
191 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { | 202 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
192 oauth2_service_->set_refresh_token("refreshToken"); | 203 oauth2_service_->set_refresh_token("refreshToken"); |
193 | 204 |
194 // First request. | 205 // First request. |
195 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 206 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
196 std::set<std::string>(), &consumer_)); | 207 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
197 base::RunLoop().RunUntilIdle(); | 208 base::RunLoop().RunUntilIdle(); |
198 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 209 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
199 EXPECT_EQ(0, consumer_.number_of_errors_); | 210 EXPECT_EQ(0, consumer_.number_of_errors_); |
200 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 211 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
201 ASSERT_TRUE(fetcher); | 212 ASSERT_TRUE(fetcher); |
202 fetcher->set_response_code(net::HTTP_OK); | 213 fetcher->set_response_code(net::HTTP_OK); |
203 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); | 214 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
204 fetcher->delegate()->OnURLFetchComplete(fetcher); | 215 fetcher->delegate()->OnURLFetchComplete(fetcher); |
205 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 216 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
206 EXPECT_EQ(0, consumer_.number_of_errors_); | 217 EXPECT_EQ(0, consumer_.number_of_errors_); |
207 EXPECT_EQ("token", consumer_.last_token_); | 218 EXPECT_EQ("token", consumer_.last_token_); |
208 | 219 |
209 // Second request must try to access the network as the token has expired. | 220 // Second request must try to access the network as the token has expired. |
210 scoped_ptr<OAuth2TokenService::Request> request2( | 221 scoped_ptr<OAuth2TokenService::Request> request2( |
211 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 222 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 223 &consumer_)); |
212 base::RunLoop().RunUntilIdle(); | 224 base::RunLoop().RunUntilIdle(); |
213 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 225 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
214 EXPECT_EQ(0, consumer_.number_of_errors_); | 226 EXPECT_EQ(0, consumer_.number_of_errors_); |
215 | 227 |
216 // Network failure. | 228 // Network failure. |
217 fetcher = factory_.GetFetcherByID(0); | 229 fetcher = factory_.GetFetcherByID(0); |
218 ASSERT_TRUE(fetcher); | 230 ASSERT_TRUE(fetcher); |
219 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 231 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
220 fetcher->SetResponseString(std::string()); | 232 fetcher->SetResponseString(std::string()); |
221 fetcher->delegate()->OnURLFetchComplete(fetcher); | 233 fetcher->delegate()->OnURLFetchComplete(fetcher); |
222 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 234 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
223 EXPECT_EQ(1, consumer_.number_of_errors_); | 235 EXPECT_EQ(1, consumer_.number_of_errors_); |
224 } | 236 } |
225 | 237 |
226 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { | 238 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
227 oauth2_service_->set_refresh_token("refreshToken"); | 239 oauth2_service_->set_refresh_token("refreshToken"); |
228 | 240 |
229 // First request. | 241 // First request. |
230 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 242 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
231 std::set<std::string>(), &consumer_)); | 243 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
232 base::RunLoop().RunUntilIdle(); | 244 base::RunLoop().RunUntilIdle(); |
233 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 245 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
234 EXPECT_EQ(0, consumer_.number_of_errors_); | 246 EXPECT_EQ(0, consumer_.number_of_errors_); |
235 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 247 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
236 ASSERT_TRUE(fetcher); | 248 ASSERT_TRUE(fetcher); |
237 fetcher->set_response_code(net::HTTP_OK); | 249 fetcher->set_response_code(net::HTTP_OK); |
238 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); | 250 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
239 fetcher->delegate()->OnURLFetchComplete(fetcher); | 251 fetcher->delegate()->OnURLFetchComplete(fetcher); |
240 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 252 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
241 EXPECT_EQ(0, consumer_.number_of_errors_); | 253 EXPECT_EQ(0, consumer_.number_of_errors_); |
242 EXPECT_EQ("token", consumer_.last_token_); | 254 EXPECT_EQ("token", consumer_.last_token_); |
243 | 255 |
244 // Second request must try to access the network as the token has expired. | 256 // Second request must try to access the network as the token has expired. |
245 scoped_ptr<OAuth2TokenService::Request> request2( | 257 scoped_ptr<OAuth2TokenService::Request> request2( |
246 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 258 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 259 &consumer_)); |
247 base::RunLoop().RunUntilIdle(); | 260 base::RunLoop().RunUntilIdle(); |
248 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 261 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
249 EXPECT_EQ(0, consumer_.number_of_errors_); | 262 EXPECT_EQ(0, consumer_.number_of_errors_); |
250 | 263 |
251 fetcher = factory_.GetFetcherByID(0); | 264 fetcher = factory_.GetFetcherByID(0); |
252 ASSERT_TRUE(fetcher); | 265 ASSERT_TRUE(fetcher); |
253 fetcher->set_response_code(net::HTTP_OK); | 266 fetcher->set_response_code(net::HTTP_OK); |
254 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); | 267 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); |
255 fetcher->delegate()->OnURLFetchComplete(fetcher); | 268 fetcher->delegate()->OnURLFetchComplete(fetcher); |
256 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 269 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
257 EXPECT_EQ(0, consumer_.number_of_errors_); | 270 EXPECT_EQ(0, consumer_.number_of_errors_); |
258 EXPECT_EQ("another token", consumer_.last_token_); | 271 EXPECT_EQ("another token", consumer_.last_token_); |
259 } | 272 } |
260 | 273 |
261 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { | 274 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
262 oauth2_service_->set_refresh_token("refreshToken"); | 275 oauth2_service_->set_refresh_token("refreshToken"); |
263 | 276 |
264 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 277 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
265 std::set<std::string>(), &consumer_)); | 278 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
266 base::RunLoop().RunUntilIdle(); | 279 base::RunLoop().RunUntilIdle(); |
267 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 280 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
268 EXPECT_EQ(0, consumer_.number_of_errors_); | 281 EXPECT_EQ(0, consumer_.number_of_errors_); |
269 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 282 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
270 ASSERT_TRUE(fetcher); | 283 ASSERT_TRUE(fetcher); |
271 | 284 |
272 request.reset(); | 285 request.reset(); |
273 | 286 |
274 fetcher->set_response_code(net::HTTP_OK); | 287 fetcher->set_response_code(net::HTTP_OK); |
275 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 288 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
276 fetcher->delegate()->OnURLFetchComplete(fetcher); | 289 fetcher->delegate()->OnURLFetchComplete(fetcher); |
277 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 290 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
278 EXPECT_EQ(0, consumer_.number_of_errors_); | 291 EXPECT_EQ(0, consumer_.number_of_errors_); |
279 } | 292 } |
280 | 293 |
281 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { | 294 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { |
282 oauth2_service_->set_refresh_token("refreshToken"); | 295 oauth2_service_->set_refresh_token("refreshToken"); |
283 | 296 |
284 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 297 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
285 std::set<std::string>(), &consumer_)); | 298 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
286 base::RunLoop().RunUntilIdle(); | 299 base::RunLoop().RunUntilIdle(); |
287 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 300 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
288 ASSERT_TRUE(fetcher); | 301 ASSERT_TRUE(fetcher); |
289 fetcher->set_response_code(net::HTTP_OK); | 302 fetcher->set_response_code(net::HTTP_OK); |
290 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 303 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
291 fetcher->delegate()->OnURLFetchComplete(fetcher); | 304 fetcher->delegate()->OnURLFetchComplete(fetcher); |
292 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 305 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
293 EXPECT_EQ(0, consumer_.number_of_errors_); | 306 EXPECT_EQ(0, consumer_.number_of_errors_); |
294 EXPECT_EQ("token", consumer_.last_token_); | 307 EXPECT_EQ("token", consumer_.last_token_); |
295 | 308 |
296 request.reset(); | 309 request.reset(); |
297 | 310 |
298 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 311 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
299 EXPECT_EQ(0, consumer_.number_of_errors_); | 312 EXPECT_EQ(0, consumer_.number_of_errors_); |
300 EXPECT_EQ("token", consumer_.last_token_); | 313 EXPECT_EQ("token", consumer_.last_token_); |
301 } | 314 } |
302 | 315 |
303 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { | 316 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { |
304 oauth2_service_->set_refresh_token("refreshToken"); | 317 oauth2_service_->set_refresh_token("refreshToken"); |
305 | 318 |
306 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 319 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
307 std::set<std::string>(), &consumer_)); | 320 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
308 base::RunLoop().RunUntilIdle(); | 321 base::RunLoop().RunUntilIdle(); |
309 scoped_ptr<OAuth2TokenService::Request> request2( | 322 scoped_ptr<OAuth2TokenService::Request> request2( |
310 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 323 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 324 &consumer_)); |
311 base::RunLoop().RunUntilIdle(); | 325 base::RunLoop().RunUntilIdle(); |
312 | 326 |
313 request.reset(); | 327 request.reset(); |
314 | 328 |
315 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 329 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
316 ASSERT_TRUE(fetcher); | 330 ASSERT_TRUE(fetcher); |
317 fetcher->set_response_code(net::HTTP_OK); | 331 fetcher->set_response_code(net::HTTP_OK); |
318 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 332 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
319 fetcher->delegate()->OnURLFetchComplete(fetcher); | 333 fetcher->delegate()->OnURLFetchComplete(fetcher); |
320 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 334 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
321 EXPECT_EQ(0, consumer_.number_of_errors_); | 335 EXPECT_EQ(0, consumer_.number_of_errors_); |
322 } | 336 } |
323 | 337 |
324 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { | 338 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
325 // We have a valid refresh token; the first request is successful. | 339 // We have a valid refresh token; the first request is successful. |
326 oauth2_service_->set_refresh_token("refreshToken"); | 340 oauth2_service_->set_refresh_token("refreshToken"); |
327 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 341 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
328 std::set<std::string>(), &consumer_)); | 342 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
329 base::RunLoop().RunUntilIdle(); | 343 base::RunLoop().RunUntilIdle(); |
330 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 344 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
331 ASSERT_TRUE(fetcher); | 345 ASSERT_TRUE(fetcher); |
332 fetcher->set_response_code(net::HTTP_OK); | 346 fetcher->set_response_code(net::HTTP_OK); |
333 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 347 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
334 fetcher->delegate()->OnURLFetchComplete(fetcher); | 348 fetcher->delegate()->OnURLFetchComplete(fetcher); |
335 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 349 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
336 EXPECT_EQ(0, consumer_.number_of_errors_); | 350 EXPECT_EQ(0, consumer_.number_of_errors_); |
337 EXPECT_EQ("token", consumer_.last_token_); | 351 EXPECT_EQ("token", consumer_.last_token_); |
338 | 352 |
339 // The refresh token is no longer available; subsequent requests fail. | 353 // The refresh token is no longer available; subsequent requests fail. |
340 oauth2_service_->set_refresh_token(""); | 354 oauth2_service_->set_refresh_token(""); |
341 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); | 355 request = oauth2_service_->StartRequest(account_id_, |
| 356 OAuth2TokenService::ScopeSet(), &consumer_); |
342 base::RunLoop().RunUntilIdle(); | 357 base::RunLoop().RunUntilIdle(); |
343 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 358 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
344 EXPECT_EQ(1, consumer_.number_of_errors_); | 359 EXPECT_EQ(1, consumer_.number_of_errors_); |
345 } | 360 } |
346 | 361 |
347 TEST_F(OAuth2TokenServiceTest, | 362 TEST_F(OAuth2TokenServiceTest, |
348 ChangedRefreshTokenDoesNotAffectInFlightRequests) { | 363 ChangedRefreshTokenDoesNotAffectInFlightRequests) { |
349 oauth2_service_->set_refresh_token("first refreshToken"); | 364 oauth2_service_->set_refresh_token("first refreshToken"); |
350 std::set<std::string> scopes; | 365 OAuth2TokenService::ScopeSet scopes; |
351 scopes.insert("s1"); | 366 scopes.insert("s1"); |
352 scopes.insert("s2"); | 367 scopes.insert("s2"); |
353 | 368 |
354 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 369 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
355 scopes, &consumer_)); | 370 account_id_, scopes, &consumer_)); |
356 base::RunLoop().RunUntilIdle(); | 371 base::RunLoop().RunUntilIdle(); |
357 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); | 372 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
358 ASSERT_TRUE(fetcher1); | 373 ASSERT_TRUE(fetcher1); |
359 | 374 |
360 // Note |request| is still pending when the refresh token changes. | 375 // Note |request| is still pending when the refresh token changes. |
361 oauth2_service_->set_refresh_token("second refreshToken"); | 376 oauth2_service_->set_refresh_token("second refreshToken"); |
362 | 377 |
363 // A 2nd request (using the new refresh token) that occurs and completes | 378 // A 2nd request (using the new refresh token) that occurs and completes |
364 // while the 1st request is in flight is successful. | 379 // while the 1st request is in flight is successful. |
365 TestingOAuth2TokenServiceConsumer consumer2; | 380 TestingOAuth2TokenServiceConsumer consumer2; |
366 scoped_ptr<OAuth2TokenService::Request> request2( | 381 scoped_ptr<OAuth2TokenService::Request> request2( |
367 oauth2_service_->StartRequest(scopes, &consumer2)); | 382 oauth2_service_->StartRequest(account_id_, scopes, &consumer2)); |
368 base::RunLoop().RunUntilIdle(); | 383 base::RunLoop().RunUntilIdle(); |
369 | 384 |
370 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); | 385 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); |
371 fetcher2->set_response_code(net::HTTP_OK); | 386 fetcher2->set_response_code(net::HTTP_OK); |
372 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); | 387 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); |
373 fetcher2->delegate()->OnURLFetchComplete(fetcher2); | 388 fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
374 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); | 389 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); |
375 EXPECT_EQ(0, consumer2.number_of_errors_); | 390 EXPECT_EQ(0, consumer2.number_of_errors_); |
376 EXPECT_EQ("second token", consumer2.last_token_); | 391 EXPECT_EQ("second token", consumer2.last_token_); |
377 | 392 |
378 fetcher1->set_response_code(net::HTTP_OK); | 393 fetcher1->set_response_code(net::HTTP_OK); |
379 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); | 394 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); |
380 fetcher1->delegate()->OnURLFetchComplete(fetcher1); | 395 fetcher1->delegate()->OnURLFetchComplete(fetcher1); |
381 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 396 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
382 EXPECT_EQ(0, consumer_.number_of_errors_); | 397 EXPECT_EQ(0, consumer_.number_of_errors_); |
383 EXPECT_EQ("first token", consumer_.last_token_); | 398 EXPECT_EQ("first token", consumer_.last_token_); |
384 } | 399 } |
385 | 400 |
386 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { | 401 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { |
387 oauth2_service_->set_refresh_token("refreshToken"); | 402 oauth2_service_->set_refresh_token("refreshToken"); |
388 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 403 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
389 std::set<std::string>(), &consumer_)); | 404 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
390 base::RunLoop().RunUntilIdle(); | 405 base::RunLoop().RunUntilIdle(); |
391 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 406 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
392 EXPECT_EQ(0, consumer_.number_of_errors_); | 407 EXPECT_EQ(0, consumer_.number_of_errors_); |
393 | 408 |
394 // The destructor should cancel all in-flight fetchers. | 409 // The destructor should cancel all in-flight fetchers. |
395 oauth2_service_.reset(NULL); | 410 oauth2_service_.reset(NULL); |
396 | 411 |
397 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 412 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
398 EXPECT_EQ(1, consumer_.number_of_errors_); | 413 EXPECT_EQ(1, consumer_.number_of_errors_); |
399 } | 414 } |
400 | 415 |
401 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { | 416 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
402 oauth2_service_->set_refresh_token("refreshToken"); | 417 oauth2_service_->set_refresh_token("refreshToken"); |
403 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get()); | 418 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get(), |
| 419 account_id_); |
404 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 420 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
405 std::set<std::string>(), &consumer)); | 421 account_id_, OAuth2TokenService::ScopeSet(), &consumer)); |
406 base::RunLoop().RunUntilIdle(); | 422 base::RunLoop().RunUntilIdle(); |
407 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 423 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
408 EXPECT_EQ(0, consumer.number_of_errors_); | 424 EXPECT_EQ(0, consumer.number_of_errors_); |
409 | 425 |
410 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 426 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
411 ASSERT_TRUE(fetcher); | 427 ASSERT_TRUE(fetcher); |
412 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 428 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
413 fetcher->SetResponseString(std::string()); | 429 fetcher->SetResponseString(std::string()); |
414 fetcher->delegate()->OnURLFetchComplete(fetcher); | 430 fetcher->delegate()->OnURLFetchComplete(fetcher); |
415 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 431 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
416 EXPECT_EQ(1, consumer.number_of_errors_); | 432 EXPECT_EQ(1, consumer.number_of_errors_); |
417 | 433 |
418 fetcher = factory_.GetFetcherByID(0); | 434 fetcher = factory_.GetFetcherByID(0); |
419 ASSERT_TRUE(fetcher); | 435 ASSERT_TRUE(fetcher); |
420 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 436 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
421 fetcher->SetResponseString(std::string()); | 437 fetcher->SetResponseString(std::string()); |
422 fetcher->delegate()->OnURLFetchComplete(fetcher); | 438 fetcher->delegate()->OnURLFetchComplete(fetcher); |
423 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 439 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
424 EXPECT_EQ(2, consumer.number_of_errors_); | 440 EXPECT_EQ(2, consumer.number_of_errors_); |
425 } | 441 } |
426 | 442 |
427 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { | 443 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
428 std::set<std::string> scopes; | 444 OAuth2TokenService::ScopeSet scopes; |
429 oauth2_service_->set_refresh_token("refreshToken"); | 445 oauth2_service_->set_refresh_token("refreshToken"); |
430 | 446 |
431 // First request. | 447 // First request. |
432 scoped_ptr<OAuth2TokenService::Request> request( | 448 scoped_ptr<OAuth2TokenService::Request> request( |
433 oauth2_service_->StartRequest(scopes, &consumer_)); | 449 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); |
434 base::RunLoop().RunUntilIdle(); | 450 base::RunLoop().RunUntilIdle(); |
435 | 451 |
436 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 452 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
437 EXPECT_EQ(0, consumer_.number_of_errors_); | 453 EXPECT_EQ(0, consumer_.number_of_errors_); |
438 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 454 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
439 ASSERT_TRUE(fetcher); | 455 ASSERT_TRUE(fetcher); |
440 fetcher->set_response_code(net::HTTP_OK); | 456 fetcher->set_response_code(net::HTTP_OK); |
441 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 457 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
442 fetcher->delegate()->OnURLFetchComplete(fetcher); | 458 fetcher->delegate()->OnURLFetchComplete(fetcher); |
443 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 459 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
444 EXPECT_EQ(0, consumer_.number_of_errors_); | 460 EXPECT_EQ(0, consumer_.number_of_errors_); |
445 EXPECT_EQ("token", consumer_.last_token_); | 461 EXPECT_EQ("token", consumer_.last_token_); |
446 | 462 |
447 // Second request, should return the same token without needing a network | 463 // Second request, should return the same token without needing a network |
448 // request. | 464 // request. |
449 scoped_ptr<OAuth2TokenService::Request> request2( | 465 scoped_ptr<OAuth2TokenService::Request> request2( |
450 oauth2_service_->StartRequest(scopes, &consumer_)); | 466 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); |
451 base::RunLoop().RunUntilIdle(); | 467 base::RunLoop().RunUntilIdle(); |
452 | 468 |
453 // No new network fetcher. | 469 // No new network fetcher. |
454 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 470 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
455 EXPECT_EQ(0, consumer_.number_of_errors_); | 471 EXPECT_EQ(0, consumer_.number_of_errors_); |
456 EXPECT_EQ("token", consumer_.last_token_); | 472 EXPECT_EQ("token", consumer_.last_token_); |
457 | 473 |
458 // Invalidating the token should return a new token on the next request. | 474 // Invalidating the token should return a new token on the next request. |
459 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); | 475 oauth2_service_->InvalidateToken(account_id_, scopes, consumer_.last_token_); |
460 scoped_ptr<OAuth2TokenService::Request> request3( | 476 scoped_ptr<OAuth2TokenService::Request> request3( |
461 oauth2_service_->StartRequest(scopes, &consumer_)); | 477 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); |
462 base::RunLoop().RunUntilIdle(); | 478 base::RunLoop().RunUntilIdle(); |
463 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 479 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
464 EXPECT_EQ(0, consumer_.number_of_errors_); | 480 EXPECT_EQ(0, consumer_.number_of_errors_); |
465 fetcher = factory_.GetFetcherByID(0); | 481 fetcher = factory_.GetFetcherByID(0); |
466 ASSERT_TRUE(fetcher); | 482 ASSERT_TRUE(fetcher); |
467 fetcher->set_response_code(net::HTTP_OK); | 483 fetcher->set_response_code(net::HTTP_OK); |
468 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 484 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
469 fetcher->delegate()->OnURLFetchComplete(fetcher); | 485 fetcher->delegate()->OnURLFetchComplete(fetcher); |
470 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 486 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
471 EXPECT_EQ(0, consumer_.number_of_errors_); | 487 EXPECT_EQ(0, consumer_.number_of_errors_); |
472 EXPECT_EQ("token2", consumer_.last_token_); | 488 EXPECT_EQ("token2", consumer_.last_token_); |
473 } | 489 } |
474 | 490 |
475 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { | 491 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { |
476 oauth2_service_->set_refresh_token("refreshToken"); | 492 oauth2_service_->set_refresh_token("refreshToken"); |
477 scoped_ptr<OAuth2TokenService::Request> request( | 493 scoped_ptr<OAuth2TokenService::Request> request( |
478 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 494 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 495 &consumer_)); |
479 | 496 |
480 oauth2_service_->set_refresh_token("refreshToken2"); | 497 oauth2_service_->set_refresh_token("refreshToken2"); |
481 scoped_ptr<OAuth2TokenService::Request> request2( | 498 scoped_ptr<OAuth2TokenService::Request> request2( |
482 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 499 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 500 &consumer_)); |
483 | 501 |
484 base::RunLoop().RunUntilIdle(); | 502 base::RunLoop().RunUntilIdle(); |
485 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 503 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
486 EXPECT_EQ(0, consumer_.number_of_errors_); | 504 EXPECT_EQ(0, consumer_.number_of_errors_); |
487 | 505 |
488 oauth2_service_->CancelAllRequestsForTest(); | 506 oauth2_service_->CancelAllRequestsForTest(); |
489 | 507 |
490 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 508 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
491 EXPECT_EQ(2, consumer_.number_of_errors_); | 509 EXPECT_EQ(2, consumer_.number_of_errors_); |
492 } | 510 } |
493 | 511 |
494 TEST_F(OAuth2TokenServiceTest, CancelRequestsForToken) { | 512 TEST_F(OAuth2TokenServiceTest, CancelRequestsForToken) { |
495 std::set<std::string> scope_set_1; | 513 OAuth2TokenService::ScopeSet scope_set_1; |
496 scope_set_1.insert("scope1"); | 514 scope_set_1.insert("scope1"); |
497 scope_set_1.insert("scope2"); | 515 scope_set_1.insert("scope2"); |
498 std::set<std::string> scope_set_2(scope_set_1.begin(), scope_set_1.end()); | 516 OAuth2TokenService::ScopeSet scope_set_2(scope_set_1.begin(), |
| 517 scope_set_1.end()); |
499 scope_set_2.insert("scope3"); | 518 scope_set_2.insert("scope3"); |
500 | 519 |
501 oauth2_service_->set_refresh_token("refreshToken"); | 520 oauth2_service_->set_refresh_token("refreshToken"); |
502 scoped_ptr<OAuth2TokenService::Request> request1( | 521 scoped_ptr<OAuth2TokenService::Request> request1( |
503 oauth2_service_->StartRequest(scope_set_1, &consumer_)); | 522 oauth2_service_->StartRequest(account_id_, scope_set_1, &consumer_)); |
504 scoped_ptr<OAuth2TokenService::Request> request2( | 523 scoped_ptr<OAuth2TokenService::Request> request2( |
505 oauth2_service_->StartRequest(scope_set_2, &consumer_)); | 524 oauth2_service_->StartRequest(account_id_, scope_set_2, &consumer_)); |
506 | 525 |
507 oauth2_service_->set_refresh_token("refreshToken2"); | 526 oauth2_service_->set_refresh_token("refreshToken2"); |
508 scoped_ptr<OAuth2TokenService::Request> request3( | 527 scoped_ptr<OAuth2TokenService::Request> request3( |
509 oauth2_service_->StartRequest(scope_set_1, &consumer_)); | 528 oauth2_service_->StartRequest(account_id_, scope_set_1, &consumer_)); |
510 | 529 |
511 base::RunLoop().RunUntilIdle(); | 530 base::RunLoop().RunUntilIdle(); |
512 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 531 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
513 EXPECT_EQ(0, consumer_.number_of_errors_); | 532 EXPECT_EQ(0, consumer_.number_of_errors_); |
514 | 533 |
515 oauth2_service_->CancelRequestsForTokenForTest("refreshToken"); | 534 oauth2_service_->CancelRequestsForTokenForTest("refreshToken"); |
516 | 535 |
517 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 536 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
518 EXPECT_EQ(2, consumer_.number_of_errors_); | 537 EXPECT_EQ(2, consumer_.number_of_errors_); |
519 | 538 |
520 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2"); | 539 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2"); |
521 | 540 |
522 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 541 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
523 EXPECT_EQ(3, consumer_.number_of_errors_); | 542 EXPECT_EQ(3, consumer_.number_of_errors_); |
524 } | 543 } |
525 | 544 |
526 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) { | 545 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) { |
527 std::string client_id_1("client1"); | 546 std::string client_id_1("client1"); |
528 std::string client_secret_1("secret1"); | 547 std::string client_secret_1("secret1"); |
529 std::string client_id_2("client2"); | 548 std::string client_id_2("client2"); |
530 std::string client_secret_2("secret2"); | 549 std::string client_secret_2("secret2"); |
531 std::set<std::string> scope_set; | 550 std::set<std::string> scope_set; |
532 scope_set.insert("scope1"); | 551 scope_set.insert("scope1"); |
533 scope_set.insert("scope2"); | 552 scope_set.insert("scope2"); |
534 | 553 |
535 std::string refresh_token("refreshToken"); | 554 std::string refresh_token("refreshToken"); |
536 oauth2_service_->set_refresh_token(refresh_token); | 555 oauth2_service_->set_refresh_token(refresh_token); |
537 | 556 |
538 scoped_ptr<OAuth2TokenService::Request> request1( | 557 scoped_ptr<OAuth2TokenService::Request> request1( |
539 oauth2_service_->StartRequestForClient(client_id_1, | 558 oauth2_service_->StartRequestForClient(account_id_, |
| 559 client_id_1, |
540 client_secret_1, | 560 client_secret_1, |
541 scope_set, | 561 scope_set, |
542 &consumer_)); | 562 &consumer_)); |
543 scoped_ptr<OAuth2TokenService::Request> request2( | 563 scoped_ptr<OAuth2TokenService::Request> request2( |
544 oauth2_service_->StartRequestForClient(client_id_2, | 564 oauth2_service_->StartRequestForClient(account_id_, |
| 565 client_id_2, |
545 client_secret_2, | 566 client_secret_2, |
546 scope_set, | 567 scope_set, |
547 &consumer_)); | 568 &consumer_)); |
548 // Start a request that should be duplicate of |request1|. | 569 // Start a request that should be duplicate of |request1|. |
549 scoped_ptr<OAuth2TokenService::Request> request3( | 570 scoped_ptr<OAuth2TokenService::Request> request3( |
550 oauth2_service_->StartRequestForClient(client_id_1, | 571 oauth2_service_->StartRequestForClient(account_id_, |
| 572 client_id_1, |
551 client_secret_1, | 573 client_secret_1, |
552 scope_set, | 574 scope_set, |
553 &consumer_)); | 575 &consumer_)); |
554 base::RunLoop().RunUntilIdle(); | 576 base::RunLoop().RunUntilIdle(); |
555 | 577 |
556 ASSERT_EQ(2U, | 578 ASSERT_EQ(2U, |
557 oauth2_service_->GetNumPendingRequestsForTesting( | 579 oauth2_service_->GetNumPendingRequestsForTesting( |
558 client_id_1, | 580 client_id_1, |
559 refresh_token, | 581 refresh_token, |
560 scope_set)); | 582 scope_set)); |
561 ASSERT_EQ(1U, | 583 ASSERT_EQ(1U, |
562 oauth2_service_->GetNumPendingRequestsForTesting( | 584 oauth2_service_->GetNumPendingRequestsForTesting( |
563 client_id_2, | 585 client_id_2, |
564 refresh_token, | 586 refresh_token, |
565 scope_set)); | 587 scope_set)); |
566 } | 588 } |
567 | 589 |
568 TEST_F(OAuth2TokenServiceTest, ClientScopeSetOrderTest) { | 590 TEST_F(OAuth2TokenServiceTest, RequestParametersOrderTest) { |
569 OAuth2TokenService::ScopeSet set_0; | 591 OAuth2TokenService::ScopeSet set_0; |
570 OAuth2TokenService::ScopeSet set_1; | 592 OAuth2TokenService::ScopeSet set_1; |
571 set_1.insert("1"); | 593 set_1.insert("1"); |
572 | 594 |
573 OAuth2TokenService::ClientScopeSet sets[] = { | 595 OAuth2TokenService::RequestParameters params[] = { |
574 OAuth2TokenService::ClientScopeSet("0", set_0), | 596 OAuth2TokenService::RequestParameters("0", "0", set_0), |
575 OAuth2TokenService::ClientScopeSet("0", set_1), | 597 OAuth2TokenService::RequestParameters("0", "0", set_1), |
576 OAuth2TokenService::ClientScopeSet("1", set_0), | 598 OAuth2TokenService::RequestParameters("0", "1", set_0), |
577 OAuth2TokenService::ClientScopeSet("1", set_1), | 599 OAuth2TokenService::RequestParameters("0", "1", set_1), |
578 }; | 600 OAuth2TokenService::RequestParameters("1", "0", set_0), |
579 | 601 OAuth2TokenService::RequestParameters("1", "0", set_1), |
580 for (size_t i = 0; i < arraysize(sets); i++) { | 602 OAuth2TokenService::RequestParameters("1", "1", set_0), |
581 for (size_t j = 0; j < arraysize(sets); j++) { | 603 OAuth2TokenService::RequestParameters("1", "1", set_1), |
582 if (i == j) { | |
583 EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j; | |
584 EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j; | |
585 } else if (i < j) { | |
586 EXPECT_TRUE(sets[i] < sets[j]) << " i=" << i << ", j=" << j; | |
587 EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j; | |
588 } else { | |
589 EXPECT_TRUE(sets[j] < sets[i]) << " i=" << i << ", j=" << j; | |
590 EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j; | |
591 } | |
592 } | |
593 } | |
594 } | |
595 | |
596 TEST_F(OAuth2TokenServiceTest, FetchParametersOrderTest) { | |
597 OAuth2TokenService::ScopeSet set_0; | |
598 OAuth2TokenService::ScopeSet set_1; | |
599 set_1.insert("1"); | |
600 | |
601 OAuth2TokenService::FetchParameters params[] = { | |
602 OAuth2TokenService::FetchParameters("0", "0", set_0), | |
603 OAuth2TokenService::FetchParameters("0", "0", set_1), | |
604 OAuth2TokenService::FetchParameters("0", "1", set_0), | |
605 OAuth2TokenService::FetchParameters("0", "1", set_1), | |
606 OAuth2TokenService::FetchParameters("1", "0", set_0), | |
607 OAuth2TokenService::FetchParameters("1", "0", set_1), | |
608 OAuth2TokenService::FetchParameters("1", "1", set_0), | |
609 OAuth2TokenService::FetchParameters("1", "1", set_1), | |
610 }; | 604 }; |
611 | 605 |
612 for (size_t i = 0; i < arraysize(params); i++) { | 606 for (size_t i = 0; i < arraysize(params); i++) { |
613 for (size_t j = 0; j < arraysize(params); j++) { | 607 for (size_t j = 0; j < arraysize(params); j++) { |
614 if (i == j) { | 608 if (i == j) { |
615 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; | 609 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
616 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; | 610 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
617 } else if (i < j) { | 611 } else if (i < j) { |
618 EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j; | 612 EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
619 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; | 613 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
620 } else { | 614 } else { |
621 EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j; | 615 EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
622 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; | 616 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
623 } | 617 } |
624 } | 618 } |
625 } | 619 } |
626 } | 620 } |
OLD | NEW |