Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: chrome/browser/signin/dice_response_handler_unittest.cc

Issue 2947853002: [signin] Unit test for DiceResponseHandler (Closed)
Patch Set: Fix memory leak Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/signin/dice_response_handler_unittest.cc
diff --git a/chrome/browser/signin/dice_response_handler_unittest.cc b/chrome/browser/signin/dice_response_handler_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..63036de65787bd606735ff3c12a3cf4a2aafda98
--- /dev/null
+++ b/chrome/browser/signin/dice_response_handler_unittest.cc
@@ -0,0 +1,127 @@
+// 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/dice_response_handler.h"
+
+#include "base/command_line.h"
+#include "base/memory/ref_counted.h"
+#include "base/message_loop/message_loop.h"
+#include "base/test/test_simple_task_runner.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/signin/core/browser/account_tracker_service.h"
+#include "components/signin/core/browser/profile_oauth2_token_service.h"
+#include "components/signin/core/browser/signin_header_helper.h"
+#include "components/signin/core/browser/test_signin_client.h"
+#include "components/signin/core/common/profile_management_switches.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "google_apis/gaia/fake_oauth2_token_service_delegate.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using signin::DiceAction;
+using signin::DiceResponseParams;
+
+namespace {
+
+const char kAuthorizationCode[] = "authorization_code";
+const char kEmail[] = "email";
+const char kObfuscatedGaiaID[] = "obfuscated_gaia_id";
+const int kSessionIndex = 42;
+
+// TestSigninClient implementation that intercepts the GaiaAuthConsumer and
+// replaces it by a dummy one.
+class DiceTestSigninClient : public TestSigninClient, public GaiaAuthConsumer {
+ public:
+ explicit DiceTestSigninClient(PrefService* pref_service)
+ : TestSigninClient(pref_service), consumer_(nullptr) {}
+
+ ~DiceTestSigninClient() override {}
+
+ std::unique_ptr<GaiaAuthFetcher> CreateGaiaAuthFetcher(
+ GaiaAuthConsumer* consumer,
+ const std::string& source,
+ net::URLRequestContextGetter* getter) override {
+ DCHECK(!consumer_ || (consumer_ == consumer));
+ consumer_ = consumer;
+
+ // Pass |this| as a dummy consumer to CreateGaiaAuthFetcher().
+ // Since DiceTestSigninClient does not overrides any consumer method,
+ // everything will be dropped on the floor.
+ return TestSigninClient::CreateGaiaAuthFetcher(this, source, getter);
+ }
+
+ GaiaAuthConsumer* consumer_;
+};
+
+class DiceResponseHandlerTest : public testing::Test {
+ protected:
+ DiceResponseHandlerTest()
+ : task_runner_(new base::TestSimpleTaskRunner()),
+ request_context_getter_(
+ new net::TestURLRequestContextGetter(task_runner_)),
+ signin_client_(&pref_service_),
+ token_service_(base::MakeUnique<FakeOAuth2TokenServiceDelegate>(
+ request_context_getter_.get())),
+ dice_response_handler_(&signin_client_,
+ &token_service_,
+ &account_tracker_service_) {
+ switches::EnableAccountConsistencyDiceForTesting(
+ base::CommandLine::ForCurrentProcess());
+ signin_client_.SetURLRequestContext(request_context_getter_.get());
+ AccountTrackerService::RegisterPrefs(pref_service_.registry());
+ account_tracker_service_.Initialize(&signin_client_);
+ }
+
+ ~DiceResponseHandlerTest() override { task_runner_->ClearPendingTasks(); }
+
+ DiceResponseParams MakeDiceParams(DiceAction action) {
+ DiceResponseParams dice_params;
+ dice_params.user_intention = action;
+ dice_params.obfuscated_gaia_id = kObfuscatedGaiaID;
+ dice_params.email = kEmail;
+ dice_params.session_index = kSessionIndex;
+ dice_params.authorization_code = kAuthorizationCode;
+ return dice_params;
+ }
+
+ base::MessageLoop loop_;
+ scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
+ scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
+ sync_preferences::TestingPrefServiceSyncable pref_service_;
+ DiceTestSigninClient signin_client_;
+ ProfileOAuth2TokenService token_service_;
+ AccountTrackerService account_tracker_service_;
+ DiceResponseHandler dice_response_handler_;
+};
+
+// Checks that a SIGNIN action triggers a token exchange request.
+TEST_F(DiceResponseHandlerTest, Signin) {
+ DiceResponseParams dice_params = MakeDiceParams(DiceAction::SIGNIN);
+ ASSERT_FALSE(
+ token_service_.RefreshTokenIsAvailable(dice_params.obfuscated_gaia_id));
+ dice_response_handler_.ProcessDiceHeader(dice_params);
+ // Check that a GaiaAuthFetcher has been created.
+ ASSERT_TRUE(signin_client_.consumer_);
+ // Simulate GaiaAuthFetcher success.
+ signin_client_.consumer_->OnClientOAuthSuccess(
+ GaiaAuthConsumer::ClientOAuthResult("refresh_token", "access_token", 10));
+ // Check that the token has been inserted in the token service.
+ EXPECT_TRUE(
+ token_service_.RefreshTokenIsAvailable(dice_params.obfuscated_gaia_id));
+}
+
+// Tests that the DiceResponseHandler is created for a normal profile but not
+// for an incognito profile.
+TEST(DiceResponseHandlerFactoryTest, NotInIncognito) {
+ content::TestBrowserThreadBundle thread_bundle;
+ TestingProfile profile;
+ EXPECT_THAT(DiceResponseHandler::GetForProfile(&profile), testing::NotNull());
+ EXPECT_THAT(
+ DiceResponseHandler::GetForProfile(profile.GetOffTheRecordProfile()),
+ testing::IsNull());
+}
+
+} // namespace
« no previous file with comments | « no previous file | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698