Chromium Code Reviews| Index: chrome/browser/policy/device_status_collector_unittest.cc |
| diff --git a/chrome/browser/policy/device_status_collector_unittest.cc b/chrome/browser/policy/device_status_collector_unittest.cc |
| index 3dcfb3f01b1c5a36e3eba86955cddc2dac195cac..e9eb5dc8e1692b98145e7ec657ccf0dd42926dd8 100644 |
| --- a/chrome/browser/policy/device_status_collector_unittest.cc |
| +++ b/chrome/browser/policy/device_status_collector_unittest.cc |
| @@ -4,21 +4,43 @@ |
| #include "chrome/browser/policy/device_status_collector.h" |
| +#include "base/basictypes.h" |
| +#include "base/logging.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/message_loop.h" |
| -#include "base/time.h" |
| -#include "chrome/browser/idle.h" |
| +#include "base/string16.h" |
| +#include "base/synchronization/waitable_event.h" |
| #include "chrome/browser/chromeos/cros_settings.h" |
| #include "chrome/browser/chromeos/cros_settings_names.h" |
| #include "chrome/browser/chromeos/cros_settings_provider.h" |
| #include "chrome/browser/chromeos/stub_cros_settings_provider.h" |
| #include "chrome/browser/chromeos/system/mock_statistics_provider.h" |
| +#include "chrome/browser/chromeos/system/statistics_provider.h" |
| #include "chrome/browser/policy/proto/device_management_backend.pb.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| +#include "chrome/common/pref_names.h" |
| #include "chrome/test/base/testing_pref_service.h" |
| +#include "content/browser/geolocation/arbitrator_dependency_factory.h" |
| +#include "content/browser/geolocation/fake_access_token_store.h" |
| +#include "content/browser/geolocation/geolocation_provider.h" |
| +#include "content/browser/geolocation/location_arbitrator.h" |
| +#include "content/browser/geolocation/mock_location_provider.h" |
| +#include "content/common/geoposition.h" |
| +#include "content/public/browser/access_token_store.h" |
| #include "content/test/test_browser_thread.h" |
| -#include "testing/gmock/include/gmock/gmock.h" |
| +#include "googleurl/src/gurl.h" |
| +#include "net/url_request/url_request_context_getter.h" |
| +#include "testing/gmock/include/gmock/gmock-actions.h" |
| +#include "testing/gmock/include/gmock/gmock-generated-actions.h" |
| +#include "testing/gmock/include/gmock/gmock-matchers.h" |
| +#include "testing/gmock/include/gmock/gmock-more-actions.h" |
| +#include "testing/gmock/include/gmock/gmock-spec-builders.h" |
|
Joao da Silva
2012/04/23 10:19:57
This isn't common, usually just "gmock.h" is inclu
bartfab (slow)
2012/04/23 12:21:28
Done.
|
| #include "testing/gtest/include/gtest/gtest.h" |
| +using ::testing::_; |
| +using ::testing::DoAll; |
| +using ::testing::Invoke; |
| +using ::testing::WithoutArgs; |
| using base::TimeDelta; |
| using base::Time; |
| @@ -28,16 +50,81 @@ namespace { |
| const int64 kMillisecondsPerDay = Time::kMicrosecondsPerDay / 1000; |
| +// Mock geolocation stack, part 1: |
| +// A factory that provides the GeolocationArbitrator with a mock access token |
| +// store and a mock network location provider which, depending on the value of |
| +// |has_valid_location|, simulates success or failure in acquiring a location |
| +// fix. |
| +class TestingDependencyFactory |
| + : public DefaultGeolocationArbitratorDependencyFactory { |
| + public: |
| + explicit TestingDependencyFactory(bool has_valid_location) |
| + : DefaultGeolocationArbitratorDependencyFactory(), |
| + has_valid_location_(has_valid_location) { } |
| + |
| + virtual content::AccessTokenStore* NewAccessTokenStore() OVERRIDE { |
| + content::FakeAccessTokenStore* store = new content::FakeAccessTokenStore(); |
| + EXPECT_CALL(*store, LoadAccessTokens(_)) |
| + .WillRepeatedly(DoAll( |
| + Invoke(store, |
| + &content::FakeAccessTokenStore::DefaultLoadAccessTokens), |
| + WithoutArgs( |
| + Invoke(store, |
| + &content::FakeAccessTokenStore:: |
| + NotifyDelegateTokensLoaded)))); |
| + return store; |
| + } |
| + |
| + virtual LocationProviderBase* NewNetworkLocationProvider( |
| + content::AccessTokenStore* access_token_store, |
| + net::URLRequestContextGetter* context, |
| + const GURL& url, |
| + const string16& access_token) OVERRIDE { |
| + if (has_valid_location_) |
| + return NewAutoSuccessMockNetworkLocationProvider(); |
| + else |
| + return NewAutoFailMockNetworkLocationProvider(); |
| + } |
| + |
| + virtual LocationProviderBase* NewSystemLocationProvider() OVERRIDE { |
| + return NULL; |
| + } |
| + |
| + bool has_valid_location_; |
| +}; |
| + |
| +// Mock geolocation stack, part 2: |
| +// A wrapper around the regular GeolocationProvider that can be constructed and |
| +// destructed for testing and signals when it has received a location update. |
| +class TestingGeolocationProvider : public GeolocationProvider { |
| + public: |
| + explicit TestingGeolocationProvider(base::WaitableEvent* event) |
| + : GeolocationProvider(), |
| + event_(event) { } |
| + |
| + virtual ~TestingGeolocationProvider() {} |
| + |
| + virtual void OnLocationUpdate(const Geoposition& position) OVERRIDE { |
| + GeolocationProvider::OnLocationUpdate(position); |
| + event_->Signal(); |
| + } |
| + |
| + private: |
| + base::WaitableEvent* event_; |
| +}; |
| + |
| class TestingDeviceStatusCollector : public policy::DeviceStatusCollector { |
| public: |
| TestingDeviceStatusCollector( |
| PrefService* local_state, |
| - chromeos::system::StatisticsProvider* provider) |
| - : policy::DeviceStatusCollector(local_state, provider), |
| - local_state_(local_state) { |
| + chromeos::system::StatisticsProvider* statistics_provider, |
| + GeolocationProvider* geolocation_provider) |
| + : policy::DeviceStatusCollector(local_state, statistics_provider) { |
| // 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)); |
| + |
| + SetGeolocationProviderForTest(geolocation_provider); |
| } |
| void Simulate(IdleState* states, int len) { |
| @@ -74,8 +161,6 @@ class TestingDeviceStatusCollector : public policy::DeviceStatusCollector { |
| } |
| private: |
| - PrefService* local_state_; |
| - |
| // Baseline time for the fake times returned from GetCurrentTime(). |
| Time baseline_time_; |
| @@ -97,7 +182,6 @@ int64 GetActiveMilliseconds(em::DeviceStatusReportRequest& status) { |
| namespace policy { |
| -using ::testing::_; |
| using ::testing::NotNull; |
| using ::testing::Return; |
| using ::testing::SetArgPointee; |
|
Joao da Silva
2012/04/23 10:19:57
Move these to the top
bartfab (slow)
2012/04/23 12:21:28
Done.
|
| @@ -108,30 +192,104 @@ class DeviceStatusCollectorTest : public testing::Test { |
| : message_loop_(MessageLoop::TYPE_UI), |
| ui_thread_(content::BrowserThread::UI, &message_loop_), |
| file_thread_(content::BrowserThread::FILE, &message_loop_), |
| - status_collector_(&prefs_, &statistics_provider_) { |
| + io_thread_(content::BrowserThread::IO, &message_loop_), |
| + event_(false, false) { |
| + TestingDeviceStatusCollector::RegisterPrefs(&prefs_); |
| - DeviceStatusCollector::RegisterPrefs(&prefs_); |
| EXPECT_CALL(statistics_provider_, GetMachineStatistic(_, NotNull())) |
| .WillRepeatedly(Return(false)); |
| - cros_settings_ = chromeos::CrosSettings::Get(); |
| - |
| // Remove the real DeviceSettingsProvider and replace it with a stub. |
| + cros_settings_ = chromeos::CrosSettings::Get(); |
| device_settings_provider_ = |
| cros_settings_->GetProvider(chromeos::kReportDeviceVersionInfo); |
| EXPECT_TRUE(device_settings_provider_ != NULL); |
| EXPECT_TRUE( |
| cros_settings_->RemoveSettingsProvider(device_settings_provider_)); |
| cros_settings_->AddSettingsProvider(&stub_settings_provider_); |
| + |
| + StartStatusCollector(true); |
| } |
| ~DeviceStatusCollectorTest() { |
| + StopStatusCollector(); |
| + |
| // Restore the real DeviceSettingsProvider. |
| EXPECT_TRUE( |
| cros_settings_->RemoveSettingsProvider(&stub_settings_provider_)); |
| cros_settings_->AddSettingsProvider(device_settings_provider_); |
| } |
| + void GetStatus() { |
| + status_.Clear(); |
| + status_collector_->GetStatus(&status_); |
| + } |
| + |
| + void StartStatusCollector(bool has_valid_fix) { |
| + dependency_factory_ = new TestingDependencyFactory(has_valid_fix); |
| + GeolocationArbitrator::SetDependencyFactoryForTest( |
| + dependency_factory_.get()); |
| + event_.Reset(); |
| + geolocation_provider_.reset(new TestingGeolocationProvider(&event_)); |
| + status_collector_.reset( |
| + new TestingDeviceStatusCollector(&prefs_, |
| + &statistics_provider_, |
| + geolocation_provider_.get())); |
| + } |
| + |
| + void StopStatusCollector() { |
| + status_collector_.reset(NULL); |
| + // Allow the DeviceStatusLocationHelper's shutdown sequence to run. |
| + message_loop_.RunAllPending(); |
| + GeolocationArbitrator::SetDependencyFactoryForTest(NULL); |
| + dependency_factory_ = NULL; |
| + geolocation_provider_.reset(NULL); |
| + } |
| + |
| + void RestartStatusCollector(bool has_valid_fix) { |
| + StopStatusCollector(); |
| + StartStatusCollector(has_valid_fix); |
| + } |
| + |
| + void CheckThatNoLocationIsReported() { |
| + GetStatus(); |
| + EXPECT_FALSE(status_.has_device_location()); |
| + } |
| + |
| + void CheckThatAValidLocationIsReported() { |
| + // Checks that a location is being reported which matches the fix returned |
| + // by the AutoMockLocationProvider. |
| + GetStatus(); |
| + EXPECT_TRUE(status_.has_device_location()); |
| + em::DeviceLocation location = status_.device_location(); |
| + if (location.has_error_code()) |
| + EXPECT_EQ(0, location.error_code()); |
| + EXPECT_TRUE(location.has_latitude()); |
| + EXPECT_TRUE(location.has_longitude()); |
| + EXPECT_TRUE(location.has_accuracy()); |
| + EXPECT_TRUE(location.has_timestamp()); |
| + EXPECT_FALSE(location.has_altitude()); |
| + EXPECT_FALSE(location.has_altitude_accuracy()); |
| + EXPECT_FALSE(location.has_heading()); |
| + EXPECT_FALSE(location.has_speed()); |
| + EXPECT_FALSE(location.has_error_message()); |
| + EXPECT_EQ(4.3, location.latitude()); |
| + EXPECT_EQ(-7.8, location.longitude()); |
| + EXPECT_EQ(3., location.accuracy()); |
| + // Check that the timestamp is not older than ten minutes. |
| + EXPECT_TRUE(Time::Time::Now() - |
| + base::Time::FromDoubleT(location.timestamp() / 1000.) < |
| + base::TimeDelta::FromMinutes(10)); |
|
Joao da Silva
2012/04/23 10:19:57
Nit: no need for the base:: qualifiers in these 2
bartfab (slow)
2012/04/23 12:21:28
Done.
|
| + } |
| + |
| + void CheckThatALocationErrorIsReported() { |
| + GetStatus(); |
| + EXPECT_TRUE(status_.has_device_location()); |
| + em::DeviceLocation location = status_.device_location(); |
| + EXPECT_TRUE(location.has_error_code()); |
| + EXPECT_EQ(1, location.error_code()); |
| + } |
| + |
| protected: |
| // Convenience method. |
| int64 ActivePeriodMilliseconds() { |
| @@ -141,10 +299,15 @@ class DeviceStatusCollectorTest : public testing::Test { |
| MessageLoop message_loop_; |
| content::TestBrowserThread ui_thread_; |
| content::TestBrowserThread file_thread_; |
| + content::TestBrowserThread io_thread_; |
| + |
| + scoped_refptr<TestingDependencyFactory> dependency_factory_; |
| + base::WaitableEvent event_; |
| + scoped_ptr<TestingGeolocationProvider> geolocation_provider_; |
| TestingPrefService prefs_; |
| chromeos::system::MockStatisticsProvider statistics_provider_; |
| - TestingDeviceStatusCollector status_collector_; |
| + scoped_ptr<TestingDeviceStatusCollector> status_collector_; |
| em::DeviceStatusReportRequest status_; |
| chromeos::CrosSettings* cros_settings_; |
| chromeos::CrosSettingsProvider* device_settings_provider_; |
| @@ -160,20 +323,20 @@ TEST_F(DeviceStatusCollectorTest, AllIdle) { |
| cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| // Test reporting with no data. |
| - status_collector_.GetStatus(&status_); |
| + GetStatus(); |
| EXPECT_EQ(0, status_.active_period_size()); |
| EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| // Test reporting with a single idle sample. |
| - status_collector_.Simulate(test_states, 1); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, 1); |
| + GetStatus(); |
| EXPECT_EQ(0, status_.active_period_size()); |
| EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| // Test reporting with multiple consecutive idle samples. |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| + GetStatus(); |
| EXPECT_EQ(0, status_.active_period_size()); |
| EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| } |
| @@ -187,16 +350,16 @@ TEST_F(DeviceStatusCollectorTest, AllActive) { |
| cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| // Test a single active sample. |
| - status_collector_.Simulate(test_states, 1); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, 1); |
| + GetStatus(); |
| EXPECT_EQ(1, status_.active_period_size()); |
| EXPECT_EQ(1 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| status_.clear_active_period(); // Clear the result protobuf. |
| // Test multiple consecutive active samples. |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| + GetStatus(); |
| EXPECT_EQ(1, status_.active_period_size()); |
| EXPECT_EQ(3 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| } |
| @@ -212,9 +375,9 @@ TEST_F(DeviceStatusCollectorTest, MixedStates) { |
| IDLE_STATE_ACTIVE |
| }; |
| cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| + GetStatus(); |
| EXPECT_EQ(4 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| } |
| @@ -228,18 +391,17 @@ TEST_F(DeviceStatusCollectorTest, StateKeptInPref) { |
| IDLE_STATE_IDLE |
| }; |
| cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| - |
| - // Process the list a second time with a different collector. |
| - // It should be able to count the active periods found by the first |
| - // collector, because the results are stored in a pref. |
| - TestingDeviceStatusCollector second_collector(&prefs_, |
| - &statistics_provider_); |
| - second_collector.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| - |
| - second_collector.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| + |
| + // Process the list a second time after restarting the collector. It should be |
| + // able to count the active periods found by the original collector, because |
| + // the results are stored in a pref. |
| + RestartStatusCollector(false); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| + |
| + GetStatus(); |
| EXPECT_EQ(6 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| } |
| @@ -253,9 +415,9 @@ TEST_F(DeviceStatusCollectorTest, Times) { |
| IDLE_STATE_IDLE |
| }; |
| cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| + GetStatus(); |
| EXPECT_EQ(3 * ActivePeriodMilliseconds(), GetActiveMilliseconds(status_)); |
| } |
| @@ -267,41 +429,41 @@ TEST_F(DeviceStatusCollectorTest, MaxStoredPeriods) { |
| unsigned int max_days = 10; |
| cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| - status_collector_.set_max_stored_past_activity_days(max_days - 1); |
| - status_collector_.set_max_stored_future_activity_days(1); |
| + status_collector_->set_max_stored_past_activity_days(max_days - 1); |
| + status_collector_->set_max_stored_future_activity_days(1); |
| Time baseline = Time::Now().LocalMidnight(); |
| // Simulate 12 active periods. |
| for (int i = 0; i < static_cast<int>(max_days) + 2; i++) { |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| // Advance the simulated clock by a day. |
| baseline += TimeDelta::FromDays(1); |
| - status_collector_.SetBaselineTime(baseline); |
| + status_collector_->SetBaselineTime(baseline); |
| } |
| // Check that we don't exceed the max number of periods. |
| - status_collector_.GetStatus(&status_); |
| + GetStatus(); |
| EXPECT_EQ(static_cast<int>(max_days), status_.active_period_size()); |
| // Simulate some future times. |
| for (int i = 0; i < static_cast<int>(max_days) + 2; i++) { |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| // Advance the simulated clock by a day. |
| baseline += TimeDelta::FromDays(1); |
| - status_collector_.SetBaselineTime(baseline); |
| + status_collector_->SetBaselineTime(baseline); |
| } |
| // Set the clock back so the previous simulated times are in the future. |
| baseline -= TimeDelta::FromDays(20); |
| - status_collector_.SetBaselineTime(baseline); |
| + status_collector_->SetBaselineTime(baseline); |
| // Collect one more data point to trigger pruning. |
| - status_collector_.Simulate(test_states, 1); |
| + status_collector_->Simulate(test_states, 1); |
| // Check that we don't exceed the max number of periods. |
| status_.clear_active_period(); |
| - status_collector_.GetStatus(&status_); |
| + GetStatus(); |
| EXPECT_LT(status_.active_period_size(), static_cast<int>(max_days)); |
| } |
| @@ -314,9 +476,9 @@ TEST_F(DeviceStatusCollectorTest, ActivityTimesDisabledByDefault) { |
| IDLE_STATE_ACTIVE, |
| IDLE_STATE_ACTIVE |
| }; |
| - status_collector_.Simulate(test_states, |
| - sizeof(test_states) / sizeof(IdleState)); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, |
| + sizeof(test_states) / sizeof(IdleState)); |
| + GetStatus(); |
| EXPECT_EQ(0, status_.active_period_size()); |
| EXPECT_EQ(0, GetActiveMilliseconds(status_)); |
| } |
| @@ -328,11 +490,11 @@ TEST_F(DeviceStatusCollectorTest, ActivityCrossingMidnight) { |
| cros_settings_->SetBoolean(chromeos::kReportDeviceActivityTimes, true); |
| // Set the baseline time to 10 seconds after midnight. |
| - status_collector_.SetBaselineTime( |
| + status_collector_->SetBaselineTime( |
| Time::Now().LocalMidnight() + TimeDelta::FromSeconds(10)); |
| - status_collector_.Simulate(test_states, 1); |
| - status_collector_.GetStatus(&status_); |
| + status_collector_->Simulate(test_states, 1); |
| + GetStatus(); |
| ASSERT_EQ(2, status_.active_period_size()); |
| em::ActiveTimePeriod period0 = status_.active_period(0); |
| @@ -354,13 +516,11 @@ TEST_F(DeviceStatusCollectorTest, ActivityCrossingMidnight) { |
| TEST_F(DeviceStatusCollectorTest, DevSwitchBootMode) { |
| // Test that boot mode data is not reported if the pref is not turned on. |
| - status_collector_.GetStatus(&status_); |
| - EXPECT_EQ(false, status_.has_boot_mode()); |
| - |
| EXPECT_CALL(statistics_provider_, |
| GetMachineStatistic("devsw_boot", NotNull())) |
| .WillRepeatedly(DoAll(SetArgPointee<1>("0"), Return(true))); |
| - EXPECT_EQ(false, status_.has_boot_mode()); |
| + GetStatus(); |
| + EXPECT_FALSE(status_.has_boot_mode()); |
| // Turn the pref on, and check that the status is reported iff the |
| // statistics provider returns valid data. |
| @@ -369,41 +529,41 @@ TEST_F(DeviceStatusCollectorTest, DevSwitchBootMode) { |
| EXPECT_CALL(statistics_provider_, |
| GetMachineStatistic("devsw_boot", NotNull())) |
| .WillOnce(DoAll(SetArgPointee<1>("(error)"), Return(true))); |
| - status_collector_.GetStatus(&status_); |
| - EXPECT_EQ(false, status_.has_boot_mode()); |
| + GetStatus(); |
| + EXPECT_FALSE(status_.has_boot_mode()); |
| EXPECT_CALL(statistics_provider_, |
| GetMachineStatistic("devsw_boot", NotNull())) |
| .WillOnce(DoAll(SetArgPointee<1>(" "), Return(true))); |
| - status_collector_.GetStatus(&status_); |
| - EXPECT_EQ(false, status_.has_boot_mode()); |
| + GetStatus(); |
| + EXPECT_FALSE(status_.has_boot_mode()); |
| EXPECT_CALL(statistics_provider_, |
| GetMachineStatistic("devsw_boot", NotNull())) |
| .WillOnce(DoAll(SetArgPointee<1>("0"), Return(true))); |
| - status_collector_.GetStatus(&status_); |
| + GetStatus(); |
| EXPECT_EQ("Verified", status_.boot_mode()); |
| EXPECT_CALL(statistics_provider_, |
| GetMachineStatistic("devsw_boot", NotNull())) |
| .WillOnce(DoAll(SetArgPointee<1>("1"), Return(true))); |
| - status_collector_.GetStatus(&status_); |
| + GetStatus(); |
| EXPECT_EQ("Dev", status_.boot_mode()); |
| } |
| TEST_F(DeviceStatusCollectorTest, VersionInfo) { |
| // When the pref to collect this data is not enabled, expect that none of |
| // the fields are present in the protobuf. |
| - status_collector_.GetStatus(&status_); |
| - EXPECT_EQ(false, status_.has_browser_version()); |
| - EXPECT_EQ(false, status_.has_os_version()); |
| - EXPECT_EQ(false, status_.has_firmware_version()); |
| + GetStatus(); |
| + EXPECT_FALSE(status_.has_browser_version()); |
| + EXPECT_FALSE(status_.has_os_version()); |
| + EXPECT_FALSE(status_.has_firmware_version()); |
| cros_settings_->SetBoolean(chromeos::kReportDeviceVersionInfo, true); |
| - status_collector_.GetStatus(&status_); |
| - EXPECT_EQ(true, status_.has_browser_version()); |
| - EXPECT_EQ(true, status_.has_os_version()); |
| - EXPECT_EQ(true, status_.has_firmware_version()); |
| + GetStatus(); |
| + EXPECT_TRUE(status_.has_browser_version()); |
| + EXPECT_TRUE(status_.has_os_version()); |
| + EXPECT_TRUE(status_.has_firmware_version()); |
| // Check that the browser version is not empty. OS version & firmware |
| // don't have any reasonable values inside the unit test, so those |
| @@ -411,4 +571,54 @@ TEST_F(DeviceStatusCollectorTest, VersionInfo) { |
| EXPECT_NE("", status_.browser_version()); |
| } |
| + |
|
Joao da Silva
2012/04/23 10:19:57
Nitty nit: only 1 newline :-)
bartfab (slow)
2012/04/23 12:21:28
Done.
|
| +TEST_F(DeviceStatusCollectorTest, Location) { |
| + // Check that when device location reporting is disabled, no location is |
| + // reported. |
| + CheckThatNoLocationIsReported(); |
| + |
| + // Check that when device location reporting is enabled and the geolocation |
| + // stack returns a valid fix, the location is reported. |
| + cros_settings_->SetBoolean(chromeos::kReportDeviceLocation, true); |
| + // Allow the geolocation stack to start up. |
| + message_loop_.RunAllPending(); |
| + // Wait for success in acquiring a location fix to be returned on the |
| + // geolocation thread. |
| + event_.Wait(); |
| + // Allow the result to propagate to the UI thread. |
| + message_loop_.RunAllPending(); |
| + |
| + CheckThatAValidLocationIsReported(); |
| + |
| + // Restart the status collector with a mock GeolocationProvider that returns |
| + // no valid fix. Check that the last known location was stored in local state |
| + // and is reported instead. |
| + RestartStatusCollector(false); |
| + CheckThatAValidLocationIsReported(); |
| + |
| + // Check that after disabling location reporting again, the last known |
| + // location has been celared from local state and is no longer reported. |
| + cros_settings_->SetBoolean(chromeos::kReportDeviceLocation, false); |
| + // Allow the new pref to propagate to the status collector. |
| + message_loop_.RunAllPending(); |
| + |
| + EXPECT_TRUE(prefs_.GetDictionary(prefs::kDeviceLocation)->empty()); |
|
Joao da Silva
2012/04/23 10:19:57
Also check that this is not empty after getting a
bartfab (slow)
2012/04/23 12:21:28
Done.
|
| + |
| + CheckThatNoLocationIsReported(); |
| + |
| + // Check that after enabling location reporting again, an error is reported |
| + // since the location is unknown. |
| + cros_settings_->SetBoolean(chromeos::kReportDeviceLocation, true); |
| + // Allow the new pref to propagate to the status collector and the geolocation |
| + // stack to start up.. |
| + message_loop_.RunAllPending(); |
| + // Wait for failure in acquiring a location fix to be returned on the |
| + // geolocation thread. |
| + event_.Wait(); |
| + // Allow the result to propagate to the UI thread. |
| + message_loop_.RunAllPending(); |
| + |
| + CheckThatALocationErrorIsReported(); |
| +} |
| + |
| } // namespace policy |