kiosk_mode_settings_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h"
6
7#include "base/bind.h"
8#include "base/bind_helpers.h"
9#include "base/message_loop.h"
10#include "base/values.h"
11#include "chrome/browser/chromeos/settings/cros_settings.h"
12#include "chrome/browser/chromeos/settings/cros_settings_names.h"
13#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
14#include "content/public/test/test_browser_thread.h"
15#include "testing/gtest/include/gtest/gtest.h"
16
17namespace {
18
19const int kFudgeInt = 100;
20
21}
22
23namespace chromeos {
24
25class KioskModeSettingsTest : public testing::Test {
26 protected:
27  KioskModeSettingsTest()
28      : message_loop_(MessageLoop::TYPE_UI),
29        ui_thread_(content::BrowserThread::UI, &message_loop_),
30        file_thread_(content::BrowserThread::FILE, &message_loop_) {
31    CrosSettings* cros_settings = CrosSettings::Get();
32
33    // Remove the real DeviceSettingsProvider and replace it with a stub.
34    device_settings_provider_ =
35        cros_settings->GetProvider(chromeos::kReportDeviceVersionInfo);
36    EXPECT_TRUE(device_settings_provider_ != NULL);
37    EXPECT_TRUE(
38        cros_settings->RemoveSettingsProvider(device_settings_provider_));
39    cros_settings->AddSettingsProvider(&stub_settings_provider_);
40  }
41
42  virtual ~KioskModeSettingsTest() {
43    // Restore the real DeviceSettingsProvider.
44    CrosSettings* cros_settings = CrosSettings::Get();
45    EXPECT_TRUE(
46      cros_settings->RemoveSettingsProvider(&stub_settings_provider_));
47    cros_settings->AddSettingsProvider(device_settings_provider_);
48  }
49
50  virtual void SetUp() OVERRIDE {
51    if (!KioskModeSettings::Get()->is_initialized()) {
52      KioskModeSettings::Get()->Initialize(
53          base::Bind(&KioskModeSettingsTest::SetUp,
54                     base::Unretained(this)));
55      return;
56    }
57  }
58
59  virtual void TearDown() OVERRIDE {
60    KioskModeSettings::Get()->set_initialized(false);
61  }
62
63  void ReInitialize() {
64    KioskModeSettings::Get()->set_initialized(false);
65    KioskModeSettings::Get()->Initialize(base::Bind(&base::DoNothing));
66  }
67
68  void DisableKioskModeSettings() {
69    KioskModeSettings::Get()->set_initialized(false);
70  }
71
72  MessageLoop message_loop_;
73  content::TestBrowserThread ui_thread_;
74  content::TestBrowserThread file_thread_;
75
76  CrosSettingsProvider* device_settings_provider_;
77  StubCrosSettingsProvider stub_settings_provider_;
78};
79
80TEST_F(KioskModeSettingsTest, DisabledByDefault) {
81  EXPECT_FALSE(KioskModeSettings::Get()->IsKioskModeEnabled());
82}
83
84TEST_F(KioskModeSettingsTest, InstanceAvailable) {
85  EXPECT_TRUE(KioskModeSettings::Get() != NULL);
86  EXPECT_TRUE(KioskModeSettings::Get()->is_initialized());
87}
88
89TEST_F(KioskModeSettingsTest, CheckLogoutTimeoutBounds) {
90  chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
91
92  // Check if we go over max.
93  cros_settings->SetInteger(
94      kIdleLogoutTimeout,
95      KioskModeSettings::kMaxIdleLogoutTimeout + kFudgeInt);
96  ReInitialize();
97  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
98            base::TimeDelta::FromMilliseconds(
99                KioskModeSettings::kMaxIdleLogoutTimeout));
100
101  // Check if we go under min.
102  cros_settings->SetInteger(
103      kIdleLogoutTimeout,
104      KioskModeSettings::kMinIdleLogoutTimeout - kFudgeInt);
105  ReInitialize();
106  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
107            base::TimeDelta::FromMilliseconds(
108                KioskModeSettings::kMinIdleLogoutTimeout));
109
110  // Check if we are between max and min.
111  cros_settings->SetInteger(
112      kIdleLogoutTimeout,
113      KioskModeSettings::kMaxIdleLogoutTimeout - kFudgeInt);
114  ReInitialize();
115  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
116            base::TimeDelta::FromMilliseconds(
117                KioskModeSettings::kMaxIdleLogoutTimeout - kFudgeInt));
118}
119
120TEST_F(KioskModeSettingsTest, CheckLogoutWarningDurationBounds) {
121  chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
122
123  // Check if we go over max.
124  cros_settings->SetInteger(
125      kIdleLogoutWarningDuration,
126      KioskModeSettings::kMaxIdleLogoutWarningDuration + kFudgeInt);
127  ReInitialize();
128  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
129            base::TimeDelta::FromMilliseconds(
130                KioskModeSettings::kMaxIdleLogoutWarningDuration));
131
132  // Check if we go under min.
133  cros_settings->SetInteger(
134      kIdleLogoutWarningDuration,
135      KioskModeSettings::kMinIdleLogoutWarningDuration - kFudgeInt);
136  ReInitialize();
137  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
138            base::TimeDelta::FromMilliseconds(
139                KioskModeSettings::kMinIdleLogoutWarningDuration));
140
141  // Check if we are between max and min.
142  cros_settings->SetInteger(
143      kIdleLogoutWarningDuration,
144      KioskModeSettings::kMaxIdleLogoutWarningDuration - kFudgeInt);
145  ReInitialize();
146  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
147            base::TimeDelta::FromMilliseconds(
148                KioskModeSettings::kMaxIdleLogoutWarningDuration - kFudgeInt));
149}
150
151TEST_F(KioskModeSettingsTest, UnitializedValues) {
152  DisableKioskModeSettings();
153
154  // Time delta initializes to '0' microseconds.
155  EXPECT_LT(KioskModeSettings::Get()->GetScreensaverTimeout(),
156            base::TimeDelta());
157  EXPECT_LT(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
158            base::TimeDelta());
159  EXPECT_LT(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
160            base::TimeDelta());
161}
162
163}  // namespace chromeos
164