12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/system/automatic_reboot_manager.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utility> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/test_shell_delegate.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/file_util.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/single_thread_task_runner.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/test/simple_test_tick_clock.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/thread_task_runner_handle.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/time/tick_clock.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/mock_user_manager.h" 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_paths.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chromeos/dbus/fake_dbus_thread_manager.h" 37a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/dbus/fake_power_manager_client.h" 38a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/dbus/fake_update_engine_client.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_details.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_source.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_browser_thread.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center.h" 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::ReturnPointee; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace system { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A SingleThreadTaskRunner that mocks the current time and allows it to be 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// fast-forwarded. The current time in ticks is returned by Now(). The 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// corresponding device uptime is written to |uptime_file_|, providing a mock 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// for /proc/uptime. 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockTimeSingleThreadTaskRunner : public base::SingleThreadTaskRunner { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockTimeSingleThreadTaskRunner(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // base::SingleThreadTaskRunner: 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool RunsTasksOnCurrentThread() const OVERRIDE; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool PostDelayedTask(const tracked_objects::Location& from_here, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) OVERRIDE; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool PostNonNestableDelayedTask( 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const tracked_objects::Location& from_here, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) OVERRIDE; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetUptimeFile(const base::FilePath& uptime_file); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetUptime(const base::TimeDelta& uptime); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& Uptime() const; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeTicks& Now() const; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FastForwardBy(const base::TimeDelta& delta); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FastForwardUntilNoTasksRemain(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RunUntilIdle(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Strict weak temporal ordering of tasks. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TemporalOrder { 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator()( 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& first_task, 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& second_task) const; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockTimeSingleThreadTaskRunner(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath uptime_file_; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta uptime_; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks now_; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::priority_queue<std::pair<base::TimeTicks, base::Closure>, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::pair<base::TimeTicks, base::Closure> >, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TemporalOrder> tasks_; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockTimeSingleThreadTaskRunner); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockTimeTickClock : public base::TickClock { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit MockTimeTickClock( 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockTimeTickClock(); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // base::TickClock: 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::TimeTicks NowTicks() OVERRIDE; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner_; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockTimeTickClock); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AutomaticRebootManagerBasicTest : public testing::Test { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::OneShotTimer<AutomaticRebootManager> Timer; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutomaticRebootManagerBasicTest(); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AutomaticRebootManagerBasicTest(); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // testing::Test: 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetUpdateRebootNeededUptime(const base::TimeDelta& uptime); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetRebootAfterUpdate(bool reboot_after_update, bool expect_reboot); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetUptimeLimit(const base::TimeDelta& limit, bool expect_reboot); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyUpdateRebootNeeded(); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyResumed(bool expect_reboot); 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void NotifyTerminating(bool expect_reboot); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FastForwardBy(const base::TimeDelta& delta, bool expect_reboot); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FastForwardUntilNoTasksRemain(bool expect_reboot); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CreateAutomaticRebootManager(bool expect_reboot); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ReadUpdateRebootNeededUptimeFromFile(base::TimeDelta* uptime); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyLoginScreenIdleTimerIsStopped() const; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyNoGracePeriod() const; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyGracePeriod(const base::TimeDelta& start_uptime) const; 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_user_logged_in_; 150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool is_logged_in_as_kiosk_app_; 151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The uptime is read in the blocking thread pool and then processed on the 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // UI thread. This causes the UI thread to start processing the uptime when it 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // has increased by a small offset already. The offset is calculated and 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // stored in |uptime_processing_delay_| so that tests can accurately determine 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the uptime seen by the UI thread. 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta uptime_processing_delay_; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta update_reboot_needed_uptime_; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta uptime_limit_; 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner_; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<AutomaticRebootManager> automatic_reboot_manager_; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 165a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) protected: 166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) FakePowerManagerClient* power_manager_client_; // Not owned. 167a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) FakeUpdateEngineClient* update_engine_client_; // Not owned. 168a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 169a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Sets the status of |update_engine_client_| to NEED_REBOOT for tests. 170a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) void SetUpdateStatusNeedReboot(); 171a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyTimerIsStopped(const Timer* timer) const; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyTimerIsRunning(const Timer* timer, 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& delay) const; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyLoginScreenIdleTimerIsRunning() const; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath update_reboot_needed_uptime_file_; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool reboot_after_update_; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadTaskRunnerHandle ui_thread_task_runner_handle_; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSimple local_state_; 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockUserManager* mock_user_manager_; // Not owned. 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedUserManagerEnabler user_manager_enabler_; 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)enum AutomaticRebootManagerTestScenario { 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN, 192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION, 193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION, 194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This class runs each test case three times: 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// * once while the login screen is being shown 198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// * once while a kiosk app session is in progress 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// * once while a non-kiosk-app session is in progress 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class AutomaticRebootManagerTest 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : public AutomaticRebootManagerBasicTest, 202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public testing::WithParamInterface<AutomaticRebootManagerTestScenario> { 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutomaticRebootManagerTest(); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AutomaticRebootManagerTest(); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SaveUptimeToFile(const base::FilePath& path, 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& uptime) { 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (path.empty() || uptime == base::TimeDelta()) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string uptime_seconds = base::DoubleToString(uptime.InSecondsF()); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(static_cast<int>(uptime_seconds.size()), 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) file_util::WriteFile(path, 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_seconds.c_str(), 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_seconds.size())); 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockTimeSingleThreadTaskRunner::MockTimeSingleThreadTaskRunner() { 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::RunsTasksOnCurrentThread() const { 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::PostDelayedTask( 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const tracked_objects::Location& from_here, 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) { 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tasks_.push(std::pair<base::TimeTicks, base::Closure>(now_ + delay, task)); 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::PostNonNestableDelayedTask( 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const tracked_objects::Location& from_here, 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) { 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockTimeSingleThreadTaskRunner::SetUptimeFile( 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& uptime_file) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_file_ = uptime_file; 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SaveUptimeToFile(uptime_file_, uptime_); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockTimeSingleThreadTaskRunner::SetUptime(const base::TimeDelta& uptime) { 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_ = uptime; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SaveUptimeToFile(uptime_file_, uptime_); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::TimeDelta& MockTimeSingleThreadTaskRunner::Uptime() const { 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return uptime_; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::TimeTicks& MockTimeSingleThreadTaskRunner::Now() const { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return now_; 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockTimeSingleThreadTaskRunner::FastForwardBy( 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& delta) { 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeTicks latest = now_ + delta; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SequencedWorkerPool* blocking_pool = 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::GetBlockingPool(); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocking_pool->FlushForTesting(); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (!tasks_.empty() && tasks_.top().first <= latest) { 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_ += tasks_.top().first - now_; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SaveUptimeToFile(uptime_file_, uptime_); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now_ = tasks_.top().first; 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure task = tasks_.top().second; 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tasks_.pop(); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task.Run(); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocking_pool->FlushForTesting(); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_ += latest - now_; 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SaveUptimeToFile(uptime_file_, uptime_); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now_ = latest; 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockTimeSingleThreadTaskRunner::FastForwardUntilNoTasksRemain() { 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SequencedWorkerPool* blocking_pool = 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::GetBlockingPool(); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocking_pool->FlushForTesting(); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (!tasks_.empty()) { 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_ += tasks_.top().first - now_; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SaveUptimeToFile(uptime_file_, uptime_); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now_ = tasks_.top().first; 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure task = tasks_.top().second; 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tasks_.pop(); 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task.Run(); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocking_pool->FlushForTesting(); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockTimeSingleThreadTaskRunner::RunUntilIdle() { 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SequencedWorkerPool* blocking_pool = 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::GetBlockingPool(); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocking_pool->FlushForTesting(); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (!tasks_.empty() && tasks_.top().first <= now_) { 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure task = tasks_.top().second; 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tasks_.pop(); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task.Run(); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocking_pool->FlushForTesting(); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::TemporalOrder::operator()( 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& first_task, 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& second_task) const { 3123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return first_task.first > second_task.first; 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockTimeSingleThreadTaskRunner::~MockTimeSingleThreadTaskRunner() { 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockTimeTickClock::MockTimeTickClock( 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : task_runner_(task_runner) { 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockTimeTickClock::~MockTimeTickClock() { 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::TimeTicks MockTimeTickClock::NowTicks() { 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return task_runner_->Now(); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AutomaticRebootManagerBasicTest::AutomaticRebootManagerBasicTest() 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : is_user_logged_in_(false), 332868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_(false), 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_(new MockTimeSingleThreadTaskRunner), 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) power_manager_client_(NULL), 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_engine_client_(NULL), 336a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reboot_after_update_(false), 337a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ui_thread_task_runner_handle_(task_runner_), 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_user_manager_(new MockUserManager), 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_manager_enabler_(mock_user_manager_) { 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AutomaticRebootManagerBasicTest::~AutomaticRebootManagerBasicTest() { 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::SetUp() { 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& temp_dir = temp_dir_.path(); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath uptime_file = temp_dir.Append("uptime"); 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptimeFile(uptime_file); 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(file_util::WriteFile(uptime_file, NULL, 0)); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_reboot_needed_uptime_file_ = 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_dir.Append("update_reboot_needed_uptime"); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(file_util::WriteFile( 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_reboot_needed_uptime_file_, NULL, 0)); 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(PathService::Override(chromeos::FILE_UPTIME, uptime_file)); 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(PathService::Override(chromeos::FILE_UPDATE_REBOOT_NEEDED_UPTIME, 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_reboot_needed_uptime_file_)); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutomaticRebootManager::RegisterPrefs(local_state_.registry()); 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) FakeDBusThreadManager* dbus_manager = new FakeDBusThreadManager; 363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) power_manager_client_ = new FakePowerManagerClient; 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dbus_manager->SetPowerManagerClient( 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PowerManagerClient>(power_manager_client_)); 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) update_engine_client_ = new FakeUpdateEngineClient; 367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dbus_manager->SetUpdateEngineClient( 368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<UpdateEngineClient>(update_engine_client_)); 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DBusThreadManager::InitializeForTesting(dbus_manager); 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_user_manager_, IsUserLoggedIn()) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillRepeatedly(ReturnPointee(&is_user_logged_in_)); 373868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*mock_user_manager_, IsLoggedInAsKioskApp()) 374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .WillRepeatedly(ReturnPointee(&is_logged_in_as_kiosk_app_)); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::TearDown() { 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Let the AutomaticRebootManager, if any, unregister itself as an observer of 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // several subsystems. 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) automatic_reboot_manager_.reset(); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->RunUntilIdle(); 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DBusThreadManager::Shutdown(); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetLocalState(NULL); 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::SetUpdateRebootNeededUptime( 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& uptime) { 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_reboot_needed_uptime_ = uptime; 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SaveUptimeToFile(update_reboot_needed_uptime_file_, uptime); 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::SetRebootAfterUpdate( 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool reboot_after_update, 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_reboot) { 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reboot_after_update_ = reboot_after_update; 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.SetManagedPref( 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kRebootAfterUpdate, 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Value::CreateBooleanValue(reboot_after_update)); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->RunUntilIdle(); 402a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(expect_reboot ? 1 : 0, 403a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) power_manager_client_->request_restart_call_count()); 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::SetUptimeLimit( 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& limit, 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_reboot) { 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_limit_ = limit; 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (limit == base::TimeDelta()) { 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.RemoveManagedPref(prefs::kUptimeLimit); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.SetManagedPref( 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kUptimeLimit, 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Value::CreateIntegerValue(limit.InSeconds())); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->RunUntilIdle(); 418a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(expect_reboot ? 1 : 0, 419a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) power_manager_client_->request_restart_call_count()); 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::NotifyUpdateRebootNeeded() { 423a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 424a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) automatic_reboot_manager_->UpdateStatusChanged( 425a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) update_engine_client_->GetLastStatus()); 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->RunUntilIdle(); 427a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(0, power_manager_client_->request_restart_call_count()); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::NotifyResumed(bool expect_reboot) { 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) automatic_reboot_manager_->SystemResumed(base::TimeDelta::FromHours(1)); 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->RunUntilIdle(); 433a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(expect_reboot ? 1 : 0, 434a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) power_manager_client_->request_restart_call_count()); 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 437868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void AutomaticRebootManagerBasicTest::NotifyTerminating(bool expect_reboot) { 438868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) automatic_reboot_manager_->Observe( 439868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) chrome::NOTIFICATION_APP_TERMINATING, 440868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::Source<AutomaticRebootManagerBasicTest>(this), 441868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::NotificationService::NoDetails()); 442868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->RunUntilIdle(); 443868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(expect_reboot ? 1 : 0, 444868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) power_manager_client_->request_restart_call_count()); 445868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 446868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::FastForwardBy( 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& delta, 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_reboot) { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->FastForwardBy(delta); 451a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(expect_reboot ? 1 : 0, 452a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) power_manager_client_->request_restart_call_count()); 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::FastForwardUntilNoTasksRemain( 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_reboot) { 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->FastForwardUntilNoTasksRemain(); 458a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(expect_reboot ? 1 : 0, 459a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) power_manager_client_->request_restart_call_count()); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::CreateAutomaticRebootManager( 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_reboot) { 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) automatic_reboot_manager_.reset(new AutomaticRebootManager( 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::TickClock>(new MockTimeTickClock(task_runner_)))); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->RunUntilIdle(); 467a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(expect_reboot ? 1 : 0, 468a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) power_manager_client_->request_restart_call_count()); 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uptime_processing_delay_ = 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks() - automatic_reboot_manager_->boot_time_ - 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->Uptime(); 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(uptime_processing_delay_, base::TimeDelta()); 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_LE(uptime_processing_delay_, base::TimeDelta::FromSeconds(1)); 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_user_logged_in_ || expect_reboot) 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyLoginScreenIdleTimerIsStopped(); 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyLoginScreenIdleTimerIsRunning(); 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool AutomaticRebootManagerBasicTest::ReadUpdateRebootNeededUptimeFromFile( 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta* uptime) { 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string contents; 48558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!base::ReadFileToString(update_reboot_needed_uptime_file_, &contents)) { 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double seconds; 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!base::StringToDouble(contents.substr(0, contents.find(' ')), &seconds) || 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) seconds < 0.0) { 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *uptime = base::TimeDelta::FromMilliseconds(seconds * 1000.0); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest:: 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyLoginScreenIdleTimerIsStopped() const { 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsStopped( 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) automatic_reboot_manager_->login_screen_idle_timer_.get()); 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::VerifyNoGracePeriod() const { 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(automatic_reboot_manager_->reboot_requested_); 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsStopped(automatic_reboot_manager_->grace_start_timer_.get()); 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsStopped(automatic_reboot_manager_->grace_end_timer_.get()); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::VerifyGracePeriod( 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& start_uptime) const { 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta start = 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) start_uptime - task_runner_->Uptime() - uptime_processing_delay_; 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta end = start + base::TimeDelta::FromHours(24); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (start <= base::TimeDelta()) { 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(automatic_reboot_manager_->reboot_requested_); 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsStopped(automatic_reboot_manager_->grace_start_timer_.get()); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsRunning(automatic_reboot_manager_->grace_end_timer_.get(), 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end); 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(automatic_reboot_manager_->reboot_requested_); 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsRunning(automatic_reboot_manager_->grace_start_timer_.get(), 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) start); 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsRunning(automatic_reboot_manager_->grace_end_timer_.get(), 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::VerifyTimerIsStopped( 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Timer* timer) const { 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (timer) 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(timer->IsRunning()); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest::VerifyTimerIsRunning( 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Timer* timer, 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeDelta& delay) const { 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(timer); 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(timer->IsRunning()); 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(delay.ToInternalValue(), 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) timer->GetCurrentDelay().ToInternalValue()); 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AutomaticRebootManagerBasicTest:: 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyLoginScreenIdleTimerIsRunning() const { 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyTimerIsRunning( 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) automatic_reboot_manager_->login_screen_idle_timer_.get(), 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(60)); 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 550a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void AutomaticRebootManagerBasicTest::SetUpdateStatusNeedReboot() { 551a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) UpdateEngineClient::Status client_status; 552a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) client_status.status = UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT; 55390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) update_engine_client_->set_default_status(client_status); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AutomaticRebootManagerTest::AutomaticRebootManagerTest() { 557868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) switch (GetParam()) { 558868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN: 559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = false; 560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = false; 561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION: 563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = true; 564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = true; 565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION: 567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = true; 568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = false; 569868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 570868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AutomaticRebootManagerTest::~AutomaticRebootManagerTest() { 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is showing the login screen. The current uptime is 12 hours. 577868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that the idle timer is running. Further verifies that when a kiosk 578868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// app session begins, the idle timer is stopped. 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, LoginStopsIdleTimer) { 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately and the login screen 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // idle timer is started. 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 586868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that a kiosk app session has been started. 587868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = true; 588868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = true; 589868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) automatic_reboot_manager_->Observe( 590868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) chrome::NOTIFICATION_LOGIN_USER_CHANGED, 591868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::Source<AutomaticRebootManagerBasicTest>(this), 592868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::NotificationService::NoDetails()); 593868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 594868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the login screen idle timer is stopped. 595868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyLoginScreenIdleTimerIsStopped(); 596868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 597868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 598868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(false); 599868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 600868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 601868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is showing the login screen. The current uptime is 12 hours. 602868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that the idle timer is running. Further verifies that when a 603868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// non-kiosk-app session begins, the idle timer is stopped. 604868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, NonKioskLoginStopsIdleTimer) { 605868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 606868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 607868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately and the login screen 608868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // idle timer is started. 609868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 610868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 611868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that a non-kiosk-app session has been started. 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_user_logged_in_ = true; 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) automatic_reboot_manager_->Observe( 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_LOGIN_USER_CHANGED, 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Source<AutomaticRebootManagerBasicTest>(this), 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::NoDetails()); 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the login screen idle timer is stopped. 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyLoginScreenIdleTimerIsStopped(); 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot eventually. 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is showing the login screen. The uptime limit is 6 hours. The current 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// uptime is 12 hours. 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that user activity prevents the device from rebooting. Further 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// verifies that when user activity ceases, the devices reboots. 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, UserActivityResetsIdleTimer) { 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately and the login screen 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // idle timer is started. 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 25 minutes while simulating user activity every 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 50 seconds. 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 30; ++i) { 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward uptime by 50 seconds. Verify that the device does not reboot 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(50), false); 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Simulate user activity. 6507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch automatic_reboot_manager_->OnUserActivity(NULL); 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 60 seconds without simulating user activity. 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device reboots immediately. 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(60), true); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 658868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a kiosk app session. The current uptime is 10 days. 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the device is suspended and then resumes, it does not 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// immediately reboot. 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, ResumeNoPolicy) { 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_user_logged_in_ = true; 663868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = true; 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device does not reboot immediately. 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyResumed(false); 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot eventually. 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 680868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a non-kiosk-app session. The current uptime is 10 days. 681868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that when the device is suspended and then resumes, it does not 682868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// immediately reboot. 683868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeAppNoPolicy) { 684868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = true; 685868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 686868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 687868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately. 688868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 689868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 690868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that no grace period has started. 691868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyNoGracePeriod(); 692868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 693868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 694868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // device does not reboot immediately. 695868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NotifyResumed(false); 696868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 697868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 698868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(false); 699868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 700868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a kiosk app session. The uptime limit is 24 hours. The 702868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// current uptime is 12 hours. 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the device is suspended and then resumes, it does not 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// immediately reboot. 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, ResumeBeforeGracePeriod) { 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_user_logged_in_ = true; 707868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = true; 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device does not reboot immediately. 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyResumed(false); 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device eventually reboots. 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(true); 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 727868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a non-kiosk-app session. The uptime limit is 24 hours. The 728868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// current uptime is 12 hours. 729868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that when the device is suspended and then resumes, it does not 730868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// immediately reboot. 731868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeBeforeGracePeriod) { 732868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = true; 733868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 734868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 735868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately. 736868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 737868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 738868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 739868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 740868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 741868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 742868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyGracePeriod(uptime_limit_); 743868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 744868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 745868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // device does not reboot immediately. 746868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NotifyResumed(false); 747868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 748868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 749868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(false); 750868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 751868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 752868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a kiosk app session. The uptime limit is 6 hours. The 753868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// current uptime is 12 hours. 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the device is suspended and then resumes, it immediately 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// reboots. 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, ResumeInGracePeriod) { 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_user_logged_in_ = true; 758868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = true; 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device reboots immediately. 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyResumed(true); 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 775868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a non-kiosk-app session. The uptime limit is 6 hours. The 776868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// current uptime is 12 hours. 777868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that when the device is suspended and then resumes, it does not 778868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// immediately reboot. 779868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeInGracePeriod) { 780868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = true; 781868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 782868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 783868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately. 784868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 785868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 786868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 787868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 788868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 789868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that a grace period has started. 790868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyGracePeriod(uptime_limit_); 791868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 792868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 793868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // device does not reboot immediately. 794868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NotifyResumed(false); 795868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 796868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 797868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(false); 798868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 799868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 800868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a kiosk app session. The uptime limit is 6 hours. The 801868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// current uptime is 29 hours 30 minutes. 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the device is suspended and then resumes, it immediately 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// reboots. 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, ResumeAfterGracePeriod) { 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_user_logged_in_ = true; 806868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_ = true; 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(29) + 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromMinutes(30)); 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device reboots immediately. 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyResumed(true); 8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 824868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running a non-kiosk-app session. The uptime limit is 6 hours. The 825868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// current uptime is 29 hours 30 minutes. 826868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that when the device is suspended and then resumes, it does not 827868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// immediately reboot. 828868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(AutomaticRebootManagerBasicTest, NonKioskResumeAfterGracePeriod) { 829868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_user_logged_in_ = true; 830868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(29) + 831868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::TimeDelta::FromMinutes(30)); 832868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 833868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately. 834868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 835868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 836868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 837868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 838868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 839868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that a grace period has started. 840868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyGracePeriod(uptime_limit_); 841868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 842868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that the device has resumed from 1 hour of sleep. Verify that the 843868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // device does not reboot immediately. 844868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NotifyResumed(false); 845868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 846868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 847868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(false); 848868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 849868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 850868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running. The current uptime is 10 days. 851868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that when the browser terminates, the device does not immediately 852868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// reboot. 853868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_P(AutomaticRebootManagerTest, TerminateNoPolicy) { 854868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 855868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 856868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately. 857868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 858868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 859868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that no grace period has started. 860868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyNoGracePeriod(); 861868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 862868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that the browser is terminating. Verify that the device does not 863868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot immediately. 864868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NotifyTerminating(false); 865868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 866868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 867868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(false); 868868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 869868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 870868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running. The uptime limit is set to 24 hours. The current uptime is 871868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 12 hours. 872868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that when the browser terminates, it does not immediately reboot. 873868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_P(AutomaticRebootManagerTest, TerminateBeforeGracePeriod) { 874868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 875868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 876868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately. 877868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 878868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 879868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 880868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 881868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 882868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 883868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyGracePeriod(uptime_limit_); 884868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 885868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that the browser is terminating. Verify that the device does not 886868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot immediately. 887868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NotifyTerminating(false); 888868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 889868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 890868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 891868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 892868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 893868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 894868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 895868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Chrome is running. The uptime limit is set to 6 hours. The current uptime is 896868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 12 hours. 897868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that when the browser terminates, the device immediately reboots if 898868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// a kiosk app session is in progress. 899868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_P(AutomaticRebootManagerTest, TerminateInGracePeriod) { 900868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 901868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 902868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot immediately. 903868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(false); 904868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 905868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 906868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 907868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 908868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that a grace period has started. 909868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VerifyGracePeriod(uptime_limit_); 910868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 911868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notify that the browser is terminating. Verify that the device immediately 912868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboots if a kiosk app session is in progress. 913868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NotifyTerminating(is_logged_in_as_kiosk_app_); 914868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 915868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that if a non-kiosk-app session is in progress, the device does not 916868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot eventually. 917868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 918868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 919868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 920868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is 12 hours. 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is set to 24 hours, no reboot occurs and 9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// a grace period is scheduled to begin after 24 hours of uptime. 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, BeforeUptimeLimitGracePeriod) { 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 939868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 940868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 941868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 942868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is 12 hours. 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is set to 6 hours, a reboot is requested 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and a grace period is started that will end after 6 + 24 hours of uptime. 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, InUptimeLimitGracePeriod) { 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 963868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 964868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 965868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 966868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is 10 days. 9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is set to 6 hours, the device reboots 971868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// immediately if no non-kiosk-app-session is in progress because the grace 972868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// period ended after 6 + 24 hours of uptime. 9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, AfterUptimeLimitGracePeriod) { 9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Set the uptime limit. Verify that unless a non-kiosk-app session is in 983868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // progress, the the device immediately reboots. 984868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), !is_user_logged_in_ || 985868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 986868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 987868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that if a non-kiosk-app session is in progress, the device does not 988868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot eventually. 989868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 990868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 12 hours. The current uptime is 9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 6 hours. 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is removed, the grace period is removed. 9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UptimeLimitOffBeforeGracePeriod) { 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(6)); 9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(12), false); 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 1 hour. Verify that the device does not reboot 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromHours(1), false); 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the uptime limit. Verify that the device does not reboot 10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta(), false); 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been removed. 10172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1019868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 12 hours. The current uptime is 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 24 hours. 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is removed, the grace period is removed. 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UptimeLimitOffInGracePeriod) { 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(24)); 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(12), false); 10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the uptime limit. Verify that the device does not reboot 10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta(), false); 10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been removed. 10472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1049868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 12 hours. The current uptime is 10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 6 hours. 10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is extended to 24 hours, the grace period 10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is rescheduled to start further in the future. 10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, ExtendUptimeLimitBeforeGracePeriod) { 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(6)); 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(12), false); 10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Extend the uptime limit. Verify that the device does not reboot 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been rescheduled to start further in the 10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // future. 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1081868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1082868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1083868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1084868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 12 hours. The current uptime is 10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 18 hours. 10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is extended to 24 hours, the grace period 10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is rescheduled to start in the future. 10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, ExtendUptimeLimitInGracePeriod) { 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(18)); 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(12), false); 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 11042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Extend the uptime limit. Verify that the device does not reboot 11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been rescheduled to start in the future. 11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 11132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 18 hours. The current uptime is 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 12 hours. 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is shortened to 6 hours, the grace period 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is rescheduled to have already started. 11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, ShortenUptimeLimitBeforeToInGracePeriod) { 11252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 11262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 11282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 11292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 11312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(18), false); 11322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Shorten the uptime limit. Verify that the device does not reboot 11412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 11432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been rescheduled and has started already. 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 11512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 24 hours. The current uptime is 11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 36 hours. 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is shortened to 18 hours, the grace 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// period is rescheduled to have started earlier. 11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, ShortenUptimeLimitInToInGracePeriod) { 11582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(36)); 11592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 11622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 11642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 11652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 11672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 11682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 11702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 11712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 11722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Shorten the uptime limit. Verify that the device does not reboot 11742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 11752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(18), false); 11762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been rescheduled to have started earlier. 11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 24 hours. The current uptime is 11872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 36 hours. 11882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is shortened to 6 hours, the device 1189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// reboots immediately if no non-kiosk-app session is in progress because the 1190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// grace period ended after 6 + 24 hours of uptime. 11912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, ShortenUptimeLimitInToAfterGracePeriod) { 11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(36)); 11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 11962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 11992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 12012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 12052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Shorten the uptime limit. Verify that unless a non-kiosk-app session is in 1208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // progress, the the device immediately reboots. 1209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), !is_user_logged_in_ || 1210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 1211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that if a non-kiosk-app session is in progress, the device does not 1213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot eventually. 1214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is 12 hours. 12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when an update is applied, the current uptime is persisted as 12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the time at which a reboot became necessary. Further verifies that when the 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// policy to automatically reboot after an update is not enabled, no reboot 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// occurs and no grace period is scheduled. 12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UpdateNoPolicy) { 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 12332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 12342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 12382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 12392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 12432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 12442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 12462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is 12 hours. 12502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when an update is applied, the current uptime is persisted as 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the time at which a reboot became necessary. Further verifies that when the 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// policy to automatically reboot after an update is enabled, a reboot is 12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// requested and a grace period is started that will end 24 hours from now. 12542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, Update) { 12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 12592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 12602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 12652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 12702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_); 12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1278868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is 12 hours. 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when Chrome is notified twice that an update has been applied, 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the second notification is ignored and the uptime at which it occured does 12862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// not get persisted as the time at which an update became necessary. 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UpdateAfterUpdate) { 12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 13022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_); 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 13172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the previously persisted time at which a reboot became 13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // necessary has not been overwritten. 13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta new_update_reboot_needed_uptime; 13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &new_update_reboot_needed_uptime)); 13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(update_reboot_needed_uptime_, new_update_reboot_needed_uptime); 13242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1327868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1328868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is 10 minutes. 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, no reboot occurs a grace period is scheduled to begin after the 13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// minimum of 1 hour of uptime. Further verifies that when an update is applied, 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the current uptime is persisted as the time at which a reboot became 13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// necessary. 13372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UpdateBeforeMinimumUptime) { 13382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromMinutes(10)); 13392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 13452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 13462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 13552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 13562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to begin in the future. 13582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(base::TimeDelta::FromHours(1)); 13592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1360868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1361868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1362868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1363868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 13642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. An update was applied and a reboot became necessary to 13672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process after 6 hours of uptime. The current uptime is 13682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 12 hours. 13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 13702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, a reboot is requested and a grace period is started that will end 13712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// after 6 + 24 hours of uptime. 13722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, PolicyAfterUpdateInGracePeriod) { 13732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(6)); 13742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 13762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 13772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 13792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 13802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime to 12 hours. Verify that the device does not reboot 13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 13842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromHours(6), false); 13852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Simulate user activity. 13877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch automatic_reboot_manager_->OnUserActivity(NULL); 13882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable automatic reboot after an update has been applied. Verify that the 13902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device does not reboot immediately. 13912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 13922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 13942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(base::TimeDelta::FromHours(6) + uptime_processing_delay_); 13952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1397868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 14002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. An update was applied and a reboot became necessary to 14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process after 6 hours of uptime. The current uptime is 14042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 10 days. 14052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 1406868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// enabled, the device reboots immediately if no non-kiosk-app session is in 1407868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// progress because the grace period ended after 6 + 24 hours of uptime. 14082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, PolicyAfterUpdateAfterGracePeriod) { 14092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(6)); 14102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 14122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 14132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 14152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 14162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 14172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime to 12 hours. Verify that the device does not reboot 14192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 14202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromDays(10) - base::TimeDelta::FromHours(6), 14212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false); 14222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Simulate user activity. 14247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch automatic_reboot_manager_->OnUserActivity(NULL); 14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable automatic rebooting after an update has been applied. Verify that 1427868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // unless a non-kiosk-app session is in progress, the the device immediately 1428868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboots. 1429868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetRebootAfterUpdate(true, !is_user_logged_in_ || is_logged_in_as_kiosk_app_); 1430868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1431868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that if a non-kiosk-app session is in progress, the device does not 1432868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot eventually. 1433868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 14352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. An update was applied and a reboot became necessary to 14382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process after 6 hours of uptime. The policy to 14392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// automatically reboot after an update is enabled. The current uptime is 14402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 6 hours 20 seconds. 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 14422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// disabled, the reboot request and grace period are removed. 14432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, PolicyOffAfterUpdate) { 14442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(6)); 14452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 14462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 14482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 14492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 14512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 14522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 14532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 14552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(task_runner_->Uptime() + uptime_processing_delay_); 14562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 14582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 14592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 14602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Disable automatic rebooting after an update has been applied. Verify that 14622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the device does not reboot immediately. 14632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(false, false); 14642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been removed. 14662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 14672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1468868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The current uptime is not available. 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that even if an uptime limit is set, the policy to automatically 14742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// reboot after an update is enabled and an update has been applied, no reboot 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// occurs and no grace period is scheduled. Further verifies that no time is 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// persisted as the time at which a reboot became necessary. 14772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, NoUptime) { 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 14832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 14852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 14862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable automatic rebooting after an update has been applied. Verify that 14882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the device does not reboot immediately. 14892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 14902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 14922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 14932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 14952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 14962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 14972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no time is persisted as the time at which a reboot became 14992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // necessary. 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ReadUpdateRebootNeededUptimeFromFile( 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 15022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1506868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 15072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 15082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The policy to automatically reboot after an update is 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled. The current uptime is 12 hours. 15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when an uptime limit of 6 hours is set, the availability of an 15132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// update does not cause the grace period to be rescheduled. Further verifies 15142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// that the current uptime is persisted as the time at which a reboot became 15152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// necessary. 15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UptimeLimitBeforeUpdate) { 15172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 15182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 15192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 15212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 15222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 15272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 15282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 15302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 15312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 15322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 15342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 15352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 15362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 15382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 15392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 15402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 15412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has not been rescheduled. 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1546868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1547868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1548868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1549868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 15502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The policy to automatically reboot after an update is 15532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled. The current uptime is 12 hours. 15542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when an uptime limit of 24 hours is set, the availability of an 15552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// update causes the grace period to be rescheduled so that it ends 24 hours 15562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// from now. Further verifies that the current uptime is persisted as the time 15572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// at which a reboot became necessary. 15582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UpdateBeforeUptimeLimit) { 15592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 15602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 15612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 15632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 15642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 15662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 15672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 15692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 15702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 15722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 15732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 15742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 15762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 15772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 15782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 15802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 15812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 15822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 15832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 15842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been rescheduled to start at the time that 15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the update became available. 15872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_); 15882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1589868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1590868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1591868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1592868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 15932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 24 hours. An update was applied 15962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and a reboot became necessary to complete the update process after 12 hours. 15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The policy to automatically reboot after an update is enabled. The current 15982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// uptime is 12 hours 20 seconds. 15992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to reboot after an update is disabled, the 16002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// grace period is rescheduled to start after 24 hours of uptime. Further 16012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// verifies that when the uptime limit is removed, the grace period is removed. 16022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, PolicyOffThenUptimeLimitOff) { 16032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 16042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 16052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 16072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 16082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 16102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 16112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has started. 16132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 16142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 16162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 16172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 16182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 16202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 16212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 16222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 16232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 16242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been rescheduled to end 24 hours from now. 16262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_); 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 16302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 16312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Disable automatic reboot after an update has been applied. Verify that the 16332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device does not reboot immediately. 16342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(false, false); 16352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been rescheduled to start after 24 hours 16372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // of uptime. 16382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 16392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the uptime limit. Verify that the device does not reboot 16412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 16422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta(), false); 16432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been removed. 16452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 16462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1647868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 16482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 16492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is set to 6 hours. An update was applied 16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and a reboot became necessary to complete the update process after 12 hours. 16532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The policy to automatically reboot after an update is enabled. The current 16542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// uptime is 12 hours 20 seconds. 16552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the uptime limit is removed, the grace period is 16562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// rescheduled to have started after 12 hours of uptime. Further verifies that 16572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// when the policy to reboot after an update is disabled, the reboot request and 16582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// grace period are removed. 16592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, UptimeLimitOffThenPolicyOff) { 16602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 16612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 16622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 16652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify that an update has been applied and a reboot is necessary. Verify 16672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the device does not reboot immediately. 16682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyUpdateRebootNeeded(); 16692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 16712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 16722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 16732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 16742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 16752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has started. 16772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_); 16782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 16802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 16812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been rescheduled to have started after 16832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 6 hours of uptime. 16842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 16852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the uptime by 20 seconds. Verify that the device does not 16872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot immediately. 16882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(20), false); 16892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the uptime limit. Verify that the device does not reboot 16912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. 16922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta(), false); 16932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been rescheduled to have started after 12 16952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // hours of uptime. 16962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_); 16972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Disable automatic reboot after an update has been applied. Verify that the 16992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device does not reboot immediately. 17002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(false, false); 17012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the grace period has been removed. 17032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 17042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1705868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 17062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 17072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is running. The uptime limit is 6 hours. The current uptime is 17102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 29 hours 59 minutes 59 seconds. 1711868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that if no non-kiosk-app session is in progress, the device reboots 1712868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// immediately when the grace period ends after 6 + 24 hours of uptime. 17132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, GracePeriodEnd) { 17142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(29) + 17152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromMinutes(59) + 17162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(59)); 17172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 17192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 17202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the uptime limit. Verify that the device does not reboot immediately. 17222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 17232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 17252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 17262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1727868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Fast forward the uptime by 1 second. Verify that unless a non-kiosk-app 1728868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // session is in progress, the the device immediately reboots. 1729868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardBy(base::TimeDelta::FromSeconds(1), !is_user_logged_in_ || 1730868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 1731868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1732868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that if a non-kiosk-app session is in progress, the device does not 1733868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot eventually. 1734868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1735868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 17362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. The current uptime is 10 days. 17392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when no automatic reboot policy is enabled, no reboot occurs 17402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and no grace period is scheduled. 17412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartNoPolicy) { 17422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 17432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 17452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 17462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 17482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 17492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1750868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 17512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 17522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. The uptime limit is set to 24 hours. The current uptime 17552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is 12 hours. 17562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that no reboot occurs and a grace period is scheduled to begin after 17572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 24 hours of uptime. 17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartBeforeUptimeLimitGracePeriod) { 17592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(24), false); 17602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 17612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 17632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 17642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 17662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 17672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1768868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1769868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1770868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1771868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 17722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. The uptime limit is set to 6 hours. The current uptime is 17752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 10 days. 1776868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Verifies that if no non-kiosk-app session is in progress, the device reboots 1777868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// immediately because the grace period ended after 6 + 24 hours of uptime. 17782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartAfterUptimeLimitGracePeriod) { 17792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 17812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the the device 1783868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // immediately reboots. 1784868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(!is_user_logged_in_ || 1785868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 1786868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1787868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that if a non-kiosk-app session is in progress, the device does not 1788868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot eventually. 1789868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1790868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 17912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. The uptime limit is set to 6 hours. The current uptime is 17942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 12 hours. 17952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that a reboot is requested and a grace period is started that will 17962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// end after 6 + 24 hours of uptime. 17972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartInUptimeLimitGracePeriod) { 17982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 17992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 18002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 18022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 18032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 18052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 18062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1807868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1808868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1809868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1810868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 18112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. An update was applied and a reboot became necessary to 18142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process after 6 hours of uptime. The current uptime is 18152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 10 days. 18162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 1817868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// enabled, the device reboots immediately if no non-kiosk-app session is in 1818868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// progress because the grace period ended after 6 + 24 hours of uptime. 18192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartAfterUpdateGracePeriod) { 1820a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 18212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6)); 18222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 18232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 18242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1825868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1826868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboots immediately. 1827868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAutomaticRebootManager(!is_user_logged_in_ || 1828868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 1829868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1830868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that if a non-kiosk-app session is in progress, the device does not 1831868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // reboot eventually. 1832868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1833868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 18342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. An update was applied and a reboot became necessary to 18372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process after 6 hours of uptime. The current uptime is 18382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 12 hours. 18392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 18402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, a reboot is requested and a grace period is started that will end 18412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// after 6 + 24 hours of uptime. 18422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartInUpdateGracePeriod) { 1843a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 18442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6)); 18452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 18462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 18472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 18492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 18502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 18522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_); 18532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1854868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1855868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1856868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1857868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 18582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. An update was applied and a reboot became necessary to 18612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process after 10 minutes of uptime. The current uptime is 18622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 20 minutes. 18632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 18642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, no reboot occurs and a grace period is scheduled to begin after the 18652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// minimum of 1 hour of uptime. 18662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartBeforeUpdateGracePeriod) { 1867a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 18682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpdateRebootNeededUptime(base::TimeDelta::FromMinutes(10)); 18692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromMinutes(20)); 18702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 18712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 18732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 18742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has been scheduled to start in the future. 18762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(base::TimeDelta::FromHours(1)); 18772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1878868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1879868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1880868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1881868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 18822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. An update was applied and a reboot became necessary to 18852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process after 6 hours of uptime. The current uptime is 18862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 10 days. 18872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is not 18882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, no reboot occurs and no grace period is scheduled. 18892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartUpdateNoPolicy) { 1890a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 18912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6)); 18922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 18932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 18952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 18962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 18982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 18992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1900868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 19012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 19022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. An update was applied and a reboot became necessary to 19052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process but the time at which this happened was lost. The 19062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// current uptime is 10 days. 19072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that the current uptime is persisted as the time at which a reboot 19082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// became necessary. Further verifies that when the policy to automatically 19092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// reboot after an update is enabled, a reboot is requested and a grace period 19102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is started that will end 24 hours from now. 19112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartUpdateTimeLost) { 1912a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 19132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 19142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 19152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 19172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 19182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 19202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 19212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 19222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 19232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 19242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 19262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_ + uptime_processing_delay_); 19272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1928868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 1929868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 1930868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 1931868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 19322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. An update was applied and a reboot became necessary to 19352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// complete the update process but the time at which this happened was lost. The 19362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// current uptime is 10 days. 19372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that the current uptime is persisted as the time at which a reboot 19382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// became necessary. Further verifies that when the policy to automatically 19392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// reboot after an update is not enabled, no reboot occurs and no grace period 19402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is scheduled. 19412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartUpdateNoPolicyTimeLost) { 1942a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 19432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromDays(10)); 19442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 19462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 19472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the current uptime has been persisted as the time at which a 19492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reboot became necessary. 19502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ReadUpdateRebootNeededUptimeFromFile( 19512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 19522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(task_runner_->Uptime(), update_reboot_needed_uptime_); 19532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 19552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 19562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1957868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 19582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 19592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. No update has been applied. The current uptime is 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 12 hours. 19632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that no time is persisted as the time at which a reboot became 19642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// necessary. Further verifies that no reboot occurs and no grace period is 19652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// scheduled. 19662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartNoUpdate) { 19672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 19682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 19692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 19712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 19722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no time is persisted as the time at which a reboot became 19742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // necessary. 19752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ReadUpdateRebootNeededUptimeFromFile( 19762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &update_reboot_needed_uptime_)); 19772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 19792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 19802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1981868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 19822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 19832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. The uptime limit is set to 6 hours. Also, an update was 19862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// applied and a reboot became necessary to complete the update process after 19872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 8 hours of uptime. The current uptime is 12 hours. 19882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 19892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, a reboot is requested and a grace period is started that will end 19902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// after 6 + 24 hours of uptime. 19912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartUptimeLimitBeforeUpdate) { 19922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 1993a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 19942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(8)); 19952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 19962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 19972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 19992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 20002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 20022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(uptime_limit_); 20032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2004868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 2005868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 2006868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 2007868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 20082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 20092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. The uptime limit is set to 8 hours. Also, an update was 20112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// applied and a reboot became necessary to complete the update process after 20122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 6 hours of uptime. The current uptime is 12 hours. 20132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the policy to automatically reboot after an update is 20142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, a reboot is requested and a grace period is started that will end 20152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// after 6 + 24 hours of uptime. 20162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartUpdateBeforeUptimeLimit) { 20172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(8), false); 2018a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 20192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6)); 20202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task_runner_->SetUptime(base::TimeDelta::FromHours(12)); 20212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 20222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 20242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 20252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that a grace period has started. 20272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGracePeriod(update_reboot_needed_uptime_); 20282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2029868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that unless a non-kiosk-app session is in progress, the device 2030868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // eventually reboots. 2031868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FastForwardUntilNoTasksRemain(!is_user_logged_in_ || 2032868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) is_logged_in_as_kiosk_app_); 20332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 20342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Chrome is starting. The uptime limit is set to 6 hours. Also, an update was 20362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// applied and a reboot became necessary to complete the update process after 20372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 6 hours of uptime. The current uptime is not available. 20382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that even if the policy to automatically reboot after an update is 20392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// enabled, no reboot occurs and no grace period is scheduled. 20402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(AutomaticRebootManagerTest, StartNoUptime) { 20412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUptimeLimit(base::TimeDelta::FromHours(6), false); 2042a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetUpdateStatusNeedReboot(); 20432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUpdateRebootNeededUptime(base::TimeDelta::FromHours(6)); 20442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRebootAfterUpdate(true, false); 20452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the device does not reboot immediately. 20472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateAutomaticRebootManager(false); 20482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no grace period has started. 20502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyNoGracePeriod(); 20512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2052868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Verify that the device does not reboot eventually. 20532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FastForwardUntilNoTasksRemain(false); 20542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 20552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2056868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2057868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutomaticRebootManagerTestInstance, 2058868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutomaticRebootManagerTest, 2059868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ::testing::Values( 2060868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_LOGIN_SCREEN, 2061868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_KIOSK_APP_SESSION, 2062868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AUTOMATIC_REBOOT_MANAGER_TEST_SCENARIO_NON_KIOSK_APP_SESSION)); 20632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace system 20652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 2066