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

Side by Side Diff: chrome/browser/signin/google_auto_login_helper_unittest.cc

Issue 110373007: Delay loading the NTP after sign in until MergeSession has been performed in (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix typo in chromeos Created 6 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/stringprintf.h"
10 #include "chrome/browser/signin/google_auto_login_helper.h" 11 #include "chrome/browser/signin/google_auto_login_helper.h"
11 #include "chrome/test/base/testing_profile.h" 12 #include "chrome/test/base/testing_profile.h"
13 #include "content/public/test/test_browser_thread_bundle.h"
12 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
14 16
15 namespace { 17 namespace {
16 18
17 class MockUbertokenFetcher : public UbertokenFetcher { 19 class MockObserver : public GoogleAutoLoginHelper::Observer {
18 public: 20 public:
19 MockUbertokenFetcher(Profile* profile, UbertokenConsumer* consumer) : 21 explicit MockObserver(GoogleAutoLoginHelper* helper) : helper_(helper) {
20 UbertokenFetcher(profile, consumer), account_id("") {} 22 helper_->AddObserver(this);
21
22 void completePendingRequest() {
23 OnUberAuthTokenSuccess("mock token: " + account_id);
24 } 23 }
25 24
26 virtual void StartFetchingToken(const std::string& id) OVERRIDE { 25 ~MockObserver() {
27 account_id = id; 26 helper_->RemoveObserver(this);
28 } 27 }
29 28
30 std::string account_id; 29 MOCK_METHOD2(MergeSessionCompleted,
30 void(const std::string&,
31 const GoogleServiceAuthError& ));
32 private:
33 GoogleAutoLoginHelper* helper_;
34
35 DISALLOW_COPY_AND_ASSIGN(MockObserver);
31 }; 36 };
32 37
33 // Counts number of InstrumentedGoogleAutoLoginHelper created. 38 // Counts number of InstrumentedGoogleAutoLoginHelper created.
34 // We can EXPECT_* to be zero at the end of our unit tests 39 // We can EXPECT_* to be zero at the end of our unit tests
35 // to make sure everything is properly deleted. 40 // to make sure everything is properly deleted.
36 41
37 int total = 0; 42 int total = 0;
38 43
39 class InstrumentedGoogleAutoLoginHelper : public GoogleAutoLoginHelper { 44 class InstrumentedGoogleAutoLoginHelper : public GoogleAutoLoginHelper {
40 public: 45 public:
41 std::vector<MockUbertokenFetcher*>* mock_uber_fetchers_; 46 explicit InstrumentedGoogleAutoLoginHelper(Profile* profile) :
42 TestingProfile profile_; 47 GoogleAutoLoginHelper(profile, NULL) {
43
44 InstrumentedGoogleAutoLoginHelper(
45 std::vector<MockUbertokenFetcher*>* fetchers) :
46 GoogleAutoLoginHelper(0), mock_uber_fetchers_(fetchers) {
47 total++; 48 total++;
48 } 49 }
49 50
50 virtual ~InstrumentedGoogleAutoLoginHelper() { 51 virtual ~InstrumentedGoogleAutoLoginHelper() {
51 total--; 52 total--;
52 } 53 }
53 54
54 virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE { 55 MOCK_METHOD0(StartFetching, void());
55 OnMergeSessionSuccess(token);
56 }
57 56
58 virtual UbertokenFetcher* CreateNewUbertokenFetcher() OVERRIDE { 57 private:
59 MockUbertokenFetcher* m = new MockUbertokenFetcher(&profile_, this); 58 DISALLOW_COPY_AND_ASSIGN(InstrumentedGoogleAutoLoginHelper);
60 mock_uber_fetchers_->push_back(m);
61 return m;
62 }
63
64 void completePendingFetchers() {
65 while (!mock_uber_fetchers_->empty()) {
66 MockUbertokenFetcher* fetcher = mock_uber_fetchers_->back();
67 mock_uber_fetchers_->pop_back();
68 fetcher->completePendingRequest();
69 }
70 }
71
72 MOCK_METHOD1(OnMergeSessionSuccess, void(const std::string& uber_token));
73
74 void OnMergeSessionSuccessConcrete(const std::string& uber_token) {
75 GoogleAutoLoginHelper::OnMergeSessionSuccess(uber_token);
76 }
77 }; 59 };
78 60
79 class GoogleAutoLoginHelperTest : public testing::Test { 61 class GoogleAutoLoginHelperTest : public testing::Test {
80 public: 62 public:
81 std::vector<MockUbertokenFetcher*> mock_uber_fetchers_; 63 GoogleAutoLoginHelperTest()
82 base::MessageLoop message_loop_; 64 : no_error_(GoogleServiceAuthError::NONE),
65 error_(GoogleServiceAuthError::SERVICE_ERROR) {}
66
67 TestingProfile* profile() { return &profile_; }
68
69 void SimulateUbertokenFailure(UbertokenConsumer* consumer,
70 const GoogleServiceAuthError& error) {
71 consumer->OnUbertokenFailure(error);
72 }
73
74 void SimulateMergeSessionSuccess(GaiaAuthConsumer* consumer,
75 const std::string& data) {
76 consumer->OnMergeSessionSuccess(data);
77 }
78
79 void SimulateMergeSessionFailure(GaiaAuthConsumer* consumer,
80 const GoogleServiceAuthError& error) {
81 consumer->OnMergeSessionFailure(error);
82 }
83
84 const GoogleServiceAuthError& no_error() { return no_error_; }
85 const GoogleServiceAuthError& error() { return error_; }
86
87 private:
88 content::TestBrowserThreadBundle thread_bundle_;
89 TestingProfile profile_;
90 GoogleServiceAuthError no_error_;
91 GoogleServiceAuthError error_;
83 }; 92 };
84 93
85 } // namespace 94 } // namespace
86 95
87 using ::testing::Invoke;
88 using ::testing::_; 96 using ::testing::_;
89 97
90 TEST_F(GoogleAutoLoginHelperTest, AllRequestsInOneGo) { 98 TEST_F(GoogleAutoLoginHelperTest, Success) {
91 total = 0; 99 InstrumentedGoogleAutoLoginHelper helper(profile());
100 MockObserver observer(&helper);
92 101
93 InstrumentedGoogleAutoLoginHelper* helper = 102 EXPECT_CALL(helper, StartFetching());
94 new InstrumentedGoogleAutoLoginHelper(&mock_uber_fetchers_); 103 EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", no_error()));
95 EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc1@gmail.com"));
96 EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc2@gmail.com"));
97 EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc3@gmail.com"));
98 EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc4@gmail.com"));
99 EXPECT_CALL(*helper, OnMergeSessionSuccess("mock token: acc5@gmail.com"));
100 104
101 // Don't completely mock out OnMergeSessionSuccess, let GoogleAutoLoginHelper 105 helper.LogIn("acc1@gmail.com");
102 // actually call OnMergeSessionSuccess to clean up it's work queue because 106 SimulateMergeSessionSuccess(&helper, "token");
103 // it'll delete itself once the work queue becomes empty. 107 }
104 ON_CALL(*helper, OnMergeSessionSuccess(_)).WillByDefault(Invoke(helper,
105 &InstrumentedGoogleAutoLoginHelper::OnMergeSessionSuccessConcrete));
106 helper->LogIn("acc1@gmail.com");
107 helper->LogIn("acc2@gmail.com");
108 helper->LogIn("acc3@gmail.com");
109 helper->LogIn("acc4@gmail.com");
110 helper->LogIn("acc5@gmail.com");
111 helper->completePendingFetchers();
112 108
113 // Make sure GoogleAutoLoginHelper cleans itself up after everything is done. 109 TEST_F(GoogleAutoLoginHelperTest, FailedMergeSession) {
114 message_loop_.RunUntilIdle(); 110 InstrumentedGoogleAutoLoginHelper helper(profile());
115 EXPECT_EQ(0, total); 111 MockObserver observer(&helper);
112
113 EXPECT_CALL(helper, StartFetching());
114 EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error()));
115
116 helper.LogIn("acc1@gmail.com");
117 SimulateMergeSessionFailure(&helper, error());
116 } 118 }
119
120 TEST_F(GoogleAutoLoginHelperTest, FailedUbertoken) {
121 InstrumentedGoogleAutoLoginHelper helper(profile());
122 MockObserver observer(&helper);
123
124 EXPECT_CALL(helper, StartFetching());
125 EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error()));
126
127 helper.LogIn("acc1@gmail.com");
128 SimulateUbertokenFailure(&helper, error());
129 }
130
131 TEST_F(GoogleAutoLoginHelperTest, ContinueAfterSuccess) {
132 InstrumentedGoogleAutoLoginHelper helper(profile());
133 MockObserver observer(&helper);
134
135 EXPECT_CALL(helper, StartFetching()).Times(2);
136 EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", no_error()));
137 EXPECT_CALL(observer, MergeSessionCompleted("acc2@gmail.com", no_error()));
138
139 helper.LogIn("acc1@gmail.com");
140 helper.LogIn("acc2@gmail.com");
141 SimulateMergeSessionSuccess(&helper, "token1");
142 SimulateMergeSessionSuccess(&helper, "token2");
143 }
144
145 TEST_F(GoogleAutoLoginHelperTest, ContinueAfterFailure1) {
146 InstrumentedGoogleAutoLoginHelper helper(profile());
147 MockObserver observer(&helper);
148
149 EXPECT_CALL(helper, StartFetching()).Times(2);
150 EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error()));
151 EXPECT_CALL(observer, MergeSessionCompleted("acc2@gmail.com", no_error()));
152
153 helper.LogIn("acc1@gmail.com");
154 helper.LogIn("acc2@gmail.com");
155 SimulateMergeSessionFailure(&helper, error());
156 SimulateMergeSessionSuccess(&helper, "token2");
157 }
158
159 TEST_F(GoogleAutoLoginHelperTest, ContinueAfterFailure2) {
160 InstrumentedGoogleAutoLoginHelper helper(profile());
161 MockObserver observer(&helper);
162
163 EXPECT_CALL(helper, StartFetching()).Times(2);
164 EXPECT_CALL(observer, MergeSessionCompleted("acc1@gmail.com", error()));
165 EXPECT_CALL(observer, MergeSessionCompleted("acc2@gmail.com", no_error()));
166
167 helper.LogIn("acc1@gmail.com");
168 helper.LogIn("acc2@gmail.com");
169 SimulateUbertokenFailure(&helper, error());
170 SimulateMergeSessionSuccess(&helper, "token2");
171 }
172
173 TEST_F(GoogleAutoLoginHelperTest, AllRequestsInMultipleGoes) {
174 InstrumentedGoogleAutoLoginHelper helper(profile());
175 MockObserver observer(&helper);
176
177 EXPECT_CALL(helper, StartFetching()).Times(4);
178 EXPECT_CALL(observer, MergeSessionCompleted(_, no_error())).Times(4);
179
180 helper.LogIn("acc1@gmail.com");
181 helper.LogIn("acc2@gmail.com");
182
183 SimulateMergeSessionSuccess(&helper, "token1");
184
185 helper.LogIn("acc3@gmail.com");
186
187 SimulateMergeSessionSuccess(&helper, "token2");
188 SimulateMergeSessionSuccess(&helper, "token3");
189
190 helper.LogIn("acc4@gmail.com");
191
192 SimulateMergeSessionSuccess(&helper, "token4");
193 }
OLDNEW
« no previous file with comments | « chrome/browser/signin/google_auto_login_helper.cc ('k') | chrome/browser/signin/signin_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698