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

Unified Diff: google_apis/gaia/account_tracker_unittest.cc

Issue 336253002: Add IdentityProvider-based AccountTracker to google_apis (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
Index: google_apis/gaia/account_tracker_unittest.cc
diff --git a/chrome/browser/extensions/api/identity/account_tracker_unittest.cc b/google_apis/gaia/account_tracker_unittest.cc
similarity index 73%
copy from chrome/browser/extensions/api/identity/account_tracker_unittest.cc
copy to google_apis/gaia/account_tracker_unittest.cc
index 998462aeecae41e0d69cf219d9c11358160b537e..596b3ad68300fee181238dbaf4a3514046886f9e 100644
--- a/chrome/browser/extensions/api/identity/account_tracker_unittest.cc
+++ b/google_apis/gaia/account_tracker_unittest.cc
@@ -2,20 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/extensions/api/identity/account_tracker.h"
+#include "google_apis/gaia/account_tracker.h"
#include <algorithm>
#include <vector>
+#include "base/message_loop/message_loop.h"
#include "base/strings/stringprintf.h"
-#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
-#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
-#include "chrome/browser/signin/fake_signin_manager.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
-#include "chrome/test/base/testing_profile.h"
-#include "components/signin/core/browser/signin_manager_base.h"
-#include "content/public/test/test_browser_thread_bundle.h"
+#include "google_apis/gaia/fake_identity_provider.h"
+#include "google_apis/gaia/fake_oauth2_token_service.h"
#include "google_apis/gaia/gaia_oauth_client.h"
#include "net/http/http_status_code.h"
#include "net/url_request/test_url_fetcher_factory.h"
@@ -23,12 +18,6 @@
#include "net/url_request/url_request_test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
-// TODO(courage): Account removal really only applies to the primary account,
-// because that's the only account tracked by the SigninManager. Many of the
-// tests here remove non-primary accounts. They still properly test the account
-// state machine, but it may be confusing to readers. Update these tests to
-// avoid causing confusion.
-
namespace {
const char kPrimaryAccountKey[] = "primary_account@example.com";
@@ -114,7 +103,7 @@ std::string Str(const std::vector<TrackingEvent>& events) {
} // namespace
-namespace extensions {
+namespace gaia {
class AccountTrackerObserver : public AccountTracker::Observer {
public:
@@ -278,34 +267,17 @@ class IdentityAccountTrackerTest : public testing::Test {
virtual ~IdentityAccountTrackerTest() {}
virtual void SetUp() OVERRIDE {
- TestingProfile::Builder builder;
- builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
- BuildFakeProfileOAuth2TokenService);
- builder.AddTestingFactory(SigninManagerFactory::GetInstance(),
- FakeSigninManagerBase::Build);
-
- test_profile_ = builder.Build();
-
- fake_oauth2_token_service_ = static_cast<FakeProfileOAuth2TokenService*>(
- ProfileOAuth2TokenServiceFactory::GetForProfile(test_profile_.get()));
-
- fake_signin_manager_ = static_cast<FakeSigninManagerForTesting*>(
- SigninManagerFactory::GetForProfile(test_profile_.get()));
-#if defined(OS_CHROMEOS)
- // We don't sign the primary user in and out on ChromeOS, so set the
- // username once in setup.
- fake_signin_manager_->SetAuthenticatedUsername(kPrimaryAccountKey);
-#endif
-
- account_tracker_.reset(new AccountTracker(test_profile_.get()));
- account_tracker_->AddObserver(&observer_);
- // Start off signed into the primary account, because most tests need the
- // profile to be signed in. Remove the initial sign-in events that the
- // tests don't care about.
- NotifyTokenAvailable(kPrimaryAccountKey);
- ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
- observer()->Clear();
+ fake_oauth2_token_service_.reset(new FakeOAuth2TokenService());
+
+ scoped_ptr<FakeIdentityProvider> fake_identity_provider(
+ new FakeIdentityProvider(fake_oauth2_token_service_.get()));
+
+ account_tracker_.reset(
+ new AccountTracker(fake_identity_provider.PassAs<IdentityProvider>(),
+ new net::TestURLRequestContextGetter(
+ message_loop_.message_loop_proxy())));
+ account_tracker_->AddObserver(&observer_);
}
virtual void TearDown() OVERRIDE {
@@ -313,10 +285,6 @@ class IdentityAccountTrackerTest : public testing::Test {
account_tracker_->Shutdown();
}
- Profile* profile() {
- return test_profile_.get();
- }
-
AccountTrackerObserver* observer() {
return &observer_;
}
@@ -327,29 +295,18 @@ class IdentityAccountTrackerTest : public testing::Test {
// Helpers to pass fake events to the tracker.
- void NotifyRemoveAccount(const std::string& username) {
-#if !defined(OS_CHROMEOS)
- if (username == kPrimaryAccountKey)
- fake_signin_manager_->SignOut();
- else
- account_tracker()->GoogleSignedOut(username);
-#else
- account_tracker()->GoogleSignedOut(username);
-#endif
+ void NotifyLogin(const std::string account_key) {
+ identity_provider()->LogIn(account_key);
}
+ void NotifyLogout() { identity_provider()->LogOut(); }
+
void NotifyTokenAvailable(const std::string& username) {
- fake_oauth2_token_service_->IssueRefreshTokenForUser(username,
- "refresh_token");
-#if !defined(OS_CHROMEOS)
- if (username == kPrimaryAccountKey)
- fake_signin_manager_->OnExternalSigninCompleted(username);
-#endif
+ fake_oauth2_token_service_->AddAccount(username);
}
void NotifyTokenRevoked(const std::string& username) {
- fake_oauth2_token_service_->IssueRefreshTokenForUser(username,
- std::string());
+ fake_oauth2_token_service_->RemoveAccount(username);
}
// Helpers to fake access token and user info fetching
@@ -370,12 +327,27 @@ class IdentityAccountTrackerTest : public testing::Test {
void ReturnOAuthUrlFetchSuccess(const std::string& account_key);
void ReturnOAuthUrlFetchFailure(const std::string& account_key);
+ void SetupPrimaryLogin() {
+ // Initial setup for tests that start with a signed in profile.
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ observer()->Clear();
+ }
+
+ std::string active_account_id() {
+ return identity_provider()->GetActiveAccountId();
+ }
+
private:
- scoped_ptr<TestingProfile> test_profile_;
+ FakeIdentityProvider* identity_provider() {
+ return static_cast<FakeIdentityProvider*>(
+ account_tracker_->identity_provider());
+ }
+
+ base::MessageLoopForIO message_loop_; // net:: stuff needs IO message loop.
net::TestURLFetcherFactory test_fetcher_factory_;
- FakeProfileOAuth2TokenService* fake_oauth2_token_service_;
- FakeSigninManagerForTesting* fake_signin_manager_;
- content::TestBrowserThreadBundle thread_bundle_;
+ scoped_ptr<FakeOAuth2TokenService> fake_oauth2_token_service_;
scoped_ptr<AccountTracker> account_tracker_;
AccountTrackerObserver observer_;
@@ -409,56 +381,140 @@ void IdentityAccountTrackerTest::ReturnOAuthUrlFetchFailure(
gaia::GaiaOAuthClient::kUrlFetcherId, net::HTTP_BAD_REQUEST, "");
}
-TEST_F(IdentityAccountTrackerTest, Available) {
- NotifyTokenAvailable("user@example.com");
+// Primary tests just involve the Active account
+
+TEST_F(IdentityAccountTrackerTest, PrimaryNoEventsBeforeLogin) {
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ NotifyTokenRevoked(kPrimaryAccountKey);
+ NotifyLogout();
EXPECT_TRUE(observer()->CheckEvents());
+}
- ReturnOAuthUrlFetchSuccess("user@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(ADDED, "user@example.com"),
- TrackingEvent(SIGN_IN, "user@example.com")));
+TEST_F(IdentityAccountTrackerTest, PrimaryLoginThenTokenAvailable) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ EXPECT_TRUE(observer()->CheckEvents());
+
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(ADDED, kPrimaryAccountKey),
+ TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
}
-TEST_F(IdentityAccountTrackerTest, Revoke) {
- account_tracker()->OnRefreshTokenRevoked("user@example.com");
+TEST_F(IdentityAccountTrackerTest, PrimaryTokenAvailableThenLogin) {
+ NotifyTokenAvailable(kPrimaryAccountKey);
EXPECT_TRUE(observer()->CheckEvents());
+
+ NotifyLogin(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(ADDED, kPrimaryAccountKey),
+ TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
}
-TEST_F(IdentityAccountTrackerTest, Remove) {
- NotifyRemoveAccount("user@example.com");
+TEST_F(IdentityAccountTrackerTest, PrimaryTokenAvailableAndRevokedThenLogin) {
+ NotifyTokenAvailable(kPrimaryAccountKey);
EXPECT_TRUE(observer()->CheckEvents());
+
+ NotifyLogin(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(ADDED, kPrimaryAccountKey),
+ TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
}
-TEST_F(IdentityAccountTrackerTest, AvailableRemoveFetchCancelAvailable) {
- NotifyTokenAvailable("user@example.com");
- NotifyRemoveAccount("user@example.com");
+TEST_F(IdentityAccountTrackerTest, PrimaryRevokeThenLogout) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ observer()->Clear();
+
+ NotifyTokenRevoked(kPrimaryAccountKey);
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(SIGN_OUT, kPrimaryAccountKey)));
+
+ NotifyLogout();
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(REMOVED, kPrimaryAccountKey)));
+}
+
+TEST_F(IdentityAccountTrackerTest, PrimaryRevokeThenLogin) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ NotifyTokenRevoked(kPrimaryAccountKey);
+ observer()->Clear();
+
+ NotifyLogin(kPrimaryAccountKey);
EXPECT_TRUE(observer()->CheckEvents());
+}
- NotifyTokenAvailable("user@example.com");
- ReturnOAuthUrlFetchSuccess("user@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(ADDED, "user@example.com"),
- TrackingEvent(SIGN_IN, "user@example.com")));
+TEST_F(IdentityAccountTrackerTest, PrimaryRevokeThenTokenAvailable) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ NotifyTokenRevoked(kPrimaryAccountKey);
+ observer()->Clear();
+
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
}
-TEST_F(IdentityAccountTrackerTest, AvailableRemoveAvailable) {
- NotifyTokenAvailable("user@example.com");
- ReturnOAuthUrlFetchSuccess("user@example.com");
- NotifyRemoveAccount("user@example.com");
+TEST_F(IdentityAccountTrackerTest, PrimaryLogoutThenRevoke) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ observer()->Clear();
+
+ NotifyLogout();
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(SIGN_OUT, kPrimaryAccountKey),
+ TrackingEvent(REMOVED, kPrimaryAccountKey)));
+
+ NotifyTokenRevoked(kPrimaryAccountKey);
+ EXPECT_TRUE(observer()->CheckEvents());
+}
+
+TEST_F(IdentityAccountTrackerTest, PrimaryLogoutFetchCancelAvailable) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ // TokenAvailable kicks off a fetch. Logout without satisfying it.
+ NotifyLogout();
+ EXPECT_TRUE(observer()->CheckEvents());
+
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(ADDED, "user@example.com"),
- TrackingEvent(SIGN_IN, "user@example.com"),
- TrackingEvent(SIGN_OUT, "user@example.com"),
- TrackingEvent(REMOVED, "user@example.com")));
+ TrackingEvent(ADDED, kPrimaryAccountKey),
+ TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
+}
+
+// Non-primary accounts
+
+TEST_F(IdentityAccountTrackerTest, Available) {
+ SetupPrimaryLogin();
NotifyTokenAvailable("user@example.com");
+ EXPECT_TRUE(observer()->CheckEvents());
+
ReturnOAuthUrlFetchSuccess("user@example.com");
EXPECT_TRUE(observer()->CheckEvents(
TrackingEvent(ADDED, "user@example.com"),
TrackingEvent(SIGN_IN, "user@example.com")));
}
+TEST_F(IdentityAccountTrackerTest, Revoke) {
+ SetupPrimaryLogin();
+
+ account_tracker()->OnRefreshTokenRevoked("user@example.com");
+ EXPECT_TRUE(observer()->CheckEvents());
+}
+
TEST_F(IdentityAccountTrackerTest, AvailableRevokeAvailable) {
+ SetupPrimaryLogin();
+
NotifyTokenAvailable("user@example.com");
ReturnOAuthUrlFetchSuccess("user@example.com");
NotifyTokenRevoked("user@example.com");
@@ -473,6 +529,8 @@ TEST_F(IdentityAccountTrackerTest, AvailableRevokeAvailable) {
}
TEST_F(IdentityAccountTrackerTest, AvailableRevokeAvailableWithPendingFetch) {
+ SetupPrimaryLogin();
+
NotifyTokenAvailable("user@example.com");
NotifyTokenRevoked("user@example.com");
EXPECT_TRUE(observer()->CheckEvents());
@@ -484,21 +542,9 @@ TEST_F(IdentityAccountTrackerTest, AvailableRevokeAvailableWithPendingFetch) {
TrackingEvent(SIGN_IN, "user@example.com")));
}
-TEST_F(IdentityAccountTrackerTest, AvailableRevokeRemove) {
- NotifyTokenAvailable("user@example.com");
- ReturnOAuthUrlFetchSuccess("user@example.com");
- NotifyTokenRevoked("user@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(ADDED, "user@example.com"),
- TrackingEvent(SIGN_IN, "user@example.com"),
- TrackingEvent(SIGN_OUT, "user@example.com")));
-
- NotifyRemoveAccount("user@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(REMOVED, "user@example.com")));
-}
-
TEST_F(IdentityAccountTrackerTest, AvailableRevokeRevoke) {
+ SetupPrimaryLogin();
+
NotifyTokenAvailable("user@example.com");
ReturnOAuthUrlFetchSuccess("user@example.com");
NotifyTokenRevoked("user@example.com");
@@ -512,6 +558,8 @@ TEST_F(IdentityAccountTrackerTest, AvailableRevokeRevoke) {
}
TEST_F(IdentityAccountTrackerTest, AvailableAvailable) {
+ SetupPrimaryLogin();
+
NotifyTokenAvailable("user@example.com");
ReturnOAuthUrlFetchSuccess("user@example.com");
EXPECT_TRUE(observer()->CheckEvents(
@@ -523,72 +571,34 @@ TEST_F(IdentityAccountTrackerTest, AvailableAvailable) {
}
TEST_F(IdentityAccountTrackerTest, TwoAccounts) {
- NotifyTokenAvailable("alpha@example.com");
- ReturnOAuthUrlFetchSuccess("alpha@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(ADDED, "alpha@example.com"),
- TrackingEvent(SIGN_IN, "alpha@example.com")));
-
- NotifyTokenAvailable("beta@example.com");
- ReturnOAuthUrlFetchSuccess("beta@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(ADDED, "beta@example.com"),
- TrackingEvent(SIGN_IN, "beta@example.com")));
-
- NotifyRemoveAccount("alpha@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(SIGN_OUT, "alpha@example.com"),
- TrackingEvent(REMOVED, "alpha@example.com")));
-
- NotifyRemoveAccount("beta@example.com");
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(SIGN_OUT, "beta@example.com"),
- TrackingEvent(REMOVED, "beta@example.com")));
-}
+ SetupPrimaryLogin();
-TEST_F(IdentityAccountTrackerTest, GlobalErrors) {
NotifyTokenAvailable("alpha@example.com");
ReturnOAuthUrlFetchSuccess("alpha@example.com");
EXPECT_TRUE(observer()->CheckEvents(
TrackingEvent(ADDED, "alpha@example.com"),
TrackingEvent(SIGN_IN, "alpha@example.com")));
+
NotifyTokenAvailable("beta@example.com");
ReturnOAuthUrlFetchSuccess("beta@example.com");
EXPECT_TRUE(observer()->CheckEvents(
TrackingEvent(ADDED, "beta@example.com"),
TrackingEvent(SIGN_IN, "beta@example.com")));
- EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
- account_tracker()->GetAuthStatus());
+ NotifyTokenRevoked("alpha@example.com");
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(SIGN_OUT, "alpha@example.com")));
- account_tracker()->ReportAuthError(
- "beta@example.com",
- GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED));
+ NotifyTokenRevoked("beta@example.com");
EXPECT_TRUE(observer()->CheckEvents(
TrackingEvent(SIGN_OUT, "beta@example.com")));
- EXPECT_EQ(GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED),
- account_tracker()->GetAuthStatus());
-
- account_tracker()->ReportAuthError(
- "alpha@example.com",
- GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED));
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(SIGN_OUT, "alpha@example.com")));
- EXPECT_EQ(GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED),
- account_tracker()->GetAuthStatus());
-
- NotifyRemoveAccount("alpha@example.com");
- EXPECT_EQ(GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED),
- account_tracker()->GetAuthStatus());
-
- NotifyTokenAvailable("beta@example.com");
- EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
- account_tracker()->GetAuthStatus());
}
TEST_F(IdentityAccountTrackerTest, AvailableTokenFetchFailAvailable) {
- NotifyTokenAvailable("alpha@example.com");
- ReturnOAuthUrlFetchFailure("alpha@example.com");
+ SetupPrimaryLogin();
+
+ NotifyTokenAvailable("user@example.com");
+ ReturnOAuthUrlFetchFailure("user@example.com");
EXPECT_TRUE(observer()->CheckEvents());
NotifyTokenAvailable("user@example.com");
@@ -598,23 +608,9 @@ TEST_F(IdentityAccountTrackerTest, AvailableTokenFetchFailAvailable) {
TrackingEvent(SIGN_IN, "user@example.com")));
}
-// The Chrome OS fake sign-in manager doesn't do sign-in or sign-out.
-#if !defined(OS_CHROMEOS)
-
-TEST_F(IdentityAccountTrackerTest, PrimarySignOutSignIn) {
- NotifyRemoveAccount(kPrimaryAccountKey);
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(SIGN_OUT, kPrimaryAccountKey),
- TrackingEvent(REMOVED, kPrimaryAccountKey)));
+TEST_F(IdentityAccountTrackerTest, MultiSignOutSignIn) {
+ SetupPrimaryLogin();
- NotifyTokenAvailable(kPrimaryAccountKey);
- ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
- EXPECT_TRUE(observer()->CheckEvents(
- TrackingEvent(ADDED, kPrimaryAccountKey),
- TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
-}
-
-TEST_F(IdentityAccountTrackerTest, PrimarySignOutSignInTwoAccounts) {
NotifyTokenAvailable("alpha@example.com");
ReturnOAuthUrlFetchSuccess("alpha@example.com");
NotifyTokenAvailable("beta@example.com");
@@ -627,7 +623,7 @@ TEST_F(IdentityAccountTrackerTest, PrimarySignOutSignInTwoAccounts) {
TrackingEvent(ADDED, "beta@example.com"),
TrackingEvent(SIGN_IN, "beta@example.com")));
- NotifyRemoveAccount(kPrimaryAccountKey);
+ NotifyLogout();
observer()->SortEventsByUser();
EXPECT_TRUE(observer()->CheckEvents(
TrackingEvent(SIGN_OUT, "alpha@example.com"),
@@ -643,6 +639,7 @@ TEST_F(IdentityAccountTrackerTest, PrimarySignOutSignInTwoAccounts) {
EXPECT_TRUE(observer()->CheckEvents());
// Signing the profile in again will resume tracking all accounts.
+ NotifyLogin(kPrimaryAccountKey);
NotifyTokenAvailable(kPrimaryAccountKey);
ReturnOAuthUrlFetchSuccess("beta@example.com");
ReturnOAuthUrlFetchSuccess("gamma@example.com");
@@ -666,9 +663,51 @@ TEST_F(IdentityAccountTrackerTest, PrimarySignOutSignInTwoAccounts) {
TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
}
-#endif // !defined(OS_CHROMEOS)
+// Primary/non-primary interactions
+
+TEST_F(IdentityAccountTrackerTest, MultiNoEventsBeforeLogin) {
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ NotifyTokenAvailable("user@example.com");
+ NotifyTokenRevoked("user@example.com");
+ NotifyTokenRevoked(kPrimaryAccountKey);
+ NotifyLogout();
+ EXPECT_TRUE(observer()->CheckEvents());
+}
+
+TEST_F(IdentityAccountTrackerTest, MultiLogoutRemovesAllAccounts) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ NotifyTokenAvailable("user@example.com");
+ ReturnOAuthUrlFetchSuccess("user@example.com");
+ observer()->Clear();
+
+ NotifyLogout();
+ observer()->SortEventsByUser();
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(SIGN_OUT, kPrimaryAccountKey),
+ TrackingEvent(REMOVED, kPrimaryAccountKey),
+ TrackingEvent(SIGN_OUT, "user@example.com"),
+ TrackingEvent(REMOVED, "user@example.com")));
+}
+
+TEST_F(IdentityAccountTrackerTest, MultiRevokePrimaryDoesNotRemoveAllAccounts) {
+ NotifyLogin(kPrimaryAccountKey);
+ NotifyTokenAvailable(kPrimaryAccountKey);
+ ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
+ NotifyTokenAvailable("user@example.com");
+ ReturnOAuthUrlFetchSuccess("user@example.com");
+ observer()->Clear();
+
+ NotifyTokenRevoked(kPrimaryAccountKey);
+ observer()->SortEventsByUser();
+ EXPECT_TRUE(
+ observer()->CheckEvents(TrackingEvent(SIGN_OUT, kPrimaryAccountKey)));
+}
TEST_F(IdentityAccountTrackerTest, GetAccountsPrimary) {
+ SetupPrimaryLogin();
+
std::vector<AccountIds> ids = account_tracker()->GetAccounts();
EXPECT_EQ(1ul, ids.size());
EXPECT_EQ(kPrimaryAccountKey, ids[0].account_key);
@@ -676,13 +715,13 @@ TEST_F(IdentityAccountTrackerTest, GetAccountsPrimary) {
}
TEST_F(IdentityAccountTrackerTest, GetAccountsSignedOut) {
- NotifyTokenRevoked(kPrimaryAccountKey);
-
std::vector<AccountIds> ids = account_tracker()->GetAccounts();
EXPECT_EQ(0ul, ids.size());
}
TEST_F(IdentityAccountTrackerTest, GetAccountsOnlyReturnAccountsWithTokens) {
+ SetupPrimaryLogin();
+
NotifyTokenAvailable("alpha@example.com");
NotifyTokenAvailable("beta@example.com");
ReturnOAuthUrlFetchSuccess("beta@example.com");
@@ -696,6 +735,8 @@ TEST_F(IdentityAccountTrackerTest, GetAccountsOnlyReturnAccountsWithTokens) {
}
TEST_F(IdentityAccountTrackerTest, GetAccountsSortOrder) {
+ SetupPrimaryLogin();
+
NotifyTokenAvailable("zeta@example.com");
ReturnOAuthUrlFetchSuccess("zeta@example.com");
NotifyTokenAvailable("alpha@example.com");
@@ -715,6 +756,8 @@ TEST_F(IdentityAccountTrackerTest, GetAccountsSortOrder) {
TEST_F(IdentityAccountTrackerTest,
GetAccountsReturnNothingWhenPrimarySignedOut) {
+ SetupPrimaryLogin();
+
NotifyTokenAvailable("zeta@example.com");
ReturnOAuthUrlFetchSuccess("zeta@example.com");
NotifyTokenAvailable("alpha@example.com");
@@ -726,4 +769,4 @@ TEST_F(IdentityAccountTrackerTest,
EXPECT_EQ(0ul, ids.size());
}
-} // namespace extensions
+} // namespace gaia

Powered by Google App Engine
This is Rietveld 408576698