Index: chrome/browser/signin/account_reconcilor_unittest.cc |
diff --git a/chrome/browser/signin/account_reconcilor_unittest.cc b/chrome/browser/signin/account_reconcilor_unittest.cc |
index a7ec9ef2a15b0320b00d8a58d496fc3d286bf651..4845527826d8a0d95aa84833de03bd3114b23086 100644 |
--- a/chrome/browser/signin/account_reconcilor_unittest.cc |
+++ b/chrome/browser/signin/account_reconcilor_unittest.cc |
@@ -20,6 +20,7 @@ |
#include "chrome/test/base/testing_browser_process.h" |
#include "chrome/test/base/testing_profile.h" |
#include "chrome/test/base/testing_profile_manager.h" |
+#include "chrome/test/base/uma_histogram_helper.h" |
#include "components/signin/core/browser/account_reconcilor.h" |
#include "components/signin/core/browser/profile_oauth2_token_service.h" |
#include "components/signin/core/browser/signin_manager.h" |
@@ -34,6 +35,13 @@ |
namespace { |
const char kTestEmail[] = "user@gmail.com"; |
+const char* const kHistogramsToSnapshot[] = { |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
+ "Signin.Reconciler.AddedToCookieJar.FirstRun", |
+ "Signin.Reconciler.AddedToChrome.FirstRun", |
+ "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun", |
+ "Signin.Reconciler.AddedToCookieJar.SubsequentRun", |
+ "Signin.Reconciler.AddedToChrome.SubsequentRun"}; |
class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> { |
public: |
@@ -77,7 +85,7 @@ MockAccountReconcilor::MockAccountReconcilor( |
} // namespace |
-class AccountReconcilorTest : public testing::Test { |
+class AccountReconcilorTest : public ::testing::TestWithParam<bool> { |
public: |
AccountReconcilorTest(); |
virtual void SetUp() OVERRIDE; |
@@ -85,6 +93,7 @@ class AccountReconcilorTest : public testing::Test { |
TestingProfile* profile() { return profile_; } |
FakeSigninManagerForTesting* signin_manager() { return signin_manager_; } |
FakeProfileOAuth2TokenService* token_service() { return token_service_; } |
+ UMAHistogramHelper* histogram_helper() { return &histogram_helper_; } |
void SetFakeResponse(const std::string& url, |
const std::string& data, |
@@ -113,6 +122,9 @@ class AccountReconcilorTest : public testing::Test { |
MockAccountReconcilor* mock_reconcilor_; |
net::FakeURLFetcherFactory url_fetcher_factory_; |
scoped_ptr<TestingProfileManager> testing_profile_manager_; |
+ UMAHistogramHelper histogram_helper_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); |
}; |
AccountReconcilorTest::AccountReconcilorTest() |
@@ -122,8 +134,12 @@ AccountReconcilorTest::AccountReconcilorTest() |
url_fetcher_factory_(NULL) {} |
void AccountReconcilorTest::SetUp() { |
- CommandLine::ForCurrentProcess()->AppendSwitch( |
- switches::kEnableNewProfileManagement); |
+ // If it's a non-parameterized test, or we have a parameter of true, set flag. |
+ if (!::testing::UnitTest::GetInstance()->current_test_info()->value_param() || |
+ GetParam()) { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kEnableNewProfileManagement); |
+ } |
testing_profile_manager_.reset( |
new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
@@ -152,6 +168,10 @@ void AccountReconcilorTest::SetUp() { |
token_service_ = |
static_cast<FakeProfileOAuth2TokenService*>( |
ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); |
+ |
+ // Take a new snapshot of the concerned histograms before each test |
+ histogram_helper_.PrepareSnapshot(kHistogramsToSnapshot, |
+ arraysize(kHistogramsToSnapshot)); |
} |
MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() { |
@@ -339,7 +359,7 @@ TEST_F(AccountReconcilorTest, ValidateAccountsFromTokensFailedTokenRequest) { |
ASSERT_EQ(1u, reconcilor->GetInvalidChromeAccountsForTesting().size()); |
} |
-TEST_F(AccountReconcilorTest, StartReconcileNoop) { |
+TEST_P(AccountReconcilorTest, StartReconcileNoop) { |
signin_manager()->SetAuthenticatedUsername(kTestEmail); |
token_service()->UpdateCredentials(kTestEmail, "refresh_token"); |
@@ -368,6 +388,12 @@ TEST_F(AccountReconcilorTest, StartReconcileNoop) { |
base::RunLoop().RunUntilIdle(); |
ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectTotalCount( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 0, 1); |
} |
// This is test is needed until chrome changes to use gaia obfuscated id. |
@@ -378,7 +404,7 @@ TEST_F(AccountReconcilorTest, StartReconcileNoop) { |
// tests makes sure that an email like "Dot.S@hmail.com", as seen by the |
// token service, will be considered the same as "dots@gmail.com" as returned |
// by gaia::ParseListAccountsData(). |
-TEST_F(AccountReconcilorTest, StartReconcileNoopWithDots) { |
+TEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) { |
signin_manager()->SetAuthenticatedUsername("Dot.S@gmail.com"); |
token_service()->UpdateCredentials("Dot.S@gmail.com", "refresh_token"); |
@@ -409,9 +435,13 @@ TEST_F(AccountReconcilorTest, StartReconcileNoopWithDots) { |
base::RunLoop().RunUntilIdle(); |
ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 0, 1); |
} |
-TEST_F(AccountReconcilorTest, StartReconcileNoopMultiple) { |
+TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { |
signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
@@ -448,9 +478,15 @@ TEST_F(AccountReconcilorTest, StartReconcileNoopMultiple) { |
base::RunLoop().RunUntilIdle(); |
ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectTotalCount( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 0, 1); |
} |
-TEST_F(AccountReconcilorTest, StartReconcileAddToCookie) { |
+TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { |
signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
@@ -475,9 +511,106 @@ TEST_F(AccountReconcilorTest, StartReconcileAddToCookie) { |
SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", |
GoogleServiceAuthError::AuthErrorNone()); |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 0, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
+} |
+ |
+TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { |
+ signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
+ token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
+ token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
+ |
+ EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); |
+ EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("third@gmail.com")); |
+ |
+ SetFakeResponse( |
+ GaiaUrls::GetInstance()->list_accounts_url().spec(), |
+ "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
+ net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ SetFakeResponse(GaiaUrls::GetInstance()->people_get_url().spec(), |
+ "{\"id\":\"foo\"}", |
+ net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ |
+ AccountReconcilor* reconcilor = GetMockReconcilor(); |
+ reconcilor->StartReconcile(); |
+ token_service()->IssueAllTokensForAccount( |
+ "other@gmail.com", |
+ "access_token", |
+ base::Time::Now() + base::TimeDelta::FromHours(1)); |
+ token_service()->IssueAllTokensForAccount( |
+ "user@gmail.com", |
+ "access_token", |
+ base::Time::Now() + base::TimeDelta::FromHours(1)); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ ASSERT_TRUE(reconcilor->is_reconcile_started_); |
+ SimulateMergeSessionCompleted( |
+ reconcilor, "other@gmail.com", GoogleServiceAuthError::AuthErrorNone()); |
+ ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 0, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
+ |
+ // Do another pass after I've added a third account to the token service |
+ |
+ SetFakeResponse( |
+ GaiaUrls::GetInstance()->list_accounts_url().spec(), |
+ "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " |
+ "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
+ net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ // This will cause the reconcilor to fire. |
+ token_service()->UpdateCredentials("third@gmail.com", "refresh_token"); |
+ |
+ token_service()->IssueAllTokensForAccount( |
+ "other@gmail.com", |
+ "access_token", |
+ base::Time::Now() + base::TimeDelta::FromHours(1)); |
+ token_service()->IssueAllTokensForAccount( |
+ "user@gmail.com", |
+ "access_token", |
+ base::Time::Now() + base::TimeDelta::FromHours(1)); |
+ token_service()->IssueAllTokensForAccount( |
+ "third@gmail.com", |
+ "access_token", |
+ base::Time::Now() + base::TimeDelta::FromHours(1)); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ ASSERT_TRUE(reconcilor->is_reconcile_started_); |
+ SimulateMergeSessionCompleted( |
+ reconcilor, "third@gmail.com", GoogleServiceAuthError::AuthErrorNone()); |
+ ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 0, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun", 0, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToCookieJar.SubsequentRun", 1, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToChrome.SubsequentRun", 0, 1); |
} |
-TEST_F(AccountReconcilorTest, StartReconcileAddToChrome) { |
+TEST_P(AccountReconcilorTest, StartReconcileAddToChrome) { |
signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
@@ -500,9 +633,17 @@ TEST_F(AccountReconcilorTest, StartReconcileAddToChrome) { |
ASSERT_TRUE(reconcilor->is_reconcile_started_); |
SimulateRefreshTokenFetched(reconcilor, "other@gmail.com", ""); |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 0, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToChrome.FirstRun", 1, 1); |
} |
-TEST_F(AccountReconcilorTest, StartReconcileBadPrimary) { |
+TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { |
signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
@@ -533,9 +674,17 @@ TEST_F(AccountReconcilorTest, StartReconcileBadPrimary) { |
SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", |
GoogleServiceAuthError::AuthErrorNone()); |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
+ |
+ histogram_helper()->Fetch(); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToCookieJar.FirstRun", 2, 1); |
+ histogram_helper()->ExpectUniqueSample( |
+ "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
} |
-TEST_F(AccountReconcilorTest, StartReconcileOnlyOnce) { |
+TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { |
signin_manager()->SetAuthenticatedUsername(kTestEmail); |
token_service()->UpdateCredentials(kTestEmail, "refresh_token"); |
@@ -560,7 +709,7 @@ TEST_F(AccountReconcilorTest, StartReconcileOnlyOnce) { |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
} |
-TEST_F(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { |
+TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { |
signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
@@ -592,3 +741,7 @@ TEST_F(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { |
GoogleServiceAuthError::AuthErrorNone()); |
ASSERT_FALSE(reconcilor->is_reconcile_started_); |
} |
+ |
+INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, |
+ AccountReconcilorTest, |
+ testing::Bool()); |