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

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

Issue 22581003: Handling of multiple concurrent requests from different clients in OAuth2TokenService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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/browser/signin/oauth2_token_service_unittest.cc
diff --git a/chrome/browser/signin/oauth2_token_service_unittest.cc b/chrome/browser/signin/oauth2_token_service_unittest.cc
index 730c30365c6d8d4a32e7501e22b1c7e89ad6e326..aa817d585ca355c2c1c9917d986304d3e05487b3 100644
--- a/chrome/browser/signin/oauth2_token_service_unittest.cc
+++ b/chrome/browser/signin/oauth2_token_service_unittest.cc
@@ -16,6 +16,7 @@
#include "google_apis/gaia/gaia_constants.h"
#include "google_apis/gaia/google_service_auth_error.h"
#include "google_apis/gaia/oauth2_access_token_consumer.h"
+#include "google_apis/gaia/oauth2_access_token_fetcher.h"
#include "net/http/http_status_code.h"
#include "net/url_request/test_url_fetcher_factory.h"
#include "net/url_request/url_request_status.h"
@@ -84,6 +85,10 @@ class OAuth2TokenServiceTest : public TokenServiceTestHarness {
BrowserThread::IO))));
}
+ virtual void TearDown() OVERRIDE {
+ OAuth2AccessTokenFetcher::ResetLastFetcherIdForTest();
+ }
+
protected:
net::TestURLFetcherFactory factory_;
scoped_ptr<TestOAuth2TokenService> oauth2_service_;
@@ -108,7 +113,7 @@ TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
fetcher->SetResponseString(std::string());
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -126,7 +131,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -155,7 +160,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -170,7 +175,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) {
base::RunLoop().RunUntilIdle();
// No new network fetcher.
- EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
+ EXPECT_EQ(1U, factory_.GetFetcherCount());
EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
EXPECT_EQ("token", consumer_.last_token_);
@@ -181,8 +186,9 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) {
base::RunLoop().RunUntilIdle();
EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
- fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_EQ(2U, factory_.GetFetcherCount());
+ fetcher = factory_.GetFetcherByID(1);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -201,7 +207,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("token", 0));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -217,8 +223,9 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) {
EXPECT_EQ(0, consumer_.number_of_errors_);
// Network failure.
- fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_EQ(2U, factory_.GetFetcherCount());
+ fetcher = factory_.GetFetcherByID(1);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
fetcher->SetResponseString(std::string());
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -236,7 +243,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("token", 0));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -251,8 +258,9 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) {
EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
- fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_EQ(2U, factory_.GetFetcherCount());
+ fetcher = factory_.GetFetcherByID(1);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("another token", 0));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -270,7 +278,7 @@ TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_TRUE(fetcher);
request.reset();
@@ -340,7 +348,7 @@ TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) {
oauth2_service_->set_refresh_token("");
request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_);
base::RunLoop().RunUntilIdle();
- EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
+ EXPECT_EQ(1U, factory_.GetFetcherCount());
EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
EXPECT_EQ(1, consumer_.number_of_errors_);
}
@@ -355,6 +363,7 @@ TEST_F(OAuth2TokenServiceTest,
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
scopes, &consumer_));
base::RunLoop().RunUntilIdle();
+ ASSERT_EQ(1U, factory_.GetFetcherCount());
net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
// Note |request| is still pending when the refresh token changes.
@@ -367,7 +376,8 @@ TEST_F(OAuth2TokenServiceTest,
oauth2_service_->StartRequest(scopes, &consumer2));
base::RunLoop().RunUntilIdle();
- net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0);
+ ASSERT_EQ(2U, factory_.GetFetcherCount());
+ net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1);
fetcher2->set_response_code(net::HTTP_OK);
fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600));
fetcher2->delegate()->OnURLFetchComplete(fetcher2);
@@ -415,7 +425,8 @@ TEST_F(OAuth2TokenServiceTest, RetryingConsumer) {
EXPECT_EQ(0, consumer.number_of_successful_tokens_);
EXPECT_EQ(1, consumer.number_of_errors_);
- fetcher = factory_.GetFetcherByID(0);
+ ASSERT_EQ(2U, factory_.GetFetcherCount());
+ fetcher = factory_.GetFetcherByID(1);
ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
fetcher->SetResponseString(std::string());
@@ -436,7 +447,7 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -451,7 +462,7 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) {
base::RunLoop().RunUntilIdle();
// No new network fetcher.
- EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
+ ASSERT_EQ(1U, factory_.GetFetcherCount());
EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
EXPECT_EQ("token", consumer_.last_token_);
@@ -463,8 +474,9 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) {
base::RunLoop().RunUntilIdle();
EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
EXPECT_EQ(0, consumer_.number_of_errors_);
- fetcher = factory_.GetFetcherByID(0);
- EXPECT_TRUE(fetcher);
+ ASSERT_EQ(2U, factory_.GetFetcherCount());
+ fetcher = factory_.GetFetcherByID(1);
+ ASSERT_TRUE(fetcher);
fetcher->set_response_code(net::HTTP_OK);
fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
fetcher->delegate()->OnURLFetchComplete(fetcher);
@@ -523,3 +535,142 @@ TEST_F(OAuth2TokenServiceTest, CancelRequestsForToken) {
EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
EXPECT_EQ(3, consumer_.number_of_errors_);
}
+
+TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) {
+ std::string client_id_1("client1");
+ std::string client_secret_1("secret1");
+ std::string client_id_2("client2");
+ std::string client_secret_2("secret2");
+ std::set<std::string> scope_set;
+ scope_set.insert("scope1");
+ scope_set.insert("scope2");
+
+ std::string refresh_token("refreshToken");
+ oauth2_service_->set_refresh_token(refresh_token);
+
+ scoped_ptr<OAuth2TokenService::Request> request1(
+ oauth2_service_->StartRequestForClient(std::string(),
+ client_id_1,
+ client_secret_1,
+ scope_set,
+ &consumer_));
+ scoped_ptr<OAuth2TokenService::Request> request2(
+ oauth2_service_->StartRequestForClient(std::string(),
+ client_id_2,
+ client_secret_2,
+ scope_set,
+ &consumer_));
+ // Start a request that should be duplicate of |request1|.
+ scoped_ptr<OAuth2TokenService::Request> request3(
+ oauth2_service_->StartRequestForClient(std::string(),
+ client_id_1,
+ client_secret_1,
+ scope_set,
+ &consumer_));
+ base::RunLoop().RunUntilIdle();
+
+ // Check to make sure we have started exactly two fetchers.
+ ASSERT_EQ(2U, factory_.GetFetcherCount());
+ net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
+ ASSERT_TRUE(fetcher1);
+ net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1);
+ ASSERT_TRUE(fetcher2);
Roger Tawa OOO till Jul 10th 2013/08/16 21:16:50 Lines 574 to 577 seem redundant with line 573. I
zel 2013/08/19 16:03:17 Done.
+
+ const OAuth2TokenService::PendingFetcherMap& fetchers =
+ oauth2_service_->GetPendingFetchersForTesting();
+ ASSERT_EQ(2U,
+ fetchers.find(OAuth2TokenService::FetchParameters(
+ std::string(),
+ client_id_1,
+ refresh_token,
+ scope_set))->second->GetWaitingRequestCount());
+ ASSERT_EQ(1U,
+ fetchers.find(OAuth2TokenService::FetchParameters(
+ std::string(),
+ client_id_2,
+ refresh_token,
+ scope_set))->second->GetWaitingRequestCount());
+
+ fetcher1->set_response_code(net::HTTP_OK);
+ fetcher1->SetResponseString(GetValidTokenResponse("token1", 3600));
+ fetcher1->delegate()->OnURLFetchComplete(fetcher1);
+
+ fetcher2->set_response_code(net::HTTP_OK);
+ fetcher2->SetResponseString(GetValidTokenResponse("token2", 3600));
+ fetcher2->delegate()->OnURLFetchComplete(fetcher2);
+
+ EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
+ EXPECT_EQ(0, consumer_.number_of_errors_);
Roger Tawa OOO till Jul 10th 2013/08/16 21:16:50 Don't need lines 594 to 603 for this test.
zel 2013/08/19 16:03:17 Done.
+}
+
+TEST_F(OAuth2TokenServiceTest, ClientScopeSetOrderTest) {
+ OAuth2TokenService::ScopeSet set_0;
+ OAuth2TokenService::ScopeSet set_1;
+ set_1.insert("1");
+
+ OAuth2TokenService::ClientScopeSet sets[] = {
+ OAuth2TokenService::ClientScopeSet("0", "0", set_0),
+ OAuth2TokenService::ClientScopeSet("0", "0", set_1),
+ OAuth2TokenService::ClientScopeSet("0", "1", set_0),
+ OAuth2TokenService::ClientScopeSet("0", "1", set_1),
+ OAuth2TokenService::ClientScopeSet("1", "0", set_0),
+ OAuth2TokenService::ClientScopeSet("1", "0", set_1),
+ OAuth2TokenService::ClientScopeSet("1", "1", set_0),
+ OAuth2TokenService::ClientScopeSet("1", "1", set_1),
+ };
+
+ for (size_t i = 0; i < arraysize(sets); i++) {
+ for (size_t j = 0; j < arraysize(sets); j++) {
+ if (i == j) {
+ EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
+ EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
+ } else if (i < j) {
+ EXPECT_TRUE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
+ EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
+ } else {
+ EXPECT_TRUE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
+ EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
+ }
+ }
+ }
+}
+
+TEST_F(OAuth2TokenServiceTest, FetchParametersOrderTest) {
+ OAuth2TokenService::ScopeSet set_0;
+ OAuth2TokenService::ScopeSet set_1;
+ set_1.insert("1");
+
+ OAuth2TokenService::FetchParameters params[] = {
+ OAuth2TokenService::FetchParameters("0", "0", "0", set_0),
+ OAuth2TokenService::FetchParameters("0", "0", "0", set_1),
+ OAuth2TokenService::FetchParameters("0", "0", "1", set_0),
+ OAuth2TokenService::FetchParameters("0", "0", "1", set_1),
+ OAuth2TokenService::FetchParameters("0", "1", "0", set_0),
+ OAuth2TokenService::FetchParameters("0", "1", "0", set_1),
+ OAuth2TokenService::FetchParameters("0", "1", "1", set_0),
+ OAuth2TokenService::FetchParameters("0", "1", "1", set_1),
+ OAuth2TokenService::FetchParameters("1", "0", "0", set_0),
+ OAuth2TokenService::FetchParameters("1", "0", "0", set_1),
+ OAuth2TokenService::FetchParameters("1", "0", "1", set_0),
+ OAuth2TokenService::FetchParameters("1", "0", "1", set_1),
+ OAuth2TokenService::FetchParameters("1", "1", "0", set_0),
+ OAuth2TokenService::FetchParameters("1", "1", "0", set_1),
+ OAuth2TokenService::FetchParameters("1", "1", "1", set_0),
+ OAuth2TokenService::FetchParameters("1", "1", "1", set_1)
+ };
+
+ for (size_t i = 0; i < arraysize(params); i++) {
+ for (size_t j = 0; j < arraysize(params); j++) {
+ if (i == j) {
+ EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j;
+ EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j;
+ } else if (i < j) {
+ EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j;
+ EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j;
+ } else {
+ EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j;
+ EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j;
+ }
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698