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

Side by Side Diff: chrome/browser/chromeos/login/enrollment/enrollment_screen_unittest.cc

Issue 2977033002: Mixed Licenses Enrollment (Closed)
Patch Set: Address emaxx's comments Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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 "chrome/browser/chromeos/login/enrollment/enrollment_screen.h" 5 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/test/scoped_mock_time_message_loop_task_runner.h" 10 #include "base/test/scoped_mock_time_message_loop_task_runner.h"
(...skipping 11 matching lines...) Expand all
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 using testing::_; 24 using testing::_;
25 using testing::AnyNumber; 25 using testing::AnyNumber;
26 using testing::Invoke; 26 using testing::Invoke;
27 27
28 namespace chromeos { 28 namespace chromeos {
29 29
30 class EnrollmentScreenUnitTest : public testing::Test { 30 class EnrollmentScreenUnitTest : public testing::Test {
31 public: 31 public:
32 EnrollmentScreenUnitTest() : fake_controller_("") { 32 EnrollmentScreenUnitTest() : fake_controller_("") {}
33 enrollment_config_.mode = policy::EnrollmentConfig::MODE_ATTESTATION_FORCED; 33
34 enrollment_config_.auth_mechanism = 34 // Creates the EnrollmentScreen and sets required parameters.
35 policy::EnrollmentConfig::AUTH_MECHANISM_ATTESTATION; 35 virtual void SetUpEnrollmentScreen() {
36 enrollment_screen_.reset(
37 new EnrollmentScreen(&mock_delegate_, &mock_view_));
38 enrollment_screen_->SetParameters(enrollment_config_, &fake_controller_);
36 } 39 }
37 40
41 // Fast forwards time by the specified amount.
42 void FastForwardTime(base::TimeDelta time) {
43 runner_.task_runner()->FastForwardBy(time);
44 }
45
46 MockBaseScreenDelegate* GetBaseScreenDelegate() { return &mock_delegate_; }
47 MockEnrollmentScreenView* GetMockScreenView() { return &mock_view_; }
48
49 // testing::Test:
50 void SetUp() override {
51 // Initialize the thread manager.
52 DBusThreadManager::Initialize();
53 }
54
55 void TearDown() override {
56 TestingBrowserProcess::GetGlobal()->SetShuttingDown(true);
57 DBusThreadManager::Shutdown();
58 }
59
60 protected:
61 // A pointer to the EnrollmentScreen.
achuithb 2017/08/03 20:53:51 This comment adds no value
62 std::unique_ptr<EnrollmentScreen> enrollment_screen_;
63
64 policy::EnrollmentConfig enrollment_config_;
65
66 private:
67 // Replace main thread's task runner with a mock for duration of test.
68 base::MessageLoop loop_;
69 base::ScopedMockTimeMessageLoopTaskRunner runner_;
70
71 // Objects required by the EnrollmentScreen that can be re-used.
72 pairing_chromeos::FakeControllerPairingController fake_controller_;
73 MockBaseScreenDelegate mock_delegate_;
74 MockEnrollmentScreenView mock_view_;
75
76 DISALLOW_COPY_AND_ASSIGN(EnrollmentScreenUnitTest);
77 };
78
79 class ZeroTouchEnrollmentScreenUnitTest : public EnrollmentScreenUnitTest {
80 public:
81 ZeroTouchEnrollmentScreenUnitTest() {}
achuithb 2017/08/03 20:53:51 = default
82
38 // Closure passed to EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock 83 // Closure passed to EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock
39 // which creates the EnterpriseEnrollmentHelperMock object that will 84 // which creates the EnterpriseEnrollmentHelperMock object that will
40 // eventually be tied to the EnrollmentScreen. It also sets up the 85 // eventually be tied to the EnrollmentScreen. It also sets up the
41 // appropriate expectations for testing with the Google Mock framework. 86 // appropriate expectations for testing with the Google Mock framework.
42 // The template parameter should_enroll indicates whether or not 87 // The template parameter should_enroll indicates whether or not
43 // the EnterpriseEnrollmentHelper should be mocked to successfully enroll. 88 // the EnterpriseEnrollmentHelper should be mocked to successfully enroll.
44 template <bool should_enroll> 89 template <bool should_enroll>
45 static EnterpriseEnrollmentHelper* MockEnrollmentHelperCreator( 90 static EnterpriseEnrollmentHelper* MockEnrollmentHelperCreator(
46 EnterpriseEnrollmentHelper::EnrollmentStatusConsumer* status_consumer, 91 EnterpriseEnrollmentHelper::EnrollmentStatusConsumer* status_consumer,
47 const policy::EnrollmentConfig& enrollment_config, 92 const policy::EnrollmentConfig& enrollment_config,
(...skipping 19 matching lines...) Expand all
67 .Times(AnyNumber()) 112 .Times(AnyNumber())
68 .WillRepeatedly(Invoke([mock]() { 113 .WillRepeatedly(Invoke([mock]() {
69 mock->status_consumer()->OnEnrollmentError( 114 mock->status_consumer()->OnEnrollmentError(
70 policy::EnrollmentStatus::ForStatus( 115 policy::EnrollmentStatus::ForStatus(
71 policy::EnrollmentStatus::REGISTRATION_FAILED)); 116 policy::EnrollmentStatus::REGISTRATION_FAILED));
72 })); 117 }));
73 } 118 }
74 return mock; 119 return mock;
75 } 120 }
76 121
77 // Creates the EnrollmentScreen and sets required parameters. 122 void SetUpEnrollmentScreen() override {
78 void SetUpEnrollmentScreen() { 123 enrollment_config_.mode = policy::EnrollmentConfig::MODE_ATTESTATION_FORCED;
79 enrollment_screen_.reset( 124 enrollment_config_.auth_mechanism =
80 new EnrollmentScreen(&mock_delegate_, &mock_view_)); 125 policy::EnrollmentConfig::AUTH_MECHANISM_ATTESTATION;
81 enrollment_screen_->SetParameters(enrollment_config_, &fake_controller_); 126 EnrollmentScreenUnitTest::SetUpEnrollmentScreen();
82 } 127 }
83 128
84 // Fast forwards time by the specified amount.
85 void FastForwardTime(base::TimeDelta time) {
86 runner_.task_runner()->FastForwardBy(time);
87 }
88
89 MockBaseScreenDelegate* GetBaseScreenDelegate() { return &mock_delegate_; }
90
91 // testing::Test: 129 // testing::Test:
92 void SetUp() override { 130 void SetUp() override {
93 // Initialize the thread manager. 131 EnrollmentScreenUnitTest::SetUp();
94 DBusThreadManager::Initialize();
95 132
96 // Configure the browser to use Hands-Off Enrollment. 133 // Configure the browser to use Hands-Off Enrollment.
97 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 134 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
98 switches::kEnterpriseEnableZeroTouchEnrollment, "hands-off"); 135 switches::kEnterpriseEnableZeroTouchEnrollment, "hands-off");
99 } 136 }
100 137
101 void TearDown() override {
102 TestingBrowserProcess::GetGlobal()->SetShuttingDown(true);
103 DBusThreadManager::Shutdown();
104 }
105
106 protected:
107 // A pointer to the EnrollmentScreen.
108 std::unique_ptr<EnrollmentScreen> enrollment_screen_;
109
110 private: 138 private:
111 // Replace main thread's task runner with a mock for duration of test. 139 DISALLOW_COPY_AND_ASSIGN(ZeroTouchEnrollmentScreenUnitTest);
112 base::MessageLoop loop_;
113 base::ScopedMockTimeMessageLoopTaskRunner runner_;
114
115 // Objects required by the EnrollmentScreen that can be re-used.
116 policy::EnrollmentConfig enrollment_config_;
117 pairing_chromeos::FakeControllerPairingController fake_controller_;
118 MockBaseScreenDelegate mock_delegate_;
119 MockEnrollmentScreenView mock_view_;
120
121 DISALLOW_COPY_AND_ASSIGN(EnrollmentScreenUnitTest);
122 }; 140 };
123 141
124 TEST_F(EnrollmentScreenUnitTest, Retries) { 142 TEST_F(ZeroTouchEnrollmentScreenUnitTest, Retries) {
125 // Define behavior of EnterpriseEnrollmentHelperMock to always fail 143 // Define behavior of EnterpriseEnrollmentHelperMock to always fail
126 // enrollment. 144 // enrollment.
127 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( 145 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
128 &EnrollmentScreenUnitTest::MockEnrollmentHelperCreator<false>); 146 &ZeroTouchEnrollmentScreenUnitTest::MockEnrollmentHelperCreator<false>);
129 147
130 SetUpEnrollmentScreen(); 148 SetUpEnrollmentScreen();
131 149
132 // Remove jitter to enable deterministic testing. 150 // Remove jitter to enable deterministic testing.
133 enrollment_screen_->retry_policy_.jitter_factor = 0; 151 enrollment_screen_->retry_policy_.jitter_factor = 0;
134 152
135 // Start zero-touch enrollment. 153 // Start zero-touch enrollment.
136 enrollment_screen_->Show(); 154 enrollment_screen_->Show();
137 155
138 // Fast forward time by 1 minute. 156 // Fast forward time by 1 minute.
139 FastForwardTime(base::TimeDelta::FromMinutes(1)); 157 FastForwardTime(base::TimeDelta::FromMinutes(1));
140 158
141 // Check that we have retried 4 times. 159 // Check that we have retried 4 times.
142 EXPECT_EQ(enrollment_screen_->num_retries_, 4); 160 EXPECT_EQ(enrollment_screen_->num_retries_, 4);
143 } 161 }
144 162
145 TEST_F(EnrollmentScreenUnitTest, DoesNotRetryOnTopOfUser) { 163 TEST_F(ZeroTouchEnrollmentScreenUnitTest, DoesNotRetryOnTopOfUser) {
146 // Define behavior of EnterpriseEnrollmentHelperMock to always fail 164 // Define behavior of EnterpriseEnrollmentHelperMock to always fail
147 // enrollment. 165 // enrollment.
148 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( 166 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
149 &EnrollmentScreenUnitTest::MockEnrollmentHelperCreator<false>); 167 &ZeroTouchEnrollmentScreenUnitTest::MockEnrollmentHelperCreator<false>);
150 168
151 SetUpEnrollmentScreen(); 169 SetUpEnrollmentScreen();
152 170
153 // Remove jitter to enable deterministic testing. 171 // Remove jitter to enable deterministic testing.
154 enrollment_screen_->retry_policy_.jitter_factor = 0; 172 enrollment_screen_->retry_policy_.jitter_factor = 0;
155 173
156 // Start zero-touch enrollment. 174 // Start zero-touch enrollment.
157 enrollment_screen_->Show(); 175 enrollment_screen_->Show();
158 176
159 // Schedule user retry button click after 30 sec. 177 // Schedule user retry button click after 30 sec.
160 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 178 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
161 FROM_HERE, 179 FROM_HERE,
162 base::BindOnce(&EnrollmentScreen::OnRetry, 180 base::BindOnce(&EnrollmentScreen::OnRetry,
163 enrollment_screen_->weak_ptr_factory_.GetWeakPtr()), 181 enrollment_screen_->weak_ptr_factory_.GetWeakPtr()),
164 base::TimeDelta::FromSeconds(30)); 182 base::TimeDelta::FromSeconds(30));
165 183
166 // Fast forward time by 1 minute. 184 // Fast forward time by 1 minute.
167 FastForwardTime(base::TimeDelta::FromMinutes(1)); 185 FastForwardTime(base::TimeDelta::FromMinutes(1));
168 186
169 // Check that the number of retries is still 4. 187 // Check that the number of retries is still 4.
170 EXPECT_EQ(enrollment_screen_->num_retries_, 4); 188 EXPECT_EQ(enrollment_screen_->num_retries_, 4);
171 } 189 }
172 190
173 TEST_F(EnrollmentScreenUnitTest, DoesNotRetryAfterSuccess) { 191 TEST_F(ZeroTouchEnrollmentScreenUnitTest, DoesNotRetryAfterSuccess) {
174 // Define behavior of EnterpriseEnrollmentHelperMock to successfully enroll. 192 // Define behavior of EnterpriseEnrollmentHelperMock to successfully enroll.
175 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( 193 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
176 &EnrollmentScreenUnitTest::MockEnrollmentHelperCreator<true>); 194 &ZeroTouchEnrollmentScreenUnitTest::MockEnrollmentHelperCreator<true>);
177 195
178 SetUpEnrollmentScreen(); 196 SetUpEnrollmentScreen();
179 197
180 // Start zero-touch enrollment. 198 // Start zero-touch enrollment.
181 enrollment_screen_->Show(); 199 enrollment_screen_->Show();
182 200
183 // Fast forward time by 1 minute. 201 // Fast forward time by 1 minute.
184 FastForwardTime(base::TimeDelta::FromMinutes(1)); 202 FastForwardTime(base::TimeDelta::FromMinutes(1));
185 203
186 // Check that we do not retry. 204 // Check that we do not retry.
187 EXPECT_EQ(enrollment_screen_->num_retries_, 0); 205 EXPECT_EQ(enrollment_screen_->num_retries_, 0);
188 } 206 }
189 207
190 TEST_F(EnrollmentScreenUnitTest, FinishesEnrollmentFlow) { 208 TEST_F(ZeroTouchEnrollmentScreenUnitTest, FinishesEnrollmentFlow) {
191 // Define behavior of EnterpriseEnrollmentHelperMock to successfully enroll. 209 // Define behavior of EnterpriseEnrollmentHelperMock to successfully enroll.
192 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( 210 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
193 &EnrollmentScreenUnitTest::MockEnrollmentHelperCreator<true>); 211 &ZeroTouchEnrollmentScreenUnitTest::MockEnrollmentHelperCreator<true>);
194 212
195 SetUpEnrollmentScreen(); 213 SetUpEnrollmentScreen();
196 214
197 // Set up expectation for BaseScreenDelegate::OnExit to be called 215 // Set up expectation for BaseScreenDelegate::OnExit to be called
198 // with BaseScreenDelegate::ENTERPRISE_ENROLLMENT_COMPLETED 216 // with BaseScreenDelegate::ENTERPRISE_ENROLLMENT_COMPLETED
199 // This is how we check that the code finishes and cleanly exits 217 // This is how we check that the code finishes and cleanly exits
200 // the enterprise enrollment flow. 218 // the enterprise enrollment flow.
201 EXPECT_CALL(*GetBaseScreenDelegate(), 219 EXPECT_CALL(*GetBaseScreenDelegate(),
202 OnExit(_, ScreenExitCode::ENTERPRISE_ENROLLMENT_COMPLETED, _)) 220 OnExit(_, ScreenExitCode::ENTERPRISE_ENROLLMENT_COMPLETED, _))
203 .Times(1); 221 .Times(1);
204 222
205 // Start zero-touch enrollment. 223 // Start zero-touch enrollment.
206 enrollment_screen_->Show(); 224 enrollment_screen_->Show();
207 } 225 }
226
227 class MultiLicenseEnrollmentScreenUnitTest : public EnrollmentScreenUnitTest {
228 public:
229 MultiLicenseEnrollmentScreenUnitTest() {}
achuithb 2017/08/03 20:53:51 = default
230
231 void SetUpEnrollmentScreen() override {
232 enrollment_config_.mode = policy::EnrollmentConfig::MODE_MANUAL;
233 enrollment_config_.auth_mechanism =
234 policy::EnrollmentConfig::AUTH_MECHANISM_INTERACTIVE;
235 EnrollmentScreenUnitTest::SetUpEnrollmentScreen();
236 }
237
238 static EnterpriseEnrollmentHelper* MockEnrollmentHelperCreator(
239 EnterpriseEnrollmentHelper::EnrollmentStatusConsumer* status_consumer,
240 const policy::EnrollmentConfig& enrollment_config,
241 const std::string& enrolling_user_domain) {
242 EnterpriseEnrollmentHelperMock* mock =
243 new EnterpriseEnrollmentHelperMock(status_consumer);
244 EXPECT_CALL(*mock, EnrollUsingAuthCode(_, _))
245 .Times(AnyNumber())
246 .WillRepeatedly(Invoke([mock](const std::string&, bool) {
247 EnrollmentLicenseMap licenses;
248 static_cast<EnrollmentScreen*>(mock->status_consumer())
249 ->OnMultipleLicensesAvailable(licenses);
250 }));
251 EXPECT_CALL(*mock, UseLicenseType(::policy::LicenseType::ANNUAL)).Times(1);
252
253 return mock;
254 }
255
256 private:
257 DISALLOW_COPY_AND_ASSIGN(MultiLicenseEnrollmentScreenUnitTest);
258 };
259
260 TEST_F(MultiLicenseEnrollmentScreenUnitTest, TestLicenseSelection) {
achuithb 2017/08/03 20:53:51 Add test comment above this line describing this t
261 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
262 &MultiLicenseEnrollmentScreenUnitTest::MockEnrollmentHelperCreator);
263
264 EXPECT_CALL(*GetMockScreenView(), SetParameters(_, _)).Times(1);
265
266 SetUpEnrollmentScreen();
267
268 EXPECT_CALL(*GetMockScreenView(), Show()).Times(1);
269 EXPECT_CALL(*GetMockScreenView(), ShowSigninScreen()).Times(1);
270
271 // Start enrollment.
272 enrollment_screen_->Show();
273
274 // Once at login, once after picking license type.
275
276 EXPECT_CALL(*GetMockScreenView(), ShowEnrollmentSpinnerScreen()).Times(2);
277 EXPECT_CALL(*GetMockScreenView(), ShowLicenseTypeSelectionScreen(_)).Times(1);
278
279 enrollment_screen_->OnLoginDone("user@domain.com", "oauth");
280 enrollment_screen_->OnLicenseTypeSelected("annual");
281 }
282
208 } // namespace chromeos 283 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698