1 // Copyright (c) 2013 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.
5 #include "chrome/browser/chromeos/system/automatic_reboot_manager.h"
10 #include "ash/shell.h"
11 #include "ash/test/test_shell_delegate.h"
12 #include "base/compiler_specific.h"
13 #include "base/files/file_path.h"
14 #include "base/files/file_util.h"
15 #include "base/files/scoped_temp_dir.h"
16 #include "base/memory/ref_counted.h"
17 #include "base/message_loop/message_loop.h"
18 #include "base/path_service.h"
19 #include "base/prefs/pref_registry_simple.h"
20 #include "base/prefs/testing_pref_service.h"
21 #include "base/run_loop.h"
22 #include "base/single_thread_task_runner.h"
23 #include "base/strings/string_number_conversions.h"
24 #include "base/test/simple_test_tick_clock.h"
25 #include "base/thread_task_runner_handle.h"
26 #include "base/threading/sequenced_worker_pool.h"
27 #include "base/time/tick_clock.h"
28 #include "base/values.h"
29 #include "chrome/browser/chrome_notification_types.h"
30 #include "chrome/browser/chromeos/login/users/mock_user_manager.h"
31 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
32 #include "chrome/common/pref_names.h"
33 #include "chrome/test/base/testing_browser_process.h"
34 #include "chromeos/chromeos_paths.h"
35 #include "chromeos/dbus/dbus_thread_manager.h"
36 #include "chromeos/dbus/fake_power_manager_client.h"
37 #include "chromeos/dbus/fake_update_engine_client.h"
38 #include "content/public/browser/browser_thread.h"
39 #include "content/public/browser/notification_details.h"
40 #include "content/public/browser/notification_service.h"
41 #include "content/public/browser/notification_source.h"
42 #include "content/public/test/test_browser_thread.h"
43 #include "testing/gmock/include/gmock/gmock.h"
44 #include "testing/gtest/include/gtest/gtest.h"
45 #include "ui/message_center/message_center.h"
47 using ::testing::ReturnPointee
;
54 // A SingleThreadTaskRunner that mocks the current time and allows it to be
55 // fast-forwarded. The current time in ticks is returned by Now(). The
56 // corresponding device uptime is written to |uptime_file_|, providing a mock
58 class MockTimeSingleThreadTaskRunner
: public base::SingleThreadTaskRunner
{
60 MockTimeSingleThreadTaskRunner();
62 // base::SingleThreadTaskRunner:
63 virtual bool RunsTasksOnCurrentThread() const override
;
64 virtual bool PostDelayedTask(const tracked_objects::Location
& from_here
,
65 const base::Closure
& task
,
66 base::TimeDelta delay
) override
;
67 virtual bool PostNonNestableDelayedTask(
68 const tracked_objects::Location
& from_here
,
69 const base::Closure
& task
,
70 base::TimeDelta delay
) override
;
72 void SetUptimeFile(const base::FilePath
& uptime_file
);
73 void SetUptime(const base::TimeDelta
& uptime
);
75 const base::TimeDelta
& Uptime() const;
76 const base::TimeTicks
& Now() const;
78 void FastForwardBy(const base::TimeDelta
& delta
);
79 void FastForwardUntilNoTasksRemain();
83 // Strict weak temporal ordering of tasks.
87 const std::pair
<base::TimeTicks
, base::Closure
>& first_task
,
88 const std::pair
<base::TimeTicks
, base::Closure
>& second_task
) const;
91 virtual ~MockTimeSingleThreadTaskRunner();
93 base::FilePath uptime_file_
;
94 base::TimeDelta uptime_
;
96 std::priority_queue
<std::pair
<base::TimeTicks
, base::Closure
>,
97 std::vector
<std::pair
<base::TimeTicks
, base::Closure
> >,
98 TemporalOrder
> tasks_
;
100 DISALLOW_COPY_AND_ASSIGN(MockTimeSingleThreadTaskRunner
);
103 class MockTimeTickClock
: public base::TickClock
{
105 explicit MockTimeTickClock(
106 scoped_refptr
<MockTimeSingleThreadTaskRunner
> task_runner
);
107 virtual ~MockTimeTickClock();
110 virtual base::TimeTicks
NowTicks() override
;
113 scoped_refptr
<MockTimeSingleThreadTaskRunner
> task_runner_
;
115 DISALLOW_COPY_AND_ASSIGN(MockTimeTickClock
);
120 class AutomaticRebootManagerBasicTest
: public testing::Test
{
122 typedef base::OneShotTimer
<AutomaticRebootManager
> Timer
;
124 AutomaticRebootManagerBasicTest();
125 virtual ~AutomaticRebootManagerBasicTest();
128 virtual void SetUp() override
;
129 virtual void TearDown() override
;
131 void SetUpdateRebootNeededUptime(const base::TimeDelta
& uptime
);
132 void SetRebootAfterUpdate(bool reboot_after_update
, bool expect_reboot
);
133 void SetUptimeLimit(const base::TimeDelta
& limit
, bool expect_reboot
);
134 void NotifyUpdateRebootNeeded();
135 void NotifyResumed(bool expect_reboot
);
136 void NotifyTerminating(bool expect_reboot
);
138 void FastForwardBy(const base::TimeDelta
& delta
, bool expect_reboot
);
139 void FastForwardUntilNoTasksRemain(bool expect_reboot
);
141 void CreateAutomaticRebootManager(bool expect_reboot
);
143 bool ReadUpdateRebootNeededUptimeFromFile(base::TimeDelta
* uptime
);
144 void VerifyLoginScreenIdleTimerIsStopped() const;
145 void VerifyNoGracePeriod() const;
146 void VerifyGracePeriod(const base::TimeDelta
& start_uptime
) const;
148 bool is_user_logged_in_
;
149 bool is_logged_in_as_kiosk_app_
;
151 // The uptime is read in the blocking thread pool and then processed on the
152 // UI thread. This causes the UI thread to start processing the uptime when it
153 // has increased by a small offset already. The offset is calculated and
154 // stored in |uptime_processing_delay_| so that tests can accurately determine
155 // the uptime seen by the UI thread.
156 base::TimeDelta uptime_processing_delay_
;
157 base::TimeDelta update_reboot_needed_uptime_
;
158 base::TimeDelta uptime_limit_
;
160 scoped_refptr
<MockTimeSingleThreadTaskRunner
> task_runner_
;
162 scoped_ptr
<AutomaticRebootManager
> automatic_reboot_manager_
;
165 FakePowerManagerClient
* power_manager_client_
; // Not owned.
166 FakeUpdateEngineClient
* update_engine_client_
; // Not owned.
168 // Sets the status of |update_engine_client_| to NEED_REBOOT for tests.
169 void SetUpdateStatusNeedReboot();
172 void VerifyTimerIsStopped(const Timer
* timer
) const;
173 void VerifyTimerIsRunning(const Timer
* timer
,
174 const base::TimeDelta
& delay
) const;
175 void VerifyLoginScreenIdleTimerIsRunning() const;
177 base::ScopedTempDir temp_dir_
;
178 base::FilePath update_reboot_needed_uptime_file_
;
180 bool reboot_after_update_
;
182 base::ThreadTaskRunnerHandle ui_thread_task_runner_handle_
;
184 TestingPrefServiceSimple local_state_
;
185 MockUserManager
* mock_user_manager_
; // Not owned.
186 ScopedUserManagerEnabler user_manager_enabler_
;
189 enum AutomaticRebootManagerTestScenario
{
190 AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN
,
191 AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION
,
192 AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION
,
195 // This class runs each test case three times:
196 // * once while the login screen is being shown
197 // * once while a kiosk app session is in progress
198 // * once while a non-kiosk-app session is in progress
199 class AutomaticRebootManagerTest
200 : public AutomaticRebootManagerBasicTest
,
201 public testing::WithParamInterface
<AutomaticRebootManagerTestScenario
> {
203 AutomaticRebootManagerTest();
204 virtual ~AutomaticRebootManagerTest();
207 void SaveUptimeToFile(const base::FilePath
& path
,
208 const base::TimeDelta
& uptime
) {
209 if (path
.empty() || uptime
== base::TimeDelta())
212 const std::string uptime_seconds
= base::DoubleToString(uptime
.InSecondsF());
213 ASSERT_EQ(static_cast<int>(uptime_seconds
.size()),
214 base::WriteFile(path
, uptime_seconds
.c_str(),
215 uptime_seconds
.size()));
218 MockTimeSingleThreadTaskRunner::MockTimeSingleThreadTaskRunner() {
221 bool MockTimeSingleThreadTaskRunner::RunsTasksOnCurrentThread() const {
225 bool MockTimeSingleThreadTaskRunner::PostDelayedTask(
226 const tracked_objects::Location
& from_here
,
227 const base::Closure
& task
,
228 base::TimeDelta delay
) {
229 tasks_
.push(std::pair
<base::TimeTicks
, base::Closure
>(now_
+ delay
, task
));
233 bool MockTimeSingleThreadTaskRunner::PostNonNestableDelayedTask(
234 const tracked_objects::Location
& from_here
,
235 const base::Closure
& task
,
236 base::TimeDelta delay
) {
241 void MockTimeSingleThreadTaskRunner::SetUptimeFile(
242 const base::FilePath
& uptime_file
) {
243 uptime_file_
= uptime_file
;
244 SaveUptimeToFile(uptime_file_
, uptime_
);
247 void MockTimeSingleThreadTaskRunner::SetUptime(const base::TimeDelta
& uptime
) {
249 SaveUptimeToFile(uptime_file_
, uptime_
);
252 const base::TimeDelta
& MockTimeSingleThreadTaskRunner::Uptime() const {
256 const base::TimeTicks
& MockTimeSingleThreadTaskRunner::Now() const {
260 void MockTimeSingleThreadTaskRunner::FastForwardBy(
261 const base::TimeDelta
& delta
) {
262 const base::TimeTicks latest
= now_
+ delta
;
263 base::SequencedWorkerPool
* blocking_pool
=
264 content::BrowserThread::GetBlockingPool();
265 blocking_pool
->FlushForTesting();
266 while (!tasks_
.empty() && tasks_
.top().first
<= latest
) {
267 uptime_
+= tasks_
.top().first
- now_
;
268 SaveUptimeToFile(uptime_file_
, uptime_
);
269 now_
= tasks_
.top().first
;
270 base::Closure task
= tasks_
.top().second
;
273 blocking_pool
->FlushForTesting();
275 uptime_
+= latest
- now_
;
276 SaveUptimeToFile(uptime_file_
, uptime_
);
280 void MockTimeSingleThreadTaskRunner::FastForwardUntilNoTasksRemain() {
281 base::SequencedWorkerPool
* blocking_pool
=
282 content::BrowserThread::GetBlockingPool();
283 blocking_pool
->FlushForTesting();
284 while (!tasks_
.empty()) {
285 uptime_
+= tasks_
.top().first
- now_
;
286 SaveUptimeToFile(uptime_file_
, uptime_
);
287 now_
= tasks_
.top().first
;
288 base::Closure task
= tasks_
.top().second
;
291 blocking_pool
->FlushForTesting();
295 void MockTimeSingleThreadTaskRunner::RunUntilIdle() {
296 base::SequencedWorkerPool
* blocking_pool
=
297 content::BrowserThread::GetBlockingPool();
298 blocking_pool
->FlushForTesting();
299 while (!tasks_
.empty() && tasks_
.top().first
<= now_
) {
300 base::Closure task
= tasks_
.top().second
;
303 blocking_pool
->FlushForTesting();
307 bool MockTimeSingleThreadTaskRunner::TemporalOrder::operator()(
308 const std::pair
<base::TimeTicks
, base::Closure
>& first_task
,
309 const std::pair
<base::TimeTicks
, base::Closure
>& second_task
) const {
310 return first_task
.first
> second_task
.first
;
313 MockTimeSingleThreadTaskRunner::~MockTimeSingleThreadTaskRunner() {
316 MockTimeTickClock::MockTimeTickClock(
317 scoped_refptr
<MockTimeSingleThreadTaskRunner
> task_runner
)
318 : task_runner_(task_runner
) {
321 MockTimeTickClock::~MockTimeTickClock() {
324 base::TimeTicks
MockTimeTickClock::NowTicks() {
325 return task_runner_
->Now();
328 AutomaticRebootManagerBasicTest::AutomaticRebootManagerBasicTest()
329 : is_user_logged_in_(false),
330 is_logged_in_as_kiosk_app_(false),
331 task_runner_(new MockTimeSingleThreadTaskRunner
),
332 power_manager_client_(NULL
),
333 update_engine_client_(NULL
),
334 reboot_after_update_(false),
335 ui_thread_task_runner_handle_(task_runner_
),
336 mock_user_manager_(new MockUserManager
),
337 user_manager_enabler_(mock_user_manager_
) {
340 AutomaticRebootManagerBasicTest::~AutomaticRebootManagerBasicTest() {
343 void AutomaticRebootManagerBasicTest::SetUp() {
344 ASSERT_TRUE(temp_dir_
.CreateUniqueTempDir());
345 const base::FilePath
& temp_dir
= temp_dir_
.path();
346 const base::FilePath uptime_file
= temp_dir
.Append("uptime");
347 task_runner_
->SetUptimeFile(uptime_file
);
348 ASSERT_FALSE(base::WriteFile(uptime_file
, NULL
, 0));
349 update_reboot_needed_uptime_file_
=
350 temp_dir
.Append("update_reboot_needed_uptime");
351 ASSERT_FALSE(base::WriteFile(update_reboot_needed_uptime_file_
, NULL
, 0));
352 ASSERT_TRUE(PathService::Override(chromeos::FILE_UPTIME
, uptime_file
));
353 ASSERT_TRUE(PathService::Override(chromeos::FILE_UPDATE_REBOOT_NEEDED_UPTIME
,
354 update_reboot_needed_uptime_file_
));
356 TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_
);
357 AutomaticRebootManager::RegisterPrefs(local_state_
.registry());
359 scoped_ptr
<DBusThreadManagerSetter
> dbus_setter
=
360 chromeos::DBusThreadManager::GetSetterForTesting();
361 power_manager_client_
= new FakePowerManagerClient
;
362 dbus_setter
->SetPowerManagerClient(
363 scoped_ptr
<PowerManagerClient
>(power_manager_client_
));
364 update_engine_client_
= new FakeUpdateEngineClient
;
365 dbus_setter
->SetUpdateEngineClient(
366 scoped_ptr
<UpdateEngineClient
>(update_engine_client_
));
368 EXPECT_CALL(*mock_user_manager_
, IsUserLoggedIn())
369 .WillRepeatedly(ReturnPointee(&is_user_logged_in_
));
370 EXPECT_CALL(*mock_user_manager_
, IsLoggedInAsKioskApp())
371 .WillRepeatedly(ReturnPointee(&is_logged_in_as_kiosk_app_
));
374 void AutomaticRebootManagerBasicTest::TearDown() {
375 // Let the AutomaticRebootManager, if any, unregister itself as an observer of
376 // several subsystems.
377 automatic_reboot_manager_
.reset();
378 task_runner_
->RunUntilIdle();
380 DBusThreadManager::Shutdown();
381 TestingBrowserProcess::GetGlobal()->SetLocalState(NULL
);
384 void AutomaticRebootManagerBasicTest::SetUpdateRebootNeededUptime(
385 const base::TimeDelta
& uptime
) {
386 update_reboot_needed_uptime_
= uptime
;
387 SaveUptimeToFile(update_reboot_needed_uptime_file_
, uptime
);
391 void AutomaticRebootManagerBasicTest::SetRebootAfterUpdate(
392 bool reboot_after_update
,
393 bool expect_reboot
) {
394 reboot_after_update_
= reboot_after_update
;
395 local_state_
.SetManagedPref(prefs::kRebootAfterUpdate
,
396 new base::FundamentalValue(reboot_after_update
));
397 task_runner_
->RunUntilIdle();
398 EXPECT_EQ(expect_reboot
? 1 : 0,
399 power_manager_client_
->num_request_restart_calls());
402 void AutomaticRebootManagerBasicTest::SetUptimeLimit(
403 const base::TimeDelta
& limit
,
404 bool expect_reboot
) {
405 uptime_limit_
= limit
;
406 if (limit
== base::TimeDelta()) {
407 local_state_
.RemoveManagedPref(prefs::kUptimeLimit
);
409 local_state_
.SetManagedPref(
411 new base::FundamentalValue(static_cast<int>(limit
.InSeconds())));
413 task_runner_
->RunUntilIdle();
414 EXPECT_EQ(expect_reboot
? 1 : 0,
415 power_manager_client_
->num_request_restart_calls());
418 void AutomaticRebootManagerBasicTest::NotifyUpdateRebootNeeded() {
419 SetUpdateStatusNeedReboot();
420 automatic_reboot_manager_
->UpdateStatusChanged(
421 update_engine_client_
->GetLastStatus());
422 task_runner_
->RunUntilIdle();
423 EXPECT_EQ(0, power_manager_client_
->num_request_restart_calls());
426 void AutomaticRebootManagerBasicTest::NotifyResumed(bool expect_reboot
) {
427 automatic_reboot_manager_
->SuspendDone(base::TimeDelta::FromHours(1));
428 task_runner_
->RunUntilIdle();
429 EXPECT_EQ(expect_reboot
? 1 : 0,
430 power_manager_client_
->num_request_restart_calls());
433 void AutomaticRebootManagerBasicTest::NotifyTerminating(bool expect_reboot
) {
434 automatic_reboot_manager_
->Observe(
435 chrome::NOTIFICATION_APP_TERMINATING
,
436 content::Source
<AutomaticRebootManagerBasicTest
>(this),
437 content::NotificationService::NoDetails());
438 task_runner_
->RunUntilIdle();
439 EXPECT_EQ(expect_reboot
? 1 : 0,
440 power_manager_client_
->num_request_restart_calls());
443 void AutomaticRebootManagerBasicTest::FastForwardBy(
444 const base::TimeDelta
& delta
,
445 bool expect_reboot
) {
446 task_runner_
->FastForwardBy(delta
);
447 EXPECT_EQ(expect_reboot
? 1 : 0,
448 power_manager_client_
->num_request_restart_calls());
451 void AutomaticRebootManagerBasicTest::FastForwardUntilNoTasksRemain(
452 bool expect_reboot
) {
453 task_runner_
->FastForwardUntilNoTasksRemain();
454 EXPECT_EQ(expect_reboot
? 1 : 0,
455 power_manager_client_
->num_request_restart_calls());
458 void AutomaticRebootManagerBasicTest::CreateAutomaticRebootManager(
459 bool expect_reboot
) {
460 automatic_reboot_manager_
.reset(new AutomaticRebootManager(
461 scoped_ptr
<base::TickClock
>(new MockTimeTickClock(task_runner_
))));
462 task_runner_
->RunUntilIdle();
463 EXPECT_EQ(expect_reboot
? 1 : 0,
464 power_manager_client_
->num_request_restart_calls());
466 uptime_processing_delay_
=
467 base::TimeTicks() - automatic_reboot_manager_
->boot_time_
-
468 task_runner_
->Uptime();
469 EXPECT_GE(uptime_processing_delay_
, base::TimeDelta());
470 EXPECT_LE(uptime_processing_delay_
, base::TimeDelta::FromSeconds(1));
472 if (is_user_logged_in_
|| expect_reboot
)
473 VerifyLoginScreenIdleTimerIsStopped();
475 VerifyLoginScreenIdleTimerIsRunning();
478 bool AutomaticRebootManagerBasicTest::ReadUpdateRebootNeededUptimeFromFile(
479 base::TimeDelta
* uptime
) {
480 std::string contents
;
481 if (!base::ReadFileToString(update_reboot_needed_uptime_file_
, &contents
)) {
485 if (!base::StringToDouble(contents
.substr(0, contents
.find(' ')), &seconds
) ||
489 *uptime
= base::TimeDelta::FromMilliseconds(seconds
* 1000.0);
493 void AutomaticRebootManagerBasicTest::
494 VerifyLoginScreenIdleTimerIsStopped() const {
495 VerifyTimerIsStopped(
496 automatic_reboot_manager_
->login_screen_idle_timer_
.get());
499 void AutomaticRebootManagerBasicTest::VerifyNoGracePeriod() const {
500 EXPECT_FALSE(automatic_reboot_manager_
->reboot_requested_
);
501 VerifyTimerIsStopped(automatic_reboot_manager_
->grace_start_timer_
.get());
502 VerifyTimerIsStopped(automatic_reboot_manager_
->grace_end_timer_
.get());
505 void AutomaticRebootManagerBasicTest::VerifyGracePeriod(
506 const base::TimeDelta
& start_uptime
) const {
507 const base::TimeDelta start
=
508 start_uptime
- task_runner_
->Uptime() - uptime_processing_delay_
;
509 const base::TimeDelta end
= start
+ base::TimeDelta::FromHours(24);
510 if (start
<= base::TimeDelta()) {
511 EXPECT_TRUE(automatic_reboot_manager_
->reboot_requested_
);
512 VerifyTimerIsStopped(automatic_reboot_manager_
->grace_start_timer_
.get());
513 VerifyTimerIsRunning(automatic_reboot_manager_
->grace_end_timer_
.get(),
516 EXPECT_FALSE(automatic_reboot_manager_
->reboot_requested_
);
517 VerifyTimerIsRunning(automatic_reboot_manager_
->grace_start_timer_
.get(),
519 VerifyTimerIsRunning(automatic_reboot_manager_
->grace_end_timer_
.get(),
524 void AutomaticRebootManagerBasicTest::VerifyTimerIsStopped(
525 const Timer
* timer
) const {
527 EXPECT_FALSE(timer
->IsRunning());
530 void AutomaticRebootManagerBasicTest::VerifyTimerIsRunning(
532 const base::TimeDelta
& delay
) const {
534 EXPECT_TRUE(timer
->IsRunning());
535 EXPECT_EQ(delay
.ToInternalValue(),
536 timer
->GetCurrentDelay().ToInternalValue());
539 void AutomaticRebootManagerBasicTest::
540 VerifyLoginScreenIdleTimerIsRunning() const {
541 VerifyTimerIsRunning(
542 automatic_reboot_manager_
->login_screen_idle_timer_
.get(),
543 base::TimeDelta::FromSeconds(60));
546 void AutomaticRebootManagerBasicTest::SetUpdateStatusNeedReboot() {
547 UpdateEngineClient::Status client_status
;
548 client_status
.status
= UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT
;
549 update_engine_client_
->set_default_status(client_status
);
552 AutomaticRebootManagerTest::AutomaticRebootManagerTest() {
553 switch (GetParam()) {
554 case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN
:
555 is_user_logged_in_
= false;
556 is_logged_in_as_kiosk_app_
= false;
558 case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION
:
559 is_user_logged_in_
= true;
560 is_logged_in_as_kiosk_app_
= true;
562 case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION
:
563 is_user_logged_in_
= true;
564 is_logged_in_as_kiosk_app_
= false;
569 AutomaticRebootManagerTest::~AutomaticRebootManagerTest() {
572 // Chrome is showing the login screen. The current uptime is 12 hours.
573 // Verifies that the idle timer is running. Further verifies that when a kiosk
574 // app session begins, the idle timer is stopped.
575 TEST_F(AutomaticRebootManagerBasicTest
, LoginStopsIdleTimer
) {
576 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
578 // Verify that the device does not reboot immediately and the login screen
579 // idle timer is started.
580 CreateAutomaticRebootManager(false);
582 // Notify that a kiosk app session has been started.
583 is_user_logged_in_
= true;
584 is_logged_in_as_kiosk_app_
= true;
585 automatic_reboot_manager_
->Observe(
586 chrome::NOTIFICATION_LOGIN_USER_CHANGED
,
587 content::Source
<AutomaticRebootManagerBasicTest
>(this),
588 content::NotificationService::NoDetails());
590 // Verify that the login screen idle timer is stopped.
591 VerifyLoginScreenIdleTimerIsStopped();
593 // Verify that the device does not reboot eventually.
594 FastForwardUntilNoTasksRemain(false);
597 // Chrome is showing the login screen. The current uptime is 12 hours.
598 // Verifies that the idle timer is running. Further verifies that when a
599 // non-kiosk-app session begins, the idle timer is stopped.
600 TEST_F(AutomaticRebootManagerBasicTest
, NonKioskLoginStopsIdleTimer
) {
601 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
603 // Verify that the device does not reboot immediately and the login screen
604 // idle timer is started.
605 CreateAutomaticRebootManager(false);
607 // Notify that a non-kiosk-app session has been started.
608 is_user_logged_in_
= true;
609 automatic_reboot_manager_
->Observe(
610 chrome::NOTIFICATION_LOGIN_USER_CHANGED
,
611 content::Source
<AutomaticRebootManagerBasicTest
>(this),
612 content::NotificationService::NoDetails());
614 // Verify that the login screen idle timer is stopped.
615 VerifyLoginScreenIdleTimerIsStopped();
617 // Verify that the device does not reboot eventually.
618 FastForwardUntilNoTasksRemain(false);
621 // Chrome is showing the login screen. The uptime limit is 6 hours. The current
622 // uptime is 12 hours.
623 // Verifies that user activity prevents the device from rebooting. Further
624 // verifies that when user activity ceases, the devices reboots.
625 TEST_F(AutomaticRebootManagerBasicTest
, UserActivityResetsIdleTimer
) {
626 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
628 // Verify that the device does not reboot immediately and the login screen
629 // idle timer is started.
630 CreateAutomaticRebootManager(false);
632 // Set the uptime limit. Verify that the device does not reboot immediately.
633 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
635 // Verify that a grace period has started.
636 VerifyGracePeriod(uptime_limit_
);
638 // Fast forward the uptime by 25 minutes while simulating user activity every
640 for (int i
= 0; i
< 30; ++i
) {
641 // Fast forward uptime by 50 seconds. Verify that the device does not reboot
643 FastForwardBy(base::TimeDelta::FromSeconds(50), false);
645 // Simulate user activity.
646 automatic_reboot_manager_
->OnUserActivity(NULL
);
649 // Fast forward the uptime by 60 seconds without simulating user activity.
650 // Verify that the device reboots immediately.
651 FastForwardBy(base::TimeDelta::FromSeconds(60), true);
654 // Chrome is running a kiosk app session. The current uptime is 10 days.
655 // Verifies that when the device is suspended and then resumes, it does not
656 // immediately reboot.
657 TEST_F(AutomaticRebootManagerBasicTest
, ResumeNoPolicy
) {
658 is_user_logged_in_
= true;
659 is_logged_in_as_kiosk_app_
= true;
660 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
662 // Verify that the device does not reboot immediately.
663 CreateAutomaticRebootManager(false);
665 // Verify that no grace period has started.
666 VerifyNoGracePeriod();
668 // Notify that the device has resumed from 1 hour of sleep. Verify that the
669 // device does not reboot immediately.
670 NotifyResumed(false);
672 // Verify that the device does not reboot eventually.
673 FastForwardUntilNoTasksRemain(false);
676 // Chrome is running a non-kiosk-app session. The current uptime is 10 days.
677 // Verifies that when the device is suspended and then resumes, it does not
678 // immediately reboot.
679 TEST_F(AutomaticRebootManagerBasicTest
, NonKioskResumeAppNoPolicy
) {
680 is_user_logged_in_
= true;
681 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
683 // Verify that the device does not reboot immediately.
684 CreateAutomaticRebootManager(false);
686 // Verify that no grace period has started.
687 VerifyNoGracePeriod();
689 // Notify that the device has resumed from 1 hour of sleep. Verify that the
690 // device does not reboot immediately.
691 NotifyResumed(false);
693 // Verify that the device does not reboot eventually.
694 FastForwardUntilNoTasksRemain(false);
697 // Chrome is running a kiosk app session. The uptime limit is 24 hours. The
698 // current uptime is 12 hours.
699 // Verifies that when the device is suspended and then resumes, it does not
700 // immediately reboot.
701 TEST_F(AutomaticRebootManagerBasicTest
, ResumeBeforeGracePeriod
) {
702 is_user_logged_in_
= true;
703 is_logged_in_as_kiosk_app_
= true;
704 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
706 // Verify that the device does not reboot immediately.
707 CreateAutomaticRebootManager(false);
709 // Set the uptime limit. Verify that the device does not reboot immediately.
710 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
712 // Verify that a grace period has been scheduled to start in the future.
713 VerifyGracePeriod(uptime_limit_
);
715 // Notify that the device has resumed from 1 hour of sleep. Verify that the
716 // device does not reboot immediately.
717 NotifyResumed(false);
719 // Verify that the device eventually reboots.
720 FastForwardUntilNoTasksRemain(true);
723 // Chrome is running a non-kiosk-app session. The uptime limit is 24 hours. The
724 // current uptime is 12 hours.
725 // Verifies that when the device is suspended and then resumes, it does not
726 // immediately reboot.
727 TEST_F(AutomaticRebootManagerBasicTest
, NonKioskResumeBeforeGracePeriod
) {
728 is_user_logged_in_
= true;
729 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
731 // Verify that the device does not reboot immediately.
732 CreateAutomaticRebootManager(false);
734 // Set the uptime limit. Verify that the device does not reboot immediately.
735 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
737 // Verify that a grace period has been scheduled to start in the future.
738 VerifyGracePeriod(uptime_limit_
);
740 // Notify that the device has resumed from 1 hour of sleep. Verify that the
741 // device does not reboot immediately.
742 NotifyResumed(false);
744 // Verify that the device does not reboot eventually.
745 FastForwardUntilNoTasksRemain(false);
748 // Chrome is running a kiosk app session. The uptime limit is 6 hours. The
749 // current uptime is 12 hours.
750 // Verifies that when the device is suspended and then resumes, it immediately
752 TEST_F(AutomaticRebootManagerBasicTest
, ResumeInGracePeriod
) {
753 is_user_logged_in_
= true;
754 is_logged_in_as_kiosk_app_
= true;
755 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
757 // Verify that the device does not reboot immediately.
758 CreateAutomaticRebootManager(false);
760 // Set the uptime limit. Verify that the device does not reboot immediately.
761 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
763 // Verify that a grace period has started.
764 VerifyGracePeriod(uptime_limit_
);
766 // Notify that the device has resumed from 1 hour of sleep. Verify that the
767 // device reboots immediately.
771 // Chrome is running a non-kiosk-app session. The uptime limit is 6 hours. The
772 // current uptime is 12 hours.
773 // Verifies that when the device is suspended and then resumes, it does not
774 // immediately reboot.
775 TEST_F(AutomaticRebootManagerBasicTest
, NonKioskResumeInGracePeriod
) {
776 is_user_logged_in_
= true;
777 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
779 // Verify that the device does not reboot immediately.
780 CreateAutomaticRebootManager(false);
782 // Set the uptime limit. Verify that the device does not reboot immediately.
783 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
785 // Verify that a grace period has started.
786 VerifyGracePeriod(uptime_limit_
);
788 // Notify that the device has resumed from 1 hour of sleep. Verify that the
789 // device does not reboot immediately.
790 NotifyResumed(false);
792 // Verify that the device does not reboot eventually.
793 FastForwardUntilNoTasksRemain(false);
796 // Chrome is running a kiosk app session. The uptime limit is 6 hours. The
797 // current uptime is 29 hours 30 minutes.
798 // Verifies that when the device is suspended and then resumes, it immediately
800 TEST_F(AutomaticRebootManagerBasicTest
, ResumeAfterGracePeriod
) {
801 is_user_logged_in_
= true;
802 is_logged_in_as_kiosk_app_
= true;
803 task_runner_
->SetUptime(base::TimeDelta::FromHours(29) +
804 base::TimeDelta::FromMinutes(30));
806 // Verify that the device does not reboot immediately.
807 CreateAutomaticRebootManager(false);
809 // Set the uptime limit. Verify that the device does not reboot immediately.
810 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
812 // Verify that a grace period has started.
813 VerifyGracePeriod(uptime_limit_
);
815 // Notify that the device has resumed from 1 hour of sleep. Verify that the
816 // device reboots immediately.
820 // Chrome is running a non-kiosk-app session. The uptime limit is 6 hours. The
821 // current uptime is 29 hours 30 minutes.
822 // Verifies that when the device is suspended and then resumes, it does not
823 // immediately reboot.
824 TEST_F(AutomaticRebootManagerBasicTest
, NonKioskResumeAfterGracePeriod
) {
825 is_user_logged_in_
= true;
826 task_runner_
->SetUptime(base::TimeDelta::FromHours(29) +
827 base::TimeDelta::FromMinutes(30));
829 // Verify that the device does not reboot immediately.
830 CreateAutomaticRebootManager(false);
832 // Set the uptime limit. Verify that the device does not reboot immediately.
833 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
835 // Verify that a grace period has started.
836 VerifyGracePeriod(uptime_limit_
);
838 // Notify that the device has resumed from 1 hour of sleep. Verify that the
839 // device does not reboot immediately.
840 NotifyResumed(false);
842 // Verify that the device does not reboot eventually.
843 FastForwardUntilNoTasksRemain(false);
846 // Chrome is running. The current uptime is 10 days.
847 // Verifies that when the browser terminates, the device does not immediately
849 TEST_P(AutomaticRebootManagerTest
, TerminateNoPolicy
) {
850 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
852 // Verify that the device does not reboot immediately.
853 CreateAutomaticRebootManager(false);
855 // Verify that no grace period has started.
856 VerifyNoGracePeriod();
858 // Notify that the browser is terminating. Verify that the device does not
859 // reboot immediately.
860 NotifyTerminating(false);
862 // Verify that the device does not reboot eventually.
863 FastForwardUntilNoTasksRemain(false);
866 // Chrome is running. The uptime limit is set to 24 hours. The current uptime is
868 // Verifies that when the browser terminates, it does not immediately reboot.
869 TEST_P(AutomaticRebootManagerTest
, TerminateBeforeGracePeriod
) {
870 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
872 // Verify that the device does not reboot immediately.
873 CreateAutomaticRebootManager(false);
875 // Set the uptime limit. Verify that the device does not reboot immediately.
876 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
878 // Verify that a grace period has been scheduled to start in the future.
879 VerifyGracePeriod(uptime_limit_
);
881 // Notify that the browser is terminating. Verify that the device does not
882 // reboot immediately.
883 NotifyTerminating(false);
885 // Verify that unless a non-kiosk-app session is in progress, the device
886 // eventually reboots.
887 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
888 is_logged_in_as_kiosk_app_
);
891 // Chrome is running. The uptime limit is set to 6 hours. The current uptime is
893 // Verifies that when the browser terminates, the device immediately reboots if
894 // a kiosk app session is in progress.
895 TEST_P(AutomaticRebootManagerTest
, TerminateInGracePeriod
) {
896 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
898 // Verify that the device does not reboot immediately.
899 CreateAutomaticRebootManager(false);
901 // Set the uptime limit. Verify that the device does not reboot immediately.
902 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
904 // Verify that a grace period has started.
905 VerifyGracePeriod(uptime_limit_
);
907 // Notify that the browser is terminating. Verify that the device immediately
908 // reboots if a kiosk app session is in progress.
909 NotifyTerminating(is_logged_in_as_kiosk_app_
);
911 // Verify that if a non-kiosk-app session is in progress, the device does not
912 // reboot eventually.
913 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
914 is_logged_in_as_kiosk_app_
);
917 // Chrome is running. The current uptime is 12 hours.
918 // Verifies that when the uptime limit is set to 24 hours, no reboot occurs and
919 // a grace period is scheduled to begin after 24 hours of uptime.
920 TEST_P(AutomaticRebootManagerTest
, BeforeUptimeLimitGracePeriod
) {
921 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
923 // Verify that the device does not reboot immediately.
924 CreateAutomaticRebootManager(false);
926 // Verify that no grace period has started.
927 VerifyNoGracePeriod();
929 // Set the uptime limit. Verify that the device does not reboot immediately.
930 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
932 // Verify that a grace period has been scheduled to start in the future.
933 VerifyGracePeriod(uptime_limit_
);
935 // Verify that unless a non-kiosk-app session is in progress, the device
936 // eventually reboots.
937 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
938 is_logged_in_as_kiosk_app_
);
941 // Chrome is running. The current uptime is 12 hours.
942 // Verifies that when the uptime limit is set to 6 hours, a reboot is requested
943 // and a grace period is started that will end after 6 + 24 hours of uptime.
944 TEST_P(AutomaticRebootManagerTest
, InUptimeLimitGracePeriod
) {
945 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
947 // Verify that the device does not reboot immediately.
948 CreateAutomaticRebootManager(false);
950 // Verify that no grace period has started.
951 VerifyNoGracePeriod();
953 // Set the uptime limit. Verify that the device does not reboot immediately.
954 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
956 // Verify that a grace period has started.
957 VerifyGracePeriod(uptime_limit_
);
959 // Verify that unless a non-kiosk-app session is in progress, the device
960 // eventually reboots.
961 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
962 is_logged_in_as_kiosk_app_
);
965 // Chrome is running. The current uptime is 10 days.
966 // Verifies that when the uptime limit is set to 6 hours, the device reboots
967 // immediately if no non-kiosk-app-session is in progress because the grace
968 // period ended after 6 + 24 hours of uptime.
969 TEST_P(AutomaticRebootManagerTest
, AfterUptimeLimitGracePeriod
) {
970 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
972 // Verify that the device does not reboot immediately.
973 CreateAutomaticRebootManager(false);
975 // Verify that no grace period has started.
976 VerifyNoGracePeriod();
978 // Set the uptime limit. Verify that unless a non-kiosk-app session is in
979 // progress, the the device immediately reboots.
980 SetUptimeLimit(base::TimeDelta::FromHours(6), !is_user_logged_in_
||
981 is_logged_in_as_kiosk_app_
);
983 // Verify that if a non-kiosk-app session is in progress, the device does not
984 // reboot eventually.
985 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
986 is_logged_in_as_kiosk_app_
);
989 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
991 // Verifies that when the uptime limit is removed, the grace period is removed.
992 TEST_P(AutomaticRebootManagerTest
, UptimeLimitOffBeforeGracePeriod
) {
993 task_runner_
->SetUptime(base::TimeDelta::FromHours(6));
995 // Verify that the device does not reboot immediately.
996 CreateAutomaticRebootManager(false);
998 // Set the uptime limit. Verify that the device does not reboot immediately.
999 SetUptimeLimit(base::TimeDelta::FromHours(12), false);
1001 // Verify that a grace period has been scheduled to start in the future.
1002 VerifyGracePeriod(uptime_limit_
);
1004 // Fast forward the uptime by 1 hour. Verify that the device does not reboot
1006 FastForwardBy(base::TimeDelta::FromHours(1), false);
1008 // Remove the uptime limit. Verify that the device does not reboot
1010 SetUptimeLimit(base::TimeDelta(), false);
1012 // Verify that the grace period has been removed.
1013 VerifyNoGracePeriod();
1015 // Verify that the device does not reboot eventually.
1016 FastForwardUntilNoTasksRemain(false);
1019 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
1021 // Verifies that when the uptime limit is removed, the grace period is removed.
1022 TEST_P(AutomaticRebootManagerTest
, UptimeLimitOffInGracePeriod
) {
1023 task_runner_
->SetUptime(base::TimeDelta::FromHours(24));
1025 // Verify that the device does not reboot immediately.
1026 CreateAutomaticRebootManager(false);
1028 // Set the uptime limit. Verify that the device does not reboot immediately.
1029 SetUptimeLimit(base::TimeDelta::FromHours(12), false);
1031 // Verify that a grace period has started.
1032 VerifyGracePeriod(uptime_limit_
);
1034 // Fast forward the uptime by 20 seconds. Verify that the device does not
1035 // reboot immediately.
1036 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1038 // Remove the uptime limit. Verify that the device does not reboot
1040 SetUptimeLimit(base::TimeDelta(), false);
1042 // Verify that the grace period has been removed.
1043 VerifyNoGracePeriod();
1045 // Verify that the device does not reboot eventually.
1046 FastForwardUntilNoTasksRemain(false);
1049 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
1051 // Verifies that when the uptime limit is extended to 24 hours, the grace period
1052 // is rescheduled to start further in the future.
1053 TEST_P(AutomaticRebootManagerTest
, ExtendUptimeLimitBeforeGracePeriod
) {
1054 task_runner_
->SetUptime(base::TimeDelta::FromHours(6));
1056 // Verify that the device does not reboot immediately.
1057 CreateAutomaticRebootManager(false);
1059 // Set the uptime limit. Verify that the device does not reboot immediately.
1060 SetUptimeLimit(base::TimeDelta::FromHours(12), false);
1062 // Verify that a grace period has been scheduled to start in the future.
1063 VerifyGracePeriod(uptime_limit_
);
1065 // Fast forward the uptime by 20 seconds. Verify that the device does not
1066 // reboot immediately.
1067 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1069 // Extend the uptime limit. Verify that the device does not reboot
1071 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1073 // Verify that the grace period has been rescheduled to start further in the
1075 VerifyGracePeriod(uptime_limit_
);
1077 // Verify that unless a non-kiosk-app session is in progress, the device
1078 // eventually reboots.
1079 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1080 is_logged_in_as_kiosk_app_
);
1083 // Chrome is running. The uptime limit is set to 12 hours. The current uptime is
1085 // Verifies that when the uptime limit is extended to 24 hours, the grace period
1086 // is rescheduled to start in the future.
1087 TEST_P(AutomaticRebootManagerTest
, ExtendUptimeLimitInGracePeriod
) {
1088 task_runner_
->SetUptime(base::TimeDelta::FromHours(18));
1090 // Verify that the device does not reboot immediately.
1091 CreateAutomaticRebootManager(false);
1093 // Set the uptime limit. Verify that the device does not reboot immediately.
1094 SetUptimeLimit(base::TimeDelta::FromHours(12), false);
1096 // Verify that a grace period has started.
1097 VerifyGracePeriod(uptime_limit_
);
1099 // Fast forward the uptime by 20 seconds. Verify that the device does not
1100 // reboot immediately.
1101 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1103 // Extend the uptime limit. Verify that the device does not reboot
1105 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1107 // Verify that the grace period has been rescheduled to start in the future.
1108 VerifyGracePeriod(uptime_limit_
);
1110 // Verify that unless a non-kiosk-app session is in progress, the device
1111 // eventually reboots.
1112 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1113 is_logged_in_as_kiosk_app_
);
1116 // Chrome is running. The uptime limit is set to 18 hours. The current uptime is
1118 // Verifies that when the uptime limit is shortened to 6 hours, the grace period
1119 // is rescheduled to have already started.
1120 TEST_P(AutomaticRebootManagerTest
, ShortenUptimeLimitBeforeToInGracePeriod
) {
1121 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1123 // Verify that the device does not reboot immediately.
1124 CreateAutomaticRebootManager(false);
1126 // Set the uptime limit. Verify that the device does not reboot immediately.
1127 SetUptimeLimit(base::TimeDelta::FromHours(18), false);
1129 // Verify that a grace period has been scheduled to start in the future.
1130 VerifyGracePeriod(uptime_limit_
);
1132 // Fast forward the uptime by 20 seconds. Verify that the device does not
1133 // reboot immediately.
1134 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1136 // Shorten the uptime limit. Verify that the device does not reboot
1138 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1140 // Verify that the grace period has been rescheduled and has started already.
1141 VerifyGracePeriod(uptime_limit_
);
1143 // Verify that unless a non-kiosk-app session is in progress, the device
1144 // eventually reboots.
1145 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1146 is_logged_in_as_kiosk_app_
);
1149 // Chrome is running. The uptime limit is set to 24 hours. The current uptime is
1151 // Verifies that when the uptime limit is shortened to 18 hours, the grace
1152 // period is rescheduled to have started earlier.
1153 TEST_P(AutomaticRebootManagerTest
, ShortenUptimeLimitInToInGracePeriod
) {
1154 task_runner_
->SetUptime(base::TimeDelta::FromHours(36));
1156 // Verify that the device does not reboot immediately.
1157 CreateAutomaticRebootManager(false);
1159 // Set the uptime limit. Verify that the device does not reboot immediately.
1160 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1162 // Verify that a grace period has started.
1163 VerifyGracePeriod(uptime_limit_
);
1165 // Fast forward the uptime by 20 seconds. Verify that the device does not
1166 // reboot immediately.
1167 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1169 // Shorten the uptime limit. Verify that the device does not reboot
1171 SetUptimeLimit(base::TimeDelta::FromHours(18), false);
1173 // Verify that the grace period has been rescheduled to have started earlier.
1174 VerifyGracePeriod(uptime_limit_
);
1176 // Verify that unless a non-kiosk-app session is in progress, the device
1177 // eventually reboots.
1178 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1179 is_logged_in_as_kiosk_app_
);
1182 // Chrome is running. The uptime limit is set to 24 hours. The current uptime is
1184 // Verifies that when the uptime limit is shortened to 6 hours, the device
1185 // reboots immediately if no non-kiosk-app session is in progress because the
1186 // grace period ended after 6 + 24 hours of uptime.
1187 TEST_P(AutomaticRebootManagerTest
, ShortenUptimeLimitInToAfterGracePeriod
) {
1188 task_runner_
->SetUptime(base::TimeDelta::FromHours(36));
1190 // Verify that the device does not reboot immediately.
1191 CreateAutomaticRebootManager(false);
1193 // Set the uptime limit. Verify that the device does not reboot immediately.
1194 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1196 // Verify that a grace period has started.
1197 VerifyGracePeriod(uptime_limit_
);
1199 // Fast forward the uptime by 20 seconds. Verify that the device does not
1200 // reboot immediately.
1201 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1203 // Shorten the uptime limit. Verify that unless a non-kiosk-app session is in
1204 // progress, the the device immediately reboots.
1205 SetUptimeLimit(base::TimeDelta::FromHours(6), !is_user_logged_in_
||
1206 is_logged_in_as_kiosk_app_
);
1208 // Verify that if a non-kiosk-app session is in progress, the device does not
1209 // reboot eventually.
1210 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1211 is_logged_in_as_kiosk_app_
);
1214 // Chrome is running. The current uptime is 12 hours.
1215 // Verifies that when an update is applied, the current uptime is persisted as
1216 // the time at which a reboot became necessary. Further verifies that when the
1217 // policy to automatically reboot after an update is not enabled, no reboot
1218 // occurs and no grace period is scheduled.
1219 TEST_P(AutomaticRebootManagerTest
, UpdateNoPolicy
) {
1220 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1222 // Verify that the device does not reboot immediately.
1223 CreateAutomaticRebootManager(false);
1225 // Verify that no grace period has started.
1226 VerifyNoGracePeriod();
1228 // Notify that an update has been applied and a reboot is necessary. Verify
1229 // that the device does not reboot immediately.
1230 NotifyUpdateRebootNeeded();
1232 // Verify that the current uptime has been persisted as the time at which a
1233 // reboot became necessary.
1234 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1235 &update_reboot_needed_uptime_
));
1236 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1238 // Verify that no grace period has started.
1239 VerifyNoGracePeriod();
1241 // Verify that the device does not reboot eventually.
1242 FastForwardUntilNoTasksRemain(false);
1245 // Chrome is running. The current uptime is 12 hours.
1246 // Verifies that when an update is applied, the current uptime is persisted as
1247 // the time at which a reboot became necessary. Further verifies that when the
1248 // policy to automatically reboot after an update is enabled, a reboot is
1249 // requested and a grace period is started that will end 24 hours from now.
1250 TEST_P(AutomaticRebootManagerTest
, Update
) {
1251 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1252 SetRebootAfterUpdate(true, false);
1254 // Verify that the device does not reboot immediately.
1255 CreateAutomaticRebootManager(false);
1257 // Verify that no grace period has started.
1258 VerifyNoGracePeriod();
1260 // Notify that an update has been applied and a reboot is necessary. Verify
1261 // that the device does not reboot immediately.
1262 NotifyUpdateRebootNeeded();
1264 // Verify that the current uptime has been persisted as the time at which a
1265 // reboot became necessary.
1266 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1267 &update_reboot_needed_uptime_
));
1268 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1270 // Verify that a grace period has started.
1271 VerifyGracePeriod(update_reboot_needed_uptime_
+ uptime_processing_delay_
);
1273 // Verify that unless a non-kiosk-app session is in progress, the device
1274 // eventually reboots.
1275 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1276 is_logged_in_as_kiosk_app_
);
1279 // Chrome is running. The current uptime is 12 hours.
1280 // Verifies that when Chrome is notified twice that an update has been applied,
1281 // the second notification is ignored and the uptime at which it occured does
1282 // not get persisted as the time at which an update became necessary.
1283 TEST_P(AutomaticRebootManagerTest
, UpdateAfterUpdate
) {
1284 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1285 SetRebootAfterUpdate(true, false);
1287 // Verify that the device does not reboot immediately.
1288 CreateAutomaticRebootManager(false);
1290 // Verify that no grace period has started.
1291 VerifyNoGracePeriod();
1293 // Notify that an update has been applied and a reboot is necessary. Verify
1294 // that the device does not reboot immediately.
1295 NotifyUpdateRebootNeeded();
1297 // Verify that the current uptime has been persisted as the time at which a
1298 // reboot became necessary.
1299 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1300 &update_reboot_needed_uptime_
));
1301 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1303 // Verify that a grace period has started.
1304 VerifyGracePeriod(update_reboot_needed_uptime_
+ uptime_processing_delay_
);
1306 // Fast forward the uptime by 20 seconds. Verify that the device does not
1307 // reboot immediately.
1308 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1310 // Notify that an update has been applied and a reboot is necessary. Verify
1311 // that the device does not reboot immediately.
1312 NotifyUpdateRebootNeeded();
1314 // Verify that the previously persisted time at which a reboot became
1315 // necessary has not been overwritten.
1316 base::TimeDelta new_update_reboot_needed_uptime
;
1317 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1318 &new_update_reboot_needed_uptime
));
1319 EXPECT_EQ(update_reboot_needed_uptime_
, new_update_reboot_needed_uptime
);
1321 // Verify that unless a non-kiosk-app session is in progress, the device
1322 // eventually reboots.
1323 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1324 is_logged_in_as_kiosk_app_
);
1327 // Chrome is running. The current uptime is 10 minutes.
1328 // Verifies that when the policy to automatically reboot after an update is
1329 // enabled, no reboot occurs a grace period is scheduled to begin after the
1330 // minimum of 1 hour of uptime. Further verifies that when an update is applied,
1331 // the current uptime is persisted as the time at which a reboot became
1333 TEST_P(AutomaticRebootManagerTest
, UpdateBeforeMinimumUptime
) {
1334 task_runner_
->SetUptime(base::TimeDelta::FromMinutes(10));
1335 SetRebootAfterUpdate(true, false);
1337 // Verify that the device does not reboot immediately.
1338 CreateAutomaticRebootManager(false);
1340 // Verify that no grace period has started.
1341 VerifyNoGracePeriod();
1343 // Notify that an update has been applied and a reboot is necessary. Verify
1344 // that the device does not reboot immediately.
1345 NotifyUpdateRebootNeeded();
1347 // Verify that the current uptime has been persisted as the time at which a
1348 // reboot became necessary.
1349 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1350 &update_reboot_needed_uptime_
));
1351 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1353 // Verify that a grace period has been scheduled to begin in the future.
1354 VerifyGracePeriod(base::TimeDelta::FromHours(1));
1356 // Verify that unless a non-kiosk-app session is in progress, the device
1357 // eventually reboots.
1358 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1359 is_logged_in_as_kiosk_app_
);
1362 // Chrome is running. An update was applied and a reboot became necessary to
1363 // complete the update process after 6 hours of uptime. The current uptime is
1365 // Verifies that when the policy to automatically reboot after an update is
1366 // enabled, a reboot is requested and a grace period is started that will end
1367 // after 6 + 24 hours of uptime.
1368 TEST_P(AutomaticRebootManagerTest
, PolicyAfterUpdateInGracePeriod
) {
1369 task_runner_
->SetUptime(base::TimeDelta::FromHours(6));
1371 // Verify that the device does not reboot immediately.
1372 CreateAutomaticRebootManager(false);
1374 // Notify that an update has been applied and a reboot is necessary. Verify
1375 // that the device does not reboot immediately.
1376 NotifyUpdateRebootNeeded();
1378 // Fast forward the uptime to 12 hours. Verify that the device does not reboot
1380 FastForwardBy(base::TimeDelta::FromHours(6), false);
1382 // Simulate user activity.
1383 automatic_reboot_manager_
->OnUserActivity(NULL
);
1385 // Enable automatic reboot after an update has been applied. Verify that the
1386 // device does not reboot immediately.
1387 SetRebootAfterUpdate(true, false);
1389 // Verify that a grace period has started.
1390 VerifyGracePeriod(base::TimeDelta::FromHours(6) + uptime_processing_delay_
);
1392 // Verify that unless a non-kiosk-app session is in progress, the device
1393 // eventually reboots.
1394 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1395 is_logged_in_as_kiosk_app_
);
1398 // Chrome is running. An update was applied and a reboot became necessary to
1399 // complete the update process after 6 hours of uptime. The current uptime is
1401 // Verifies that when the policy to automatically reboot after an update is
1402 // enabled, the device reboots immediately if no non-kiosk-app session is in
1403 // progress because the grace period ended after 6 + 24 hours of uptime.
1404 TEST_P(AutomaticRebootManagerTest
, PolicyAfterUpdateAfterGracePeriod
) {
1405 task_runner_
->SetUptime(base::TimeDelta::FromHours(6));
1407 // Verify that the device does not reboot immediately.
1408 CreateAutomaticRebootManager(false);
1410 // Notify that an update has been applied and a reboot is necessary. Verify
1411 // that the device does not reboot immediately.
1412 NotifyUpdateRebootNeeded();
1414 // Fast forward the uptime to 12 hours. Verify that the device does not reboot
1416 FastForwardBy(base::TimeDelta::FromDays(10) - base::TimeDelta::FromHours(6),
1419 // Simulate user activity.
1420 automatic_reboot_manager_
->OnUserActivity(NULL
);
1422 // Enable automatic rebooting after an update has been applied. Verify that
1423 // unless a non-kiosk-app session is in progress, the the device immediately
1425 SetRebootAfterUpdate(true, !is_user_logged_in_
|| is_logged_in_as_kiosk_app_
);
1427 // Verify that if a non-kiosk-app session is in progress, the device does not
1428 // reboot eventually.
1429 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1430 is_logged_in_as_kiosk_app_
);
1433 // Chrome is running. An update was applied and a reboot became necessary to
1434 // complete the update process after 6 hours of uptime. The policy to
1435 // automatically reboot after an update is enabled. The current uptime is
1436 // 6 hours 20 seconds.
1437 // Verifies that when the policy to automatically reboot after an update is
1438 // disabled, the reboot request and grace period are removed.
1439 TEST_P(AutomaticRebootManagerTest
, PolicyOffAfterUpdate
) {
1440 task_runner_
->SetUptime(base::TimeDelta::FromHours(6));
1441 SetRebootAfterUpdate(true, false);
1443 // Verify that the device does not reboot immediately.
1444 CreateAutomaticRebootManager(false);
1446 // Notify that an update has been applied and a reboot is necessary. Verify
1447 // that the device does not reboot immediately.
1448 NotifyUpdateRebootNeeded();
1450 // Verify that a grace period has started.
1451 VerifyGracePeriod(task_runner_
->Uptime() + uptime_processing_delay_
);
1453 // Fast forward the uptime by 20 seconds. Verify that the device does not
1454 // reboot immediately.
1455 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1457 // Disable automatic rebooting after an update has been applied. Verify that
1458 // the device does not reboot immediately.
1459 SetRebootAfterUpdate(false, false);
1461 // Verify that the grace period has been removed.
1462 VerifyNoGracePeriod();
1464 // Verify that the device does not reboot eventually.
1465 FastForwardUntilNoTasksRemain(false);
1468 // Chrome is running. The current uptime is not available.
1469 // Verifies that even if an uptime limit is set, the policy to automatically
1470 // reboot after an update is enabled and an update has been applied, no reboot
1471 // occurs and no grace period is scheduled. Further verifies that no time is
1472 // persisted as the time at which a reboot became necessary.
1473 TEST_P(AutomaticRebootManagerTest
, NoUptime
) {
1474 // Verify that the device does not reboot immediately.
1475 CreateAutomaticRebootManager(false);
1477 // Set the uptime limit. Verify that the device does not reboot immediately.
1478 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1480 // Verify that no grace period has started.
1481 VerifyNoGracePeriod();
1483 // Enable automatic rebooting after an update has been applied. Verify that
1484 // the device does not reboot immediately.
1485 SetRebootAfterUpdate(true, false);
1487 // Verify that no grace period has started.
1488 VerifyNoGracePeriod();
1490 // Notify that an update has been applied and a reboot is necessary. Verify
1491 // that the device does not reboot immediately.
1492 NotifyUpdateRebootNeeded();
1494 // Verify that no time is persisted as the time at which a reboot became
1496 EXPECT_FALSE(ReadUpdateRebootNeededUptimeFromFile(
1497 &update_reboot_needed_uptime_
));
1499 // Verify that no grace period has started.
1500 VerifyNoGracePeriod();
1502 // Verify that the device does not reboot eventually.
1503 FastForwardUntilNoTasksRemain(false);
1506 // Chrome is running. The policy to automatically reboot after an update is
1507 // enabled. The current uptime is 12 hours.
1508 // Verifies that when an uptime limit of 6 hours is set, the availability of an
1509 // update does not cause the grace period to be rescheduled. Further verifies
1510 // that the current uptime is persisted as the time at which a reboot became
1512 TEST_P(AutomaticRebootManagerTest
, UptimeLimitBeforeUpdate
) {
1513 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1514 SetRebootAfterUpdate(true, false);
1516 // Verify that the device does not reboot immediately.
1517 CreateAutomaticRebootManager(false);
1519 // Set the uptime limit. Verify that the device does not reboot immediately.
1520 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1522 // Verify that a grace period has been scheduled to start in the future.
1523 VerifyGracePeriod(uptime_limit_
);
1525 // Fast forward the uptime by 20 seconds. Verify that the device does not
1526 // reboot immediately.
1527 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1529 // Notify that an update has been applied and a reboot is necessary. Verify
1530 // that the device does not reboot immediately.
1531 NotifyUpdateRebootNeeded();
1533 // Verify that the current uptime has been persisted as the time at which a
1534 // reboot became necessary.
1535 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1536 &update_reboot_needed_uptime_
));
1537 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1539 // Verify that the grace period has not been rescheduled.
1540 VerifyGracePeriod(uptime_limit_
);
1542 // Verify that unless a non-kiosk-app session is in progress, the device
1543 // eventually reboots.
1544 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1545 is_logged_in_as_kiosk_app_
);
1548 // Chrome is running. The policy to automatically reboot after an update is
1549 // enabled. The current uptime is 12 hours.
1550 // Verifies that when an uptime limit of 24 hours is set, the availability of an
1551 // update causes the grace period to be rescheduled so that it ends 24 hours
1552 // from now. Further verifies that the current uptime is persisted as the time
1553 // at which a reboot became necessary.
1554 TEST_P(AutomaticRebootManagerTest
, UpdateBeforeUptimeLimit
) {
1555 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1556 SetRebootAfterUpdate(true, false);
1558 // Verify that the device does not reboot immediately.
1559 CreateAutomaticRebootManager(false);
1561 // Set the uptime limit. Verify that the device does not reboot immediately.
1562 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1564 // Verify that a grace period has been scheduled to start in the future.
1565 VerifyGracePeriod(uptime_limit_
);
1567 // Fast forward the uptime by 20 seconds. Verify that the device does not
1568 // reboot immediately.
1569 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1571 // Notify that an update has been applied and a reboot is necessary. Verify
1572 // that the device does not reboot immediately.
1573 NotifyUpdateRebootNeeded();
1575 // Verify that the current uptime has been persisted as the time at which a
1576 // reboot became necessary.
1577 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1578 &update_reboot_needed_uptime_
));
1579 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1581 // Verify that the grace period has been rescheduled to start at the time that
1582 // the update became available.
1583 VerifyGracePeriod(update_reboot_needed_uptime_
+ uptime_processing_delay_
);
1585 // Verify that unless a non-kiosk-app session is in progress, the device
1586 // eventually reboots.
1587 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1588 is_logged_in_as_kiosk_app_
);
1591 // Chrome is running. The uptime limit is set to 24 hours. An update was applied
1592 // and a reboot became necessary to complete the update process after 12 hours.
1593 // The policy to automatically reboot after an update is enabled. The current
1594 // uptime is 12 hours 20 seconds.
1595 // Verifies that when the policy to reboot after an update is disabled, the
1596 // grace period is rescheduled to start after 24 hours of uptime. Further
1597 // verifies that when the uptime limit is removed, the grace period is removed.
1598 TEST_P(AutomaticRebootManagerTest
, PolicyOffThenUptimeLimitOff
) {
1599 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1600 SetRebootAfterUpdate(true, false);
1602 // Verify that the device does not reboot immediately.
1603 CreateAutomaticRebootManager(false);
1605 // Set the uptime limit. Verify that the device does not reboot immediately.
1606 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1608 // Verify that the grace period has started.
1609 VerifyGracePeriod(uptime_limit_
);
1611 // Notify that an update has been applied and a reboot is necessary. Verify
1612 // that the device does not reboot immediately.
1613 NotifyUpdateRebootNeeded();
1615 // Verify that the current uptime has been persisted as the time at which a
1616 // reboot became necessary.
1617 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1618 &update_reboot_needed_uptime_
));
1619 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1621 // Verify that a grace period has been rescheduled to end 24 hours from now.
1622 VerifyGracePeriod(update_reboot_needed_uptime_
+ uptime_processing_delay_
);
1624 // Fast forward the uptime by 20 seconds. Verify that the device does not
1625 // reboot immediately.
1626 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1628 // Disable automatic reboot after an update has been applied. Verify that the
1629 // device does not reboot immediately.
1630 SetRebootAfterUpdate(false, false);
1632 // Verify that the grace period has been rescheduled to start after 24 hours
1634 VerifyGracePeriod(uptime_limit_
);
1636 // Remove the uptime limit. Verify that the device does not reboot
1638 SetUptimeLimit(base::TimeDelta(), false);
1640 // Verify that the grace period has been removed.
1641 VerifyNoGracePeriod();
1643 // Verify that the device does not reboot eventually.
1644 FastForwardUntilNoTasksRemain(false);
1647 // Chrome is running. The uptime limit is set to 6 hours. An update was applied
1648 // and a reboot became necessary to complete the update process after 12 hours.
1649 // The policy to automatically reboot after an update is enabled. The current
1650 // uptime is 12 hours 20 seconds.
1651 // Verifies that when the uptime limit is removed, the grace period is
1652 // rescheduled to have started after 12 hours of uptime. Further verifies that
1653 // when the policy to reboot after an update is disabled, the reboot request and
1654 // grace period are removed.
1655 TEST_P(AutomaticRebootManagerTest
, UptimeLimitOffThenPolicyOff
) {
1656 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1657 SetRebootAfterUpdate(true, false);
1659 // Verify that the device does not reboot immediately.
1660 CreateAutomaticRebootManager(false);
1662 // Notify that an update has been applied and a reboot is necessary. Verify
1663 // that the device does not reboot immediately.
1664 NotifyUpdateRebootNeeded();
1666 // Verify that the current uptime has been persisted as the time at which a
1667 // reboot became necessary.
1668 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1669 &update_reboot_needed_uptime_
));
1670 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1672 // Verify that the grace period has started.
1673 VerifyGracePeriod(update_reboot_needed_uptime_
+ uptime_processing_delay_
);
1675 // Set the uptime limit. Verify that the device does not reboot immediately.
1676 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1678 // Verify that the grace period has been rescheduled to have started after
1679 // 6 hours of uptime.
1680 VerifyGracePeriod(uptime_limit_
);
1682 // Fast forward the uptime by 20 seconds. Verify that the device does not
1683 // reboot immediately.
1684 FastForwardBy(base::TimeDelta::FromSeconds(20), false);
1686 // Remove the uptime limit. Verify that the device does not reboot
1688 SetUptimeLimit(base::TimeDelta(), false);
1690 // Verify that a grace period has been rescheduled to have started after 12
1692 VerifyGracePeriod(update_reboot_needed_uptime_
+ uptime_processing_delay_
);
1694 // Disable automatic reboot after an update has been applied. Verify that the
1695 // device does not reboot immediately.
1696 SetRebootAfterUpdate(false, false);
1698 // Verify that the grace period has been removed.
1699 VerifyNoGracePeriod();
1701 // Verify that the device does not reboot eventually.
1702 FastForwardUntilNoTasksRemain(false);
1705 // Chrome is running. The uptime limit is 6 hours. The current uptime is
1706 // 29 hours 59 minutes 59 seconds.
1707 // Verifies that if no non-kiosk-app session is in progress, the device reboots
1708 // immediately when the grace period ends after 6 + 24 hours of uptime.
1709 TEST_P(AutomaticRebootManagerTest
, GracePeriodEnd
) {
1710 task_runner_
->SetUptime(base::TimeDelta::FromHours(29) +
1711 base::TimeDelta::FromMinutes(59) +
1712 base::TimeDelta::FromSeconds(59));
1714 // Verify that the device does not reboot immediately.
1715 CreateAutomaticRebootManager(false);
1717 // Set the uptime limit. Verify that the device does not reboot immediately.
1718 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1720 // Verify that a grace period has started.
1721 VerifyGracePeriod(uptime_limit_
);
1723 // Fast forward the uptime by 1 second. Verify that unless a non-kiosk-app
1724 // session is in progress, the the device immediately reboots.
1725 FastForwardBy(base::TimeDelta::FromSeconds(1), !is_user_logged_in_
||
1726 is_logged_in_as_kiosk_app_
);
1728 // Verify that if a non-kiosk-app session is in progress, the device does not
1729 // reboot eventually.
1730 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1731 is_logged_in_as_kiosk_app_
);
1734 // Chrome is starting. The current uptime is 10 days.
1735 // Verifies that when no automatic reboot policy is enabled, no reboot occurs
1736 // and no grace period is scheduled.
1737 TEST_P(AutomaticRebootManagerTest
, StartNoPolicy
) {
1738 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
1740 // Verify that the device does not reboot immediately.
1741 CreateAutomaticRebootManager(false);
1743 // Verify that no grace period has started.
1744 VerifyNoGracePeriod();
1746 // Verify that the device does not reboot eventually.
1747 FastForwardUntilNoTasksRemain(false);
1750 // Chrome is starting. The uptime limit is set to 24 hours. The current uptime
1752 // Verifies that no reboot occurs and a grace period is scheduled to begin after
1753 // 24 hours of uptime.
1754 TEST_P(AutomaticRebootManagerTest
, StartBeforeUptimeLimitGracePeriod
) {
1755 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1756 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1758 // Verify that the device does not reboot immediately.
1759 CreateAutomaticRebootManager(false);
1761 // Verify that a grace period has been scheduled to start in the future.
1762 VerifyGracePeriod(uptime_limit_
);
1764 // Verify that unless a non-kiosk-app session is in progress, the device
1765 // eventually reboots.
1766 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1767 is_logged_in_as_kiosk_app_
);
1770 // Chrome is starting. The uptime limit is set to 6 hours. The current uptime is
1772 // Verifies that if no non-kiosk-app session is in progress, the device reboots
1773 // immediately because the grace period ended after 6 + 24 hours of uptime.
1774 TEST_P(AutomaticRebootManagerTest
, StartAfterUptimeLimitGracePeriod
) {
1775 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1776 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
1778 // Verify that unless a non-kiosk-app session is in progress, the the device
1779 // immediately reboots.
1780 CreateAutomaticRebootManager(!is_user_logged_in_
||
1781 is_logged_in_as_kiosk_app_
);
1783 // Verify that if a non-kiosk-app session is in progress, the device does not
1784 // reboot eventually.
1785 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1786 is_logged_in_as_kiosk_app_
);
1789 // Chrome is starting. The uptime limit is set to 6 hours. The current uptime is
1791 // Verifies that a reboot is requested and a grace period is started that will
1792 // end after 6 + 24 hours of uptime.
1793 TEST_P(AutomaticRebootManagerTest
, StartInUptimeLimitGracePeriod
) {
1794 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1795 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1797 // Verify that the device does not reboot immediately.
1798 CreateAutomaticRebootManager(false);
1800 // Verify that a grace period has started.
1801 VerifyGracePeriod(uptime_limit_
);
1803 // Verify that unless a non-kiosk-app session is in progress, the device
1804 // eventually reboots.
1805 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1806 is_logged_in_as_kiosk_app_
);
1809 // Chrome is starting. An update was applied and a reboot became necessary to
1810 // complete the update process after 6 hours of uptime. The current uptime is
1812 // Verifies that when the policy to automatically reboot after an update is
1813 // enabled, the device reboots immediately if no non-kiosk-app session is in
1814 // progress because the grace period ended after 6 + 24 hours of uptime.
1815 TEST_P(AutomaticRebootManagerTest
, StartAfterUpdateGracePeriod
) {
1816 SetUpdateStatusNeedReboot();
1817 SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
1818 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
1819 SetRebootAfterUpdate(true, false);
1821 // Verify that unless a non-kiosk-app session is in progress, the device
1822 // reboots immediately.
1823 CreateAutomaticRebootManager(!is_user_logged_in_
||
1824 is_logged_in_as_kiosk_app_
);
1826 // Verify that if a non-kiosk-app session is in progress, the device does not
1827 // reboot eventually.
1828 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1829 is_logged_in_as_kiosk_app_
);
1832 // Chrome is starting. An update was applied and a reboot became necessary to
1833 // complete the update process after 6 hours of uptime. The current uptime is
1835 // Verifies that when the policy to automatically reboot after an update is
1836 // enabled, a reboot is requested and a grace period is started that will end
1837 // after 6 + 24 hours of uptime.
1838 TEST_P(AutomaticRebootManagerTest
, StartInUpdateGracePeriod
) {
1839 SetUpdateStatusNeedReboot();
1840 SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
1841 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1842 SetRebootAfterUpdate(true, false);
1844 // Verify that the device does not reboot immediately.
1845 CreateAutomaticRebootManager(false);
1847 // Verify that a grace period has started.
1848 VerifyGracePeriod(update_reboot_needed_uptime_
);
1850 // Verify that unless a non-kiosk-app session is in progress, the device
1851 // eventually reboots.
1852 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1853 is_logged_in_as_kiosk_app_
);
1856 // Chrome is starting. An update was applied and a reboot became necessary to
1857 // complete the update process after 10 minutes of uptime. The current uptime is
1859 // Verifies that when the policy to automatically reboot after an update is
1860 // enabled, no reboot occurs and a grace period is scheduled to begin after the
1861 // minimum of 1 hour of uptime.
1862 TEST_P(AutomaticRebootManagerTest
, StartBeforeUpdateGracePeriod
) {
1863 SetUpdateStatusNeedReboot();
1864 SetUpdateRebootNeededUptime(base::TimeDelta::FromMinutes(10));
1865 task_runner_
->SetUptime(base::TimeDelta::FromMinutes(20));
1866 SetRebootAfterUpdate(true, false);
1868 // Verify that the device does not reboot immediately.
1869 CreateAutomaticRebootManager(false);
1871 // Verify that a grace period has been scheduled to start in the future.
1872 VerifyGracePeriod(base::TimeDelta::FromHours(1));
1874 // Verify that unless a non-kiosk-app session is in progress, the device
1875 // eventually reboots.
1876 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1877 is_logged_in_as_kiosk_app_
);
1880 // Chrome is starting. An update was applied and a reboot became necessary to
1881 // complete the update process after 6 hours of uptime. The current uptime is
1883 // Verifies that when the policy to automatically reboot after an update is not
1884 // enabled, no reboot occurs and no grace period is scheduled.
1885 TEST_P(AutomaticRebootManagerTest
, StartUpdateNoPolicy
) {
1886 SetUpdateStatusNeedReboot();
1887 SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
1888 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
1890 // Verify that the device does not reboot immediately.
1891 CreateAutomaticRebootManager(false);
1893 // Verify that no grace period has started.
1894 VerifyNoGracePeriod();
1896 // Verify that the device does not reboot eventually.
1897 FastForwardUntilNoTasksRemain(false);
1900 // Chrome is starting. An update was applied and a reboot became necessary to
1901 // complete the update process but the time at which this happened was lost. The
1902 // current uptime is 10 days.
1903 // Verifies that the current uptime is persisted as the time at which a reboot
1904 // became necessary. Further verifies that when the policy to automatically
1905 // reboot after an update is enabled, a reboot is requested and a grace period
1906 // is started that will end 24 hours from now.
1907 TEST_P(AutomaticRebootManagerTest
, StartUpdateTimeLost
) {
1908 SetUpdateStatusNeedReboot();
1909 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
1910 SetRebootAfterUpdate(true, false);
1912 // Verify that the device does not reboot immediately.
1913 CreateAutomaticRebootManager(false);
1915 // Verify that the current uptime has been persisted as the time at which a
1916 // reboot became necessary.
1917 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1918 &update_reboot_needed_uptime_
));
1919 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1921 // Verify that a grace period has started.
1922 VerifyGracePeriod(update_reboot_needed_uptime_
+ uptime_processing_delay_
);
1924 // Verify that unless a non-kiosk-app session is in progress, the device
1925 // eventually reboots.
1926 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
1927 is_logged_in_as_kiosk_app_
);
1930 // Chrome is starting. An update was applied and a reboot became necessary to
1931 // complete the update process but the time at which this happened was lost. The
1932 // current uptime is 10 days.
1933 // Verifies that the current uptime is persisted as the time at which a reboot
1934 // became necessary. Further verifies that when the policy to automatically
1935 // reboot after an update is not enabled, no reboot occurs and no grace period
1937 TEST_P(AutomaticRebootManagerTest
, StartUpdateNoPolicyTimeLost
) {
1938 SetUpdateStatusNeedReboot();
1939 task_runner_
->SetUptime(base::TimeDelta::FromDays(10));
1941 // Verify that the device does not reboot immediately.
1942 CreateAutomaticRebootManager(false);
1944 // Verify that the current uptime has been persisted as the time at which a
1945 // reboot became necessary.
1946 EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile(
1947 &update_reboot_needed_uptime_
));
1948 EXPECT_EQ(task_runner_
->Uptime(), update_reboot_needed_uptime_
);
1950 // Verify that no grace period has started.
1951 VerifyNoGracePeriod();
1953 // Verify that the device does not reboot eventually.
1954 FastForwardUntilNoTasksRemain(false);
1957 // Chrome is starting. No update has been applied. The current uptime is
1959 // Verifies that no time is persisted as the time at which a reboot became
1960 // necessary. Further verifies that no reboot occurs and no grace period is
1962 TEST_P(AutomaticRebootManagerTest
, StartNoUpdate
) {
1963 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1964 SetRebootAfterUpdate(true, false);
1966 // Verify that the device does not reboot immediately.
1967 CreateAutomaticRebootManager(false);
1969 // Verify that no time is persisted as the time at which a reboot became
1971 EXPECT_FALSE(ReadUpdateRebootNeededUptimeFromFile(
1972 &update_reboot_needed_uptime_
));
1974 // Verify that no grace period has started.
1975 VerifyNoGracePeriod();
1977 // Verify that the device does not reboot eventually.
1978 FastForwardUntilNoTasksRemain(false);
1981 // Chrome is starting. The uptime limit is set to 6 hours. Also, an update was
1982 // applied and a reboot became necessary to complete the update process after
1983 // 8 hours of uptime. The current uptime is 12 hours.
1984 // Verifies that when the policy to automatically reboot after an update is
1985 // enabled, a reboot is requested and a grace period is started that will end
1986 // after 6 + 24 hours of uptime.
1987 TEST_P(AutomaticRebootManagerTest
, StartUptimeLimitBeforeUpdate
) {
1988 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
1989 SetUpdateStatusNeedReboot();
1990 SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(8));
1991 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
1992 SetRebootAfterUpdate(true, false);
1994 // Verify that the device does not reboot immediately.
1995 CreateAutomaticRebootManager(false);
1997 // Verify that a grace period has started.
1998 VerifyGracePeriod(uptime_limit_
);
2000 // Verify that unless a non-kiosk-app session is in progress, the device
2001 // eventually reboots.
2002 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
2003 is_logged_in_as_kiosk_app_
);
2006 // Chrome is starting. The uptime limit is set to 8 hours. Also, an update was
2007 // applied and a reboot became necessary to complete the update process after
2008 // 6 hours of uptime. The current uptime is 12 hours.
2009 // Verifies that when the policy to automatically reboot after an update is
2010 // enabled, a reboot is requested and a grace period is started that will end
2011 // after 6 + 24 hours of uptime.
2012 TEST_P(AutomaticRebootManagerTest
, StartUpdateBeforeUptimeLimit
) {
2013 SetUptimeLimit(base::TimeDelta::FromHours(8), false);
2014 SetUpdateStatusNeedReboot();
2015 SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
2016 task_runner_
->SetUptime(base::TimeDelta::FromHours(12));
2017 SetRebootAfterUpdate(true, false);
2019 // Verify that the device does not reboot immediately.
2020 CreateAutomaticRebootManager(false);
2022 // Verify that a grace period has started.
2023 VerifyGracePeriod(update_reboot_needed_uptime_
);
2025 // Verify that unless a non-kiosk-app session is in progress, the device
2026 // eventually reboots.
2027 FastForwardUntilNoTasksRemain(!is_user_logged_in_
||
2028 is_logged_in_as_kiosk_app_
);
2031 // Chrome is starting. The uptime limit is set to 6 hours. Also, an update was
2032 // applied and a reboot became necessary to complete the update process after
2033 // 6 hours of uptime. The current uptime is not available.
2034 // Verifies that even if the policy to automatically reboot after an update is
2035 // enabled, no reboot occurs and no grace period is scheduled.
2036 TEST_P(AutomaticRebootManagerTest
, StartNoUptime
) {
2037 SetUptimeLimit(base::TimeDelta::FromHours(6), false);
2038 SetUpdateStatusNeedReboot();
2039 SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6));
2040 SetRebootAfterUpdate(true, false);
2042 // Verify that the device does not reboot immediately.
2043 CreateAutomaticRebootManager(false);
2045 // Verify that no grace period has started.
2046 VerifyNoGracePeriod();
2048 // Verify that the device does not reboot eventually.
2049 FastForwardUntilNoTasksRemain(false);
2052 INSTANTIATE_TEST_CASE_P(
2053 AutomaticRebootManagerTestInstance
,
2054 AutomaticRebootManagerTest
,
2056 AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN
,
2057 AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION
,
2058 AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION
));
2060 } // namespace system
2061 } // namespace chromeos