Supprot RPK package 59/291059/5
authorSangyoon Jang <jeremy.jang@samsung.com>
Fri, 7 Apr 2023 06:07:37 +0000 (15:07 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Fri, 21 Apr 2023 02:21:52 +0000 (02:21 +0000)
Change-Id: I6443f1ddb731de472e8f5c12c031f8a995d675e7
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/pkg_upgrade/include/common_type.hh
src/pkg_upgrade/src/backend_invoker.cc
src/pkg_upgrade/src/pkg_finder.cc
tests/unit_tests/pkg_upgrade/src/test_backend_invoker.cc

index a003d03c2ebba00f58c29f47f5bd418a533d0166..9ebbc89c76a0216bd8f5f0e0d5ba480e50222df5 100644 (file)
@@ -25,6 +25,7 @@ namespace common_fota {
 enum class PkgType {
   TPK,
   WGT,
+  RPK,
   UNKNOWN
 };
 
@@ -64,6 +65,8 @@ class PkgContext {
   PkgType GetType() const {
     if (type_ == "wgt" )
       return PkgType::WGT;
+    else if (type_ == "rpk")
+      return PkgType::RPK;
     return PkgType::TPK;
   }
   PkgLocation GetLocation() const {
index f3a3e148b9b2ade8166cab7c4e6b40023062e6c7..ee6b250a70790835ca2e7ec30ca6d48601ae336f 100644 (file)
@@ -30,6 +30,8 @@ namespace {
 
 constexpr char kTpkBackendCmdStr[] = "/usr/bin/tpk-backend";
 constexpr char kWgtBackendCmdStr[] = "/usr/bin/wgt-backend";
+// TODO: consider using unified-backend only
+constexpr char kUnifiedBackendCmdStr[] = "/usr/bin/unified-backend";
 
 constexpr char kManifestDirectInstallOptStr[] = "-y";
 constexpr char kUninstallOptStr[] = "-d";
@@ -80,6 +82,8 @@ std::list<std::string> BackendInvoker::GetParameter() {
 void BackendInvoker::SetBackend(PkgType type) {
   if (type == PkgType::WGT)
     parameters_.push_back(kWgtBackendCmdStr);
+  else if (type == PkgType::RPK)
+    parameters_.push_back(kUnifiedBackendCmdStr);
   else
     parameters_.push_back(kTpkBackendCmdStr);
 }
index d359941a63d1fb36308e9bcce121f9eb4373c105..e539317018583da4c57806af2377304c84a8ac83 100644 (file)
@@ -53,6 +53,7 @@ constexpr char kTokenVersionStr[] = "version=";
 constexpr char kTokenRemoveStr[] = "removable=";
 constexpr char kDefaultVersionStr[] = "0.0.1";
 constexpr char kDefaultPkgTypeStr[] = "tpk";
+constexpr char kRpkTypeStr[] = "rpk";
 
 }  // namespace
 
@@ -203,8 +204,13 @@ int PkgFinder::FindPreloadPkgidFromXml(
       version = kDefaultVersionStr;
 
     string type = FindInfoFromXml(buf, "type");
-    if (type.empty())
-      type = kDefaultPkgTypeStr;
+    if (type.empty()) {
+      string res_type = FindInfoFromXml(buf, "res-type");
+      if (!res_type.empty())
+        type = kRpkTypeStr;
+      else
+        type = kDefaultPkgTypeStr;
+    }
 
     new_pkgs_.emplace_back(pkgid, version, type, true);
   }
index 3cd2d3f557e1b3b471f3e99eefea7538bb1a9677..99ae2811e4ca6019f20282cff33a209282075d25 100644 (file)
@@ -80,6 +80,22 @@ TEST_F(BackendInvokerTest, WGTPreloadRWUpdateRemovable) {
       expected_argument));
 }
 
+TEST_F(BackendInvokerTest, RPKPreloadRWUpdateRemovable) {
+  BackendInvoker update_backend("rpk_pkgid", PkgType::RPK,
+      PkgLocation::RW, PkgOperation::UPDATE, true);
+
+  std::list<std::string> expected_argument { "/usr/bin/unified-backend", "-y",
+      "rpk_pkgid", "--preload-rw", "--skip-check-reference"};
+
+  EXPECT_TRUE(CompareArgumentList(update_backend.GetParameter(),
+      expected_argument));
+
+  BackendInvoker install_backend("rpk_pkgid", PkgType::RPK,
+      PkgLocation::RW, PkgOperation::INSTALL, true);
+  EXPECT_TRUE(CompareArgumentList(install_backend.GetParameter(),
+      expected_argument));
+}
+
 TEST_F(BackendInvokerTest, TPKPreloadROUpdate) {
   BackendInvoker update_backend("tpk_pkgid", PkgType::TPK,
       PkgLocation::RO, PkgOperation::UPDATE, false);
@@ -111,6 +127,21 @@ TEST_F(BackendInvokerTest, WGTPreloadROUpdate) {
       expected_argument));
 }
 
+TEST_F(BackendInvokerTest, RPKPreloadROUpdate) {
+  BackendInvoker update_backend("rpk_pkgid", PkgType::RPK,
+      PkgLocation::RO, PkgOperation::UPDATE, false);
+
+  std::list<std::string> expected_argument { "/usr/bin/unified-backend", "-y",
+      "rpk_pkgid", "--preload", "--partial-rw", "--skip-check-reference"};
+  EXPECT_TRUE(CompareArgumentList(update_backend.GetParameter(),
+      expected_argument));
+
+  BackendInvoker install_backend("rpk_pkgid", PkgType::RPK,
+      PkgLocation::RO, PkgOperation::INSTALL, false);
+  EXPECT_TRUE(CompareArgumentList(install_backend.GetParameter(),
+      expected_argument));
+}
+
 TEST_F(BackendInvokerTest, TPKPreloadROUninstall) {
   BackendInvoker backend("tpk_pkgid", PkgType::TPK,
       PkgLocation::RO, PkgOperation::UNINSTALL, false);
@@ -131,6 +162,16 @@ TEST_F(BackendInvokerTest, WGTPreloadROUninstall) {
       expected_argument));
 }
 
+TEST_F(BackendInvokerTest, RPKPreloadROUninstall) {
+  BackendInvoker backend("rpk_pkgid", PkgType::RPK,
+      PkgLocation::RO, PkgOperation::UNINSTALL, false);
+
+  std::list<std::string> expected_argument { "/usr/bin/unified-backend", "-d",
+      "rpk_pkgid", "--preload", "--force-remove", "--partial-rw"};
+  EXPECT_TRUE(CompareArgumentList(backend.GetParameter(),
+      expected_argument));
+}
+
 TEST_F(BackendInvokerTest, TPKRWUninstall) {
   BackendInvoker backend("tpk_pkgid", PkgType::TPK,
       PkgLocation::RW, PkgOperation::UNINSTALL, false);
@@ -151,6 +192,16 @@ TEST_F(BackendInvokerTest, WGTRWUninstall) {
       expected_argument));
 }
 
+TEST_F(BackendInvokerTest, RPKRWUninstall) {
+  BackendInvoker backend("rpk_pkgid", PkgType::RPK,
+      PkgLocation::RW, PkgOperation::UNINSTALL, false);
+
+  std::list<std::string> expected_argument { "/usr/bin/unified-backend", "-d",
+      "rpk_pkgid", "--force-remove", "--partial-rw"};
+  EXPECT_TRUE(CompareArgumentList(backend.GetParameter(),
+      expected_argument));
+}
+
 TEST_F(BackendInvokerTest, TPKPreloadROUninstallKeepRWData) {
   BackendInvoker backend("tpk_pkgid", PkgType::TPK,
       PkgLocation::RO, PkgOperation::UNINSTALL_KEEP_RW_DATA, false);