Fix OmahaRequestActionTest when the device time is very old.
Changed OmahaRequestAction to use the ClockInterface instead so that
it can be faked in the unittests.
Test: ./update_engine_unittests
Bug: 29577823
Change-Id: If243aa3beae973606ace226a7845ca5a6b02225f
diff --git a/omaha_request_action.cc b/omaha_request_action.cc
index a9143a8..3d2dac1 100644
--- a/omaha_request_action.cc
+++ b/omaha_request_action.cc
@@ -1224,7 +1224,7 @@
return kWallClockWaitDoneAndUpdateCheckWaitNotRequired;
}
} else {
- update_first_seen_at = Time::Now();
+ update_first_seen_at = system_state_->clock()->GetWallclockTime();
update_first_seen_at_int = update_first_seen_at.ToInternalValue();
if (system_state_->prefs()->SetInt64(kPrefsUpdateFirstSeenAt,
update_first_seen_at_int)) {
@@ -1241,9 +1241,10 @@
}
}
- TimeDelta elapsed_time = Time::Now() - update_first_seen_at;
- TimeDelta max_scatter_period = TimeDelta::FromDays(
- output_object->max_days_to_scatter);
+ TimeDelta elapsed_time =
+ system_state_->clock()->GetWallclockTime() - update_first_seen_at;
+ TimeDelta max_scatter_period =
+ TimeDelta::FromDays(output_object->max_days_to_scatter);
LOG(INFO) << "Waiting Period = "
<< utils::FormatSecs(params_->waiting_period().InSeconds())
diff --git a/omaha_request_action_unittest.cc b/omaha_request_action_unittest.cc
index 9291e05..260a7a1 100644
--- a/omaha_request_action_unittest.cc
+++ b/omaha_request_action_unittest.cc
@@ -1800,36 +1800,37 @@
params.set_waiting_period(TimeDelta().FromDays(1));
params.set_update_check_count_wait_enabled(false);
- ASSERT_FALSE(TestUpdateCheck(
- ¶ms,
- fake_update_response_.GetUpdateResponse(),
- -1,
- false, // ping_only
- ErrorCode::kOmahaUpdateDeferredPerPolicy,
- metrics::CheckResult::kUpdateAvailable,
- metrics::CheckReaction::kDeferring,
- metrics::DownloadErrorCode::kUnset,
- &response,
- nullptr));
+ Time arbitrary_date;
+ Time::FromString("6/4/1989", &arbitrary_date);
+ fake_system_state_.fake_clock()->SetWallclockTime(arbitrary_date);
+ ASSERT_FALSE(TestUpdateCheck(¶ms,
+ fake_update_response_.GetUpdateResponse(),
+ -1,
+ false, // ping_only
+ ErrorCode::kOmahaUpdateDeferredPerPolicy,
+ metrics::CheckResult::kUpdateAvailable,
+ metrics::CheckReaction::kDeferring,
+ metrics::DownloadErrorCode::kUnset,
+ &response,
+ nullptr));
int64_t timestamp = 0;
ASSERT_TRUE(fake_prefs_.GetInt64(kPrefsUpdateFirstSeenAt, ×tamp));
- ASSERT_GT(timestamp, 0);
+ EXPECT_EQ(arbitrary_date.ToInternalValue(), timestamp);
EXPECT_FALSE(response.update_exists);
// Verify if we are interactive check we don't defer.
params.set_interactive(true);
- ASSERT_TRUE(
- TestUpdateCheck(¶ms,
- fake_update_response_.GetUpdateResponse(),
- -1,
- false, // ping_only
- ErrorCode::kSuccess,
- metrics::CheckResult::kUpdateAvailable,
- metrics::CheckReaction::kUpdating,
- metrics::DownloadErrorCode::kUnset,
- &response,
- nullptr));
+ ASSERT_TRUE(TestUpdateCheck(¶ms,
+ fake_update_response_.GetUpdateResponse(),
+ -1,
+ false, // ping_only
+ ErrorCode::kSuccess,
+ metrics::CheckResult::kUpdateAvailable,
+ metrics::CheckReaction::kUpdating,
+ metrics::DownloadErrorCode::kUnset,
+ &response,
+ nullptr));
EXPECT_TRUE(response.update_exists);
}
@@ -1840,23 +1841,22 @@
params.set_waiting_period(TimeDelta().FromDays(1));
params.set_update_check_count_wait_enabled(false);
- // Set the timestamp to a very old value such that it exceeds the
- // waiting period set above.
- Time t1;
+ Time t1, t2;
Time::FromString("1/1/2012", &t1);
- ASSERT_TRUE(fake_prefs_.SetInt64(
- kPrefsUpdateFirstSeenAt, t1.ToInternalValue()));
- ASSERT_TRUE(TestUpdateCheck(
- ¶ms,
- fake_update_response_.GetUpdateResponse(),
- -1,
- false, // ping_only
- ErrorCode::kSuccess,
- metrics::CheckResult::kUpdateAvailable,
- metrics::CheckReaction::kUpdating,
- metrics::DownloadErrorCode::kUnset,
- &response,
- nullptr));
+ Time::FromString("1/3/2012", &t2);
+ ASSERT_TRUE(
+ fake_prefs_.SetInt64(kPrefsUpdateFirstSeenAt, t1.ToInternalValue()));
+ fake_system_state_.fake_clock()->SetWallclockTime(t2);
+ ASSERT_TRUE(TestUpdateCheck(¶ms,
+ fake_update_response_.GetUpdateResponse(),
+ -1,
+ false, // ping_only
+ ErrorCode::kSuccess,
+ metrics::CheckResult::kUpdateAvailable,
+ metrics::CheckReaction::kUpdating,
+ metrics::DownloadErrorCode::kUnset,
+ &response,
+ nullptr));
EXPECT_TRUE(response.update_exists);