Parse and expose end-of-life flag.
Omaha update or noupdate response can include _key=value pairs with
arbitrary data. One of those key can be "_eol" with the one of the
values "supported", "security-only" or "eol" which notifies the device
the end-of-life status of the device with respect to updates. This
information is now exposed via GetEolStatus() to the client so it
can be properly displayed in the UI.
Bug: 27924505
TEST=Added unittest. Run `update_engine_client --eol_status` on link.
Change-Id: Icc15f25b4d0b19cc894f5afc52ac7c43c7818982
diff --git a/omaha_request_action_unittest.cc b/omaha_request_action_unittest.cc
index 496143e..a7abdec 100644
--- a/omaha_request_action_unittest.cc
+++ b/omaha_request_action_unittest.cc
@@ -51,8 +51,6 @@
using base::Time;
using base::TimeDelta;
-using chromeos_update_engine::test_utils::System;
-using chromeos_update_engine::test_utils::WriteFileString;
using std::string;
using std::vector;
using testing::AllOf;
@@ -355,9 +353,7 @@
? 0 : 1);
loop.PostTask(base::Bind([&processor] { processor.StartProcessing(); }));
- LOG(INFO) << "loop.PendingTasks() = " << loop.PendingTasks();
loop.Run();
- LOG(INFO) << "loop.PendingTasks() = " << loop.PendingTasks();
EXPECT_FALSE(loop.PendingTasks());
if (collector_action.has_input_object_ && out_response)
*out_response = collector_action.omaha_response_;
@@ -1676,6 +1672,32 @@
nullptr));
}
+TEST_F(OmahaRequestActionTest, ParseUpdateCheckAttributesTest) {
+ // Test that the "eol" flags is only parsed from the "_eol" attribute and not
+ // the "eol" attribute.
+ ASSERT_TRUE(
+ TestUpdateCheck(nullptr, // request_params
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response "
+ "protocol=\"3.0\"><app appid=\"foo\" status=\"ok\">"
+ "<ping status=\"ok\"/><updatecheck status=\"noupdate\" "
+ "_eol=\"security-only\" eol=\"eol\" _foo=\"bar\"/>"
+ "</app></response>",
+ -1,
+ false, // ping_only
+ ErrorCode::kSuccess,
+ metrics::CheckResult::kNoUpdateAvailable,
+ metrics::CheckReaction::kUnset,
+ metrics::DownloadErrorCode::kUnset,
+ nullptr,
+ nullptr));
+ string eol_pref;
+ EXPECT_TRUE(
+ fake_system_state_.prefs()->GetString(kPrefsOmahaEolStatus, &eol_pref));
+ // Note that the eol="eol" attribute should be ignored and the _eol should be
+ // used instead.
+ EXPECT_EQ("security-only", eol_pref);
+}
+
TEST_F(OmahaRequestActionTest, NoUniqueIDTest) {
brillo::Blob post_data;
ASSERT_FALSE(TestUpdateCheck(nullptr, // request_params