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

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

Issue 2526973002: Added retry policy (Closed)
Patch Set: Further revisions Created 3 years, 10 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
6 #include "base/bind.h"
7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/test/scoped_mock_time_message_loop_task_runner.h"
10 #include "base/threading/thread_task_runner_handle.h"
11 #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper. h"
12 #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_ mock.h"
13 #include "chrome/browser/chromeos/login/enrollment/mock_enrollment_screen.h"
14 #include "chrome/browser/chromeos/login/screens/mock_base_screen_delegate.h"
15 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
16 #include "chrome/browser/chromeos/policy/enrollment_config.h"
17 #include "chrome/test/base/testing_browser_process.h"
xiyuan 2017/02/06 23:46:05 This can also be removed now.
kumarniranjan 2017/02/07 21:26:00 I can't remove it because of TestingBrowserProcess
xiyuan 2017/02/07 21:29:10 Acknowledged.
18 #include "chromeos/chromeos_switches.h"
19 #include "chromeos/dbus/dbus_thread_manager.h"
20 #include "components/pairing/fake_controller_pairing_controller.h"
21 #include "testing/gtest/include/gtest/gtest.h"
22
23 using testing::AnyNumber;
24 using testing::Invoke;
25
26 namespace chromeos {
27
28 class EnrollmentScreenUnitTest : public testing::Test {
29 public:
30 EnrollmentScreenUnitTest() : fake_controller_("") {
31 enrollment_config_.mode = policy::EnrollmentConfig::MODE_ATTESTATION_FORCED;
32 enrollment_config_.auth_mechanism =
33 policy::EnrollmentConfig::AUTH_MECHANISM_ATTESTATION;
34 }
35
36 // Closure passed to EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock
37 // which creates the EnterpriseEnrollmentHelperMock object that will
38 // eventually be tied to the EnrollmentScreen. It also sets up the
39 // appropriate expectations for testing with the Google Mock framework.
40 template <bool should_enroll>
41 static EnterpriseEnrollmentHelper* MockEnrollmentHelperCreator(
42 EnterpriseEnrollmentHelper::EnrollmentStatusConsumer* status_consumer,
43 const policy::EnrollmentConfig& enrollment_config,
44 const std::string& enrolling_user_domain) {
45 EnterpriseEnrollmentHelperMock* mock =
46 new EnterpriseEnrollmentHelperMock(status_consumer);
47 if (should_enroll) {
48 EXPECT_CALL(*mock, EnrollUsingAttestation())
49 .Times(AnyNumber())
50 .WillRepeatedly(Invoke(
51 mock,
52 &EnterpriseEnrollmentHelperMock::SimulateEnrollmentSuccess));
53 } else {
54 EXPECT_CALL(*mock, EnrollUsingAttestation())
55 .Times(AnyNumber())
56 .WillRepeatedly(Invoke(
57 mock,
58 &EnterpriseEnrollmentHelperMock::SimulateEnrollmentFailure));
59 }
60 return mock;
61 }
62
63 // Creates the EnrollmentScreen and sets required parameters.
64 void SetUpEnrollmentScreen() {
65 enrollment_screen_.reset(
66 new EnrollmentScreen(&mock_delegate_, &mock_actor_));
67 enrollment_screen_->SetParameters(enrollment_config_, &fake_controller_);
68 }
69
70 // Fast forwards time by the specified amount.
71 void FastForwardTime(base::TimeDelta time) {
72 runner_.task_runner()->FastForwardBy(time);
73 }
74
75 // testing::Test:
76 void SetUp() override {
77 // Initialize the thread manager.
78 DBusThreadManager::Initialize();
79
80 // Configure the browser to use Hands-Off Enrollment.
81 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
82 switches::kEnterpriseEnableZeroTouchEnrollment, "hands-off");
83 }
84
85 void TearDown() override { DBusThreadManager::Shutdown(); }
86
87 protected:
88 // A pointer to the EnrollmentScreen.
89 std::unique_ptr<EnrollmentScreen> enrollment_screen_;
90
91 private:
92 // Replace main thread's task runner with a mock for duration of test.
93 base::MessageLoop loop_;
94 base::ScopedMockTimeMessageLoopTaskRunner runner_;
95
96 // Objects required by the EnrollmentScreen that can be re-used.
97 policy::EnrollmentConfig enrollment_config_;
98 pairing_chromeos::FakeControllerPairingController fake_controller_;
99 MockBaseScreenDelegate mock_delegate_;
100 MockEnrollmentScreenActor mock_actor_;
101
102 DISALLOW_COPY_AND_ASSIGN(EnrollmentScreenUnitTest);
103 };
104
105 TEST_F(EnrollmentScreenUnitTest, Retries) {
106 // Define behavior of EnterpriseEnrollmentHelperMock to always fail
107 // enrollment.
108 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
109 &EnrollmentScreenUnitTest::MockEnrollmentHelperCreator<false>);
110
111 SetUpEnrollmentScreen();
112
113 // Remove jitter to enable deterministic testing.
114 enrollment_screen_->retry_policy_.jitter_factor = 0;
115
116 // Start zero-touch enrollment.
117 enrollment_screen_->Show();
118
119 // Fast forward time by 1 minute.
120 FastForwardTime(base::TimeDelta::FromMinutes(1));
121
122 // Check that we have retried 4 times.
123 EXPECT_EQ(enrollment_screen_->num_retries_, 4);
124
125 // Required for proper destruction of EnrollmentScreen.
126 TestingBrowserProcess::GetGlobal()->SetShuttingDown(true);
xiyuan 2017/02/07 21:29:10 Move to EnrollmentScreenUnitTest::TearDown since a
127 }
128
129 TEST_F(EnrollmentScreenUnitTest, DoesNotRetryOnTopOfUser) {
130 // Define behavior of EnterpriseEnrollmentHelperMock to always fail
131 // enrollment.
132 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
133 &EnrollmentScreenUnitTest::MockEnrollmentHelperCreator<false>);
134
135 SetUpEnrollmentScreen();
136
137 // Remove jitter to enable deterministic testing.
138 enrollment_screen_->retry_policy_.jitter_factor = 0;
139
140 // Start zero-touch enrollment.
141 enrollment_screen_->Show();
142
143 // Schedule user retry button click after 30 sec.
144 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
145 FROM_HERE, base::Bind(&EnrollmentScreen::OnRetry,
146 enrollment_screen_->weak_ptr_factory_.GetWeakPtr()),
147 base::TimeDelta::FromSeconds(30));
148
149 // Fast forward time by 1 minute.
150 FastForwardTime(base::TimeDelta::FromMinutes(1));
151
152 // Check that the number of retries is still 4.
153 EXPECT_EQ(enrollment_screen_->num_retries_, 4);
154
155 // Required for proper destruction of EnrollmentScreen.
156 TestingBrowserProcess::GetGlobal()->SetShuttingDown(true);
157 }
158
159 TEST_F(EnrollmentScreenUnitTest, DoesNotRetryAfterSuccess) {
160 // Define behavior of EnterpriseEnrollmentHelperMock to successfully enroll.
161 EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
162 &EnrollmentScreenUnitTest::MockEnrollmentHelperCreator<true>);
163
164 SetUpEnrollmentScreen();
165
166 // Start zero-touch enrollment.
167 enrollment_screen_->Show();
168
169 // Fast forward time by 1 minute.
170 FastForwardTime(base::TimeDelta::FromMinutes(1));
171
172 // Check that we do not retry.
173 EXPECT_EQ(enrollment_screen_->num_retries_, 0);
174
175 // Required for proper destruction of EnrollmentScreen.
176 TestingBrowserProcess::GetGlobal()->SetShuttingDown(true);
177 }
178 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698