Index: chrome/browser/signin/ubertoken_fetcher_unittest.cc |
diff --git a/chrome/browser/signin/ubertoken_fetcher_unittest.cc b/chrome/browser/signin/ubertoken_fetcher_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b1b04e0806fa511f09c0cb7abd61ff2d88251b86 |
--- /dev/null |
+++ b/chrome/browser/signin/ubertoken_fetcher_unittest.cc |
@@ -0,0 +1,104 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/signin/ubertoken_fetcher.h" |
+ |
+#include "chrome/browser/signin/token_service.h" |
+#include "chrome/browser/signin/token_service_unittest.h" |
+#include "chrome/common/chrome_notification_types.h" |
+#include "chrome/common/net/gaia/gaia_constants.h" |
+#include "content/test/test_url_fetcher_factory.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+class MockUbertokenConsumer : public UbertokenConsumer { |
+ public: |
+ MockUbertokenConsumer() |
+ : nb_correct_token_(0), |
+ last_error_(GoogleServiceAuthError::None()), |
+ nb_error_(0) { |
+ } |
+ virtual ~MockUbertokenConsumer() {} |
+ |
+ virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE { |
+ last_token_ = token; |
+ ++ nb_correct_token_; |
+ } |
+ |
+ virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) |
+ OVERRIDE { |
+ last_error_ = error; |
+ ++nb_error_; |
+ } |
+ |
+ std::string last_token_; |
+ int nb_correct_token_; |
+ GoogleServiceAuthError last_error_; |
+ int nb_error_; |
+}; |
+ |
+class UbertokenFetcherTest : public TokenServiceTestHarness { |
+ public: |
+ virtual void SetUp() OVERRIDE { |
+ TokenServiceTestHarness::SetUp(); |
+ service_->UpdateCredentials(credentials_); |
+ fetcher_.reset(new UbertokenFetcher(profile_.get(), &consumer_)); |
+ } |
+ |
+ virtual void TearDown() OVERRIDE { |
+ TokenServiceTestHarness::TearDown(); |
+ } |
+ |
+ protected: |
+ TestURLFetcherFactory factory_; |
+ MockUbertokenConsumer consumer_; |
+ scoped_ptr<UbertokenFetcher> fetcher_; |
+}; |
+ |
+TEST_F(UbertokenFetcherTest, TestSuccessWithoutRefreshToken) { |
+ fetcher_->StartFetchingToken(); |
+ TokenService::TokenAvailableDetails |
+ details(GaiaConstants::kGaiaOAuth2LoginRefreshToken, "refreshToken"); |
+ service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
+ "refreshToken"); |
+ fetcher_->Observe(chrome::NOTIFICATION_TOKEN_AVAILABLE, |
+ content::Source<TokenService>(service_), |
+ content::Details<const TokenService::TokenAvailableDetails>( |
+ &details)); |
+ fetcher_->OnRefreshTokenResponse("accessToken", 3600); |
+ fetcher_->OnUberAuthTokenSuccess("uberToken"); |
+ EXPECT_EQ(0, consumer_.nb_error_); |
+ EXPECT_EQ(1, consumer_.nb_correct_token_); |
+ EXPECT_EQ("uberToken", consumer_.last_token_); |
+} |
+ |
+TEST_F(UbertokenFetcherTest, TestSuccessWithRefreshToken) { |
+ service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
+ "refreshToken"); |
+ fetcher_->StartFetchingToken(); |
+ fetcher_->OnRefreshTokenResponse("accessToken", 3600); |
+ fetcher_->OnUberAuthTokenSuccess("uberToken"); |
+ EXPECT_EQ(0, consumer_.nb_error_); |
+ EXPECT_EQ(1, consumer_.nb_correct_token_); |
+ EXPECT_EQ("uberToken", consumer_.last_token_); |
+} |
+ |
+ |
+TEST_F(UbertokenFetcherTest, TestFailures) { |
+ GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP); |
+ EXPECT_EQ(0, consumer_.nb_error_); |
+ TokenService::TokenRequestFailedDetails |
+ details(GaiaConstants::kGaiaOAuth2LoginRefreshToken, error); |
+ fetcher_->Observe( |
+ chrome::NOTIFICATION_TOKEN_REQUEST_FAILED, |
+ content::Source<TokenService>(service_), |
+ content::Details<const TokenService::TokenRequestFailedDetails>( |
+ &details)); |
+ EXPECT_EQ(1, consumer_.nb_error_); |
+ fetcher_->OnOAuthError(); |
+ EXPECT_EQ(2, consumer_.nb_error_); |
+ fetcher_->OnNetworkError(401); |
+ EXPECT_EQ(3, consumer_.nb_error_); |
+ fetcher_->OnUberAuthTokenFailure(error); |
+ EXPECT_EQ(4, consumer_.nb_error_); |
+} |