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

Unified Diff: chrome/common/net/gaia/oauth2_mint_token_flow_unittest.cc

Issue 9570063: Add a flow class to abstract all the details of minting a token for an app. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 10 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
Index: chrome/common/net/gaia/oauth2_mint_token_flow_unittest.cc
===================================================================
--- chrome/common/net/gaia/oauth2_mint_token_flow_unittest.cc (revision 0)
+++ chrome/common/net/gaia/oauth2_mint_token_flow_unittest.cc (revision 0)
@@ -0,0 +1,195 @@
+// Copyright (c) 2012 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.
+//
+// A complete set of unit tests for OAuth2MintTokenFlow.
+
+#include <string>
+#include <vector>
+
+#include "base/memory/scoped_ptr.h"
+#include "chrome/common/net/gaia/gaia_urls.h"
+#include "chrome/common/net/gaia/google_service_auth_error.h"
+#include "chrome/common/net/gaia/oauth2_access_token_consumer.h"
+#include "chrome/common/net/gaia/oauth2_access_token_fetcher.h"
+#include "chrome/common/net/gaia/oauth2_mint_token_consumer.h"
+#include "chrome/common/net/gaia/oauth2_mint_token_fetcher.h"
+#include "chrome/common/net/gaia/oauth2_mint_token_flow.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::_;
+using testing::Return;
+
+namespace {
+std::vector<std::string> CreateTestScopes() {
+ std::vector<std::string> scopes;
+ scopes.push_back("scope1");
+ scopes.push_back("scope2");
+ return scopes;
+}
+}
+
+class MockDelegate : public OAuth2MintTokenFlow::Delegate {
+ public:
+ MockDelegate() {}
+ ~MockDelegate() {}
+
+ MOCK_METHOD1(OnMintTokenSuccess, void(const std::string& access_token));
+ MOCK_METHOD1(OnMintTokenFailure,
+ void(const GoogleServiceAuthError& error));
+};
+
+class MockOAuth2AccessTokenFetcher : public OAuth2AccessTokenFetcher {
+ public:
+ MockOAuth2AccessTokenFetcher(OAuth2AccessTokenConsumer* consumer,
+ net::URLRequestContextGetter* getter)
+ : OAuth2AccessTokenFetcher(consumer, getter) {}
+ ~MockOAuth2AccessTokenFetcher() {}
+
+ MOCK_METHOD4(Start,
+ void (const std::string& client_id,
+ const std::string& client_secret,
+ const std::string& refresh_token,
+ const std::vector<std::string>& scopes));
+};
+
+class MockOAuth2MintTokenFetcher : public OAuth2MintTokenFetcher {
+ public:
+ MockOAuth2MintTokenFetcher(OAuth2MintTokenConsumer* consumer,
+ net::URLRequestContextGetter* getter)
+ : OAuth2MintTokenFetcher(consumer, getter, "test") {}
+ ~MockOAuth2MintTokenFetcher() {}
+
+ MOCK_METHOD4(Start,
+ void (const std::string& oauth_login_access_token,
+ const std::string& client_id,
+ const std::vector<std::string>& scopes,
+ const std::string& origin));
+};
+
+class MockOAuth2MintTokenFlow : public OAuth2MintTokenFlow {
+ public:
+ explicit MockOAuth2MintTokenFlow(MockDelegate* delegate)
+ : OAuth2MintTokenFlow(NULL, delegate) {}
+ ~MockOAuth2MintTokenFlow() {}
+
+ MOCK_METHOD0(CreateAccessTokenFetcher, OAuth2AccessTokenFetcher*());
+ MOCK_METHOD0(CreateMintTokenFetcher, OAuth2MintTokenFetcher*());
+};
+
+class OAuth2MintTokenFlowTest : public testing::Test {
+ public:
+ OAuth2MintTokenFlowTest() {
+ flow_.reset(new MockOAuth2MintTokenFlow(&delegate_));
+ access_token_fetcher_.reset(new MockOAuth2AccessTokenFetcher(
+ flow_.get(), NULL));
+ mint_token_fetcher_.reset(new MockOAuth2MintTokenFetcher(
+ flow_.get(), NULL));
+ }
+
+ virtual ~OAuth2MintTokenFlowTest() { }
+
+ protected:
+ void SetAccessTokenFetcherFailure(const std::string& rt,
+ const GoogleServiceAuthError& error) {
+ EXPECT_CALL(*access_token_fetcher_,
+ Start(GaiaUrls::GetInstance()->oauth2_chrome_client_id(),
+ GaiaUrls::GetInstance()->oauth2_chrome_client_secret(),
+ rt, std::vector<std::string>()))
+ .Times(1);
+ EXPECT_CALL(*flow_, CreateAccessTokenFetcher())
+ .WillOnce(Return(access_token_fetcher_.release()));
+ EXPECT_CALL(delegate_, OnMintTokenFailure(error))
+ .Times(1);
+ }
+
+ void SetAccessTokenFetcherSuccess(const std::string& rt) {
+ EXPECT_CALL(*access_token_fetcher_,
+ Start(GaiaUrls::GetInstance()->oauth2_chrome_client_id(),
+ GaiaUrls::GetInstance()->oauth2_chrome_client_secret(),
+ rt, std::vector<std::string>()))
+ .Times(1);
+ EXPECT_CALL(*flow_, CreateAccessTokenFetcher())
+ .WillOnce(Return(access_token_fetcher_.release()));
+ }
+
+ void SetMintTokenFetcherFailure(const std::string& rt,
+ const std::string& ext_id,
+ const std::string& client_id,
+ const std::vector<std::string>& scopes,
+ const GoogleServiceAuthError& error) {
+ EXPECT_CALL(*mint_token_fetcher_,
+ Start(rt, client_id, scopes, ext_id))
+ .Times(1);
+ EXPECT_CALL(*flow_, CreateMintTokenFetcher())
+ .WillOnce(Return(mint_token_fetcher_.release()));
+ EXPECT_CALL(delegate_, OnMintTokenFailure(error))
+ .Times(1);
+ }
+
+ void SetMintTokenFetcherSuccess(const std::string& rt,
+ const std::string& ext_id,
+ const std::string& client_id,
+ const std::vector<std::string>& scopes,
+ const std::string& at) {
+ EXPECT_CALL(*mint_token_fetcher_,
+ Start(rt, client_id, scopes, ext_id))
+ .Times(1);
+ EXPECT_CALL(*flow_, CreateMintTokenFetcher())
+ .WillOnce(Return(mint_token_fetcher_.release()));
+ EXPECT_CALL(delegate_, OnMintTokenSuccess(at))
+ .Times(1);
+ }
+
+ scoped_ptr<MockOAuth2MintTokenFlow> flow_;
+ scoped_ptr<MockOAuth2AccessTokenFetcher> access_token_fetcher_;
+ scoped_ptr<MockOAuth2MintTokenFetcher> mint_token_fetcher_;
+ MockDelegate delegate_;
+};
+
+TEST_F(OAuth2MintTokenFlowTest, LoginAccessTokenFailure) {
+ std::string rt = "refresh_token";
+ std::string ext_id = "ext1";
+ std::string client_id = "client1";
+ std::vector<std::string> scopes(CreateTestScopes());
+ std::string at = "access_token";
+ GoogleServiceAuthError err(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
+
+ SetAccessTokenFetcherFailure(rt, err);
+
+ flow_->Start(rt, ext_id, client_id, scopes);
+ flow_->OnGetTokenFailure(err);
+}
+
+TEST_F(OAuth2MintTokenFlowTest, MintAccessTokenFailure) {
+ std::string rt = "refresh_token";
+ std::string ext_id = "ext1";
+ std::string client_id = "client1";
+ std::vector<std::string> scopes(CreateTestScopes());
+ std::string at = "access_token";
+ GoogleServiceAuthError err(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
+
+ SetAccessTokenFetcherSuccess(rt);
+ SetMintTokenFetcherFailure(at, ext_id, client_id, scopes, err);
+
+ flow_->Start(rt, ext_id, client_id, scopes);
+ flow_->OnGetTokenSuccess(at);
+ flow_->OnMintTokenFailure(err);
+}
+
+TEST_F(OAuth2MintTokenFlowTest, Success) {
+ std::string rt = "refresh_token";
+ std::string ext_id = "ext1";
+ std::string client_id = "client1";
+ std::vector<std::string> scopes(CreateTestScopes());
+ std::string at = "access_token";
+ std::string result = "app_access_token";
+
+ SetAccessTokenFetcherSuccess(rt);
+ SetMintTokenFetcherSuccess(at, ext_id, client_id, scopes, result);
+
+ flow_->Start(rt, ext_id, client_id, scopes);
+ flow_->OnGetTokenSuccess(at);
+ flow_->OnMintTokenSuccess(result);
+}

Powered by Google App Engine
This is Rietveld 408576698