| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 #include "chrome/browser/signin/profile_oauth2_token_service_request.h" | 4 #include "chrome/browser/signin/profile_oauth2_token_service_request.h" |
| 5 | 5 |
| 6 #include <set> | 6 #include <set> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
| 10 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" | 10 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 const OAuth2TokenService::Request* request, | 61 const OAuth2TokenService::Request* request, |
| 62 const GoogleServiceAuthError& error) { | 62 const GoogleServiceAuthError& error) { |
| 63 last_error_ = error; | 63 last_error_ = error; |
| 64 ++number_of_errors_; | 64 ++number_of_errors_; |
| 65 } | 65 } |
| 66 | 66 |
| 67 class ProfileOAuth2TokenServiceRequestTest : public testing::Test { | 67 class ProfileOAuth2TokenServiceRequestTest : public testing::Test { |
| 68 public: | 68 public: |
| 69 virtual void SetUp() OVERRIDE; | 69 virtual void SetUp() OVERRIDE; |
| 70 | 70 |
| 71 virtual void TearDown() OVERRIDE; |
| 72 |
| 71 protected: | 73 protected: |
| 72 base::MessageLoop ui_loop_; | 74 base::MessageLoop ui_loop_; |
| 73 scoped_ptr<content::TestBrowserThread> ui_thread_; | 75 scoped_ptr<content::TestBrowserThread> ui_thread_; |
| 74 | 76 |
| 75 scoped_ptr<Profile> profile_; | 77 scoped_ptr<Profile> profile_; |
| 76 TestingOAuth2TokenServiceConsumer consumer_; | 78 TestingOAuth2TokenServiceConsumer consumer_; |
| 77 FakeProfileOAuth2TokenService* oauth2_service_; | 79 FakeProfileOAuth2TokenService* oauth2_service_; |
| 78 | 80 |
| 79 scoped_ptr<ProfileOAuth2TokenServiceRequest> request_; | 81 scoped_ptr<ProfileOAuth2TokenServiceRequest> request_; |
| 80 }; | 82 }; |
| 81 | 83 |
| 82 void ProfileOAuth2TokenServiceRequestTest::SetUp() { | 84 void ProfileOAuth2TokenServiceRequestTest::SetUp() { |
| 83 ui_thread_.reset(new content::TestBrowserThread(content::BrowserThread::UI, | 85 ui_thread_.reset(new content::TestBrowserThread(content::BrowserThread::UI, |
| 84 &ui_loop_)); | 86 &ui_loop_)); |
| 85 TestingProfile::Builder builder; | 87 TestingProfile::Builder builder; |
| 86 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), | 88 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), |
| 87 &BuildFakeProfileOAuth2TokenService); | 89 &BuildFakeProfileOAuth2TokenService); |
| 88 profile_ = builder.Build(); | 90 profile_ = builder.Build(); |
| 89 | 91 |
| 90 oauth2_service_ = (FakeProfileOAuth2TokenService*) | 92 oauth2_service_ = (FakeProfileOAuth2TokenService*) |
| 91 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()); | 93 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()); |
| 92 } | 94 } |
| 93 | 95 |
| 96 void ProfileOAuth2TokenServiceRequestTest::TearDown() { |
| 97 // Destroy the request and run the message loop one last time to ensure that |
| 98 // resources that must be destroyed in the UI thread get cleaned up. |
| 99 request_.reset(); |
| 100 ui_loop_.RunUntilIdle(); |
| 101 } |
| 102 |
| 94 TEST_F(ProfileOAuth2TokenServiceRequestTest, | 103 TEST_F(ProfileOAuth2TokenServiceRequestTest, |
| 95 Failure) { | 104 Failure) { |
| 96 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( | 105 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
| 97 ProfileOAuth2TokenServiceRequest::CreateAndStart( | 106 ProfileOAuth2TokenServiceRequest::CreateAndStart( |
| 98 profile_.get(), | 107 profile_.get(), |
| 99 std::string(), | 108 kAccountId, |
| 100 OAuth2TokenService::ScopeSet(), | 109 OAuth2TokenService::ScopeSet(), |
| 101 &consumer_)); | 110 &consumer_)); |
| 111 // Run to ensure the request has been made. |
| 112 ui_loop_.RunUntilIdle(); |
| 102 oauth2_service_->IssueErrorForAllPendingRequests( | 113 oauth2_service_->IssueErrorForAllPendingRequests( |
| 103 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE)); | 114 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE)); |
| 104 ui_loop_.RunUntilIdle(); | 115 ui_loop_.RunUntilIdle(); |
| 105 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 116 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 106 EXPECT_EQ(1, consumer_.number_of_errors_); | 117 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 107 } | 118 } |
| 108 | 119 |
| 109 TEST_F(ProfileOAuth2TokenServiceRequestTest, Success) { | 120 TEST_F(ProfileOAuth2TokenServiceRequestTest, Success) { |
| 110 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); | 121 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); |
| 111 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( | 122 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
| 112 ProfileOAuth2TokenServiceRequest::CreateAndStart( | 123 ProfileOAuth2TokenServiceRequest::CreateAndStart( |
| 113 profile_.get(), | 124 profile_.get(), |
| 114 kAccountId, | 125 kAccountId, |
| 115 OAuth2TokenService::ScopeSet(), | 126 OAuth2TokenService::ScopeSet(), |
| 116 &consumer_)); | 127 &consumer_)); |
| 128 // Run to ensure the request has been made. |
| 129 ui_loop_.RunUntilIdle(); |
| 117 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, | 130 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, |
| 118 base::Time::Max()); | 131 base::Time::Max()); |
| 119 ui_loop_.RunUntilIdle(); | 132 ui_loop_.RunUntilIdle(); |
| 120 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 133 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 121 EXPECT_EQ(kAccessToken, consumer_.last_token_); | 134 EXPECT_EQ(kAccessToken, consumer_.last_token_); |
| 122 EXPECT_EQ(0, consumer_.number_of_errors_); | 135 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 123 } | 136 } |
| 124 | 137 |
| 125 TEST_F(ProfileOAuth2TokenServiceRequestTest, | 138 TEST_F(ProfileOAuth2TokenServiceRequestTest, |
| 126 RequestDeletionBeforeServiceComplete) { | 139 RequestDeletionBeforeServiceComplete) { |
| 127 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); | 140 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); |
| 128 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( | 141 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
| 129 ProfileOAuth2TokenServiceRequest::CreateAndStart( | 142 ProfileOAuth2TokenServiceRequest::CreateAndStart( |
| 130 profile_.get(), | 143 profile_.get(), |
| 131 kAccountId, | 144 kAccountId, |
| 132 OAuth2TokenService::ScopeSet(), | 145 OAuth2TokenService::ScopeSet(), |
| 133 &consumer_)); | 146 &consumer_)); |
| 147 // Run to ensure the request has been made. |
| 148 ui_loop_.RunUntilIdle(); |
| 134 request.reset(); | 149 request.reset(); |
| 135 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, | 150 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, |
| 136 base::Time::Max()); | 151 base::Time::Max()); |
| 137 ui_loop_.RunUntilIdle(); | 152 ui_loop_.RunUntilIdle(); |
| 138 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 153 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 139 EXPECT_EQ(0, consumer_.number_of_errors_); | 154 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 140 } | 155 } |
| 141 | 156 |
| 142 TEST_F(ProfileOAuth2TokenServiceRequestTest, | 157 TEST_F(ProfileOAuth2TokenServiceRequestTest, |
| 143 RequestDeletionAfterServiceComplete) { | 158 RequestDeletionAfterServiceComplete) { |
| 144 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); | 159 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); |
| 145 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( | 160 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
| 146 ProfileOAuth2TokenServiceRequest::CreateAndStart( | 161 ProfileOAuth2TokenServiceRequest::CreateAndStart( |
| 147 profile_.get(), | 162 profile_.get(), |
| 148 kAccountId, | 163 kAccountId, |
| 149 OAuth2TokenService::ScopeSet(), | 164 OAuth2TokenService::ScopeSet(), |
| 150 &consumer_)); | 165 &consumer_)); |
| 166 // Run to ensure the request has been made. |
| 167 ui_loop_.RunUntilIdle(); |
| 151 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, | 168 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, |
| 152 base::Time::Max()); | 169 base::Time::Max()); |
| 153 ui_loop_.RunUntilIdle(); | 170 ui_loop_.RunUntilIdle(); |
| 154 request.reset(); | 171 request.reset(); |
| 155 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 172 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 156 EXPECT_EQ(0, consumer_.number_of_errors_); | 173 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 157 } | 174 } |
| 158 | 175 |
| 159 } // namespace | 176 } // namespace |
| OLD | NEW |