diff options
Diffstat (limited to 'chrome/browser/sync/engine/auth_watcher_unittest.cc')
-rw-r--r-- | chrome/browser/sync/engine/auth_watcher_unittest.cc | 235 |
1 files changed, 0 insertions, 235 deletions
diff --git a/chrome/browser/sync/engine/auth_watcher_unittest.cc b/chrome/browser/sync/engine/auth_watcher_unittest.cc deleted file mode 100644 index cc840c7..0000000 --- a/chrome/browser/sync/engine/auth_watcher_unittest.cc +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright (c) 2010 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 "base/scoped_ptr.h" -#include "base/scoped_temp_dir.h" -#include "base/test/test_file_util.h" -#include "base/waitable_event.h" -#include "chrome/browser/password_manager/encryptor.h" -#include "chrome/browser/sync/engine/auth_watcher.h" -#include "chrome/browser/sync/engine/syncer_thread.h" -#include "chrome/browser/sync/util/user_settings.h" -#include "chrome/common/deprecated/event_sys-inl.h" -#include "chrome/common/net/http_return.h" -#include "chrome/common/net/gaia/gaia_authenticator.h" -#include "chrome/test/sync/engine/mock_connection_manager.h" -#include "chrome/test/sync/engine/test_directory_setter_upper.h" -#include "testing/gtest/include/gtest/gtest.h" - -static FilePath::CharType kUserSettingsDB[] = - FILE_PATH_LITERAL("Settings.sqlite3"); -static const char* kTestUserAgent = "useragent"; -static const char* kTestServiceId = "serviceid"; -static const char* kTestGaiaURL = "http://gaia_url"; -static const char* kUserDisplayName = "Mr. Auth Watcher"; -static const char* kUserDisplayEmail = "authwatcherdisplay@gmail.com"; -static const char* kTestEmail = "authwatchertest@gmail.com"; -static const char* kWrongPassword = "wrongpassword"; -static const char* kCorrectPassword = "correctpassword"; -static const char* kValidSID = "validSID"; -static const char* kValidLSID = "validLSID"; -static const char* kInvalidAuthToken = "invalidAuthToken"; -static const char* kValidAuthToken = "validAuthToken"; - -namespace browser_sync { - -class GaiaAuthMockForAuthWatcher : public gaia::GaiaAuthenticator { - public: - GaiaAuthMockForAuthWatcher() : GaiaAuthenticator( - kTestUserAgent, kTestServiceId, kTestGaiaURL), - use_bad_auth_token_(false) {} - virtual ~GaiaAuthMockForAuthWatcher() {} - - virtual int GetBackoffDelaySeconds( - int current_backoff_delay) { - return SyncerThread::GetRecommendedDelaySeconds(current_backoff_delay); - } - - void SendBadAuthTokenForNextRequest() { use_bad_auth_token_ = true; } - - std::string renewed_token() { - return renewed_token_; - } - - protected: - bool PerformGaiaRequest(const AuthParams& params, AuthResults* results) { - if (params.password == kWrongPassword) { - results->auth_error = gaia::BadAuthentication; - return false; - } - if (params.password == kCorrectPassword) { - results->sid = kValidSID; - results->lsid = kValidLSID; - results->auth_token = kValidAuthToken; - } - if (use_bad_auth_token_) { - results->auth_token = kInvalidAuthToken; - use_bad_auth_token_ = false; - } - return true; - } - - void RenewAuthToken(const std::string& auth_token) { - renewed_token_ = auth_token; - } - - private: - // Whether we should send an invalid auth token on the next request. - bool use_bad_auth_token_; - std::string renewed_token_; -}; - -class AuthWatcherTest : public testing::Test { - public: - AuthWatcherTest() : metadb_(kUserDisplayEmail), - consumer_ready(false, false), - event_produced(false, false), - last_event_reason_(AuthWatcherEvent::ILLEGAL_VALUE) {} - virtual void SetUp() { -#if defined(OS_MACOSX) - // Need to mock the Keychain for unit tests on Mac to avoid possible - // blocking UI. |SetAuthTokenForService| uses Encryptor. - Encryptor::UseMockKeychain(true); -#endif - metadb_.SetUp(); - connection_.reset(new MockConnectionManager(metadb_.manager(), - metadb_.name())); - // Mock out data that would normally be sent back from a server. - connection()->SetAuthenticationResponseInfo(kValidAuthToken, - kUserDisplayName, kUserDisplayEmail, "ID"); - user_settings_.reset(new UserSettings()); - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - FilePath user_settings_path = temp_dir_.path().Append(kUserSettingsDB); - user_settings_->Init(user_settings_path); - gaia_auth_ = new GaiaAuthMockForAuthWatcher(); - auth_watcher_ = new AuthWatcher(metadb_.manager(), connection_.get(), - kTestUserAgent, kTestServiceId, kTestGaiaURL, - user_settings_.get(), gaia_auth_); - authwatcher_hookup_.reset(NewEventListenerHookup(auth_watcher_->channel(), - this, &AuthWatcherTest::HandleAuthWatcherEvent)); - } - - virtual void TearDown() { - metadb_.TearDown(); - auth_watcher_->Shutdown(); - EXPECT_FALSE(auth_watcher()->message_loop()); - } - - void HandleAuthWatcherEvent(const AuthWatcherEvent& event) { - if (event.what_happened == AuthWatcherEvent::AUTHWATCHER_DESTROYED) - return; - consumer_ready.Wait(); // Block progress until the test is ready. - - last_event_reason_ = event.what_happened; - if (event.what_happened == AuthWatcherEvent::AUTH_SUCCEEDED) - user_email_ = event.user_email; - - event_produced.Signal(); - } - - AuthWatcherEvent::WhatHappened ConsumeNextEvent() { - consumer_ready.Signal(); - event_produced.Wait(); - return last_event_reason_; - } - - AuthWatcher* auth_watcher() { return auth_watcher_.get(); } - MockConnectionManager* connection() { return connection_.get(); } - GaiaAuthMockForAuthWatcher* gaia_auth() { return gaia_auth_; } - const std::string& user_email() { return user_email_; } - - private: - // Responsible for creating / deleting a temp dir containing user settings DB. - ScopedTempDir temp_dir_; - - // The event listener hookup registered for HandleAuthWatcherEvent. - scoped_ptr<EventListenerHookup> authwatcher_hookup_; - - // The sync engine pieces necessary to run an AuthWatcher. - TriggeredOpenTestDirectorySetterUpper metadb_; - scoped_ptr<MockConnectionManager> connection_; - scoped_ptr<UserSettings> user_settings_; - GaiaAuthMockForAuthWatcher* gaia_auth_; // Owned by auth_watcher_. - scoped_refptr<AuthWatcher> auth_watcher_; - - // This is used to block the AuthWatcherThread when it raises events until we - // are ready to read the event. It is not a manual-reset event, so it goes - // straight back to non-signaled after one thread (the main thread) is - // signaled (or "consumes" the signaled state). - base::WaitableEvent consumer_ready; - - // This is signaled by the AuthWatcherThread after it sets last_event_reason_ - // and possibly user_email_ for us to read. - base::WaitableEvent event_produced; - - // The 'WhatHappened' value from the last AuthWatcherEvent we handled. - AuthWatcherEvent::WhatHappened last_event_reason_; - - // Set when we receive an AUTH_SUCCEEDED event. - std::string user_email_; - - DISALLOW_COPY_AND_ASSIGN(AuthWatcherTest); -}; - -TEST_F(AuthWatcherTest, Construction) { - EXPECT_TRUE(auth_watcher()->message_loop()); - EXPECT_EQ("SyncEngine_AuthWatcherThread", - auth_watcher()->message_loop()->thread_name()); - EXPECT_TRUE(auth_watcher()->auth_backend_thread_.IsRunning()); - EXPECT_EQ(AuthWatcher::NOT_AUTHENTICATED, auth_watcher()->status()); -} - -TEST_F(AuthWatcherTest, AuthenticateGaiaAuthFailure) { - auth_watcher()->Authenticate(kTestEmail, kWrongPassword, - std::string(), // captcha_token - std::string()); // captcha_value - - EXPECT_EQ(AuthWatcherEvent::AUTHENTICATION_ATTEMPT_START, ConsumeNextEvent()); - EXPECT_EQ(AuthWatcherEvent::GAIA_AUTH_FAILED, ConsumeNextEvent()); -} - -TEST_F(AuthWatcherTest, AuthenticateBadAuthToken) { - gaia_auth()->SendBadAuthTokenForNextRequest(); - auth_watcher()->Authenticate(kTestEmail, kCorrectPassword, std::string(), - std::string()); - EXPECT_EQ(AuthWatcherEvent::AUTHENTICATION_ATTEMPT_START, ConsumeNextEvent()); - EXPECT_EQ(AuthWatcherEvent::SERVICE_AUTH_FAILED, ConsumeNextEvent()); -} - -TEST_F(AuthWatcherTest, AuthenticateSuccess) { - auth_watcher()->Authenticate(kTestEmail, kCorrectPassword, std::string(), - std::string()); - EXPECT_EQ(AuthWatcherEvent::AUTHENTICATION_ATTEMPT_START, ConsumeNextEvent()); - EXPECT_EQ(AuthWatcherEvent::AUTH_SUCCEEDED, ConsumeNextEvent()); - - // The server responds with a different email than what we used in the call - // to Authenticate, and the AuthWatcher should have told us about. - EXPECT_EQ(kUserDisplayEmail, user_email()); -} - -TEST_F(AuthWatcherTest, AuthenticateWithTokenBadAuthToken) { - auth_watcher()->AuthenticateWithToken(kTestEmail, kInvalidAuthToken); - EXPECT_EQ(AuthWatcherEvent::SERVICE_AUTH_FAILED, ConsumeNextEvent()); -} - -TEST_F(AuthWatcherTest, AuthenticateWithTokenSuccess) { - auth_watcher()->AuthenticateWithToken(kTestEmail, kValidAuthToken); - EXPECT_EQ(AuthWatcherEvent::AUTH_SUCCEEDED, ConsumeNextEvent()); - EXPECT_EQ(kUserDisplayEmail, user_email()); -} - -// Just check that the thread task was properly issued. -TEST_F(AuthWatcherTest, RenewAuthToken) { - auth_watcher()->Authenticate(kTestEmail, kCorrectPassword, std::string(), - std::string()); - EXPECT_EQ(AuthWatcherEvent::AUTHENTICATION_ATTEMPT_START, ConsumeNextEvent()); - EXPECT_EQ(AuthWatcherEvent::AUTH_SUCCEEDED, ConsumeNextEvent()); - - auth_watcher()->RenewAuthToken("updated_token"); - EXPECT_EQ(AuthWatcherEvent::AUTH_RENEWED, ConsumeNextEvent()); - EXPECT_EQ(gaia_auth()->renewed_token(), "updated_token"); - EXPECT_EQ(connection()->auth_token(), "updated_token"); -} - -} // namespace browser_sync |