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