From a09e028ab6d0ec2bc71d13cad61ddb08d04027e1 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Wed, 23 Aug 2023 18:28:09 +0900 Subject: [PATCH] Check whether PkgFinder::Find() failed in PkgUpgraderFactory::MakeList() Change-Id: Id98de814d67f81807802663e0c7c577baba60011 Signed-off-by: Sangyoon Jang (cherry picked from commit 8fef45d63da582a3c0a0f73851afe2df97de7053) --- src/pkg_upgrade/include/pkg_upgrader_factory.hh | 3 +++ src/pkg_upgrade/src/pkg_upgrader_factory.cc | 5 +++++ src/pkg_upgrade/src/upgrader.cc | 4 ++++ tests/unit_tests/pkg_upgrade/src/test_pkg_upgrader.cc | 6 +++--- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/pkg_upgrade/include/pkg_upgrader_factory.hh b/src/pkg_upgrade/include/pkg_upgrader_factory.hh index 580a3fa..042e995 100644 --- a/src/pkg_upgrade/include/pkg_upgrader_factory.hh +++ b/src/pkg_upgrade/include/pkg_upgrader_factory.hh @@ -30,6 +30,7 @@ namespace common_fota { class PkgUpgraderFactory { public: std::list> MakeList(PkgFinder* finder); + bool IsFailed(); private: std::list> Merge( @@ -37,6 +38,8 @@ class PkgUpgraderFactory { const std::list& new_pkgs); const PkgContext* FindPkgById(const std::list& pkgs, std::string id); + + bool failed_ = false; }; } // common_fota diff --git a/src/pkg_upgrade/src/pkg_upgrader_factory.cc b/src/pkg_upgrade/src/pkg_upgrader_factory.cc index 42f17cb..c02c694 100644 --- a/src/pkg_upgrade/src/pkg_upgrader_factory.cc +++ b/src/pkg_upgrade/src/pkg_upgrader_factory.cc @@ -64,11 +64,16 @@ namespace common_fota { list> 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> PkgUpgraderFactory::Merge( const list& old_pkgs, const list& new_pkgs) { list> pkgs; diff --git a/src/pkg_upgrade/src/upgrader.cc b/src/pkg_upgrade/src/upgrader.cc index 968e4d6..36c66e9 100644 --- a/src/pkg_upgrade/src/upgrader.cc +++ b/src/pkg_upgrade/src/upgrader.cc @@ -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()) { diff --git a/tests/unit_tests/pkg_upgrade/src/test_pkg_upgrader.cc b/tests/unit_tests/pkg_upgrade/src/test_pkg_upgrader.cc index e9e3454..bb5c081 100644 --- a/tests/unit_tests/pkg_upgrade/src/test_pkg_upgrader.cc +++ b/tests/unit_tests/pkg_upgrade/src/test_pkg_upgrader.cc @@ -616,7 +616,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); @@ -635,7 +635,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); @@ -650,7 +650,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); -- 2.34.1