1// Copyright (c) 2012 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 "components/signin/core/browser/signin_tracker.h" 6 7#include "base/bind.h" 8#include "base/bind_helpers.h" 9#include "base/compiler_specific.h" 10#include "chrome/browser/chrome_notification_types.h" 11#include "chrome/browser/profiles/profile.h" 12#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" 13#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" 14#include "chrome/browser/signin/fake_signin_manager.h" 15#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 16#include "chrome/browser/signin/signin_manager_factory.h" 17#include "chrome/browser/signin/signin_tracker_factory.h" 18#include "chrome/browser/sync/profile_sync_service_factory.h" 19#include "chrome/browser/sync/profile_sync_service_mock.h" 20#include "chrome/test/base/testing_profile.h" 21#include "components/signin/core/browser/fake_auth_status_provider.h" 22#include "components/signin/core/browser/profile_oauth2_token_service.h" 23#include "components/signin/core/browser/signin_manager.h" 24#include "content/public/test/test_browser_thread_bundle.h" 25#include "google_apis/gaia/gaia_constants.h" 26#include "google_apis/gaia/google_service_auth_error.h" 27 28#include "testing/gmock/include/gmock/gmock.h" 29#include "testing/gtest/include/gtest/gtest.h" 30 31using ::testing::_; 32using ::testing::AnyNumber; 33using ::testing::Mock; 34using ::testing::Return; 35using ::testing::ReturnRef; 36 37namespace { 38 39class MockObserver : public SigninTracker::Observer { 40 public: 41 MockObserver() {} 42 ~MockObserver() {} 43 44 MOCK_METHOD1(SigninFailed, void(const GoogleServiceAuthError&)); 45 MOCK_METHOD0(SigninSuccess, void(void)); 46 MOCK_METHOD1(MergeSessionComplete, void(const GoogleServiceAuthError&)); 47}; 48 49} // namespace 50 51class SigninTrackerTest : public testing::Test { 52 public: 53 SigninTrackerTest() {} 54 virtual void SetUp() OVERRIDE { 55 TestingProfile::Builder builder; 56 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), 57 BuildFakeProfileOAuth2TokenService); 58 builder.AddTestingFactory(SigninManagerFactory::GetInstance(), 59 FakeSigninManagerBase::Build); 60 profile_ = builder.Build(); 61 62 fake_oauth2_token_service_ = 63 static_cast<FakeProfileOAuth2TokenService*>( 64 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get())); 65 66 mock_signin_manager_ = static_cast<FakeSigninManagerForTesting*>( 67 SigninManagerFactory::GetForProfile(profile_.get())); 68 69 tracker_ = 70 SigninTrackerFactory::CreateForProfile(profile_.get(), &observer_); 71 } 72 virtual void TearDown() OVERRIDE { 73 tracker_.reset(); 74 profile_.reset(); 75 } 76 77 content::TestBrowserThreadBundle thread_bundle_; 78 scoped_ptr<SigninTracker> tracker_; 79 scoped_ptr<TestingProfile> profile_; 80 FakeSigninManagerForTesting* mock_signin_manager_; 81 FakeProfileOAuth2TokenService* fake_oauth2_token_service_; 82 MockObserver observer_; 83}; 84 85#if !defined(OS_CHROMEOS) 86TEST_F(SigninTrackerTest, SignInFails) { 87 const GoogleServiceAuthError error( 88 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 89 90 // Signin failure should result in a SigninFailed callback. 91 EXPECT_CALL(observer_, SigninSuccess()).Times(0); 92 EXPECT_CALL(observer_, SigninFailed(error)); 93 94 mock_signin_manager_->FailSignin(error); 95} 96#endif // !defined(OS_CHROMEOS) 97 98TEST_F(SigninTrackerTest, SignInSucceeds) { 99 EXPECT_CALL(observer_, SigninSuccess()); 100 EXPECT_CALL(observer_, SigninFailed(_)).Times(0); 101 102 mock_signin_manager_->SetAuthenticatedUsername("user@gmail.com"); 103 fake_oauth2_token_service_->IssueRefreshTokenForUser( 104 "user@gmail.com", "refresh_token"); 105} 106