Index: blimp/client/core/session/identity_source_unittest.cc |
diff --git a/blimp/client/core/session/identity_source_unittest.cc b/blimp/client/core/session/identity_source_unittest.cc |
deleted file mode 100644 |
index 4edc7bf5732763f0591651154346b9c674d856e8..0000000000000000000000000000000000000000 |
--- a/blimp/client/core/session/identity_source_unittest.cc |
+++ /dev/null |
@@ -1,294 +0,0 @@ |
-// Copyright 2016 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 "blimp/client/core/session/identity_source.h" |
- |
-#include <memory> |
-#include <string> |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/macros.h" |
-#include "base/memory/ptr_util.h" |
-#include "blimp/client/test/test_blimp_client_context_delegate.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using ::testing::_; |
-using ::testing::Return; |
- |
-namespace blimp { |
-namespace client { |
-namespace { |
- |
-class MockIdentitySource : public IdentitySource { |
- public: |
- MockIdentitySource( |
- std::unique_ptr<IdentityProvider> identity_provider, |
- base::Callback<void(const GoogleServiceAuthError&)> error_callback, |
- const IdentitySource::TokenCallback& callback) |
- : IdentitySource(std::move(identity_provider), error_callback, callback), |
- success_(0), |
- fail_(0), |
- refresh_(0), |
- token_callback_count_(0) {} |
- ~MockIdentitySource() override{}; |
- |
- void OnGetTokenSuccess(const OAuth2TokenService::Request* request, |
- const std::string& access_token, |
- const base::Time& expiration_time) override { |
- IdentitySource::OnGetTokenSuccess(request, access_token, expiration_time); |
- success_++; |
- token_ = access_token; |
- } |
- |
- void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
- const GoogleServiceAuthError& error) override { |
- IdentitySource::OnGetTokenFailure(request, error); |
- fail_++; |
- token_.clear(); |
- } |
- |
- void OnRefreshTokenAvailable(const std::string& account_id) override { |
- IdentitySource::OnRefreshTokenAvailable(account_id); |
- refresh_++; |
- } |
- |
- void MockTokenCall(const std::string& token) { |
- token_callback_count_++; |
- callback_token_ = token; |
- } |
- |
- IdentityProvider* GetIdentityProvider() { return identity_provider_.get(); } |
- |
- int Succeeded() { return success_; } |
- int Failed() { return fail_; } |
- int Refreshed() { return refresh_; } |
- int TokenCallbackCount() { return token_callback_count_; } |
- // Return the token passed to TokenCallback. |
- const std::string& CallbackToken() { return callback_token_; } |
- // Return the token get from OAuth2TokenService. |
- const std::string& Token() { return token_; } |
- |
- // Reset test recording data. |
- void ResetTestRecords() { |
- success_ = 0; |
- fail_ = 0; |
- refresh_ = 0; |
- token_callback_count_ = 0; |
- callback_token_.clear(); |
- token_.clear(); |
- } |
- |
- private: |
- std::string token_; |
- int success_; |
- int fail_; |
- int refresh_; |
- |
- int token_callback_count_; |
- std::string callback_token_; |
- DISALLOW_COPY_AND_ASSIGN(MockIdentitySource); |
-}; |
- |
-class IdentitySourceTest : public testing::Test { |
- public: |
- IdentitySourceTest() = default; |
- ~IdentitySourceTest() override = default; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(IdentitySourceTest); |
-}; |
- |
-TEST_F(IdentitySourceTest, TestConnect) { |
- TestBlimpClientContextDelegate mock_blimp_delegate; |
- MockIdentitySource auth( |
- mock_blimp_delegate.CreateIdentityProvider(), |
- base::Bind(&TestBlimpClientContextDelegate::OnAuthenticationError, |
- base::Unretained(&mock_blimp_delegate)), |
- base::Bind(&MockIdentitySource::MockTokenCall, base::Unretained(&auth))); |
- FakeIdentityProvider* id_provider = |
- static_cast<FakeIdentityProvider*>(auth.GetIdentityProvider()); |
- FakeOAuth2TokenService* token_service = mock_blimp_delegate.GetTokenService(); |
- |
- // Connect when user is not signed in. Nothing happens. |
- id_provider->LogOut(); |
- auth.Connect(); |
- DCHECK_EQ(auth.Succeeded(), 0); |
- DCHECK_EQ(auth.Failed(), 0); |
- DCHECK_EQ(auth.Refreshed(), 0); |
- DCHECK_EQ(auth.Token(), std::string()); |
- auth.ResetTestRecords(); |
- |
- FakeOAuth2TokenServiceDelegate* mock_token_service_delegate = |
- token_service->GetFakeOAuth2TokenServiceDelegate(); |
- |
- // Connect when user signed in, but no refresh token, refresh token observer |
- // should be added. |
- std::string account = "mock_account"; |
- id_provider->LogIn(account); |
- mock_token_service_delegate->RevokeCredentials(account); |
- // Mock duplicate connect calls in this test. |
- auth.Connect(); |
- auth.Connect(); |
- DCHECK_EQ(auth.Succeeded(), 0); |
- DCHECK_EQ(auth.Failed(), 0); |
- DCHECK_EQ(auth.Refreshed(), 0); |
- DCHECK_EQ(auth.TokenCallbackCount(), 0); |
- auth.ResetTestRecords(); |
- |
- // Issue refresh token, listener should be triggered, and request should be |
- // sent. |
- mock_token_service_delegate->UpdateCredentials(account, "mock_refresh_token"); |
- DCHECK_EQ(auth.Succeeded(), 0); |
- DCHECK_EQ(auth.Failed(), 0); |
- DCHECK_EQ(auth.Refreshed(), 1); |
- DCHECK_EQ(auth.TokenCallbackCount(), 0); |
- auth.ResetTestRecords(); |
- |
- // Fire access token success, first request should be fulfilled. |
- base::Time time; |
- std::string mock_access_token = "mock_access_token"; |
- token_service->IssueAllTokensForAccount(account, mock_access_token, time); |
- DCHECK_EQ(auth.Succeeded(), 1); |
- DCHECK_EQ(auth.Failed(), 0); |
- DCHECK_EQ(auth.Token(), mock_access_token); |
- DCHECK_EQ(auth.TokenCallbackCount(), 1); |
- DCHECK_EQ(auth.CallbackToken(), mock_access_token); |
- auth.ResetTestRecords(); |
- |
- // Connect again and fire access token failed. |
- GoogleServiceAuthError error(GoogleServiceAuthError::State::REQUEST_CANCELED); |
- auth.Connect(); |
- auth.Connect(); |
- token_service->IssueErrorForAllPendingRequestsForAccount(account, error); |
- DCHECK_EQ(auth.Succeeded(), 0); |
- DCHECK_EQ(auth.Failed(), 1); |
- DCHECK_EQ(auth.Token(), std::string()); |
- DCHECK_EQ(auth.TokenCallbackCount(), 0); |
- auth.ResetTestRecords(); |
- |
- // Refresh token listener should have been removed. |
- mock_token_service_delegate->UpdateCredentials(account, "mock_refresh_token"); |
- DCHECK_EQ(auth.Refreshed(), 0); |
- auth.ResetTestRecords(); |
- |
- // Direct connect with refresh token, and no listener should be |
- // added. The request is a retry request. |
- auth.Connect(); |
- auth.Connect(); |
- token_service->IssueAllTokensForAccount(account, mock_access_token, time); |
- DCHECK_EQ(auth.Succeeded(), 1); |
- DCHECK_EQ(auth.Token(), mock_access_token); |
- mock_token_service_delegate->UpdateCredentials(account, "mock_refresh_token"); |
- DCHECK_EQ(auth.Refreshed(), 0); |
- DCHECK_EQ(auth.TokenCallbackCount(), 1); |
- DCHECK_EQ(auth.CallbackToken(), mock_access_token); |
-} |
- |
-// Test retry on token fetching when refresh token is updated during token |
-// request. |
-TEST_F(IdentitySourceTest, TestConnectRetry) { |
- TestBlimpClientContextDelegate mock_blimp_delegate; |
- MockIdentitySource auth( |
- mock_blimp_delegate.CreateIdentityProvider(), |
- base::Bind(&TestBlimpClientContextDelegate::OnAuthenticationError, |
- base::Unretained(&mock_blimp_delegate)), |
- base::Bind(&MockIdentitySource::MockTokenCall, base::Unretained(&auth))); |
- FakeOAuth2TokenService* token_service = mock_blimp_delegate.GetTokenService(); |
- FakeIdentityProvider* id_provider = |
- static_cast<FakeIdentityProvider*>(auth.GetIdentityProvider()); |
- |
- std::string account = "mock_account"; |
- std::string mock_access_token = "mock_token"; |
- id_provider->LogIn(account); |
- |
- // Prepare refresh token. |
- FakeOAuth2TokenServiceDelegate* mock_token_service_delegate = |
- token_service->GetFakeOAuth2TokenServiceDelegate(); |
- mock_token_service_delegate->UpdateCredentials(account, "mock_refresh_token"); |
- |
- // Connect and update the refresh token. |
- auth.Connect(); |
- GoogleServiceAuthError error(GoogleServiceAuthError::State::REQUEST_CANCELED); |
- token_service->IssueErrorForAllPendingRequestsForAccount(account, error); |
- |
- // At this point, the first request should be canceled, but there should be |
- // another retry request. |
- DCHECK_EQ(auth.Succeeded(), 0); |
- DCHECK_EQ(auth.Failed(), 1); |
- DCHECK_EQ(auth.Token(), std::string()); |
- DCHECK_EQ(auth.TokenCallbackCount(), 0); |
- auth.ResetTestRecords(); |
- |
- // Trigger the second request without calling connect. |
- base::Time time; |
- token_service->IssueAllTokensForAccount(account, mock_access_token, time); |
- DCHECK_EQ(auth.Succeeded(), 1); |
- DCHECK_EQ(auth.Token(), mock_access_token); |
- DCHECK_EQ(auth.TokenCallbackCount(), 1); |
- DCHECK_EQ(auth.CallbackToken(), mock_access_token); |
-} |
- |
-TEST_F(IdentitySourceTest, TestConnectFailDelegateCallback) { |
- TestBlimpClientContextDelegate mock_blimp_delegate; |
- MockIdentitySource auth( |
- mock_blimp_delegate.CreateIdentityProvider(), |
- base::Bind(&TestBlimpClientContextDelegate::OnAuthenticationError, |
- base::Unretained(&mock_blimp_delegate)), |
- base::Bind(&MockIdentitySource::MockTokenCall, base::Unretained(&auth))); |
- FakeOAuth2TokenService* token_service = mock_blimp_delegate.GetTokenService(); |
- FakeIdentityProvider* id_provider = |
- static_cast<FakeIdentityProvider*>(auth.GetIdentityProvider()); |
- |
- std::string account = "mock_account"; |
- std::string mock_access_token = "mock_token"; |
- id_provider->LogIn(account); |
- |
- // Prepare refresh token. |
- FakeOAuth2TokenServiceDelegate* mock_token_service_delegate = |
- token_service->GetFakeOAuth2TokenServiceDelegate(); |
- mock_token_service_delegate->UpdateCredentials(account, "mock_refresh_token"); |
- |
- // Expect delegate to show error message on non REQUEST_CANCELED errors. |
- auth.Connect(); |
- GoogleServiceAuthError error( |
- GoogleServiceAuthError::State::CONNECTION_FAILED); |
- |
- EXPECT_CALL(mock_blimp_delegate, OnAuthenticationError(error)) |
- .WillOnce(Return()); |
- token_service->IssueErrorForAllPendingRequestsForAccount(account, error); |
- |
- DCHECK_EQ(auth.Failed(), 1); |
-} |
- |
-TEST_F(IdentitySourceTest, CheckUserName) { |
- TestBlimpClientContextDelegate mock_blimp_delegate; |
- MockIdentitySource auth( |
- mock_blimp_delegate.CreateIdentityProvider(), |
- base::Bind(&TestBlimpClientContextDelegate::OnAuthenticationError, |
- base::Unretained(&mock_blimp_delegate)), |
- base::Bind(&MockIdentitySource::MockTokenCall, base::Unretained(&auth))); |
- |
- FakeIdentityProvider* id_provider = |
- static_cast<FakeIdentityProvider*>(auth.GetIdentityProvider()); |
- std::string account = "mock_account"; |
- |
- // Verify the user name before the login. |
- EXPECT_EQ("", auth.GetActiveUsername()); |
- |
- // Log in the mock user. |
- id_provider->LogIn(account); |
- |
- // Verify that the identity source can return the correct user name. |
- EXPECT_EQ(account, auth.GetActiveUsername()); |
- |
- // Verify the user name after the logout. |
- id_provider->LogOut(); |
- EXPECT_EQ("", auth.GetActiveUsername()); |
-} |
- |
-} // namespace |
-} // namespace client |
-} // namespace blimp |