Adding instrumentation to locate the source of jankiness
[chromium-blink-merge.git] / chrome / browser / chromeos / system / automatic_reboot_manager_unittest.cc
blob6a233763b911caef54753e66e7026bfb42abe8ea
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"
7 #include <string>
8 #include <utility>
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;
49 namespace chromeos {
50 namespace system {
52 namespace {
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
57 // for /proc/uptime.
58 class MockTimeSingleThreadTaskRunner : public base::SingleThreadTaskRunner {
59 public:
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();
80 void RunUntilIdle();
82 private:
83 // Strict weak temporal ordering of tasks.
84 class TemporalOrder {
85 public:
86 bool operator()(
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_;
95 base::TimeTicks now_;
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 {
104 public:
105 explicit MockTimeTickClock(
106 scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner);
107 virtual ~MockTimeTickClock();
109 // base::TickClock:
110 virtual base::TimeTicks NowTicks() override;
112 private:
113 scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner_;
115 DISALLOW_COPY_AND_ASSIGN(MockTimeTickClock);
118 } // namespace
120 class AutomaticRebootManagerBasicTest : public testing::Test {
121 protected:
122 typedef base::OneShotTimer<AutomaticRebootManager> Timer;
124 AutomaticRebootManagerBasicTest();
125 virtual ~AutomaticRebootManagerBasicTest();
127 // testing::Test:
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_;
164 protected:
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();
171 private:
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> {
202 protected:
203 AutomaticRebootManagerTest();
204 virtual ~AutomaticRebootManagerTest();
207 void SaveUptimeToFile(const base::FilePath& path,
208 const base::TimeDelta& uptime) {
209 if (path.empty() || uptime == base::TimeDelta())
210 return;
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 {
222 return true;
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));
230 return true;
233 bool MockTimeSingleThreadTaskRunner::PostNonNestableDelayedTask(
234 const tracked_objects::Location& from_here,
235 const base::Closure& task,
236 base::TimeDelta delay) {
237 NOTREACHED();
238 return false;
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) {
248 uptime_ = uptime;
249 SaveUptimeToFile(uptime_file_, uptime_);
252 const base::TimeDelta& MockTimeSingleThreadTaskRunner::Uptime() const {
253 return uptime_;
256 const base::TimeTicks& MockTimeSingleThreadTaskRunner::Now() const {
257 return now_;
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;
271 tasks_.pop();
272 task.Run();
273 blocking_pool->FlushForTesting();
275 uptime_ += latest - now_;
276 SaveUptimeToFile(uptime_file_, uptime_);
277 now_ = latest;
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;
289 tasks_.pop();
290 task.Run();
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;
301 tasks_.pop();
302 task.Run();
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);
408 } else {
409 local_state_.SetManagedPref(
410 prefs::kUptimeLimit,
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();
474 else
475 VerifyLoginScreenIdleTimerIsRunning();
478 bool AutomaticRebootManagerBasicTest::ReadUpdateRebootNeededUptimeFromFile(
479 base::TimeDelta* uptime) {
480 std::string contents;
481 if (!base::ReadFileToString(update_reboot_needed_uptime_file_, &contents)) {
482 return false;
484 double seconds;
485 if (!base::StringToDouble(contents.substr(0, contents.find(' ')), &seconds) ||
486 seconds < 0.0) {
487 return false;
489 *uptime = base::TimeDelta::FromMilliseconds(seconds * 1000.0);
490 return true;
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(),
514 end);
515 } else {
516 EXPECT_FALSE(automatic_reboot_manager_->reboot_requested_);
517 VerifyTimerIsRunning(automatic_reboot_manager_->grace_start_timer_.get(),
518 start);
519 VerifyTimerIsRunning(automatic_reboot_manager_->grace_end_timer_.get(),
520 end);
524 void AutomaticRebootManagerBasicTest::VerifyTimerIsStopped(
525 const Timer* timer) const {
526 if (timer)
527 EXPECT_FALSE(timer->IsRunning());
530 void AutomaticRebootManagerBasicTest::VerifyTimerIsRunning(
531 const Timer* timer,
532 const base::TimeDelta& delay) const {
533 ASSERT_TRUE(timer);
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;
557 break;
558 case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION:
559 is_user_logged_in_ = true;
560 is_logged_in_as_kiosk_app_ = true;
561 break;
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;
565 break;
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
639 // 50 seconds.
640 for (int i = 0; i < 30; ++i) {
641 // Fast forward uptime by 50 seconds. Verify that the device does not reboot
642 // immediately.
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
751 // reboots.
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.
768 NotifyResumed(true);
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
799 // reboots.
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.
817 NotifyResumed(true);
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
848 // reboot.
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
867 // 12 hours.
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
892 // 12 hours.
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
990 // 6 hours.
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
1005 // immediately.
1006 FastForwardBy(base::TimeDelta::FromHours(1), false);
1008 // Remove the uptime limit. Verify that the device does not reboot
1009 // immediately.
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
1020 // 24 hours.
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
1039 // immediately.
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
1050 // 6 hours.
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
1070 // immediately.
1071 SetUptimeLimit(base::TimeDelta::FromHours(24), false);
1073 // Verify that the grace period has been rescheduled to start further in the
1074 // future.
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
1084 // 18 hours.
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
1104 // immediately.
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
1117 // 12 hours.
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
1137 // immediately.
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
1150 // 36 hours.
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
1170 // immediately.
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
1183 // 36 hours.
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
1332 // necessary.
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
1364 // 12 hours.
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
1379 // immediately.
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
1400 // 10 days.
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
1415 // immediately.
1416 FastForwardBy(base::TimeDelta::FromDays(10) - base::TimeDelta::FromHours(6),
1417 false);
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
1424 // reboots.
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
1495 // necessary.
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
1511 // necessary.
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
1633 // of uptime.
1634 VerifyGracePeriod(uptime_limit_);
1636 // Remove the uptime limit. Verify that the device does not reboot
1637 // immediately.
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
1687 // immediately.
1688 SetUptimeLimit(base::TimeDelta(), false);
1690 // Verify that a grace period has been rescheduled to have started after 12
1691 // hours of uptime.
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
1751 // is 12 hours.
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
1771 // 10 days.
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
1790 // 12 hours.
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
1811 // 10 days.
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
1834 // 12 hours.
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
1858 // 20 minutes.
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
1882 // 10 days.
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
1936 // is scheduled.
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
1958 // 12 hours.
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
1961 // scheduled.
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
1970 // necessary.
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,
2055 ::testing::Values(
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