Index: chrome/browser/signin/google_auto_login_helper_unittest.cc |
diff --git a/chrome/browser/signin/google_auto_login_helper_unittest.cc b/chrome/browser/signin/google_auto_login_helper_unittest.cc |
index 8079dee5d7432709583dd95820df7ecd004a7676..dccb39022173312696888e810bdad2130b69c564 100644 |
--- a/chrome/browser/signin/google_auto_login_helper_unittest.cc |
+++ b/chrome/browser/signin/google_auto_login_helper_unittest.cc |
@@ -7,27 +7,32 @@ |
#include <vector> |
#include "base/message_loop/message_loop.h" |
+#include "base/strings/stringprintf.h" |
#include "chrome/browser/signin/google_auto_login_helper.h" |
#include "chrome/test/base/testing_profile.h" |
+#include "content/public/test/test_browser_thread_bundle.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace { |
-class MockUbertokenFetcher : public UbertokenFetcher { |
+class MockObserver : public GoogleAutoLoginHelper::Observer { |
public: |
- MockUbertokenFetcher(Profile* profile, UbertokenConsumer* consumer) : |
- UbertokenFetcher(profile, consumer), account_id("") {} |
- |
- void completePendingRequest() { |
- OnUberAuthTokenSuccess("mock token: " + account_id); |
+ explicit MockObserver(GoogleAutoLoginHelper* helper) : helper_(helper) { |
+ helper_->AddObserver(this); |
} |
- virtual void StartFetchingToken(const std::string& id) OVERRIDE { |
- account_id = id; |
+ ~MockObserver() { |
+ helper_->RemoveObserver(this); |
} |
- std::string account_id; |
+ MOCK_METHOD2(MergeSessionCompleted, |
+ void(const std::string&, |
+ const GoogleServiceAuthError& )); |
+ private: |
+ GoogleAutoLoginHelper* helper_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MockObserver); |
}; |
// Counts number of InstrumentedGoogleAutoLoginHelper created. |
@@ -38,12 +43,8 @@ int total = 0; |
class InstrumentedGoogleAutoLoginHelper : public GoogleAutoLoginHelper { |
public: |
- std::vector<MockUbertokenFetcher*>* mock_uber_fetchers_; |
- TestingProfile profile_; |
- |
- InstrumentedGoogleAutoLoginHelper( |
- std::vector<MockUbertokenFetcher*>* fetchers) : |
- GoogleAutoLoginHelper(0), mock_uber_fetchers_(fetchers) { |
+ explicit InstrumentedGoogleAutoLoginHelper(Profile* profile) : |
+ GoogleAutoLoginHelper(profile, NULL) { |
total++; |
} |
@@ -51,66 +52,142 @@ class InstrumentedGoogleAutoLoginHelper : public GoogleAutoLoginHelper { |
total--; |
} |
- virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE { |
- OnMergeSessionSuccess(token); |
- } |
+ MOCK_METHOD0(StartFetching, void()); |
- virtual UbertokenFetcher* CreateNewUbertokenFetcher() OVERRIDE { |
- MockUbertokenFetcher* m = new MockUbertokenFetcher(&profile_, this); |
- mock_uber_fetchers_->push_back(m); |
- return m; |
- } |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(InstrumentedGoogleAutoLoginHelper); |
+}; |
+ |
+class GoogleAutoLoginHelperTest : public testing::Test { |
+ public: |
+ GoogleAutoLoginHelperTest() |
+ : no_error_(GoogleServiceAuthError::NONE), |
+ error_(GoogleServiceAuthError::SERVICE_ERROR) {} |
+ |
+ TestingProfile* profile() { return &profile_; } |
- void completePendingFetchers() { |
- while (!mock_uber_fetchers_->empty()) { |
- MockUbertokenFetcher* fetcher = mock_uber_fetchers_->back(); |
- mock_uber_fetchers_->pop_back(); |
- fetcher->completePendingRequest(); |
- } |
+ void SimulateUbertokenFailure(UbertokenConsumer* consumer, |
+ const GoogleServiceAuthError& error) { |
+ consumer->OnUbertokenFailure(error); |
} |
- MOCK_METHOD1(OnMergeSessionSuccess, void(const std::string& uber_token)); |
+ void SimulateMergeSessionSuccess(GaiaAuthConsumer* consumer, |
+ const std::string& data) { |
+ consumer->OnMergeSessionSuccess(data); |
+ } |
- void OnMergeSessionSuccessConcrete(const std::string& uber_token) { |
- GoogleAutoLoginHelper::OnMergeSessionSuccess(uber_token); |
+ void SimulateMergeSessionFailure(GaiaAuthConsumer* consumer, |
+ const GoogleServiceAuthError& error) { |
+ consumer->OnMergeSessionFailure(error); |
} |
-}; |
-class GoogleAutoLoginHelperTest : public testing::Test { |
- public: |
- std::vector<MockUbertokenFetcher*> mock_uber_fetchers_; |
- base::MessageLoop message_loop_; |
+ const GoogleServiceAuthError& no_error() { return no_error_; } |
+ const GoogleServiceAuthError& error() { return error_; } |
+ |
+ private: |
+ content::TestBrowserThreadBundle thread_bundle_; |
+ TestingProfile profile_; |
+ GoogleServiceAuthError no_error_; |
+ GoogleServiceAuthError error_; |
}; |
} // namespace |
-using ::testing::Invoke; |
using ::testing::_; |
-TEST_F(GoogleAutoLoginHelperTest, AllRequestsInOneGo) { |
- total = 0; |
- |
- InstrumentedGoogleAutoLoginHelper* helper = |
- new InstrumentedGoogleAutoLoginHelper(&mock_uber_fetchers_); |
- EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc1@gmail.com")); |
- EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc2@gmail.com")); |
- EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc3@gmail.com")); |
- EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc4@gmail.com")); |
- EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc5@gmail.com")); |
- |
- // Don't completely mock out OnMergeSessionSuccess, let GoogleAutoLoginHelper |
- // actually call OnMergeSessionSuccess to clean up it's work queue because |
- // it'll delete itself once the work queue becomes empty. |
- ON_CALL(*helper, OnMergeSessionSuccess(_)).WillByDefault(Invoke(helper, |
- &InstrumentedGoogleAutoLoginHelper::OnMergeSessionSuccessConcrete)); |
- helper->LogIn("acc1@gmail.com"); |
- helper->LogIn("acc2@gmail.com"); |
- helper->LogIn("acc3@gmail.com"); |
- helper->LogIn("acc4@gmail.com"); |
- helper->LogIn("acc5@gmail.com"); |
- helper->completePendingFetchers(); |
- |
- // Make sure GoogleAutoLoginHelper cleans itself up after everything is done. |
- message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, total); |
+TEST_F(GoogleAutoLoginHelperTest, Success) { |
+ InstrumentedGoogleAutoLoginHelper helper(profile()); |
+ MockObserver observer(&helper); |
+ |
+ EXPECT_CALL(helper, StartFetching()); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", no_error())); |
+ |
+ helper.LogIn("acc1@gmail.com"); |
+ SimulateMergeSessionSuccess(&helper, "token"); |
+} |
+ |
+TEST_F(GoogleAutoLoginHelperTest, FailedMergeSession) { |
+ InstrumentedGoogleAutoLoginHelper helper(profile()); |
+ MockObserver observer(&helper); |
+ |
+ EXPECT_CALL(helper, StartFetching()); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error())); |
+ |
+ helper.LogIn("acc1@gmail.com"); |
+ SimulateMergeSessionFailure(&helper, error()); |
+} |
+ |
+TEST_F(GoogleAutoLoginHelperTest, FailedUbertoken) { |
+ InstrumentedGoogleAutoLoginHelper helper(profile()); |
+ MockObserver observer(&helper); |
+ |
+ EXPECT_CALL(helper, StartFetching()); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error())); |
+ |
+ helper.LogIn("acc1@gmail.com"); |
+ SimulateUbertokenFailure(&helper, error()); |
+} |
+ |
+TEST_F(GoogleAutoLoginHelperTest, ContinueAfterSuccess) { |
+ InstrumentedGoogleAutoLoginHelper helper(profile()); |
+ MockObserver observer(&helper); |
+ |
+ EXPECT_CALL(helper, StartFetching()).Times(2); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", no_error())); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc2@gmail.com", no_error())); |
+ |
+ helper.LogIn("acc1@gmail.com"); |
+ helper.LogIn("acc2@gmail.com"); |
+ SimulateMergeSessionSuccess(&helper, "token1"); |
+ SimulateMergeSessionSuccess(&helper, "token2"); |
+} |
+ |
+TEST_F(GoogleAutoLoginHelperTest, ContinueAfterFailure1) { |
+ InstrumentedGoogleAutoLoginHelper helper(profile()); |
+ MockObserver observer(&helper); |
+ |
+ EXPECT_CALL(helper, StartFetching()).Times(2); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error())); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc2@gmail.com", no_error())); |
+ |
+ helper.LogIn("acc1@gmail.com"); |
+ helper.LogIn("acc2@gmail.com"); |
+ SimulateMergeSessionFailure(&helper, error()); |
+ SimulateMergeSessionSuccess(&helper, "token2"); |
+} |
+ |
+TEST_F(GoogleAutoLoginHelperTest, ContinueAfterFailure2) { |
+ InstrumentedGoogleAutoLoginHelper helper(profile()); |
+ MockObserver observer(&helper); |
+ |
+ EXPECT_CALL(helper, StartFetching()).Times(2); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error())); |
+ EXPECT_CALL(observer, MergeSessionCompleted("acc2@gmail.com", no_error())); |
+ |
+ helper.LogIn("acc1@gmail.com"); |
+ helper.LogIn("acc2@gmail.com"); |
+ SimulateUbertokenFailure(&helper, error()); |
+ SimulateMergeSessionSuccess(&helper, "token2"); |
+} |
+ |
+TEST_F(GoogleAutoLoginHelperTest, AllRequestsInMultipleGoes) { |
+ InstrumentedGoogleAutoLoginHelper helper(profile()); |
+ MockObserver observer(&helper); |
+ |
+ EXPECT_CALL(helper, StartFetching()).Times(4); |
+ EXPECT_CALL(observer, MergeSessionCompleted(_, no_error())).Times(4); |
+ |
+ helper.LogIn("acc1@gmail.com"); |
+ helper.LogIn("acc2@gmail.com"); |
+ |
+ SimulateMergeSessionSuccess(&helper, "token1"); |
+ |
+ helper.LogIn("acc3@gmail.com"); |
+ |
+ SimulateMergeSessionSuccess(&helper, "token2"); |
+ SimulateMergeSessionSuccess(&helper, "token3"); |
+ |
+ helper.LogIn("acc4@gmail.com"); |
+ |
+ SimulateMergeSessionSuccess(&helper, "token4"); |
} |