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

Side by Side Diff: chrome/browser/net/gaia/token_service_unittest.cc

Issue 3305003: New authorization framework for sync. ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 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 (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // This file defines a unit test for the profile's token service. 5 // This file defines a unit test for the profile's token service.
6 6
7 #include "chrome/browser/net/gaia/token_service.h" 7 #include "chrome/browser/net/gaia/token_service_unittest.h"
8 #include "chrome/browser/password_manager/encryptor.h" 8
9 #include "chrome/browser/webdata/web_data_service.h"
10 #include "chrome/common/net/gaia/gaia_auth_consumer.h"
11 #include "chrome/common/net/gaia/gaia_authenticator2_unittest.h" 9 #include "chrome/common/net/gaia/gaia_authenticator2_unittest.h"
12 #include "chrome/common/net/gaia/gaia_constants.h" 10 #include "chrome/common/net/gaia/gaia_constants.h"
13 #include "chrome/common/net/test_url_fetcher_factory.h" 11 #include "chrome/common/net/test_url_fetcher_factory.h"
14 #include "chrome/test/signaling_task.h"
15 #include "chrome/test/test_notification_tracker.h"
16 #include "chrome/test/testing_profile.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 12
19 // TestNotificationTracker doesn't do a deep copy on the notification details. 13 class TokenServiceTest : public TokenServiceTestHarness {
20 // We have to in order to read it out, or we have a bad ptr, since the details
21 // are a reference on the stack.
22 class TokenAvailableTracker : public TestNotificationTracker {
23 public: 14 public:
24 const TokenService::TokenAvailableDetails& get_last_token_details() { 15 virtual void SetUp() {
25 return details_; 16 TokenServiceTestHarness::SetUp();
17 service_.UpdateCredentials(credentials_);
26 } 18 }
27
28 private:
29 virtual void Observe(NotificationType type,
30 const NotificationSource& source,
31 const NotificationDetails& details) {
32 TestNotificationTracker::Observe(type, source, details);
33 if (type == NotificationType::TOKEN_AVAILABLE) {
34 Details<const TokenService::TokenAvailableDetails> full = details;
35 details_ = *full.ptr();
36 }
37 }
38
39 TokenService::TokenAvailableDetails details_;
40 };
41
42 class TokenFailedTracker : public TestNotificationTracker {
43 public:
44 const TokenService::TokenRequestFailedDetails& get_last_token_details() {
45 return details_;
46 }
47
48 private:
49 virtual void Observe(NotificationType type,
50 const NotificationSource& source,
51 const NotificationDetails& details) {
52 TestNotificationTracker::Observe(type, source, details);
53 if (type == NotificationType::TOKEN_REQUEST_FAILED) {
54 Details<const TokenService::TokenRequestFailedDetails> full = details;
55 details_ = *full.ptr();
56 }
57 }
58
59 TokenService::TokenRequestFailedDetails details_;
60 };
61
62 class TokenServiceTest : public testing::Test {
63 public:
64 TokenServiceTest()
65 : ui_thread_(ChromeThread::UI, &message_loop_),
66 db_thread_(ChromeThread::DB) {
67 }
68
69 virtual void SetUp() {
70 #if defined(OS_MACOSX)
71 Encryptor::UseMockKeychain(true);
72 #endif
73 credentials_.sid = "sid";
74 credentials_.lsid = "lsid";
75 credentials_.token = "token";
76 credentials_.data = "data";
77
78 ASSERT_TRUE(db_thread_.Start());
79
80 profile_.reset(new TestingProfile());
81 profile_->CreateWebDataService(false);
82 WaitForDBLoadCompletion();
83
84 success_tracker_.ListenFor(NotificationType::TOKEN_AVAILABLE,
85 Source<TokenService>(&service_));
86 failure_tracker_.ListenFor(NotificationType::TOKEN_REQUEST_FAILED,
87 Source<TokenService>(&service_));
88
89 service_.Initialize("test", profile_.get());
90 service_.UpdateCredentials(credentials_);
91
92 URLFetcher::set_factory(NULL);
93 }
94
95 virtual void TearDown() {
96 // You have to destroy the profile before the db_thread_ stops.
97 if (profile_.get()) {
98 profile_.reset(NULL);
99 }
100
101 db_thread_.Stop();
102 MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask);
103 MessageLoop::current()->Run();
104 }
105
106 void WaitForDBLoadCompletion() {
107 // The WebDB does all work on the DB thread. This will add an event
108 // to the end of the DB thread, so when we reach this task, all DB
109 // operations should be complete.
110 WaitableEvent done(false, false);
111 ChromeThread::PostTask(
112 ChromeThread::DB, FROM_HERE, new SignalingTask(&done));
113 done.Wait();
114
115 // Notifications should be returned from the DB thread onto the UI thread.
116 message_loop_.RunAllPending();
117 }
118
119 MessageLoopForUI message_loop_;
120 ChromeThread ui_thread_; // Mostly so DCHECKS pass.
121 ChromeThread db_thread_; // WDS on here
122
123 TokenService service_;
124 TokenAvailableTracker success_tracker_;
125 TokenFailedTracker failure_tracker_;
126 GaiaAuthConsumer::ClientLoginResult credentials_;
127 scoped_ptr<TestingProfile> profile_;
128 }; 19 };
129 20
130 TEST_F(TokenServiceTest, SanityCheck) { 21 TEST_F(TokenServiceTest, SanityCheck) {
131 EXPECT_TRUE(service_.HasLsid()); 22 EXPECT_TRUE(service_.HasLsid());
132 EXPECT_EQ(service_.GetLsid(), "lsid"); 23 EXPECT_EQ(service_.GetLsid(), "lsid");
133 EXPECT_FALSE(service_.HasTokenForService("nonexistent service")); 24 EXPECT_FALSE(service_.HasTokenForService("nonexistent service"));
134 } 25 }
135 26
136 TEST_F(TokenServiceTest, NoToken) { 27 TEST_F(TokenServiceTest, NoToken) {
137 EXPECT_FALSE(service_.HasTokenForService("nonexistent service")); 28 EXPECT_FALSE(service_.HasTokenForService("nonexistent service"));
138 EXPECT_EQ(service_.GetTokenForService("nonexistent service"), std::string()); 29 EXPECT_EQ(service_.GetTokenForService("nonexistent service"), std::string());
139 } 30 }
140 31
141 TEST_F(TokenServiceTest, NotificationSuccess) { 32 TEST_F(TokenServiceTest, NotificationSuccess) {
142 EXPECT_EQ(0U, success_tracker_.size()); 33 EXPECT_EQ(0U, success_tracker_.size());
143 EXPECT_EQ(0U, failure_tracker_.size()); 34 EXPECT_EQ(0U, failure_tracker_.size());
144 service_.OnIssueAuthTokenSuccess(GaiaConstants::kSyncService, "token"); 35 service_.OnIssueAuthTokenSuccess(GaiaConstants::kSyncService, "token");
145 EXPECT_EQ(1U, success_tracker_.size()); 36 EXPECT_EQ(1U, success_tracker_.size());
146 EXPECT_EQ(0U, failure_tracker_.size()); 37 EXPECT_EQ(0U, failure_tracker_.size());
147 38
148 TokenService::TokenAvailableDetails details = 39 TokenService::TokenAvailableDetails details = success_tracker_.details();
149 success_tracker_.get_last_token_details();
150 // MSVC doesn't like this comparison as EQ. 40 // MSVC doesn't like this comparison as EQ.
151 EXPECT_TRUE(details.service() == GaiaConstants::kSyncService); 41 EXPECT_TRUE(details.service() == GaiaConstants::kSyncService);
152 EXPECT_EQ(details.token(), "token"); 42 EXPECT_EQ(details.token(), "token");
153 } 43 }
154 44
155 TEST_F(TokenServiceTest, NotificationFailed) { 45 TEST_F(TokenServiceTest, NotificationFailed) {
156 EXPECT_EQ(0U, success_tracker_.size()); 46 EXPECT_EQ(0U, success_tracker_.size());
157 EXPECT_EQ(0U, failure_tracker_.size()); 47 EXPECT_EQ(0U, failure_tracker_.size());
158 GoogleServiceAuthError error(GoogleServiceAuthError::REQUEST_CANCELED); 48 GoogleServiceAuthError error(GoogleServiceAuthError::REQUEST_CANCELED);
159 service_.OnIssueAuthTokenFailure(GaiaConstants::kSyncService, error); 49 service_.OnIssueAuthTokenFailure(GaiaConstants::kSyncService, error);
160 EXPECT_EQ(0U, success_tracker_.size()); 50 EXPECT_EQ(0U, success_tracker_.size());
161 EXPECT_EQ(1U, failure_tracker_.size()); 51 EXPECT_EQ(1U, failure_tracker_.size());
162 52
163 TokenService::TokenRequestFailedDetails details = 53 TokenService::TokenRequestFailedDetails details = failure_tracker_.details();
164 failure_tracker_.get_last_token_details();
165 54
166 // MSVC doesn't like this comparison as EQ. 55 // MSVC doesn't like this comparison as EQ.
167 EXPECT_TRUE(details.service() == GaiaConstants::kSyncService); 56 EXPECT_TRUE(details.service() == GaiaConstants::kSyncService);
168 EXPECT_TRUE(details.error() == error); // Struct has no print function. 57 EXPECT_TRUE(details.error() == error); // Struct has no print function.
169 } 58 }
170 59
171 TEST_F(TokenServiceTest, OnTokenSuccessUpdate) { 60 TEST_F(TokenServiceTest, OnTokenSuccessUpdate) {
172 service_.OnIssueAuthTokenSuccess(GaiaConstants::kSyncService, "token"); 61 service_.OnIssueAuthTokenSuccess(GaiaConstants::kSyncService, "token");
173 EXPECT_TRUE(service_.HasTokenForService(GaiaConstants::kSyncService)); 62 EXPECT_TRUE(service_.HasTokenForService(GaiaConstants::kSyncService));
174 EXPECT_EQ(service_.GetTokenForService(GaiaConstants::kSyncService), "token"); 63 EXPECT_EQ(service_.GetTokenForService(GaiaConstants::kSyncService), "token");
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 157
269 service_.LoadTokensIntoMemory(db_tokens, &memory_tokens); 158 service_.LoadTokensIntoMemory(db_tokens, &memory_tokens);
270 EXPECT_TRUE(db_tokens.empty()); 159 EXPECT_TRUE(db_tokens.empty());
271 EXPECT_TRUE(memory_tokens.empty()); 160 EXPECT_TRUE(memory_tokens.empty());
272 EXPECT_EQ(0U, success_tracker_.size()); 161 EXPECT_EQ(0U, success_tracker_.size());
273 162
274 db_tokens[GaiaConstants::kSyncService] = "token"; 163 db_tokens[GaiaConstants::kSyncService] = "token";
275 service_.LoadTokensIntoMemory(db_tokens, &memory_tokens); 164 service_.LoadTokensIntoMemory(db_tokens, &memory_tokens);
276 EXPECT_EQ(1U, success_tracker_.size()); 165 EXPECT_EQ(1U, success_tracker_.size());
277 166
278 TokenService::TokenAvailableDetails details = 167 TokenService::TokenAvailableDetails details = success_tracker_.details();
279 success_tracker_.get_last_token_details();
280 // MSVC doesn't like this comparison as EQ. 168 // MSVC doesn't like this comparison as EQ.
281 EXPECT_TRUE(details.service() == GaiaConstants::kSyncService); 169 EXPECT_TRUE(details.service() == GaiaConstants::kSyncService);
282 EXPECT_EQ(details.token(), "token"); 170 EXPECT_EQ(details.token(), "token");
283 EXPECT_EQ(1U, memory_tokens.count(GaiaConstants::kSyncService)); 171 EXPECT_EQ(1U, memory_tokens.count(GaiaConstants::kSyncService));
284 EXPECT_EQ(memory_tokens[GaiaConstants::kSyncService], "token"); 172 EXPECT_EQ(memory_tokens[GaiaConstants::kSyncService], "token");
285 } 173 }
286 174
287 TEST_F(TokenServiceTest, LoadTokensIntoMemoryAdvanced) { 175 TEST_F(TokenServiceTest, LoadTokensIntoMemoryAdvanced) {
288 // LoadTokensIntoMemory should avoid setting tokens already in the 176 // LoadTokensIntoMemory should avoid setting tokens already in the
289 // token map. 177 // token map.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 // Reset it one more time so there's no surprises. 249 // Reset it one more time so there's no surprises.
362 service_.ResetCredentialsInMemory(); 250 service_.ResetCredentialsInMemory();
363 success_tracker_.Reset(); 251 success_tracker_.Reset();
364 252
365 service_.LoadTokensFromDB(); 253 service_.LoadTokensFromDB();
366 WaitForDBLoadCompletion(); 254 WaitForDBLoadCompletion();
367 255
368 EXPECT_EQ(1U, success_tracker_.size()); 256 EXPECT_EQ(1U, success_tracker_.size());
369 EXPECT_TRUE(service_.HasTokenForService(GaiaConstants::kSyncService)); 257 EXPECT_TRUE(service_.HasTokenForService(GaiaConstants::kSyncService));
370 } 258 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698