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

Side by Side Diff: chrome/browser/services/gcm/gcm_account_tracker_unittest.cc

Issue 378643002: [GCM] Check-in with signed in accounts associates device to user (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update to the code to prevent test crashes. Created 6 years, 5 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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 "chrome/browser/services/gcm/gcm_account_tracker.h" 5 #include "chrome/browser/services/gcm/gcm_account_tracker.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 27 matching lines...) Expand all
38 } 38 }
39 39
40 } // namespace 40 } // namespace
41 41
42 class GCMAccountTrackerTest : public testing::Test { 42 class GCMAccountTrackerTest : public testing::Test {
43 public: 43 public:
44 GCMAccountTrackerTest(); 44 GCMAccountTrackerTest();
45 virtual ~GCMAccountTrackerTest(); 45 virtual ~GCMAccountTrackerTest();
46 46
47 // Callback for the account tracker. 47 // Callback for the account tracker.
48 void UpdateAccounts(const std::map<std::string, std::string>& accounts, 48 void UpdateAccounts(const std::map<std::string, std::string>& accounts);
49 bool account_removed);
50 49
51 // Helpers to pass fake events to the tracker. Tests should have either a pair 50 // Helpers to pass fake events to the tracker. Tests should have either a pair
52 // of Start/FinishAccountSignIn or SignInAccount per account. Don't mix. 51 // of Start/FinishAccountSignIn or SignInAccount per account. Don't mix.
53 // Call to SignOutAccount is not mandatory. 52 // Call to SignOutAccount is not mandatory.
54 void StartAccountSignIn(const std::string& account_key); 53 void StartAccountSignIn(const std::string& account_key);
55 void FinishAccountSignIn(const std::string& account_key); 54 void FinishAccountSignIn(const std::string& account_key);
56 void SignInAccount(const std::string& account_key); 55 void SignInAccount(const std::string& account_key);
57 void SignOutAccount(const std::string& account_key); 56 void SignOutAccount(const std::string& account_key);
58 57
59 // Helpers for dealing with OAuth2 access token requests. 58 // Helpers for dealing with OAuth2 access token requests.
60 void IssueAccessToken(const std::string& account_key); 59 void IssueAccessToken(const std::string& account_key);
61 void IssueError(const std::string& account_key); 60 void IssueError(const std::string& account_key);
62 61
63 // Test results and helpers. 62 // Test results and helpers.
64 void ResetResults(); 63 void ResetResults();
65 bool update_accounts_called() const { return update_accounts_called_; } 64 bool update_accounts_called() const { return update_accounts_called_; }
66 bool account_removed() const { return account_removed_; }
67 const std::map<std::string, std::string>& accounts() const { 65 const std::map<std::string, std::string>& accounts() const {
68 return accounts_; 66 return accounts_;
69 } 67 }
70 68
71 // Accessor to account tracker. 69 // Accessor to account tracker.
72 GCMAccountTracker* tracker() { return tracker_.get(); } 70 GCMAccountTracker* tracker() { return tracker_.get(); }
73 71
74 private: 72 private:
75 std::map<std::string, std::string> accounts_; 73 std::map<std::string, std::string> accounts_;
76 bool update_accounts_called_; 74 bool update_accounts_called_;
77 bool account_removed_;
78 75
79 base::MessageLoop message_loop_; 76 base::MessageLoop message_loop_;
80 net::TestURLFetcherFactory test_fetcher_factory_; 77 net::TestURLFetcherFactory test_fetcher_factory_;
81 scoped_ptr<FakeOAuth2TokenService> fake_token_service_; 78 scoped_ptr<FakeOAuth2TokenService> fake_token_service_;
82 scoped_ptr<FakeIdentityProvider> fake_identity_provider_; 79 scoped_ptr<FakeIdentityProvider> fake_identity_provider_;
83 scoped_ptr<GCMAccountTracker> tracker_; 80 scoped_ptr<GCMAccountTracker> tracker_;
84 }; 81 };
85 82
86 GCMAccountTrackerTest::GCMAccountTrackerTest() 83 GCMAccountTrackerTest::GCMAccountTrackerTest()
87 : update_accounts_called_(false), account_removed_(false) { 84 : update_accounts_called_(false) {
88 fake_token_service_.reset(new FakeOAuth2TokenService()); 85 fake_token_service_.reset(new FakeOAuth2TokenService());
89 86
90 fake_identity_provider_.reset( 87 fake_identity_provider_.reset(
91 new FakeIdentityProvider(fake_token_service_.get())); 88 new FakeIdentityProvider(fake_token_service_.get()));
92 89
93 scoped_ptr<gaia::AccountTracker> gaia_account_tracker( 90 scoped_ptr<gaia::AccountTracker> gaia_account_tracker(
94 new gaia::AccountTracker(fake_identity_provider_.get(), 91 new gaia::AccountTracker(fake_identity_provider_.get(),
95 new net::TestURLRequestContextGetter( 92 new net::TestURLRequestContextGetter(
96 message_loop_.message_loop_proxy()))); 93 message_loop_.message_loop_proxy())));
97 94
98 tracker_.reset(new GCMAccountTracker( 95 tracker_.reset(new GCMAccountTracker(
99 gaia_account_tracker.Pass(), 96 gaia_account_tracker.Pass(),
100 base::Bind(&GCMAccountTrackerTest::UpdateAccounts, 97 base::Bind(&GCMAccountTrackerTest::UpdateAccounts,
101 base::Unretained(this)))); 98 base::Unretained(this))));
102 } 99 }
103 100
104 GCMAccountTrackerTest::~GCMAccountTrackerTest() { 101 GCMAccountTrackerTest::~GCMAccountTrackerTest() {
105 if (tracker_) 102 if (tracker_)
106 tracker_->Shutdown(); 103 tracker_->Shutdown();
107 } 104 }
108 105
109 void GCMAccountTrackerTest::UpdateAccounts( 106 void GCMAccountTrackerTest::UpdateAccounts(
110 const std::map<std::string, std::string>& accounts, 107 const std::map<std::string, std::string>& accounts) {
111 bool account_removed) {
112 update_accounts_called_ = true; 108 update_accounts_called_ = true;
113 accounts_ = accounts; 109 accounts_ = accounts;
114 account_removed_ = account_removed;
115 } 110 }
116 111
117 void GCMAccountTrackerTest::ResetResults() { 112 void GCMAccountTrackerTest::ResetResults() {
118 accounts_.clear(); 113 accounts_.clear();
119 update_accounts_called_ = false; 114 update_accounts_called_ = false;
120 account_removed_ = false;
121 } 115 }
122 116
123 void GCMAccountTrackerTest::StartAccountSignIn(const std::string& account_key) { 117 void GCMAccountTrackerTest::StartAccountSignIn(const std::string& account_key) {
124 fake_identity_provider_->LogIn(account_key); 118 fake_identity_provider_->LogIn(account_key);
125 fake_token_service_->AddAccount(account_key); 119 fake_token_service_->AddAccount(account_key);
126 } 120 }
127 121
128 void GCMAccountTrackerTest::FinishAccountSignIn( 122 void GCMAccountTrackerTest::FinishAccountSignIn(
129 const std::string& account_key) { 123 const std::string& account_key) {
130 IssueAccessToken(account_key); 124 IssueAccessToken(account_key);
(...skipping 21 matching lines...) Expand all
152 } 146 }
153 147
154 void GCMAccountTrackerTest::IssueError(const std::string& account_key) { 148 void GCMAccountTrackerTest::IssueError(const std::string& account_key) {
155 fake_token_service_->IssueErrorForAllPendingRequestsForAccount( 149 fake_token_service_->IssueErrorForAllPendingRequestsForAccount(
156 account_key, 150 account_key,
157 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE)); 151 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE));
158 } 152 }
159 153
160 TEST_F(GCMAccountTrackerTest, NoAccounts) { 154 TEST_F(GCMAccountTrackerTest, NoAccounts) {
161 EXPECT_FALSE(update_accounts_called()); 155 EXPECT_FALSE(update_accounts_called());
162 EXPECT_FALSE(account_removed());
163 tracker()->Start(); 156 tracker()->Start();
164 EXPECT_TRUE(update_accounts_called()); 157 // Callback should not be called if there where no accounts provided.
165 EXPECT_FALSE(account_removed()); 158 EXPECT_FALSE(update_accounts_called());
166 EXPECT_TRUE(accounts().empty()); 159 EXPECT_TRUE(accounts().empty());
167 tracker()->Stop(); 160 tracker()->Stop();
168 } 161 }
169 162
170 // Verifies that callback is called after a token is issued for a single account 163 // Verifies that callback is called after a token is issued for a single account
171 // with a specific scope. In this scenario, the underlying account tracker is 164 // with a specific scope. In this scenario, the underlying account tracker is
172 // still working when the CompleteCollectingTokens is called for the first time. 165 // still working when the CompleteCollectingTokens is called for the first time.
173 TEST_F(GCMAccountTrackerTest, SingleAccount) { 166 TEST_F(GCMAccountTrackerTest, SingleAccount) {
174 StartAccountSignIn(kAccountId1); 167 StartAccountSignIn(kAccountId1);
175 168
176 tracker()->Start(); 169 tracker()->Start();
177 // We don't have any accounts to report, but given the inner account tracker 170 // We don't have any accounts to report, but given the inner account tracker
178 // is still working we don't make a call with empty accounts list. 171 // is still working we don't make a call with empty accounts list.
179 EXPECT_FALSE(update_accounts_called()); 172 EXPECT_FALSE(update_accounts_called());
180 173
181 // This concludes the work of inner account tracker. 174 // This concludes the work of inner account tracker.
182 FinishAccountSignIn(kAccountId1); 175 FinishAccountSignIn(kAccountId1);
183 IssueAccessToken(kAccountId1); 176 IssueAccessToken(kAccountId1);
184 177
185 EXPECT_TRUE(update_accounts_called()); 178 EXPECT_TRUE(update_accounts_called());
186 EXPECT_FALSE(account_removed());
187 179
188 std::map<std::string, std::string> expected_accounts; 180 std::map<std::string, std::string> expected_accounts;
189 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1); 181 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1);
190 EXPECT_EQ(expected_accounts, accounts()); 182 EXPECT_EQ(expected_accounts, accounts());
191 tracker()->Stop(); 183 tracker()->Stop();
192 } 184 }
193 185
194 TEST_F(GCMAccountTrackerTest, MultipleAccounts) { 186 TEST_F(GCMAccountTrackerTest, MultipleAccounts) {
195 StartAccountSignIn(kAccountId1); 187 StartAccountSignIn(kAccountId1);
196 StartAccountSignIn(kAccountId2); 188 StartAccountSignIn(kAccountId2);
197 189
198 tracker()->Start(); 190 tracker()->Start();
199 EXPECT_FALSE(update_accounts_called()); 191 EXPECT_FALSE(update_accounts_called());
200 192
201 FinishAccountSignIn(kAccountId1); 193 FinishAccountSignIn(kAccountId1);
202 IssueAccessToken(kAccountId1); 194 IssueAccessToken(kAccountId1);
203 EXPECT_FALSE(update_accounts_called()); 195 EXPECT_FALSE(update_accounts_called());
204 EXPECT_FALSE(account_removed());
205 196
206 FinishAccountSignIn(kAccountId2); 197 FinishAccountSignIn(kAccountId2);
207 IssueAccessToken(kAccountId2); 198 IssueAccessToken(kAccountId2);
208 EXPECT_TRUE(update_accounts_called()); 199 EXPECT_TRUE(update_accounts_called());
209 EXPECT_FALSE(account_removed());
210 200
211 std::map<std::string, std::string> expected_accounts; 201 std::map<std::string, std::string> expected_accounts;
212 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1); 202 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1);
213 expected_accounts[kAccountId2] = MakeAccessToken(kAccountId2); 203 expected_accounts[kAccountId2] = MakeAccessToken(kAccountId2);
214 EXPECT_EQ(expected_accounts, accounts()); 204 EXPECT_EQ(expected_accounts, accounts());
215 205
216 tracker()->Stop(); 206 tracker()->Stop();
217 } 207 }
218 208
219 TEST_F(GCMAccountTrackerTest, AccountAdded) { 209 TEST_F(GCMAccountTrackerTest, AccountAdded) {
220 tracker()->Start(); 210 tracker()->Start();
221 ResetResults(); 211 ResetResults();
222 212
223 SignInAccount(kAccountId1); 213 SignInAccount(kAccountId1);
224 EXPECT_FALSE(update_accounts_called()); 214 EXPECT_FALSE(update_accounts_called());
225 215
226 IssueAccessToken(kAccountId1); 216 IssueAccessToken(kAccountId1);
227 EXPECT_TRUE(update_accounts_called()); 217 EXPECT_TRUE(update_accounts_called());
228 EXPECT_FALSE(account_removed());
229 218
230 std::map<std::string, std::string> expected_accounts; 219 std::map<std::string, std::string> expected_accounts;
231 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1); 220 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1);
232 EXPECT_EQ(expected_accounts, accounts()); 221 EXPECT_EQ(expected_accounts, accounts());
233 222
234 tracker()->Stop(); 223 tracker()->Stop();
235 } 224 }
236 225
237 TEST_F(GCMAccountTrackerTest, AccountRemoved) { 226 TEST_F(GCMAccountTrackerTest, AccountRemoved) {
238 SignInAccount(kAccountId1); 227 SignInAccount(kAccountId1);
239 SignInAccount(kAccountId2); 228 SignInAccount(kAccountId2);
240 229
241 tracker()->Start(); 230 tracker()->Start();
242 IssueAccessToken(kAccountId1); 231 IssueAccessToken(kAccountId1);
243 IssueAccessToken(kAccountId2); 232 IssueAccessToken(kAccountId2);
244 EXPECT_TRUE(update_accounts_called()); 233 EXPECT_TRUE(update_accounts_called());
245 234
246 ResetResults(); 235 ResetResults();
247 EXPECT_FALSE(update_accounts_called()); 236 EXPECT_FALSE(update_accounts_called());
248 237
249 SignOutAccount(kAccountId2); 238 SignOutAccount(kAccountId2);
250 EXPECT_TRUE(update_accounts_called()); 239 EXPECT_TRUE(update_accounts_called());
251 EXPECT_TRUE(account_removed());
252 240
253 std::map<std::string, std::string> expected_accounts; 241 std::map<std::string, std::string> expected_accounts;
254 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1); 242 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1);
255 EXPECT_EQ(expected_accounts, accounts()); 243 EXPECT_EQ(expected_accounts, accounts());
256 244
257 tracker()->Stop(); 245 tracker()->Stop();
258 } 246 }
259 247
260 TEST_F(GCMAccountTrackerTest, GetTokenFailed) { 248 TEST_F(GCMAccountTrackerTest, GetTokenFailed) {
261 SignInAccount(kAccountId1); 249 SignInAccount(kAccountId1);
262 SignInAccount(kAccountId2); 250 SignInAccount(kAccountId2);
263 251
264 tracker()->Start(); 252 tracker()->Start();
265 IssueAccessToken(kAccountId1); 253 IssueAccessToken(kAccountId1);
266 EXPECT_FALSE(update_accounts_called()); 254 EXPECT_FALSE(update_accounts_called());
267 255
268 IssueError(kAccountId2); 256 IssueError(kAccountId2);
269 EXPECT_TRUE(update_accounts_called()); 257 EXPECT_TRUE(update_accounts_called());
270 EXPECT_FALSE(account_removed());
271 258
272 std::map<std::string, std::string> expected_accounts; 259 std::map<std::string, std::string> expected_accounts;
273 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1); 260 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1);
274 EXPECT_EQ(expected_accounts, accounts()); 261 EXPECT_EQ(expected_accounts, accounts());
275 262
276 tracker()->Stop(); 263 tracker()->Stop();
277 } 264 }
278 265
279 TEST_F(GCMAccountTrackerTest, GetTokenFailedAccountRemoved) { 266 TEST_F(GCMAccountTrackerTest, GetTokenFailedAccountRemoved) {
280 SignInAccount(kAccountId1); 267 SignInAccount(kAccountId1);
281 SignInAccount(kAccountId2); 268 SignInAccount(kAccountId2);
282 269
283 tracker()->Start(); 270 tracker()->Start();
284 IssueAccessToken(kAccountId1); 271 IssueAccessToken(kAccountId1);
285 IssueError(kAccountId2); 272 IssueError(kAccountId2);
286 273
287 ResetResults(); 274 ResetResults();
288 SignOutAccount(kAccountId2); 275 SignOutAccount(kAccountId2);
289 EXPECT_TRUE(update_accounts_called()); 276 EXPECT_TRUE(update_accounts_called());
290 EXPECT_TRUE(account_removed());
291 277
292 std::map<std::string, std::string> expected_accounts; 278 std::map<std::string, std::string> expected_accounts;
293 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1); 279 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1);
294 EXPECT_EQ(expected_accounts, accounts()); 280 EXPECT_EQ(expected_accounts, accounts());
295 281
296 tracker()->Stop(); 282 tracker()->Stop();
297 } 283 }
298 284
299 TEST_F(GCMAccountTrackerTest, AccountRemovedWhileRequestsPending) { 285 TEST_F(GCMAccountTrackerTest, AccountRemovedWhileRequestsPending) {
300 SignInAccount(kAccountId1); 286 SignInAccount(kAccountId1);
301 SignInAccount(kAccountId2); 287 SignInAccount(kAccountId2);
302 288
303 tracker()->Start(); 289 tracker()->Start();
304 IssueAccessToken(kAccountId1); 290 IssueAccessToken(kAccountId1);
305 EXPECT_FALSE(update_accounts_called()); 291 EXPECT_FALSE(update_accounts_called());
306 292
307 SignOutAccount(kAccountId2); 293 SignOutAccount(kAccountId2);
308 IssueAccessToken(kAccountId2); 294 IssueAccessToken(kAccountId2);
309 EXPECT_TRUE(update_accounts_called()); 295 EXPECT_TRUE(update_accounts_called());
310 EXPECT_TRUE(account_removed());
311 296
312 std::map<std::string, std::string> expected_accounts; 297 std::map<std::string, std::string> expected_accounts;
313 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1); 298 expected_accounts[kAccountId1] = MakeAccessToken(kAccountId1);
314 EXPECT_EQ(expected_accounts, accounts()); 299 EXPECT_EQ(expected_accounts, accounts());
315 300
316 tracker()->Stop(); 301 tracker()->Stop();
317 } 302 }
318 303
319 // TODO(fgorski): Add test for adding account after removal >> make sure it does 304 // TODO(fgorski): Add test for adding account after removal >> make sure it does
320 // not mark removal. 305 // not mark removal.
321 306
322 } // namespace gcm 307 } // namespace gcm
OLDNEW
« no previous file with comments | « chrome/browser/services/gcm/gcm_account_tracker.cc ('k') | chrome/browser/services/gcm/gcm_profile_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698