Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: components/signin/ios/browser/profile_oauth2_token_service_ios_unittest.mm

Issue 234573003: Upstream PO2TS_IOS unit test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nits Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « components/signin/ios/browser/profile_oauth2_token_service_ios.mm ('k') | ios/ios_tests.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/run_loop.h"
6 #include "components/signin/core/browser/profile_oauth2_token_service.h"
7 #include "components/signin/core/browser/test_signin_client.h"
8 #include "components/signin/ios/browser/profile_oauth2_token_service_ios.h"
9 #include "google_apis/gaia/gaia_urls.h"
10 #include "google_apis/gaia/oauth2_token_service_test_util.h"
11 #include "ios/public/test/fake_profile_oauth2_token_service_ios_provider.h"
12 #include "net/url_request/test_url_fetcher_factory.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 class ProfileOAuth2TokenServiceIOSTest : public testing::Test,
16 public OAuth2TokenService::Consumer,
17 public OAuth2TokenService::Observer {
18 public:
19 ProfileOAuth2TokenServiceIOSTest()
20 : OAuth2TokenService::Consumer("test_consumer_id"),
21 factory_(NULL),
22 token_available_count_(0),
23 token_revoked_count_(0),
24 tokens_loaded_count_(0),
25 access_token_success_(0),
26 access_token_failure_(0),
27 last_access_token_error_(GoogleServiceAuthError::NONE) {}
28
29 virtual void SetUp() OVERRIDE {
30 factory_.SetFakeResponse(GaiaUrls::GetInstance()->oauth2_revoke_url(),
31 "",
32 net::HTTP_OK,
33 net::URLRequestStatus::SUCCESS);
34 fake_provider_ = client_.GetIOSProviderAsFake();
35 fake_provider_->set_using_shared_authentication(true);
36 oauth2_service_.Initialize(&client_);
37 oauth2_service_.AddObserver(this);
38 }
39
40 virtual void TearDown() OVERRIDE {
41 oauth2_service_.RemoveObserver(this);
42 oauth2_service_.Shutdown();
43 }
44
45 // OAuth2TokenService::Consumer implementation.
46 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
47 const std::string& access_token,
48 const base::Time& expiration_time) OVERRIDE {
49 ++access_token_success_;
50 }
51
52 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
53 const GoogleServiceAuthError& error) OVERRIDE {
54 ++access_token_failure_;
55 last_access_token_error_ = error;
56 };
57
58 // OAuth2TokenService::Observer implementation.
59 virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE {
60 ++token_available_count_;
61 }
62 virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE {
63 ++token_revoked_count_;
64 }
65 virtual void OnRefreshTokensLoaded() OVERRIDE { ++tokens_loaded_count_; }
66
67 void ResetObserverCounts() {
68 token_available_count_ = 0;
69 token_revoked_count_ = 0;
70 tokens_loaded_count_ = 0;
71 token_available_count_ = 0;
72 access_token_failure_ = 0;
73 }
74
75 protected:
76 base::MessageLoop message_loop_;
77 net::FakeURLFetcherFactory factory_;
78 TestSigninClient client_;
79 ios::FakeProfileOAuth2TokenServiceIOSProvider* fake_provider_;
80 ProfileOAuth2TokenServiceIOS oauth2_service_;
81 TestingOAuth2TokenServiceConsumer consumer_;
82 int token_available_count_;
83 int token_revoked_count_;
84 int tokens_loaded_count_;
85 int access_token_success_;
86 int access_token_failure_;
87 GoogleServiceAuthError last_access_token_error_;
88 };
89
90 TEST_F(ProfileOAuth2TokenServiceIOSTest, LoadRevokeCredentialsOneAccount) {
91 fake_provider_->AddAccount("account_id");
92 oauth2_service_.LoadCredentials("account_id");
93 base::RunLoop().RunUntilIdle();
94 EXPECT_EQ(1, token_available_count_);
95 EXPECT_EQ(1, tokens_loaded_count_);
96 EXPECT_EQ(0, token_revoked_count_);
97 EXPECT_EQ(1U, oauth2_service_.GetAccounts().size());
98 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id"));
99
100 ResetObserverCounts();
101 oauth2_service_.RevokeAllCredentials();
102 EXPECT_EQ(0, token_available_count_);
103 EXPECT_EQ(0, tokens_loaded_count_);
104 EXPECT_EQ(1, token_revoked_count_);
105 EXPECT_EQ(0U, oauth2_service_.GetAccounts().size());
106 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
107 }
108
109 TEST_F(ProfileOAuth2TokenServiceIOSTest,
110 LoadRevokeCredentialsMultipleAccounts) {
111 fake_provider_->AddAccount("account_id_1");
112 fake_provider_->AddAccount("account_id_2");
113 fake_provider_->AddAccount("account_id_3");
114 oauth2_service_.LoadCredentials("account_id_1");
115 base::RunLoop().RunUntilIdle();
116 EXPECT_EQ(3, token_available_count_);
117 EXPECT_EQ(1, tokens_loaded_count_);
118 EXPECT_EQ(0, token_revoked_count_);
119 EXPECT_EQ(3U, oauth2_service_.GetAccounts().size());
120 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
121 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
122 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
123
124 ResetObserverCounts();
125 oauth2_service_.RevokeAllCredentials();
126 EXPECT_EQ(0, token_available_count_);
127 EXPECT_EQ(0, tokens_loaded_count_);
128 EXPECT_EQ(3, token_revoked_count_);
129 EXPECT_EQ(0U, oauth2_service_.GetAccounts().size());
130 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
131 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
132 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
133 }
134
135 TEST_F(ProfileOAuth2TokenServiceIOSTest, ReloadCredentials) {
136 fake_provider_->AddAccount("account_id_1");
137 fake_provider_->AddAccount("account_id_2");
138 fake_provider_->AddAccount("account_id_3");
139 oauth2_service_.LoadCredentials("account_id_1");
140 base::RunLoop().RunUntilIdle();
141
142 // Change the accounts.
143 ResetObserverCounts();
144 fake_provider_->ClearAccounts();
145 fake_provider_->AddAccount("account_id_1");
146 fake_provider_->AddAccount("account_id_4");
147 oauth2_service_.ReloadCredentials();
148
149 EXPECT_EQ(1, token_available_count_);
150 EXPECT_EQ(0, tokens_loaded_count_);
151 EXPECT_EQ(2, token_revoked_count_);
152 EXPECT_EQ(2U, oauth2_service_.GetAccounts().size());
153 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
154 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
155 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
156 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_4"));
157 }
158
159 TEST_F(ProfileOAuth2TokenServiceIOSTest, StartRequestSuccess) {
160 fake_provider_->AddAccount("account_id_1");
161 oauth2_service_.LoadCredentials("account_id_1");
162 base::RunLoop().RunUntilIdle();
163
164 // Fetch access tokens.
165 ResetObserverCounts();
166 OAuth2TokenService::ScopeSet scopes;
167 scopes.insert("scope");
168 scoped_ptr<OAuth2TokenService::Request> request(
169 oauth2_service_.StartRequest("account_id_1", scopes, this));
170 EXPECT_EQ(0, access_token_success_);
171 EXPECT_EQ(0, access_token_failure_);
172
173 ResetObserverCounts();
174 fake_provider_->IssueAccessTokenForAllRequests();
175 base::RunLoop().RunUntilIdle();
176 EXPECT_EQ(1, access_token_success_);
177 EXPECT_EQ(0, access_token_failure_);
178 }
179
180 TEST_F(ProfileOAuth2TokenServiceIOSTest, StartRequestFailure) {
181 fake_provider_->AddAccount("account_id_1");
182 oauth2_service_.LoadCredentials("account_id_1");
183 base::RunLoop().RunUntilIdle();
184
185 // Fetch access tokens.
186 ResetObserverCounts();
187 OAuth2TokenService::ScopeSet scopes;
188 scopes.insert("scope");
189 scoped_ptr<OAuth2TokenService::Request> request(
190 oauth2_service_.StartRequest("account_id_1", scopes, this));
191 EXPECT_EQ(0, access_token_success_);
192 EXPECT_EQ(0, access_token_failure_);
193
194 ResetObserverCounts();
195 fake_provider_->IssueAccessTokenErrorForAllRequests();
196 base::RunLoop().RunUntilIdle();
197 EXPECT_EQ(0, access_token_success_);
198 EXPECT_EQ(1, access_token_failure_);
199 }
200
201 TEST_F(ProfileOAuth2TokenServiceIOSTest, Migration) {
202 fake_provider_->set_using_shared_authentication(false);
203 oauth2_service_.LoadCredentials("account_id_1");
204 base::RunLoop().RunUntilIdle();
205
206 ResetObserverCounts();
207 oauth2_service_.UpdateCredentials("account_id_1", "pre_sso_refresh_token_1");
208 oauth2_service_.UpdateCredentials("account_id_2", "pre_sso_refresh_token_2");
209 EXPECT_EQ(2, token_available_count_);
210 EXPECT_EQ(0, tokens_loaded_count_);
211 EXPECT_EQ(0, token_revoked_count_);
212 EXPECT_EQ(2U, oauth2_service_.GetAccounts().size());
213 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
214 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
215 EXPECT_EQ("pre_sso_refresh_token_1",
216 oauth2_service_.GetRefreshTokenWhenNotUsingSharedAuthentication(
217 "account_id_1"));
218 EXPECT_EQ("pre_sso_refresh_token_2",
219 oauth2_service_.GetRefreshTokenWhenNotUsingSharedAuthentication(
220 "account_id_2"));
221
222 ResetObserverCounts();
223 oauth2_service_.StartUsingSharedAuthentication();
224 EXPECT_EQ(0, token_available_count_);
225 EXPECT_EQ(0, tokens_loaded_count_);
226 EXPECT_EQ(2, token_revoked_count_);
227 EXPECT_EQ(0U, oauth2_service_.GetAccounts().size());
228 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
229 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
230
231 ResetObserverCounts();
232 fake_provider_->AddAccount("account_id_1");
233 oauth2_service_.ReloadCredentials();
234 EXPECT_EQ(1, token_available_count_);
235 EXPECT_EQ(0, tokens_loaded_count_);
236 EXPECT_EQ(0, token_revoked_count_);
237 EXPECT_EQ(1U, oauth2_service_.GetAccounts().size());
238 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
239 EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
240 }
241
242 TEST_F(ProfileOAuth2TokenServiceIOSTest, ForceInvalidGrantResponses) {
243 fake_provider_->set_using_shared_authentication(false);
244 oauth2_service_.LoadCredentials("account_id_1");
245 base::RunLoop().RunUntilIdle();
246 oauth2_service_.UpdateCredentials("account_id_1", "pre_sso_refresh_token_1");
247 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
248
249 // First call revokes the existing token and then updates the credentials
250 // with a fake token.
251 ResetObserverCounts();
252 oauth2_service_.ForceInvalidGrantResponses();
253 EXPECT_EQ(1, token_available_count_);
254 EXPECT_EQ(0, tokens_loaded_count_);
255 EXPECT_EQ(1, token_revoked_count_);
256 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
257
258 // Fetching access tokens fails with invalid grant responses.
259 OAuth2TokenService::ScopeSet scopes;
260 scopes.insert("scope");
261 scoped_ptr<OAuth2TokenService::Request> request(
262 oauth2_service_.StartRequest("account_id_1", scopes, this));
263 base::RunLoop().RunUntilIdle();
264 EXPECT_EQ(0, access_token_success_);
265 EXPECT_EQ(1, access_token_failure_);
266 EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS,
267 last_access_token_error_.state());
268
269 // Second call to force invalid grant responses is ignored.
270 ResetObserverCounts();
271 oauth2_service_.ForceInvalidGrantResponses();
272 EXPECT_EQ(0, token_available_count_);
273 EXPECT_EQ(0, tokens_loaded_count_);
274 EXPECT_EQ(0, token_revoked_count_);
275 EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
276 }
OLDNEW
« no previous file with comments | « components/signin/ios/browser/profile_oauth2_token_service_ios.mm ('k') | ios/ios_tests.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698