Index: chrome/browser/chromeos/policy/device_status_collector_browsertest.cc |
diff --git a/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc b/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc |
index c6b6fb798fb34b9b53ef40af1ec46af312ee0da5..9abed6543c3053b9ef226388fb94a68122adb941 100644 |
--- a/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc |
+++ b/chrome/browser/chromeos/policy/device_status_collector_browsertest.cc |
@@ -19,6 +19,7 @@ |
#include "chrome/browser/chromeos/login/users/mock_user_manager.h" |
#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" |
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
+#include "chrome/browser/chromeos/policy/device_local_account.h" |
#include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" |
#include "chrome/browser/chromeos/settings/cros_settings.h" |
#include "chrome/browser/chromeos/settings/device_settings_service.h" |
@@ -47,6 +48,7 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
+using ::testing::Return; |
using ::testing::ReturnRef; |
using base::Time; |
using base::TimeDelta; |
@@ -57,6 +59,8 @@ namespace em = enterprise_management; |
namespace { |
const int64 kMillisecondsPerDay = Time::kMicrosecondsPerDay / 1000; |
+const char kKioskAccountId[] = "kiosk_user@localhost"; |
+const char kKioskAppId[] = "kiosk_app_id"; |
scoped_ptr<content::Geoposition> mock_position_to_return_next; |
@@ -93,8 +97,8 @@ class TestingDeviceStatusCollector : public policy::DeviceStatusCollector { |
local_state, |
provider, |
location_update_requester, |
- volume_info_fetcher), |
- kiosk_mode_(false) { |
+ volume_info_fetcher) { |
+ |
// Set the baseline time to a fixed value (1 AM) to prevent test flakiness |
// due to a single activity period spanning two days. |
SetBaselineTime(Time::Now().LocalMidnight() + TimeDelta::FromHours(1)); |
@@ -129,12 +133,21 @@ class TestingDeviceStatusCollector : public policy::DeviceStatusCollector { |
RefreshSampleResourceUsage(); |
} |
- void set_kiosk_mode(bool is_kiosk) { |
- kiosk_mode_ = is_kiosk; |
+ void set_kiosk_account(scoped_ptr<policy::DeviceLocalAccount> account) { |
+ kiosk_account_ = account.Pass(); |
+ } |
+ |
+ scoped_ptr<policy::DeviceLocalAccount> |
+ GetAutoLaunchedKioskSessionInfo() override { |
+ if (kiosk_account_) |
+ return make_scoped_ptr(new policy::DeviceLocalAccount(*kiosk_account_)); |
+ return scoped_ptr<policy::DeviceLocalAccount>(); |
} |
- bool IsAutoLaunchedKioskSession() override { |
- return kiosk_mode_; |
+ std::string GetAppVersion(const std::string& app_id) override { |
+ // Just return the app_id as the version - this makes it easy for tests |
+ // to confirm that the correct app's version was requested. |
+ return app_id; |
} |
void RefreshSampleResourceUsage() { |
@@ -171,7 +184,7 @@ class TestingDeviceStatusCollector : public policy::DeviceStatusCollector { |
std::vector<double> mock_cpu_usage_; |
- bool kiosk_mode_; |
+ scoped_ptr<policy::DeviceLocalAccount> kiosk_account_; |
}; |
// Return the total number of active milliseconds contained in a device |
@@ -229,7 +242,12 @@ class DeviceStatusCollectorTest : public testing::Test { |
"device_id", |
DEVICE_MODE_ENTERPRISE), |
user_manager_(new chromeos::MockUserManager()), |
- user_manager_enabler_(user_manager_) { |
+ user_manager_enabler_(user_manager_), |
+ fake_local_account_( |
+ policy::DeviceLocalAccount::TYPE_KIOSK_APP, |
+ kKioskAccountId, |
+ kKioskAppId, |
+ std::string()) { |
bartfab (slow)
2015/02/16 13:30:33
Nit: /* kiosk_app_update_url */
Andrew T Wilson (Slow)
2015/02/17 10:57:25
Done.
|
// Run this test with a well-known timezone so that Time::LocalMidnight() |
// returns the same values on all machines. |
scoped_ptr<base::Environment> env(base::Environment::Create()); |
@@ -340,6 +358,15 @@ class DeviceStatusCollectorTest : public testing::Test { |
location.error_code()); |
} |
+ void MockRunningKioskApp(const DeviceLocalAccount& account) { |
+ std::vector<DeviceLocalAccount> accounts; |
+ accounts.push_back(account); |
+ SetDeviceLocalAccounts(cros_settings_, accounts); |
+ user_manager_->CreateKioskAppUser(account.user_id); |
+ EXPECT_CALL(*user_manager_, IsLoggedInAsKioskApp()).WillRepeatedly( |
+ Return(true)); |
+ } |
+ |
protected: |
// Convenience method. |
int64 ActivePeriodMilliseconds() { |
@@ -367,6 +394,7 @@ class DeviceStatusCollectorTest : public testing::Test { |
chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
em::DeviceStatusReportRequest status_; |
scoped_ptr<TestingDeviceStatusCollector> status_collector_; |
+ const policy::DeviceLocalAccount fake_local_account_; |
bartfab (slow)
2015/02/16 13:30:33
Nit: s/local/device_local/
Andrew T Wilson (Slow)
2015/02/17 10:57:25
Done.
|
}; |
TEST_F(DeviceStatusCollectorTest, AllIdle) { |
@@ -841,6 +869,47 @@ TEST_F(DeviceStatusCollectorTest, TestCPUSamples) { |
EXPECT_EQ(0, status_.cpu_utilization_pct().size()); |
} |
+TEST_F(DeviceStatusCollectorTest, NoSessionStatusIfNotKioskMode) { |
+ // Should not report session status if we don't have an active kiosk app. |
+ cros_settings_->SetBoolean(chromeos::kReportDeviceSessionStatus, true); |
+ status_collector_->set_kiosk_account( |
bartfab (slow)
2015/02/16 13:30:33
Nit: This is unnecessary. status_collector_->kiosk
Andrew T Wilson (Slow)
2015/02/17 10:57:25
Done.
|
+ scoped_ptr<policy::DeviceLocalAccount>()); |
+ em::SessionStatusReportRequest session_status; |
+ EXPECT_FALSE(status_collector_->GetDeviceSessionStatus(&session_status)); |
+} |
+ |
+TEST_F(DeviceStatusCollectorTest, NoSessionStatusIfSessionReportingDisabled) { |
+ // Should not report session status if session status reporting is disabled. |
+ cros_settings_->SetBoolean(chromeos::kReportDeviceSessionStatus, false); |
+ status_collector_->set_kiosk_account(make_scoped_ptr( |
+ new policy::DeviceLocalAccount(fake_local_account_)).Pass()); |
+ // Setup a device-local account for single-app kiosk mode. |
bartfab (slow)
2015/02/16 13:30:33
Nit: s/Setup/Set up/
Andrew T Wilson (Slow)
2015/02/17 10:57:25
Done.
|
+ MockRunningKioskApp(fake_local_account_); |
+ |
+ em::SessionStatusReportRequest session_status; |
+ EXPECT_FALSE(status_collector_->GetDeviceSessionStatus(&session_status)); |
+} |
+ |
+TEST_F(DeviceStatusCollectorTest, ReportSessionStatus) { |
+ cros_settings_->SetBoolean(chromeos::kReportDeviceSessionStatus, true); |
+ status_collector_->set_kiosk_account(make_scoped_ptr( |
+ new policy::DeviceLocalAccount(fake_local_account_)).Pass()); |
+ |
+ // Setup a device-local account for single-app kiosk mode. |
bartfab (slow)
2015/02/16 13:30:33
Nit: s/Setup/Set up/
Andrew T Wilson (Slow)
2015/02/17 10:57:25
Done.
|
+ MockRunningKioskApp(fake_local_account_); |
+ |
+ em::SessionStatusReportRequest session_status; |
+ EXPECT_TRUE(status_collector_->GetDeviceSessionStatus(&session_status)); |
+ ASSERT_EQ(1, session_status.installed_apps_size()); |
+ EXPECT_EQ(kKioskAccountId, session_status.device_local_account_id()); |
+ const em::AppStatus app = session_status.installed_apps(0); |
+ EXPECT_EQ(kKioskAppId, app.app_id()); |
+ // Test code just sets the version to the app ID. |
+ EXPECT_EQ(kKioskAppId, app.extension_version()); |
+ EXPECT_FALSE(app.has_status()); |
+ EXPECT_FALSE(app.has_error()); |
+} |
+ |
// Fake device state. |
struct FakeDeviceData { |
const char* device_path; |
@@ -1046,7 +1115,8 @@ TEST_F(DeviceStatusCollectorNetworkInterfacesTest, NoNetworkStateIfNotKiosk) { |
TEST_F(DeviceStatusCollectorNetworkInterfacesTest, NetworkInterfaces) { |
// Mock that we are in kiosk mode so we report network state. |
- status_collector_->set_kiosk_mode(true); |
+ status_collector_->set_kiosk_account(make_scoped_ptr( |
+ new policy::DeviceLocalAccount(fake_local_account_)).Pass()); |
// Interfaces should be reported by default. |
GetStatus(); |