Check whether PkgFinder::Find() failed in PkgUpgraderFactory::MakeList() 72/297772/1
authorSangyoon Jang <jeremy.jang@samsung.com>
Wed, 23 Aug 2023 09:28:09 +0000 (18:28 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Thu, 24 Aug 2023 05:31:34 +0000 (05:31 +0000)
Change-Id: Id98de814d67f81807802663e0c7c577baba60011
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/pkg_upgrade/include/pkg_upgrader_factory.hh
src/pkg_upgrade/src/pkg_upgrader_factory.cc
src/pkg_upgrade/src/upgrader.cc
tests/unit_tests/pkg_upgrade/src/test_pkg_upgrader.cc

index 580a3fa74257529dbc9fe4e9e3a52ea7f02b6114..042e995253eeff65e6804c38d1d4f1f5ef9aa33c 100644 (file)
@@ -30,6 +30,7 @@ namespace common_fota {
 class PkgUpgraderFactory {
  public:
   std::list<std::unique_ptr<PkgUpgrader>> MakeList(PkgFinder* finder);
+  bool IsFailed();
 
  private:
   std::list<std::unique_ptr<PkgUpgrader>> Merge(
@@ -37,6 +38,8 @@ class PkgUpgraderFactory {
       const std::list<PkgContext>& new_pkgs);
   const PkgContext* FindPkgById(const std::list<PkgContext>& pkgs,
       std::string id);
+
+  bool failed_ = false;
 };
 
 }  // common_fota
index 3e3499bb255006fed5b7134d30cf648f5bf0013c..09e3e4b6490e5736ccf688e9ac0f007d58fd7f8b 100644 (file)
@@ -63,11 +63,16 @@ namespace common_fota {
 list<unique_ptr<PkgUpgrader>> PkgUpgraderFactory::MakeList(PkgFinder* finder) {
   if (finder->Find() != 0) {
     LOG(ERROR) << "PkgFinder::Find() failed";
+    failed_ = true;
     return {};
   }
   return Merge(finder->GetOldPkgs(), finder->GetNewPkgs());
 }
 
+bool PkgUpgraderFactory::IsFailed() {
+  return failed_;
+}
+
 list<unique_ptr<PkgUpgrader>> PkgUpgraderFactory::Merge(
     const list<PkgContext>& old_pkgs, const list<PkgContext>& new_pkgs) {
   list<unique_ptr<PkgUpgrader>> pkgs;
index 968e4d63d680048fee79483395b5907ee0822973..36c66e9ee9161605635278131d1ad40f25dc8b78 100644 (file)
@@ -131,6 +131,10 @@ bool Upgrader::Process(PkgFinder* finder) {
 
   PkgUpgraderFactory factory;
   auto list = factory.MakeList(finder);
+  if (factory.IsFailed()) {
+    RemoveBackupDbs();
+    return false;
+  }
 
   for (auto& pkg : list) {
     if (pkg->Upgrade()) {
index 941899f0b06b231ddf245dc3bed784f62c94f6d2..8206b9d5751959621ab2eeda9e3dbad335201b6e 100644 (file)
@@ -615,7 +615,7 @@ TEST_F(PkgUpgraderTestForDBBackup, WithNotBackupFlag) {
 
   Upgrader upgrader;
   upgrader.SetDbPath(db_path);
-  EXPECT_TRUE(upgrader.Process(&finder_));
+  EXPECT_FALSE(upgrader.Process(&finder_));
 
   std::string new_user_version = GetUserVersion(parser_db_path);
   EXPECT_EQ(backup_user_version, new_user_version);
@@ -634,7 +634,7 @@ TEST_F(PkgUpgraderTestForDBBackup, WithBackupFlag) {
 
   Upgrader upgrader;
   upgrader.SetDbPath(db_path);
-  EXPECT_TRUE(upgrader.Process(&finder_));
+  EXPECT_FALSE(upgrader.Process(&finder_));
 
   std::string new_user_version = GetUserVersion(parser_db_path);
   EXPECT_EQ(origin_user_version, new_user_version);
@@ -649,7 +649,7 @@ TEST_F(PkgUpgraderTestForDBBackup, WithMalformedBackupDB) {
 
   Upgrader upgrader;
   upgrader.SetDbPath(db_path);
-  EXPECT_TRUE(upgrader.Process(&finder_));
+  EXPECT_FALSE(upgrader.Process(&finder_));
 
   std::string new_user_version = GetUserVersion(parser_db_path);
   EXPECT_EQ(origin_user_version, new_user_version);