| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/policy/device_status_collector.h" | 5 #include "chrome/browser/chromeos/policy/device_status_collector.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/environment.h" | 11 #include "base/environment.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 15 #include "base/prefs/pref_service.h" | 15 #include "base/prefs/pref_service.h" |
| 16 #include "base/prefs/testing_pref_service.h" | 16 #include "base/prefs/testing_pref_service.h" |
| 17 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
| 18 #include "base/threading/sequenced_worker_pool.h" | 18 #include "base/threading/sequenced_worker_pool.h" |
| 19 #include "chrome/browser/chromeos/login/users/mock_user_manager.h" | 19 #include "chrome/browser/chromeos/login/users/mock_user_manager.h" |
| 20 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" | 20 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" |
| 21 #include "chrome/browser/chromeos/ownership/fake_owner_settings_service.h" |
| 21 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" | 22 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
| 22 #include "chrome/browser/chromeos/policy/device_local_account.h" | 23 #include "chrome/browser/chromeos/policy/device_local_account.h" |
| 23 #include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" | 24 #include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" |
| 24 #include "chrome/browser/chromeos/settings/cros_settings.h" | 25 #include "chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h" |
| 25 #include "chrome/browser/chromeos/settings/device_settings_service.h" | |
| 26 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" | |
| 27 #include "chrome/common/pref_names.h" | 26 #include "chrome/common/pref_names.h" |
| 28 #include "chrome/test/base/testing_browser_process.h" | 27 #include "chrome/test/base/testing_browser_process.h" |
| 29 #include "chromeos/dbus/cros_disks_client.h" | 28 #include "chromeos/dbus/cros_disks_client.h" |
| 30 #include "chromeos/dbus/dbus_thread_manager.h" | 29 #include "chromeos/dbus/dbus_thread_manager.h" |
| 31 #include "chromeos/dbus/shill_device_client.h" | 30 #include "chromeos/dbus/shill_device_client.h" |
| 32 #include "chromeos/dbus/shill_ipconfig_client.h" | 31 #include "chromeos/dbus/shill_ipconfig_client.h" |
| 33 #include "chromeos/dbus/shill_service_client.h" | 32 #include "chromeos/dbus/shill_service_client.h" |
| 34 #include "chromeos/disks/disk_mount_manager.h" | 33 #include "chromeos/disks/disk_mount_manager.h" |
| 35 #include "chromeos/disks/mock_disk_mount_manager.h" | 34 #include "chromeos/disks/mock_disk_mount_manager.h" |
| 36 #include "chromeos/network/network_handler.h" | 35 #include "chromeos/network/network_handler.h" |
| 37 #include "chromeos/network/network_state.h" | 36 #include "chromeos/network/network_state.h" |
| 38 #include "chromeos/network/network_state_handler.h" | 37 #include "chromeos/network/network_state_handler.h" |
| 39 #include "chromeos/settings/cros_settings_names.h" | 38 #include "chromeos/settings/cros_settings_names.h" |
| 40 #include "chromeos/settings/cros_settings_provider.h" | |
| 41 #include "chromeos/system/fake_statistics_provider.h" | 39 #include "chromeos/system/fake_statistics_provider.h" |
| 42 #include "content/public/browser/browser_thread.h" | 40 #include "content/public/browser/browser_thread.h" |
| 43 #include "content/public/browser/geolocation_provider.h" | 41 #include "content/public/browser/geolocation_provider.h" |
| 44 #include "content/public/test/test_browser_thread.h" | 42 #include "content/public/test/test_browser_thread.h" |
| 45 #include "content/public/test/test_utils.h" | 43 #include "content/public/test/test_utils.h" |
| 46 #include "policy/proto/device_management_backend.pb.h" | 44 #include "policy/proto/device_management_backend.pb.h" |
| 47 #include "storage/browser/fileapi/external_mount_points.h" | 45 #include "storage/browser/fileapi/external_mount_points.h" |
| 48 #include "storage/browser/fileapi/mount_points.h" | 46 #include "storage/browser/fileapi/mount_points.h" |
| 49 #include "storage/common/fileapi/file_system_mount_option.h" | 47 #include "storage/common/fileapi/file_system_mount_option.h" |
| 50 #include "storage/common/fileapi/file_system_types.h" | 48 #include "storage/common/fileapi/file_system_types.h" |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 } // namespace | 221 } // namespace |
| 224 | 222 |
| 225 namespace policy { | 223 namespace policy { |
| 226 | 224 |
| 227 // Though it is a unit test, this test is linked with browser_tests so that it | 225 // Though it is a unit test, this test is linked with browser_tests so that it |
| 228 // runs in a separate process. The intention is to avoid overriding the timezone | 226 // runs in a separate process. The intention is to avoid overriding the timezone |
| 229 // environment variable for other tests. | 227 // environment variable for other tests. |
| 230 class DeviceStatusCollectorTest : public testing::Test { | 228 class DeviceStatusCollectorTest : public testing::Test { |
| 231 public: | 229 public: |
| 232 DeviceStatusCollectorTest() | 230 DeviceStatusCollectorTest() |
| 233 : ui_thread_(content::BrowserThread::UI, &message_loop_), | 231 : ui_thread_(content::BrowserThread::UI, &message_loop_), |
| 234 file_thread_(content::BrowserThread::FILE, &message_loop_), | 232 file_thread_(content::BrowserThread::FILE, &message_loop_), |
| 235 io_thread_(content::BrowserThread::IO, &message_loop_), | 233 io_thread_(content::BrowserThread::IO, &message_loop_), |
| 236 install_attributes_("managed.com", | 234 install_attributes_("managed.com", |
| 237 "user@managed.com", | 235 "user@managed.com", |
| 238 "device_id", | 236 "device_id", |
| 239 DEVICE_MODE_ENTERPRISE), | 237 DEVICE_MODE_ENTERPRISE), |
| 240 user_manager_(new chromeos::MockUserManager()), | 238 settings_helper_(false), |
| 241 user_manager_enabler_(user_manager_), | 239 user_manager_(new chromeos::MockUserManager()), |
| 242 fake_device_local_account_( | 240 user_manager_enabler_(user_manager_), |
| 243 policy::DeviceLocalAccount::TYPE_KIOSK_APP, | 241 fake_device_local_account_(policy::DeviceLocalAccount::TYPE_KIOSK_APP, |
| 244 kKioskAccountId, | 242 kKioskAccountId, |
| 245 kKioskAppId, | 243 kKioskAppId, |
| 246 std::string() /* kiosk_app_update_url */) { | 244 std::string() /* kiosk_app_update_url */) { |
| 247 // Run this test with a well-known timezone so that Time::LocalMidnight() | 245 // Run this test with a well-known timezone so that Time::LocalMidnight() |
| 248 // returns the same values on all machines. | 246 // returns the same values on all machines. |
| 249 scoped_ptr<base::Environment> env(base::Environment::Create()); | 247 scoped_ptr<base::Environment> env(base::Environment::Create()); |
| 250 env->SetVar("TZ", "UTC"); | 248 env->SetVar("TZ", "UTC"); |
| 251 | 249 |
| 252 // Initialize our mock mounted disk volumes. | 250 // Initialize our mock mounted disk volumes. |
| 253 scoped_ptr<chromeos::disks::MockDiskMountManager> mock_disk_mount_manager = | 251 scoped_ptr<chromeos::disks::MockDiskMountManager> mock_disk_mount_manager = |
| 254 make_scoped_ptr(new chromeos::disks::MockDiskMountManager()); | 252 make_scoped_ptr(new chromeos::disks::MockDiskMountManager()); |
| 255 AddMountPoint("/mount/volume1"); | 253 AddMountPoint("/mount/volume1"); |
| 256 AddMountPoint("/mount/volume2"); | 254 AddMountPoint("/mount/volume2"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 267 // Just verify that we are properly setting the mount points. | 265 // Just verify that we are properly setting the mount points. |
| 268 std::vector<storage::MountPoints::MountPointInfo> external_mount_points; | 266 std::vector<storage::MountPoints::MountPointInfo> external_mount_points; |
| 269 storage::ExternalMountPoints::GetSystemInstance()->AddMountPointInfosTo( | 267 storage::ExternalMountPoints::GetSystemInstance()->AddMountPointInfosTo( |
| 270 &external_mount_points); | 268 &external_mount_points); |
| 271 EXPECT_FALSE(external_mount_points.empty()); | 269 EXPECT_FALSE(external_mount_points.empty()); |
| 272 | 270 |
| 273 // DiskMountManager takes ownership of the MockDiskMountManager. | 271 // DiskMountManager takes ownership of the MockDiskMountManager. |
| 274 DiskMountManager::InitializeForTesting(mock_disk_mount_manager.release()); | 272 DiskMountManager::InitializeForTesting(mock_disk_mount_manager.release()); |
| 275 TestingDeviceStatusCollector::RegisterPrefs(prefs_.registry()); | 273 TestingDeviceStatusCollector::RegisterPrefs(prefs_.registry()); |
| 276 | 274 |
| 277 // Remove the real DeviceSettingsProvider and replace it with a stub. | 275 settings_helper_.ReplaceProvider(chromeos::kReportDeviceActivityTimes); |
| 278 cros_settings_ = chromeos::CrosSettings::Get(); | 276 owner_settings_service_ = |
| 279 device_settings_provider_ = | 277 settings_helper_.CreateOwnerSettingsService(nullptr); |
| 280 cros_settings_->GetProvider(chromeos::kReportDeviceVersionInfo); | |
| 281 EXPECT_TRUE(device_settings_provider_ != NULL); | |
| 282 EXPECT_TRUE( | |
| 283 cros_settings_->RemoveSettingsProvider(device_settings_provider_)); | |
| 284 cros_settings_->AddSettingsProvider(&stub_settings_provider_); | |
| 285 | 278 |
| 286 RestartStatusCollector(base::Bind(&GetEmptyVolumeInfo), | 279 RestartStatusCollector(base::Bind(&GetEmptyVolumeInfo), |
| 287 base::Bind(&GetEmptyCPUStatistics)); | 280 base::Bind(&GetEmptyCPUStatistics)); |
| 288 } | 281 } |
| 289 | 282 |
| 290 void AddMountPoint(const std::string& mount_point) { | 283 void AddMountPoint(const std::string& mount_point) { |
| 291 mount_point_map_.insert(DiskMountManager::MountPointMap::value_type( | 284 mount_point_map_.insert(DiskMountManager::MountPointMap::value_type( |
| 292 mount_point, | 285 mount_point, |
| 293 DiskMountManager::MountPointInfo( | 286 DiskMountManager::MountPointInfo( |
| 294 mount_point, mount_point, chromeos::MOUNT_TYPE_DEVICE, | 287 mount_point, mount_point, chromeos::MOUNT_TYPE_DEVICE, |
| 295 chromeos::disks::MOUNT_CONDITION_NONE))); | 288 chromeos::disks::MOUNT_CONDITION_NONE))); |
| 296 } | 289 } |
| 297 | 290 |
| 298 ~DeviceStatusCollectorTest() override { | 291 ~DeviceStatusCollectorTest() override { |
| 299 // Finish pending tasks. | 292 // Finish pending tasks. |
| 300 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 293 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 301 message_loop_.RunUntilIdle(); | 294 message_loop_.RunUntilIdle(); |
| 302 storage::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); | 295 storage::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); |
| 303 DiskMountManager::Shutdown(); | 296 DiskMountManager::Shutdown(); |
| 304 | |
| 305 // Restore the real DeviceSettingsProvider. | |
| 306 EXPECT_TRUE( | |
| 307 cros_settings_->RemoveSettingsProvider(&stub_settings_provider_)); | |
| 308 cros_settings_->AddSettingsProvider(device_settings_provider_); | |
| 309 } | 297 } |
| 310 | 298 |
| 311 void SetUp() override { | 299 void SetUp() override { |
| 312 // Disable network interface reporting since it requires additional setup. | 300 // Disable network interface reporting since it requires additional setup. |
| 313 cros_settings_->SetBoolean(chromeos::kReportDeviceNetworkInterfaces, false); | 301 settings_helper_.SetBoolean(chromeos::kReportDeviceNetworkInterfaces, |
| 302 false); |
| 314 } | 303 } |
| 315 | 304 |
| 305 void TearDown() override { settings_helper_.RestoreProvider(); } |
| 306 |
| 316 void RestartStatusCollector( | 307 void RestartStatusCollector( |
| 317 const policy::DeviceStatusCollector::VolumeInfoFetcher& volume_info, | 308 const policy::DeviceStatusCollector::VolumeInfoFetcher& volume_info, |
| 318 const policy::DeviceStatusCollector::CPUStatisticsFetcher& cpu_stats) { | 309 const policy::DeviceStatusCollector::CPUStatisticsFetcher& cpu_stats) { |
| 319 policy::DeviceStatusCollector::LocationUpdateRequester callback = | 310 policy::DeviceStatusCollector::LocationUpdateRequester callback = |
| 320 base::Bind(&MockPositionUpdateRequester); | 311 base::Bind(&MockPositionUpdateRequester); |
| 321 std::vector<em::VolumeInfo> expected_volume_info; | 312 std::vector<em::VolumeInfo> expected_volume_info; |
| 322 status_collector_.reset(new TestingDeviceStatusCollector( | 313 status_collector_.reset(new TestingDeviceStatusCollector( |
| 323 &prefs_, &fake_statistics_provider_, callback, volume_info, cpu_stats)); | 314 &prefs_, &fake_statistics_provider_, callback, volume_info, cpu_stats)); |
| 324 } | 315 } |
| 325 | 316 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 EXPECT_TRUE(status_.has_device_location()); | 354 EXPECT_TRUE(status_.has_device_location()); |
| 364 em::DeviceLocation location = status_.device_location(); | 355 em::DeviceLocation location = status_.device_location(); |
| 365 EXPECT_TRUE(location.has_error_code()); | 356 EXPECT_TRUE(location.has_error_code()); |
| 366 EXPECT_EQ(em::DeviceLocation::ERROR_CODE_POSITION_UNAVAILABLE, | 357 EXPECT_EQ(em::DeviceLocation::ERROR_CODE_POSITION_UNAVAILABLE, |
| 367 location.error_code()); | 358 location.error_code()); |
| 368 } | 359 } |
| 369 | 360 |
| 370 void MockRunningKioskApp(const DeviceLocalAccount& account) { | 361 void MockRunningKioskApp(const DeviceLocalAccount& account) { |
| 371 std::vector<DeviceLocalAccount> accounts; | 362 std::vector<DeviceLocalAccount> accounts; |
| 372 accounts.push_back(account); | 363 accounts.push_back(account); |
| 373 SetDeviceLocalAccounts(cros_settings_, accounts); | 364 SetDeviceLocalAccounts(owner_settings_service_.get(), accounts); |
| 374 user_manager_->CreateKioskAppUser(account.user_id); | 365 user_manager_->CreateKioskAppUser(account.user_id); |
| 375 EXPECT_CALL(*user_manager_, IsLoggedInAsKioskApp()).WillRepeatedly( | 366 EXPECT_CALL(*user_manager_, IsLoggedInAsKioskApp()).WillRepeatedly( |
| 376 Return(true)); | 367 Return(true)); |
| 377 } | 368 } |
| 378 | 369 |
| 379 protected: | 370 protected: |
| 380 // Convenience method. | 371 // Convenience method. |
| 381 int64 ActivePeriodMilliseconds() { | 372 int64 ActivePeriodMilliseconds() { |
| 382 return policy::DeviceStatusCollector::kIdlePollIntervalSeconds * 1000; | 373 return policy::DeviceStatusCollector::kIdlePollIntervalSeconds * 1000; |
| 383 } | 374 } |
| 384 | 375 |
| 385 // Since this is a unit test running in browser_tests we must do additional | 376 // Since this is a unit test running in browser_tests we must do additional |
| 386 // unit test setup and make a TestingBrowserProcess. Must be first member. | 377 // unit test setup and make a TestingBrowserProcess. Must be first member. |
| 387 TestingBrowserProcessInitializer initializer_; | 378 TestingBrowserProcessInitializer initializer_; |
| 388 base::MessageLoopForUI message_loop_; | 379 base::MessageLoopForUI message_loop_; |
| 389 content::TestBrowserThread ui_thread_; | 380 content::TestBrowserThread ui_thread_; |
| 390 content::TestBrowserThread file_thread_; | 381 content::TestBrowserThread file_thread_; |
| 391 content::TestBrowserThread io_thread_; | 382 content::TestBrowserThread io_thread_; |
| 392 | 383 |
| 393 ScopedStubEnterpriseInstallAttributes install_attributes_; | 384 ScopedStubEnterpriseInstallAttributes install_attributes_; |
| 394 TestingPrefServiceSimple prefs_; | 385 TestingPrefServiceSimple prefs_; |
| 395 chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_; | 386 chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_; |
| 396 DiskMountManager::MountPointMap mount_point_map_; | 387 DiskMountManager::MountPointMap mount_point_map_; |
| 397 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; | 388 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; |
| 398 chromeos::ScopedTestCrosSettings test_cros_settings_; | 389 chromeos::ScopedTestCrosSettings test_cros_settings_; |
| 399 chromeos::CrosSettings* cros_settings_; | 390 chromeos::ScopedCrosSettingsTestHelper settings_helper_; |
| 400 chromeos::CrosSettingsProvider* device_settings_provider_; | 391 scoped_ptr<chromeos::FakeOwnerSettingsService> owner_settings_service_; |
| 401 chromeos::StubCrosSettingsProvider stub_settings_provider_; | |
| 402 chromeos::MockUserManager* user_manager_; | 392 chromeos::MockUserManager* user_manager_; |
| 403 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 393 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
| 404 em::DeviceStatusReportRequest status_; | 394 em::DeviceStatusReportRequest status_; |
| 405 scoped_ptr<TestingDeviceStatusCollector> status_collector_; | 395 scoped_ptr<TestingDeviceStatusCollector> status_collector_; |
| 406 const policy::DeviceLocalAccount fake_device_local_account_; | 396 const policy::DeviceLocalAccount fake_device_local_account_; |
| 407 }; | 397 }; |
| 408 | 398 |
| 409 TEST_F(DeviceStatusCollectorTest, AllIdle) { | 399 TEST_F(DeviceStatusCollectorTest, AllIdle) { |
| 410 ui::IdleState test_states[] = { | 400 ui::IdleState test_states[] = { |
| 411 ui::IDLE_STATE_IDLE, | 401 ui::IDLE_STATE_IDLE, |
| 412 ui::IDLE_STATE_IDLE, | 402 ui::IDLE_STATE_IDLE, |
| 413 ui::IDLE_STATE_IDLE | 403 ui::IDLE_STATE_IDLE |
| 414 }; | 404 }; |
| 415 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 405 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 416 | 406 |
| 417 // Test reporting with no data. | 407 // Test reporting with no data. |
| 418 GetStatus(); | 408 GetStatus(); |
| 419 EXPECT_EQ(0, status_.active_period_size()); | 409 EXPECT_EQ(0, status_.active_period_size()); |
| 420 EXPECT_EQ(0, GetActiveMilliseconds(status_)); | 410 EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| 421 | 411 |
| 422 // Test reporting with a single idle sample. | 412 // Test reporting with a single idle sample. |
| 423 status_collector_->Simulate(test_states, 1); | 413 status_collector_->Simulate(test_states, 1); |
| 424 GetStatus(); | 414 GetStatus(); |
| 425 EXPECT_EQ(0, status_.active_period_size()); | 415 EXPECT_EQ(0, status_.active_period_size()); |
| 426 EXPECT_EQ(0, GetActiveMilliseconds(status_)); | 416 EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| 427 | 417 |
| 428 // Test reporting with multiple consecutive idle samples. | 418 // Test reporting with multiple consecutive idle samples. |
| 429 status_collector_->Simulate(test_states, | 419 status_collector_->Simulate(test_states, |
| 430 sizeof(test_states) / sizeof(ui::IdleState)); | 420 sizeof(test_states) / sizeof(ui::IdleState)); |
| 431 GetStatus(); | 421 GetStatus(); |
| 432 EXPECT_EQ(0, status_.active_period_size()); | 422 EXPECT_EQ(0, status_.active_period_size()); |
| 433 EXPECT_EQ(0, GetActiveMilliseconds(status_)); | 423 EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| 434 } | 424 } |
| 435 | 425 |
| 436 TEST_F(DeviceStatusCollectorTest, AllActive) { | 426 TEST_F(DeviceStatusCollectorTest, AllActive) { |
| 437 ui::IdleState test_states[] = { | 427 ui::IdleState test_states[] = { |
| 438 ui::IDLE_STATE_ACTIVE, | 428 ui::IDLE_STATE_ACTIVE, |
| 439 ui::IDLE_STATE_ACTIVE, | 429 ui::IDLE_STATE_ACTIVE, |
| 440 ui::IDLE_STATE_ACTIVE | 430 ui::IDLE_STATE_ACTIVE |
| 441 }; | 431 }; |
| 442 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 432 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 443 | 433 |
| 444 // Test a single active sample. | 434 // Test a single active sample. |
| 445 status_collector_->Simulate(test_states, 1); | 435 status_collector_->Simulate(test_states, 1); |
| 446 GetStatus(); | 436 GetStatus(); |
| 447 EXPECT_EQ(1, status_.active_period_size()); | 437 EXPECT_EQ(1, status_.active_period_size()); |
| 448 EXPECT_EQ(1 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 438 EXPECT_EQ(1 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 449 status_.clear_active_period(); // Clear the result protobuf. | 439 status_.clear_active_period(); // Clear the result protobuf. |
| 450 | 440 |
| 451 // Test multiple consecutive active samples. | 441 // Test multiple consecutive active samples. |
| 452 status_collector_->Simulate(test_states, | 442 status_collector_->Simulate(test_states, |
| 453 sizeof(test_states) / sizeof(ui::IdleState)); | 443 sizeof(test_states) / sizeof(ui::IdleState)); |
| 454 GetStatus(); | 444 GetStatus(); |
| 455 EXPECT_EQ(1, status_.active_period_size()); | 445 EXPECT_EQ(1, status_.active_period_size()); |
| 456 EXPECT_EQ(4 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 446 EXPECT_EQ(4 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 457 } | 447 } |
| 458 | 448 |
| 459 TEST_F(DeviceStatusCollectorTest, MixedStates) { | 449 TEST_F(DeviceStatusCollectorTest, MixedStates) { |
| 460 ui::IdleState test_states[] = { | 450 ui::IdleState test_states[] = { |
| 461 ui::IDLE_STATE_ACTIVE, | 451 ui::IDLE_STATE_ACTIVE, |
| 462 ui::IDLE_STATE_IDLE, | 452 ui::IDLE_STATE_IDLE, |
| 463 ui::IDLE_STATE_ACTIVE, | 453 ui::IDLE_STATE_ACTIVE, |
| 464 ui::IDLE_STATE_ACTIVE, | 454 ui::IDLE_STATE_ACTIVE, |
| 465 ui::IDLE_STATE_IDLE, | 455 ui::IDLE_STATE_IDLE, |
| 466 ui::IDLE_STATE_IDLE, | 456 ui::IDLE_STATE_IDLE, |
| 467 ui::IDLE_STATE_ACTIVE | 457 ui::IDLE_STATE_ACTIVE |
| 468 }; | 458 }; |
| 469 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 459 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 470 status_collector_->Simulate(test_states, | 460 status_collector_->Simulate(test_states, |
| 471 sizeof(test_states) / sizeof(ui::IdleState)); | 461 sizeof(test_states) / sizeof(ui::IdleState)); |
| 472 GetStatus(); | 462 GetStatus(); |
| 473 EXPECT_EQ(4 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 463 EXPECT_EQ(4 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 474 } | 464 } |
| 475 | 465 |
| 476 TEST_F(DeviceStatusCollectorTest, StateKeptInPref) { | 466 TEST_F(DeviceStatusCollectorTest, StateKeptInPref) { |
| 477 ui::IdleState test_states[] = { | 467 ui::IdleState test_states[] = { |
| 478 ui::IDLE_STATE_ACTIVE, | 468 ui::IDLE_STATE_ACTIVE, |
| 479 ui::IDLE_STATE_IDLE, | 469 ui::IDLE_STATE_IDLE, |
| 480 ui::IDLE_STATE_ACTIVE, | 470 ui::IDLE_STATE_ACTIVE, |
| 481 ui::IDLE_STATE_ACTIVE, | 471 ui::IDLE_STATE_ACTIVE, |
| 482 ui::IDLE_STATE_IDLE, | 472 ui::IDLE_STATE_IDLE, |
| 483 ui::IDLE_STATE_IDLE | 473 ui::IDLE_STATE_IDLE |
| 484 }; | 474 }; |
| 485 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 475 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 486 status_collector_->Simulate(test_states, | 476 status_collector_->Simulate(test_states, |
| 487 sizeof(test_states) / sizeof(ui::IdleState)); | 477 sizeof(test_states) / sizeof(ui::IdleState)); |
| 488 | 478 |
| 489 // Process the list a second time after restarting the collector. It should be | 479 // Process the list a second time after restarting the collector. It should be |
| 490 // able to count the active periods found by the original collector, because | 480 // able to count the active periods found by the original collector, because |
| 491 // the results are stored in a pref. | 481 // the results are stored in a pref. |
| 492 RestartStatusCollector(base::Bind(&GetEmptyVolumeInfo), | 482 RestartStatusCollector(base::Bind(&GetEmptyVolumeInfo), |
| 493 base::Bind(&GetEmptyCPUStatistics)); | 483 base::Bind(&GetEmptyCPUStatistics)); |
| 494 status_collector_->Simulate(test_states, | 484 status_collector_->Simulate(test_states, |
| 495 sizeof(test_states) / sizeof(ui::IdleState)); | 485 sizeof(test_states) / sizeof(ui::IdleState)); |
| 496 | 486 |
| 497 GetStatus(); | 487 GetStatus(); |
| 498 EXPECT_EQ(6 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 488 EXPECT_EQ(6 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 499 } | 489 } |
| 500 | 490 |
| 501 TEST_F(DeviceStatusCollectorTest, Times) { | 491 TEST_F(DeviceStatusCollectorTest, Times) { |
| 502 ui::IdleState test_states[] = { | 492 ui::IdleState test_states[] = { |
| 503 ui::IDLE_STATE_ACTIVE, | 493 ui::IDLE_STATE_ACTIVE, |
| 504 ui::IDLE_STATE_IDLE, | 494 ui::IDLE_STATE_IDLE, |
| 505 ui::IDLE_STATE_ACTIVE, | 495 ui::IDLE_STATE_ACTIVE, |
| 506 ui::IDLE_STATE_ACTIVE, | 496 ui::IDLE_STATE_ACTIVE, |
| 507 ui::IDLE_STATE_IDLE, | 497 ui::IDLE_STATE_IDLE, |
| 508 ui::IDLE_STATE_IDLE | 498 ui::IDLE_STATE_IDLE |
| 509 }; | 499 }; |
| 510 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 500 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 511 status_collector_->Simulate(test_states, | 501 status_collector_->Simulate(test_states, |
| 512 sizeof(test_states) / sizeof(ui::IdleState)); | 502 sizeof(test_states) / sizeof(ui::IdleState)); |
| 513 GetStatus(); | 503 GetStatus(); |
| 514 EXPECT_EQ(3 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 504 EXPECT_EQ(3 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 515 } | 505 } |
| 516 | 506 |
| 517 TEST_F(DeviceStatusCollectorTest, MaxStoredPeriods) { | 507 TEST_F(DeviceStatusCollectorTest, MaxStoredPeriods) { |
| 518 ui::IdleState test_states[] = { | 508 ui::IdleState test_states[] = { |
| 519 ui::IDLE_STATE_ACTIVE, | 509 ui::IDLE_STATE_ACTIVE, |
| 520 ui::IDLE_STATE_IDLE | 510 ui::IDLE_STATE_IDLE |
| 521 }; | 511 }; |
| 522 const int kMaxDays = 10; | 512 const int kMaxDays = 10; |
| 523 | 513 |
| 524 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 514 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 525 status_collector_->set_max_stored_past_activity_days(kMaxDays - 1); | 515 status_collector_->set_max_stored_past_activity_days(kMaxDays - 1); |
| 526 status_collector_->set_max_stored_future_activity_days(1); | 516 status_collector_->set_max_stored_future_activity_days(1); |
| 527 Time baseline = Time::Now().LocalMidnight(); | 517 Time baseline = Time::Now().LocalMidnight(); |
| 528 | 518 |
| 529 // Simulate 12 active periods. | 519 // Simulate 12 active periods. |
| 530 for (int i = 0; i < kMaxDays + 2; i++) { | 520 for (int i = 0; i < kMaxDays + 2; i++) { |
| 531 status_collector_->Simulate(test_states, | 521 status_collector_->Simulate(test_states, |
| 532 sizeof(test_states) / sizeof(ui::IdleState)); | 522 sizeof(test_states) / sizeof(ui::IdleState)); |
| 533 // Advance the simulated clock by a day. | 523 // Advance the simulated clock by a day. |
| 534 baseline += TimeDelta::FromDays(1); | 524 baseline += TimeDelta::FromDays(1); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 }; | 559 }; |
| 570 status_collector_->Simulate(test_states, | 560 status_collector_->Simulate(test_states, |
| 571 sizeof(test_states) / sizeof(ui::IdleState)); | 561 sizeof(test_states) / sizeof(ui::IdleState)); |
| 572 GetStatus(); | 562 GetStatus(); |
| 573 EXPECT_EQ(1, status_.active_period_size()); | 563 EXPECT_EQ(1, status_.active_period_size()); |
| 574 EXPECT_EQ(3 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 564 EXPECT_EQ(3 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 575 } | 565 } |
| 576 | 566 |
| 577 TEST_F(DeviceStatusCollectorTest, ActivityTimesOff) { | 567 TEST_F(DeviceStatusCollectorTest, ActivityTimesOff) { |
| 578 // Device activity times should not be reported if explicitly disabled. | 568 // Device activity times should not be reported if explicitly disabled. |
| 579 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, false); | 569 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, false); |
| 580 | 570 |
| 581 ui::IdleState test_states[] = { | 571 ui::IdleState test_states[] = { |
| 582 ui::IDLE_STATE_ACTIVE, | 572 ui::IDLE_STATE_ACTIVE, |
| 583 ui::IDLE_STATE_ACTIVE, | 573 ui::IDLE_STATE_ACTIVE, |
| 584 ui::IDLE_STATE_ACTIVE | 574 ui::IDLE_STATE_ACTIVE |
| 585 }; | 575 }; |
| 586 status_collector_->Simulate(test_states, | 576 status_collector_->Simulate(test_states, |
| 587 sizeof(test_states) / sizeof(ui::IdleState)); | 577 sizeof(test_states) / sizeof(ui::IdleState)); |
| 588 GetStatus(); | 578 GetStatus(); |
| 589 EXPECT_EQ(0, status_.active_period_size()); | 579 EXPECT_EQ(0, status_.active_period_size()); |
| 590 EXPECT_EQ(0, GetActiveMilliseconds(status_)); | 580 EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| 591 } | 581 } |
| 592 | 582 |
| 593 TEST_F(DeviceStatusCollectorTest, ActivityCrossingMidnight) { | 583 TEST_F(DeviceStatusCollectorTest, ActivityCrossingMidnight) { |
| 594 ui::IdleState test_states[] = { | 584 ui::IdleState test_states[] = { |
| 595 ui::IDLE_STATE_ACTIVE | 585 ui::IDLE_STATE_ACTIVE |
| 596 }; | 586 }; |
| 597 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 587 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 598 | 588 |
| 599 // Set the baseline time to 10 seconds after midnight. | 589 // Set the baseline time to 10 seconds after midnight. |
| 600 status_collector_->SetBaselineTime( | 590 status_collector_->SetBaselineTime( |
| 601 Time::Now().LocalMidnight() + TimeDelta::FromSeconds(10)); | 591 Time::Now().LocalMidnight() + TimeDelta::FromSeconds(10)); |
| 602 | 592 |
| 603 status_collector_->Simulate(test_states, 1); | 593 status_collector_->Simulate(test_states, 1); |
| 604 GetStatus(); | 594 GetStatus(); |
| 605 ASSERT_EQ(2, status_.active_period_size()); | 595 ASSERT_EQ(2, status_.active_period_size()); |
| 606 | 596 |
| 607 em::ActiveTimePeriod period0 = status_.active_period(0); | 597 em::ActiveTimePeriod period0 = status_.active_period(0); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 619 kMillisecondsPerDay); | 609 kMillisecondsPerDay); |
| 620 EXPECT_EQ(time_period1.end_timestamp() - time_period1.start_timestamp(), | 610 EXPECT_EQ(time_period1.end_timestamp() - time_period1.start_timestamp(), |
| 621 kMillisecondsPerDay); | 611 kMillisecondsPerDay); |
| 622 } | 612 } |
| 623 | 613 |
| 624 TEST_F(DeviceStatusCollectorTest, ActivityTimesKeptUntilSubmittedSuccessfully) { | 614 TEST_F(DeviceStatusCollectorTest, ActivityTimesKeptUntilSubmittedSuccessfully) { |
| 625 ui::IdleState test_states[] = { | 615 ui::IdleState test_states[] = { |
| 626 ui::IDLE_STATE_ACTIVE, | 616 ui::IDLE_STATE_ACTIVE, |
| 627 ui::IDLE_STATE_ACTIVE, | 617 ui::IDLE_STATE_ACTIVE, |
| 628 }; | 618 }; |
| 629 cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); | 619 settings_helper_.SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| 630 | 620 |
| 631 status_collector_->Simulate(test_states, 2); | 621 status_collector_->Simulate(test_states, 2); |
| 632 GetStatus(); | 622 GetStatus(); |
| 633 EXPECT_EQ(2 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 623 EXPECT_EQ(2 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 634 em::DeviceStatusReportRequest first_status(status_); | 624 em::DeviceStatusReportRequest first_status(status_); |
| 635 | 625 |
| 636 // The collector returns the same status again. | 626 // The collector returns the same status again. |
| 637 GetStatus(); | 627 GetStatus(); |
| 638 EXPECT_EQ(first_status.SerializeAsString(), status_.SerializeAsString()); | 628 EXPECT_EQ(first_status.SerializeAsString(), status_.SerializeAsString()); |
| 639 | 629 |
| 640 // After indicating a successful submit, the submitted status gets cleared, | 630 // After indicating a successful submit, the submitted status gets cleared, |
| 641 // but what got collected meanwhile sticks around. | 631 // but what got collected meanwhile sticks around. |
| 642 status_collector_->Simulate(test_states, 1); | 632 status_collector_->Simulate(test_states, 1); |
| 643 status_collector_->OnSubmittedSuccessfully(); | 633 status_collector_->OnSubmittedSuccessfully(); |
| 644 GetStatus(); | 634 GetStatus(); |
| 645 EXPECT_EQ(ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); | 635 EXPECT_EQ(ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| 646 } | 636 } |
| 647 | 637 |
| 648 TEST_F(DeviceStatusCollectorTest, DevSwitchBootMode) { | 638 TEST_F(DeviceStatusCollectorTest, DevSwitchBootMode) { |
| 649 // Test that boot mode data is reported by default. | 639 // Test that boot mode data is reported by default. |
| 650 fake_statistics_provider_.SetMachineStatistic( | 640 fake_statistics_provider_.SetMachineStatistic( |
| 651 chromeos::system::kDevSwitchBootKey, | 641 chromeos::system::kDevSwitchBootKey, |
| 652 chromeos::system::kDevSwitchBootValueVerified); | 642 chromeos::system::kDevSwitchBootValueVerified); |
| 653 GetStatus(); | 643 GetStatus(); |
| 654 EXPECT_EQ("Verified", status_.boot_mode()); | 644 EXPECT_EQ("Verified", status_.boot_mode()); |
| 655 | 645 |
| 656 // Test that boot mode data is not reported if the pref turned off. | 646 // Test that boot mode data is not reported if the pref turned off. |
| 657 cros_settings_->SetBoolean(chromeos::kReportDeviceBootMode, false); | 647 settings_helper_.SetBoolean(chromeos::kReportDeviceBootMode, false); |
| 658 | 648 |
| 659 GetStatus(); | 649 GetStatus(); |
| 660 EXPECT_FALSE(status_.has_boot_mode()); | 650 EXPECT_FALSE(status_.has_boot_mode()); |
| 661 | 651 |
| 662 // Turn the pref on, and check that the status is reported iff the | 652 // Turn the pref on, and check that the status is reported iff the |
| 663 // statistics provider returns valid data. | 653 // statistics provider returns valid data. |
| 664 cros_settings_->SetBoolean(chromeos::kReportDeviceBootMode, true); | 654 settings_helper_.SetBoolean(chromeos::kReportDeviceBootMode, true); |
| 665 | 655 |
| 666 fake_statistics_provider_.SetMachineStatistic( | 656 fake_statistics_provider_.SetMachineStatistic( |
| 667 chromeos::system::kDevSwitchBootKey, "(error)"); | 657 chromeos::system::kDevSwitchBootKey, "(error)"); |
| 668 GetStatus(); | 658 GetStatus(); |
| 669 EXPECT_FALSE(status_.has_boot_mode()); | 659 EXPECT_FALSE(status_.has_boot_mode()); |
| 670 | 660 |
| 671 fake_statistics_provider_.SetMachineStatistic( | 661 fake_statistics_provider_.SetMachineStatistic( |
| 672 chromeos::system::kDevSwitchBootKey, " "); | 662 chromeos::system::kDevSwitchBootKey, " "); |
| 673 GetStatus(); | 663 GetStatus(); |
| 674 EXPECT_FALSE(status_.has_boot_mode()); | 664 EXPECT_FALSE(status_.has_boot_mode()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 688 | 678 |
| 689 TEST_F(DeviceStatusCollectorTest, VersionInfo) { | 679 TEST_F(DeviceStatusCollectorTest, VersionInfo) { |
| 690 // Expect the version info to be reported by default. | 680 // Expect the version info to be reported by default. |
| 691 GetStatus(); | 681 GetStatus(); |
| 692 EXPECT_TRUE(status_.has_browser_version()); | 682 EXPECT_TRUE(status_.has_browser_version()); |
| 693 EXPECT_TRUE(status_.has_os_version()); | 683 EXPECT_TRUE(status_.has_os_version()); |
| 694 EXPECT_TRUE(status_.has_firmware_version()); | 684 EXPECT_TRUE(status_.has_firmware_version()); |
| 695 | 685 |
| 696 // When the pref to collect this data is not enabled, expect that none of | 686 // When the pref to collect this data is not enabled, expect that none of |
| 697 // the fields are present in the protobuf. | 687 // the fields are present in the protobuf. |
| 698 cros_settings_->SetBoolean(chromeos::kReportDeviceVersionInfo, false); | 688 settings_helper_.SetBoolean(chromeos::kReportDeviceVersionInfo, false); |
| 699 GetStatus(); | 689 GetStatus(); |
| 700 EXPECT_FALSE(status_.has_browser_version()); | 690 EXPECT_FALSE(status_.has_browser_version()); |
| 701 EXPECT_FALSE(status_.has_os_version()); | 691 EXPECT_FALSE(status_.has_os_version()); |
| 702 EXPECT_FALSE(status_.has_firmware_version()); | 692 EXPECT_FALSE(status_.has_firmware_version()); |
| 703 | 693 |
| 704 cros_settings_->SetBoolean(chromeos::kReportDeviceVersionInfo, true); | 694 settings_helper_.SetBoolean(chromeos::kReportDeviceVersionInfo, true); |
| 705 GetStatus(); | 695 GetStatus(); |
| 706 EXPECT_TRUE(status_.has_browser_version()); | 696 EXPECT_TRUE(status_.has_browser_version()); |
| 707 EXPECT_TRUE(status_.has_os_version()); | 697 EXPECT_TRUE(status_.has_os_version()); |
| 708 EXPECT_TRUE(status_.has_firmware_version()); | 698 EXPECT_TRUE(status_.has_firmware_version()); |
| 709 | 699 |
| 710 // Check that the browser version is not empty. OS version & firmware | 700 // Check that the browser version is not empty. OS version & firmware |
| 711 // don't have any reasonable values inside the unit test, so those | 701 // don't have any reasonable values inside the unit test, so those |
| 712 // aren't checked. | 702 // aren't checked. |
| 713 EXPECT_NE("", status_.browser_version()); | 703 EXPECT_NE("", status_.browser_version()); |
| 714 } | 704 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 726 invalid_fix.timestamp = Time::Now(); | 716 invalid_fix.timestamp = Time::Now(); |
| 727 | 717 |
| 728 // Check that when device location reporting is disabled, no location is | 718 // Check that when device location reporting is disabled, no location is |
| 729 // reported. | 719 // reported. |
| 730 SetMockPositionToReturnNext(valid_fix); | 720 SetMockPositionToReturnNext(valid_fix); |
| 731 CheckThatNoLocationIsReported(); | 721 CheckThatNoLocationIsReported(); |
| 732 | 722 |
| 733 // Check that when device location reporting is enabled and a valid fix is | 723 // Check that when device location reporting is enabled and a valid fix is |
| 734 // available, the location is reported and is stored in local state. | 724 // available, the location is reported and is stored in local state. |
| 735 SetMockPositionToReturnNext(valid_fix); | 725 SetMockPositionToReturnNext(valid_fix); |
| 736 cros_settings_->SetBoolean(chromeos::kReportDeviceLocation, true); | 726 settings_helper_.SetBoolean(chromeos::kReportDeviceLocation, true); |
| 737 EXPECT_FALSE(prefs_.GetDictionary(prefs::kDeviceLocation)->empty()); | 727 EXPECT_FALSE(prefs_.GetDictionary(prefs::kDeviceLocation)->empty()); |
| 738 CheckThatAValidLocationIsReported(); | 728 CheckThatAValidLocationIsReported(); |
| 739 | 729 |
| 740 // Restart the status collector. Check that the last known location has been | 730 // Restart the status collector. Check that the last known location has been |
| 741 // retrieved from local state without requesting a geolocation update. | 731 // retrieved from local state without requesting a geolocation update. |
| 742 SetMockPositionToReturnNext(valid_fix); | 732 SetMockPositionToReturnNext(valid_fix); |
| 743 RestartStatusCollector(base::Bind(&GetEmptyVolumeInfo), | 733 RestartStatusCollector(base::Bind(&GetEmptyVolumeInfo), |
| 744 base::Bind(&GetEmptyCPUStatistics)); | 734 base::Bind(&GetEmptyCPUStatistics)); |
| 745 CheckThatAValidLocationIsReported(); | 735 CheckThatAValidLocationIsReported(); |
| 746 EXPECT_TRUE(mock_position_to_return_next.get()); | 736 EXPECT_TRUE(mock_position_to_return_next.get()); |
| 747 | 737 |
| 748 // Check that after disabling location reporting again, the last known | 738 // Check that after disabling location reporting again, the last known |
| 749 // location has been cleared from local state and is no longer reported. | 739 // location has been cleared from local state and is no longer reported. |
| 750 SetMockPositionToReturnNext(valid_fix); | 740 SetMockPositionToReturnNext(valid_fix); |
| 751 cros_settings_->SetBoolean(chromeos::kReportDeviceLocation, false); | 741 settings_helper_.SetBoolean(chromeos::kReportDeviceLocation, false); |
| 752 // Allow the new pref to propagate to the status collector. | 742 // Allow the new pref to propagate to the status collector. |
| 753 message_loop_.RunUntilIdle(); | 743 message_loop_.RunUntilIdle(); |
| 754 EXPECT_TRUE(prefs_.GetDictionary(prefs::kDeviceLocation)->empty()); | 744 EXPECT_TRUE(prefs_.GetDictionary(prefs::kDeviceLocation)->empty()); |
| 755 CheckThatNoLocationIsReported(); | 745 CheckThatNoLocationIsReported(); |
| 756 | 746 |
| 757 // Check that after enabling location reporting again, an error is reported | 747 // Check that after enabling location reporting again, an error is reported |
| 758 // if no valid fix is available. | 748 // if no valid fix is available. |
| 759 SetMockPositionToReturnNext(invalid_fix); | 749 SetMockPositionToReturnNext(invalid_fix); |
| 760 cros_settings_->SetBoolean(chromeos::kReportDeviceLocation, true); | 750 settings_helper_.SetBoolean(chromeos::kReportDeviceLocation, true); |
| 761 // Allow the new pref to propagate to the status collector. | 751 // Allow the new pref to propagate to the status collector. |
| 762 message_loop_.RunUntilIdle(); | 752 message_loop_.RunUntilIdle(); |
| 763 CheckThatALocationErrorIsReported(); | 753 CheckThatALocationErrorIsReported(); |
| 764 } | 754 } |
| 765 | 755 |
| 766 TEST_F(DeviceStatusCollectorTest, ReportUsers) { | 756 TEST_F(DeviceStatusCollectorTest, ReportUsers) { |
| 767 user_manager_->CreatePublicAccountUser("public@localhost"); | 757 user_manager_->CreatePublicAccountUser("public@localhost"); |
| 768 user_manager_->AddUser("user0@managed.com"); | 758 user_manager_->AddUser("user0@managed.com"); |
| 769 user_manager_->AddUser("user1@managed.com"); | 759 user_manager_->AddUser("user1@managed.com"); |
| 770 user_manager_->AddUser("user2@managed.com"); | 760 user_manager_->AddUser("user2@managed.com"); |
| 771 user_manager_->AddUser("user3@unmanaged.com"); | 761 user_manager_->AddUser("user3@unmanaged.com"); |
| 772 user_manager_->AddUser("user4@managed.com"); | 762 user_manager_->AddUser("user4@managed.com"); |
| 773 user_manager_->AddUser("user5@managed.com"); | 763 user_manager_->AddUser("user5@managed.com"); |
| 774 | 764 |
| 775 // Verify that users are reported by default. | 765 // Verify that users are reported by default. |
| 776 GetStatus(); | 766 GetStatus(); |
| 777 EXPECT_EQ(6, status_.user_size()); | 767 EXPECT_EQ(6, status_.user_size()); |
| 778 | 768 |
| 779 // Verify that users are reported after enabling the setting. | 769 // Verify that users are reported after enabling the setting. |
| 780 cros_settings_->SetBoolean(chromeos::kReportDeviceUsers, true); | 770 settings_helper_.SetBoolean(chromeos::kReportDeviceUsers, true); |
| 781 GetStatus(); | 771 GetStatus(); |
| 782 EXPECT_EQ(6, status_.user_size()); | 772 EXPECT_EQ(6, status_.user_size()); |
| 783 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(0).type()); | 773 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(0).type()); |
| 784 EXPECT_EQ("user0@managed.com", status_.user(0).email()); | 774 EXPECT_EQ("user0@managed.com", status_.user(0).email()); |
| 785 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(1).type()); | 775 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(1).type()); |
| 786 EXPECT_EQ("user1@managed.com", status_.user(1).email()); | 776 EXPECT_EQ("user1@managed.com", status_.user(1).email()); |
| 787 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(2).type()); | 777 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(2).type()); |
| 788 EXPECT_EQ("user2@managed.com", status_.user(2).email()); | 778 EXPECT_EQ("user2@managed.com", status_.user(2).email()); |
| 789 EXPECT_EQ(em::DeviceUser::USER_TYPE_UNMANAGED, status_.user(3).type()); | 779 EXPECT_EQ(em::DeviceUser::USER_TYPE_UNMANAGED, status_.user(3).type()); |
| 790 EXPECT_FALSE(status_.user(3).has_email()); | 780 EXPECT_FALSE(status_.user(3).has_email()); |
| 791 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(4).type()); | 781 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(4).type()); |
| 792 EXPECT_EQ("user4@managed.com", status_.user(4).email()); | 782 EXPECT_EQ("user4@managed.com", status_.user(4).email()); |
| 793 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(5).type()); | 783 EXPECT_EQ(em::DeviceUser::USER_TYPE_MANAGED, status_.user(5).type()); |
| 794 EXPECT_EQ("user5@managed.com", status_.user(5).email()); | 784 EXPECT_EQ("user5@managed.com", status_.user(5).email()); |
| 795 | 785 |
| 796 // Verify that users are no longer reported if setting is disabled. | 786 // Verify that users are no longer reported if setting is disabled. |
| 797 cros_settings_->SetBoolean(chromeos::kReportDeviceUsers, false); | 787 settings_helper_.SetBoolean(chromeos::kReportDeviceUsers, false); |
| 798 GetStatus(); | 788 GetStatus(); |
| 799 EXPECT_EQ(0, status_.user_size()); | 789 EXPECT_EQ(0, status_.user_size()); |
| 800 } | 790 } |
| 801 | 791 |
| 802 TEST_F(DeviceStatusCollectorTest, TestVolumeInfo) { | 792 TEST_F(DeviceStatusCollectorTest, TestVolumeInfo) { |
| 803 std::vector<std::string> expected_mount_points; | 793 std::vector<std::string> expected_mount_points; |
| 804 std::vector<em::VolumeInfo> expected_volume_info; | 794 std::vector<em::VolumeInfo> expected_volume_info; |
| 805 int size = 12345678; | 795 int size = 12345678; |
| 806 for (const auto& mount_info : | 796 for (const auto& mount_info : |
| 807 DiskMountManager::GetInstance()->mount_points()) { | 797 DiskMountManager::GetInstance()->mount_points()) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 836 EXPECT_EQ(expected_info.storage_free(), info.storage_free()); | 826 EXPECT_EQ(expected_info.storage_free(), info.storage_free()); |
| 837 found = true; | 827 found = true; |
| 838 break; | 828 break; |
| 839 } | 829 } |
| 840 } | 830 } |
| 841 EXPECT_TRUE(found) << "No matching VolumeInfo for " | 831 EXPECT_TRUE(found) << "No matching VolumeInfo for " |
| 842 << expected_info.volume_id(); | 832 << expected_info.volume_id(); |
| 843 } | 833 } |
| 844 | 834 |
| 845 // Now turn off hardware status reporting - should have no data. | 835 // Now turn off hardware status reporting - should have no data. |
| 846 cros_settings_->SetBoolean(chromeos::kReportDeviceHardwareStatus, false); | 836 settings_helper_.SetBoolean(chromeos::kReportDeviceHardwareStatus, false); |
| 847 GetStatus(); | 837 GetStatus(); |
| 848 EXPECT_EQ(0, status_.volume_info_size()); | 838 EXPECT_EQ(0, status_.volume_info_size()); |
| 849 } | 839 } |
| 850 | 840 |
| 851 TEST_F(DeviceStatusCollectorTest, TestAvailableMemory) { | 841 TEST_F(DeviceStatusCollectorTest, TestAvailableMemory) { |
| 852 // Refresh our samples. Sample more than kMaxHardwareSamples times to | 842 // Refresh our samples. Sample more than kMaxHardwareSamples times to |
| 853 // make sure that the code correctly caps the number of cached samples. | 843 // make sure that the code correctly caps the number of cached samples. |
| 854 for (int i = 0; i < static_cast<int>( | 844 for (int i = 0; i < static_cast<int>( |
| 855 DeviceStatusCollector::kMaxResourceUsageSamples + 1); | 845 DeviceStatusCollector::kMaxResourceUsageSamples + 1); |
| 856 ++i) { | 846 ++i) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 GetStatus(); | 885 GetStatus(); |
| 896 | 886 |
| 897 // Should not be more than kMaxResourceUsageSamples, and they should all show | 887 // Should not be more than kMaxResourceUsageSamples, and they should all show |
| 898 // the CPU is idle. | 888 // the CPU is idle. |
| 899 EXPECT_EQ(static_cast<int>(DeviceStatusCollector::kMaxResourceUsageSamples), | 889 EXPECT_EQ(static_cast<int>(DeviceStatusCollector::kMaxResourceUsageSamples), |
| 900 status_.cpu_utilization_pct().size()); | 890 status_.cpu_utilization_pct().size()); |
| 901 for (const auto utilization : status_.cpu_utilization_pct()) | 891 for (const auto utilization : status_.cpu_utilization_pct()) |
| 902 EXPECT_EQ(0, utilization); | 892 EXPECT_EQ(0, utilization); |
| 903 | 893 |
| 904 // Turning off hardware reporting should not report CPU utilization. | 894 // Turning off hardware reporting should not report CPU utilization. |
| 905 cros_settings_->SetBoolean(chromeos::kReportDeviceHardwareStatus, false); | 895 settings_helper_.SetBoolean(chromeos::kReportDeviceHardwareStatus, false); |
| 906 GetStatus(); | 896 GetStatus(); |
| 907 EXPECT_EQ(0, status_.cpu_utilization_pct().size()); | 897 EXPECT_EQ(0, status_.cpu_utilization_pct().size()); |
| 908 } | 898 } |
| 909 | 899 |
| 910 TEST_F(DeviceStatusCollectorTest, NoSessionStatusIfNotKioskMode) { | 900 TEST_F(DeviceStatusCollectorTest, NoSessionStatusIfNotKioskMode) { |
| 911 // Should not report session status if we don't have an active kiosk app. | 901 // Should not report session status if we don't have an active kiosk app. |
| 912 cros_settings_->SetBoolean(chromeos::kReportDeviceSessionStatus, true); | 902 settings_helper_.SetBoolean(chromeos::kReportDeviceSessionStatus, true); |
| 913 em::SessionStatusReportRequest session_status; | 903 em::SessionStatusReportRequest session_status; |
| 914 EXPECT_FALSE(status_collector_->GetDeviceSessionStatus(&session_status)); | 904 EXPECT_FALSE(status_collector_->GetDeviceSessionStatus(&session_status)); |
| 915 } | 905 } |
| 916 | 906 |
| 917 TEST_F(DeviceStatusCollectorTest, NoSessionStatusIfSessionReportingDisabled) { | 907 TEST_F(DeviceStatusCollectorTest, NoSessionStatusIfSessionReportingDisabled) { |
| 918 // Should not report session status if session status reporting is disabled. | 908 // Should not report session status if session status reporting is disabled. |
| 919 cros_settings_->SetBoolean(chromeos::kReportDeviceSessionStatus, false); | 909 settings_helper_.SetBoolean(chromeos::kReportDeviceSessionStatus, false); |
| 920 status_collector_->set_kiosk_account(make_scoped_ptr( | 910 status_collector_->set_kiosk_account(make_scoped_ptr( |
| 921 new policy::DeviceLocalAccount(fake_device_local_account_)).Pass()); | 911 new policy::DeviceLocalAccount(fake_device_local_account_)).Pass()); |
| 922 // Set up a device-local account for single-app kiosk mode. | 912 // Set up a device-local account for single-app kiosk mode. |
| 923 MockRunningKioskApp(fake_device_local_account_); | 913 MockRunningKioskApp(fake_device_local_account_); |
| 924 | 914 |
| 925 em::SessionStatusReportRequest session_status; | 915 em::SessionStatusReportRequest session_status; |
| 926 EXPECT_FALSE(status_collector_->GetDeviceSessionStatus(&session_status)); | 916 EXPECT_FALSE(status_collector_->GetDeviceSessionStatus(&session_status)); |
| 927 } | 917 } |
| 928 | 918 |
| 929 TEST_F(DeviceStatusCollectorTest, ReportSessionStatus) { | 919 TEST_F(DeviceStatusCollectorTest, ReportSessionStatus) { |
| 930 cros_settings_->SetBoolean(chromeos::kReportDeviceSessionStatus, true); | 920 settings_helper_.SetBoolean(chromeos::kReportDeviceSessionStatus, true); |
| 931 status_collector_->set_kiosk_account(make_scoped_ptr( | 921 status_collector_->set_kiosk_account(make_scoped_ptr( |
| 932 new policy::DeviceLocalAccount(fake_device_local_account_)).Pass()); | 922 new policy::DeviceLocalAccount(fake_device_local_account_)).Pass()); |
| 933 | 923 |
| 934 // Set up a device-local account for single-app kiosk mode. | 924 // Set up a device-local account for single-app kiosk mode. |
| 935 MockRunningKioskApp(fake_device_local_account_); | 925 MockRunningKioskApp(fake_device_local_account_); |
| 936 | 926 |
| 937 em::SessionStatusReportRequest session_status; | 927 em::SessionStatusReportRequest session_status; |
| 938 EXPECT_TRUE(status_collector_->GetDeviceSessionStatus(&session_status)); | 928 EXPECT_TRUE(status_collector_->GetDeviceSessionStatus(&session_status)); |
| 939 ASSERT_EQ(1, session_status.installed_apps_size()); | 929 ASSERT_EQ(1, session_status.installed_apps_size()); |
| 940 EXPECT_EQ(kKioskAccountId, session_status.device_local_account_id()); | 930 EXPECT_EQ(kKioskAccountId, session_status.device_local_account_id()); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 // Mock that we are in kiosk mode so we report network state. | 1143 // Mock that we are in kiosk mode so we report network state. |
| 1154 status_collector_->set_kiosk_account(make_scoped_ptr( | 1144 status_collector_->set_kiosk_account(make_scoped_ptr( |
| 1155 new policy::DeviceLocalAccount(fake_device_local_account_)).Pass()); | 1145 new policy::DeviceLocalAccount(fake_device_local_account_)).Pass()); |
| 1156 | 1146 |
| 1157 // Interfaces should be reported by default. | 1147 // Interfaces should be reported by default. |
| 1158 GetStatus(); | 1148 GetStatus(); |
| 1159 EXPECT_LT(0, status_.network_interface_size()); | 1149 EXPECT_LT(0, status_.network_interface_size()); |
| 1160 EXPECT_LT(0, status_.network_state_size()); | 1150 EXPECT_LT(0, status_.network_state_size()); |
| 1161 | 1151 |
| 1162 // No interfaces should be reported if the policy is off. | 1152 // No interfaces should be reported if the policy is off. |
| 1163 cros_settings_->SetBoolean(chromeos::kReportDeviceNetworkInterfaces, false); | 1153 settings_helper_.SetBoolean(chromeos::kReportDeviceNetworkInterfaces, false); |
| 1164 GetStatus(); | 1154 GetStatus(); |
| 1165 EXPECT_EQ(0, status_.network_interface_size()); | 1155 EXPECT_EQ(0, status_.network_interface_size()); |
| 1166 EXPECT_EQ(0, status_.network_state_size()); | 1156 EXPECT_EQ(0, status_.network_state_size()); |
| 1167 | 1157 |
| 1168 // Switch the policy on and verify the interface list is present. | 1158 // Switch the policy on and verify the interface list is present. |
| 1169 cros_settings_->SetBoolean(chromeos::kReportDeviceNetworkInterfaces, true); | 1159 settings_helper_.SetBoolean(chromeos::kReportDeviceNetworkInterfaces, true); |
| 1170 GetStatus(); | 1160 GetStatus(); |
| 1171 | 1161 |
| 1172 int count = 0; | 1162 int count = 0; |
| 1173 for (size_t i = 0; i < arraysize(kFakeDevices); ++i) { | 1163 for (size_t i = 0; i < arraysize(kFakeDevices); ++i) { |
| 1174 const FakeDeviceData& dev = kFakeDevices[i]; | 1164 const FakeDeviceData& dev = kFakeDevices[i]; |
| 1175 if (dev.expected_type == -1) | 1165 if (dev.expected_type == -1) |
| 1176 continue; | 1166 continue; |
| 1177 | 1167 |
| 1178 // Find the corresponding entry in reporting data. | 1168 // Find the corresponding entry in reporting data. |
| 1179 bool found_match = false; | 1169 bool found_match = false; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1223 found_match = true; | 1213 found_match = true; |
| 1224 break; | 1214 break; |
| 1225 } | 1215 } |
| 1226 } | 1216 } |
| 1227 EXPECT_TRUE(found_match) << "No matching state for fake network " | 1217 EXPECT_TRUE(found_match) << "No matching state for fake network " |
| 1228 << " (" << state.name << ")"; | 1218 << " (" << state.name << ")"; |
| 1229 } | 1219 } |
| 1230 } | 1220 } |
| 1231 | 1221 |
| 1232 } // namespace policy | 1222 } // namespace policy |
| OLD | NEW |