update_engine: Move DLC metadata ownership to update_engine

Add dbus messages so dlcservice can let update_engine know when a DLC is
installed or uninstalled.

BUG=chromium:912666
TEST=unittests, install and uninstall DLCs on DUT.

Cq-Depend: chromium:2112994,chromium:2113254
Change-Id: I35374504afcdaf96b099e343cabe072fc18f1022
Reviewed-on: https://chromium-review.googlesource.com/c/aosp/platform/system/update_engine/+/2113134
Reviewed-by: Amin Hassani <ahassani@chromium.org>
Reviewed-by: Jae Hoon Kim <kimjae@chromium.org>
Tested-by: Andrew Lassalle <andrewlassalle@chromium.org>
Commit-Queue: Andrew Lassalle <andrewlassalle@chromium.org>
diff --git a/update_attempter_unittest.cc b/update_attempter_unittest.cc
index d468f56..d65a556 100644
--- a/update_attempter_unittest.cc
+++ b/update_attempter_unittest.cc
@@ -2401,4 +2401,60 @@
   EXPECT_EQ(78, dlc_app_params.ping_date_last_active);
   EXPECT_EQ(99, dlc_app_params.ping_date_last_rollcall);
 }
+
+TEST_F(UpdateAttempterTest, CalculateDlcParamsRemoveStaleMetadata) {
+  base::ScopedTempDir tempdir;
+  ASSERT_TRUE(tempdir.CreateUniqueTempDir());
+  fake_system_state_.request_params()->set_root(tempdir.GetPath().value());
+  string dlc_id = "dlc0";
+  base::FilePath metadata_path_dlc0 =
+      base::FilePath(fake_system_state_.request_params()->dlc_prefs_root())
+          .Append(dlc_id);
+  ASSERT_TRUE(base::CreateDirectory(metadata_path_dlc0));
+  base::FilePath metadata_path_dlc_stale =
+      base::FilePath(fake_system_state_.request_params()->dlc_prefs_root())
+          .Append("stale");
+  ASSERT_TRUE(base::CreateDirectory(metadata_path_dlc_stale));
+  EXPECT_CALL(mock_dlcservice_, GetInstalled(_))
+      .WillOnce(
+          DoAll(SetArgPointee<0>(std::vector<string>({dlc_id})), Return(true)));
+
+  attempter_.is_install_ = false;
+  attempter_.CalculateDlcParams();
+
+  EXPECT_TRUE(base::PathExists(metadata_path_dlc0));
+  EXPECT_FALSE(base::PathExists(metadata_path_dlc_stale));
+}
+
+TEST_F(UpdateAttempterTest, SetDlcActiveValue) {
+  base::ScopedTempDir tempdir;
+  ASSERT_TRUE(tempdir.CreateUniqueTempDir());
+  fake_system_state_.request_params()->set_root(tempdir.GetPath().value());
+  string dlc_id = "dlc0";
+  base::FilePath metadata_path_dlc0 =
+      base::FilePath(fake_system_state_.request_params()->dlc_prefs_root())
+          .Append(dlc_id);
+  attempter_.SetDlcActiveValue(true, dlc_id);
+  Prefs prefs;
+  ASSERT_TRUE(base::PathExists(metadata_path_dlc0));
+  ASSERT_TRUE(prefs.Init(metadata_path_dlc0));
+  int64_t temp_int;
+  EXPECT_TRUE(prefs.GetInt64(kPrefsPingActive, &temp_int));
+  EXPECT_EQ(temp_int, kPingActiveValue);
+}
+
+TEST_F(UpdateAttempterTest, SetDlcInactive) {
+  base::ScopedTempDir tempdir;
+  ASSERT_TRUE(tempdir.CreateUniqueTempDir());
+  fake_system_state_.request_params()->set_root(tempdir.GetPath().value());
+  string dlc_id = "dlc0";
+  base::FilePath metadata_path_dlc0 =
+      base::FilePath(fake_system_state_.request_params()->dlc_prefs_root())
+          .Append(dlc_id);
+  base::CreateDirectory(metadata_path_dlc0);
+  EXPECT_TRUE(base::PathExists(metadata_path_dlc0));
+  attempter_.SetDlcActiveValue(false, dlc_id);
+  EXPECT_FALSE(base::PathExists(metadata_path_dlc0));
+}
+
 }  // namespace chromeos_update_engine