| Index: chrome/browser/signin/force_signin_verifier_unittest.cc
|
| diff --git a/chrome/browser/signin/force_signin_verifier_unittest.cc b/chrome/browser/signin/force_signin_verifier_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d5f2f5551714a9c6cc996daaee0ab14d5c829a3e
|
| --- /dev/null
|
| +++ b/chrome/browser/signin/force_signin_verifier_unittest.cc
|
| @@ -0,0 +1,126 @@
|
| +// Copyright 2017 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/force_signin_verifier.h"
|
| +
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "content/public/test/test_browser_thread_bundle.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +class MockForceSigninVerifier : public ForceSigninVerifier {
|
| + public:
|
| + explicit MockForceSigninVerifier(Profile* profile)
|
| + : ForceSigninVerifier(profile) {}
|
| +
|
| + bool ShouldSendRequest() override { return true; }
|
| +
|
| + void SendTestRequest() { SendRequest(); }
|
| +
|
| + bool IsDelayTaskPosted() { return GetOneShotTimerForTesting()->IsRunning(); }
|
| +
|
| + int FailureCount() { return GetBackoffEntryForTesting()->failure_count(); }
|
| +
|
| + OAuth2TokenService::Request* request() { return GetRequestForTesting(); }
|
| +
|
| + MOCK_METHOD0(ShowDialog, void(void));
|
| +};
|
| +
|
| +class ForceSigninVerifierTest : public ::testing::Test {
|
| + public:
|
| + void SetUp() override {
|
| + verifier_ = base::MakeUnique<MockForceSigninVerifier>(&profile_);
|
| + }
|
| +
|
| + void TearDown() override { verifier_.reset(); }
|
| +
|
| + std::unique_ptr<MockForceSigninVerifier> verifier_;
|
| + content::TestBrowserThreadBundle bundle_;
|
| + TestingProfile profile_;
|
| +
|
| + GoogleServiceAuthError persistent_error_ = GoogleServiceAuthError(
|
| + GoogleServiceAuthError::State::INVALID_GAIA_CREDENTIALS);
|
| + GoogleServiceAuthError transient_error_ =
|
| + GoogleServiceAuthError(GoogleServiceAuthError::State::CONNECTION_FAILED);
|
| +};
|
| +
|
| +TEST_F(ForceSigninVerifierTest, OnGetTokenSuccess) {
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| +
|
| + verifier_->SendTestRequest();
|
| +
|
| + ASSERT_NE(nullptr, verifier_->request());
|
| + ASSERT_FALSE(verifier_->HasTokenBeenVerified());
|
| + ASSERT_FALSE(verifier_->IsDelayTaskPosted());
|
| + EXPECT_CALL(*verifier_.get(), ShowDialog()).Times(0);
|
| +
|
| + verifier_->OnGetTokenSuccess(verifier_->request(), "", base::Time::Now());
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| + ASSERT_TRUE(verifier_->HasTokenBeenVerified());
|
| + ASSERT_FALSE(verifier_->IsDelayTaskPosted());
|
| + ASSERT_EQ(0, verifier_->FailureCount());
|
| +}
|
| +
|
| +TEST_F(ForceSigninVerifierTest, OnGetTokenPersistentFailure) {
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| +
|
| + verifier_->SendTestRequest();
|
| +
|
| + ASSERT_NE(nullptr, verifier_->request());
|
| + ASSERT_FALSE(verifier_->HasTokenBeenVerified());
|
| + ASSERT_FALSE(verifier_->IsDelayTaskPosted());
|
| + EXPECT_CALL(*verifier_.get(), ShowDialog()).Times(1);
|
| +
|
| + verifier_->OnGetTokenFailure(verifier_->request(), persistent_error_);
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| + ASSERT_TRUE(verifier_->HasTokenBeenVerified());
|
| + ASSERT_FALSE(verifier_->IsDelayTaskPosted());
|
| + ASSERT_EQ(0, verifier_->FailureCount());
|
| +}
|
| +
|
| +TEST_F(ForceSigninVerifierTest, OnGetTokenTransientFailure) {
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| +
|
| + verifier_->SendTestRequest();
|
| + ASSERT_NE(nullptr, verifier_->request());
|
| + ASSERT_FALSE(verifier_->HasTokenBeenVerified());
|
| + ASSERT_FALSE(verifier_->IsDelayTaskPosted());
|
| + EXPECT_CALL(*verifier_.get(), ShowDialog()).Times(0);
|
| +
|
| + verifier_->OnGetTokenFailure(verifier_->request(), transient_error_);
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| + ASSERT_FALSE(verifier_->HasTokenBeenVerified());
|
| + ASSERT_TRUE(verifier_->IsDelayTaskPosted());
|
| + ASSERT_EQ(1, verifier_->FailureCount());
|
| +}
|
| +
|
| +TEST_F(ForceSigninVerifierTest, OnLostConnection) {
|
| + verifier_->SendTestRequest();
|
| + verifier_->OnGetTokenFailure(verifier_->request(), transient_error_);
|
| + ASSERT_EQ(1, verifier_->FailureCount());
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| + ASSERT_TRUE(verifier_->IsDelayTaskPosted());
|
| +
|
| + verifier_->OnNetworkChanged(
|
| + net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE);
|
| +
|
| + ASSERT_EQ(0, verifier_->FailureCount());
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| + ASSERT_FALSE(verifier_->IsDelayTaskPosted());
|
| +}
|
| +
|
| +TEST_F(ForceSigninVerifierTest, OnReconnected) {
|
| + verifier_->SendTestRequest();
|
| + verifier_->OnGetTokenFailure(verifier_->request(), transient_error_);
|
| + ASSERT_EQ(1, verifier_->FailureCount());
|
| + ASSERT_EQ(nullptr, verifier_->request());
|
| + ASSERT_TRUE(verifier_->IsDelayTaskPosted());
|
| +
|
| + verifier_->OnNetworkChanged(
|
| + net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
|
| +
|
| + ASSERT_EQ(0, verifier_->FailureCount());
|
| + ASSERT_NE(nullptr, verifier_->request());
|
| + ASSERT_FALSE(verifier_->IsDelayTaskPosted());
|
| +}
|
|
|