From 7dfe7ddd172e04b433b9f0c28b71f9208512631a Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Fri, 15 Jan 2016 13:38:56 +0100 Subject: [PATCH 01/16] Fix recovery smoke test Requires: - https://review.tizen.org/gerrit/45316 Verify by: $ /usr/bin/wgt-backend-ut/smoke_test --gtest_filter=SmokeTest.RecoveryMode_ForInstallation $ /usr/bin/wgt-backend-ut/smoke_test --gtest_filter=SmokeTest.RecoveryMode_ForUpdate Change-Id: Iac901289fcbd17315a9d3ba4d73c1c06dbb3b18f --- src/unit_tests/smoke_test.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index ee47203..6cabbdf 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -63,6 +63,8 @@ class StepCrash : public ci::Step { void RemoveAllRecoveryFiles() { bf::path root_path = ci::GetRootAppPath(); + if (!bf::exists(root_path)) + return; for (auto& dir_entry : boost::make_iterator_range( bf::directory_iterator(root_path), bf::directory_iterator())) { if (bf::is_regular_file(dir_entry)) { @@ -275,7 +277,7 @@ ci::AppInstaller::Result DeltaInstall(const bf::path& path, ci::AppInstaller::Result Recover(const bf::path& recovery_file, RequestResult mode = RequestResult::NORMAL) { - const char* argv[] = {"", "-e", recovery_file.c_str()}; + const char* argv[] = {"", "-b", recovery_file.c_str()}; std::unique_ptr query_interface = CreateQueryInterface(); auto pkgmgr = -- 2.7.4 From 9560c5db25f94faa950f03028519720ec0e79685 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Mon, 18 Jan 2016 10:31:48 +0100 Subject: [PATCH 02/16] Recovery mode for hybrid application Requires: - https://review.tizen.org/gerrit/58104 Change-Id: I174cd185ad12bb97b406d250b3d339568e79345f --- src/hybrid/hybrid_installer.cc | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index d2070d5..d26de1d 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -23,6 +23,14 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -42,6 +50,7 @@ #include "wgt/step/step_check_wgt_background_category.h" #include "wgt/step/step_create_symbolic_link.h" #include "wgt/step/step_generate_xml.h" +#include "wgt/step/step_parse_recovery.h" #include "wgt/step/step_remove_encryption_data.h" #include "wgt/step/step_wgt_patch_icons.h" #include "wgt/step/step_wgt_patch_storage_directories.h" @@ -173,8 +182,21 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); break; case ci::RequestType::Recovery: - // TODO(t.iwanek): implement recovery for hybrid apps if possible - AddStep(); + AddStep(pkgmgr_); + AddStep(); + AddStep( + ci::parse::StepParseManifest::ManifestLocation::RECOVERY, + ci::parse::StepParseManifest::StoreLocation::NORMAL); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); break; default: AddStep(); -- 2.7.4 From 1d2f01661c428147f57d405f49b1a8d95e140d71 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Tue, 2 Feb 2016 16:48:25 +0100 Subject: [PATCH 03/16] Remove SmokeTest.DeinstallationMode_Rollback test According to force deinstallation requirement, there is no need for rollback of deinstallation. Deinstallation should never fail and remove as much of package installation as possible. Change-Id: Ia818e1174b2ff6518fb55a9320217403d31a94fa --- src/unit_tests/smoke_test.cc | 10 ---------- .../test_samples/smoke/DeinstallationMode_Rollback.wgt | Bin 33320 -> 0 bytes 2 files changed, 10 deletions(-) delete mode 100644 src/unit_tests/test_samples/smoke/DeinstallationMode_Rollback.wgt diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index 6cabbdf..5373085 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -453,16 +453,6 @@ TEST_F(SmokeTest, UpdateMode_Rollback) { ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "1\n")); } -TEST_F(SmokeTest, DeinstallationMode_Rollback) { - bf::path path = kSmokePackagesDirectory / "DeinstallationMode_Rollback.wgt"; - std::string pkgid = "smokeapp08"; - std::string appid = "smokeapp08.DeinstallationModeRollback"; - ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); - ASSERT_EQ(Uninstall(pkgid, RequestResult::FAIL), - ci::AppInstaller::Result::ERROR); - ValidatePackage(pkgid, appid); -} - } // namespace common_installer int main(int argc, char** argv) { diff --git a/src/unit_tests/test_samples/smoke/DeinstallationMode_Rollback.wgt b/src/unit_tests/test_samples/smoke/DeinstallationMode_Rollback.wgt deleted file mode 100644 index ea83495aa2e237f6c7e80a74acf3fc1d2ddf8292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33320 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

egx4!dORJ>p=~%BDFL<-^~#hcLj4vi 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 Date: Tue, 2 Feb 2016 19:34:12 +0900 Subject: [PATCH 04/16] Check the given package is blacklisted when install Requires: - https://review.tizen.org/gerrit/#/c/58457/ Change-Id: I995b132ff5c3498187fba37cfbf4b088310d24ce Signed-off-by: Sangyoon Jang --- src/wgt/wgt_installer.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index ff190c6..a5eb03e 100644 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -71,6 +72,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(pkgmgr_); AddStep(); AddStep(true); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -93,6 +95,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(pkgmgr_); AddStep(); AddStep(true); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -138,6 +141,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep( ci::parse::StepParseManifest::ManifestLocation::INSTALLED, ci::parse::StepParseManifest::StoreLocation::BACKUP); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -150,6 +154,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(false); // start file may not have changed AddStep("res/wgt/"); AddStep(true); + AddStep(); AddStep(); AddStep(); AddStep(); -- 2.7.4 From 9c2a68ced9ff3a4ed7ad5923639a9e21654c15f4 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Thu, 28 Jan 2016 14:09:20 +0100 Subject: [PATCH 05/16] Implement PKGMGR_REQUEST_TYPE_CLEARDATA for wgt-backend Verify by running: pkgcmd -t wgt -c -n $pkgid_of_installed_package and check if all content of apps_rw/$pkgid/data/ was removed. Requires: - https://review.tizen.org/gerrit/58245 Change-Id: I56a3435bbda9f2034784a52e0f0ab81a1e1f9ca8 --- src/hybrid/hybrid_installer.cc | 5 +++++ src/wgt/wgt_installer.cc | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index d26de1d..e7ea48a 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -198,6 +199,10 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); break; + case ci::RequestType::Clear: + AddStep(pkgmgr_); + AddStep(); + break; default: AddStep(); break; diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index a5eb03e..8cf97b0 100644 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -191,6 +192,11 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); break; } + case ci::RequestType::Clear: { + AddStep(pkgmgr_); + AddStep(); + break; + } default: { AddStep(); } -- 2.7.4 From 56555d1509ea6e1ab49bdc33061c3a3913cd6336 Mon Sep 17 00:00:00 2001 From: Arkadiusz Szulakiewicz Date: Mon, 1 Feb 2016 16:01:43 +0100 Subject: [PATCH 06/16] Modify Uninstall procedure to allow force-uninstall Change-Id: Ib8336c4ecf53d96d3508d13e37776bd06487538d --- src/hybrid/hybrid_installer.cc | 3 ++- src/wgt/CMakeLists.txt | 1 + src/wgt/step/step_wgt_remove_manifest.cc | 40 ++++++++++++++++++++++++++++++++ src/wgt/step/step_wgt_remove_manifest.h | 40 ++++++++++++++++++++++++++++++++ src/wgt/wgt_installer.cc | 3 ++- 5 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/wgt/step/step_wgt_remove_manifest.cc create mode 100644 src/wgt/step/step_wgt_remove_manifest.h diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index e7ea48a..0a88baf 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -55,6 +55,7 @@ #include "wgt/step/step_remove_encryption_data.h" #include "wgt/step/step_wgt_patch_icons.h" #include "wgt/step/step_wgt_patch_storage_directories.h" +#include "wgt/step/step_wgt_remove_manifest.h" namespace ci = common_installer; @@ -134,13 +135,13 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) ci::parse::StepParseManifest::ManifestLocation::INSTALLED, ci::parse::StepParseManifest::StoreLocation::NORMAL); AddStep(); - AddStep(); AddStep(); AddStep(); AddStep(); AddStep(); AddStep(); AddStep(); + AddStep(); break; case ci::RequestType::Reinstall: // RDS is not supported for hybrid apps diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt index 6cb1e7a..405d9e4 100644 --- a/src/wgt/CMakeLists.txt +++ b/src/wgt/CMakeLists.txt @@ -14,6 +14,7 @@ SET(SRCS step/step_wgt_patch_icons.cc step/step_wgt_patch_storage_directories.cc step/step_wgt_resource_directory.cc + step/step_wgt_remove_manifest.cc step/step_add_default_privileges.cc wgt_app_query_interface.cc wgt_installer.cc diff --git a/src/wgt/step/step_wgt_remove_manifest.cc b/src/wgt/step/step_wgt_remove_manifest.cc new file mode 100644 index 0000000..68a982e --- /dev/null +++ b/src/wgt/step/step_wgt_remove_manifest.cc @@ -0,0 +1,40 @@ +// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by a apache 2.0 license that can be +// found in the LICENSE file. + +#include "wgt/step/step_wgt_remove_manifest.h" + +#include +#include +#include + +#include +#include + +#include +#include + +#include "common/utils/file_util.h" + +namespace bf = boost::filesystem; +namespace bs = boost::system; + +namespace wgt { +namespace pkgmgr { + + +common_installer::Step::Status StepRemoveManifest::process() { + bs::error_code error; + bf::remove(context_->xml_path.get(), error); + + if (error) { + LOG(ERROR) << "Failed to remove xml manifest file"; + return Status::MANIFEST_ERROR; + } + LOG(DEBUG) << "Manifest file removed"; + return Status::OK; +} + + +} // namespace wgt +} // namespace pkgmgr diff --git a/src/wgt/step/step_wgt_remove_manifest.h b/src/wgt/step/step_wgt_remove_manifest.h new file mode 100644 index 0000000..459d633 --- /dev/null +++ b/src/wgt/step/step_wgt_remove_manifest.h @@ -0,0 +1,40 @@ +// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by a apache 2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_STEP_STEP_WGT_REMOVE_MANIFEST_H_ +#define WGT_STEP_STEP_WGT_REMOVE_MANIFEST_H_ + +#include + +#include "common/installer_context.h" +#include "common/step/step.h" + +namespace wgt { +namespace pkgmgr { + +/** + * \brief Step responsbile for removing manifest file during uninstallation + */ +class StepRemoveManifest : public common_installer::Step { + public: + using common_installer::Step::Step; + + /** + * \brief main logic of remove manifest + * + * \return Status::OK if success, Status::ERROR otherwise + */ + Status process() override; + + Status clean() override { return Status::OK; } + Status undo() override { return Status::OK; } + Status precheck() override { return Status::OK; } + + SCOPE_LOG_TAG(RemoveManifest) +}; + +} // namespace pkgmgr +} // namespace wgt + +#endif // WGT_STEP_STEP_WGT_REMOVE_MANIFEST_H_ diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index 8cf97b0..2397ebd 100644 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -58,6 +58,7 @@ #include "wgt/step/step_wgt_patch_icons.h" #include "wgt/step/step_wgt_patch_storage_directories.h" #include "wgt/step/step_wgt_resource_directory.h" +#include "wgt/step/step_wgt_remove_manifest.h" namespace ci = common_installer; @@ -126,13 +127,13 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) ci::parse::StepParseManifest::ManifestLocation::INSTALLED, ci::parse::StepParseManifest::StoreLocation::NORMAL); AddStep(); - AddStep(); AddStep(); AddStep(); AddStep(); AddStep(); AddStep(); AddStep(); + AddStep(); break; } case ci::RequestType::Reinstall: { -- 2.7.4 From d99ec453082128f3660a689f12256511dfd10aed Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Thu, 4 Feb 2016 16:59:03 +0900 Subject: [PATCH 07/16] modify codes related to getting app_path. Requires: https://review.tizen.org/gerrit/#/c/58863 Change-Id: I1b971a87a8aa534a4a6526d9c3b6a70046a986d0 Signed-off-by: jongmyeongko --- src/unit_tests/smoke_test.cc | 14 +++++++------- src/wgt/wgt_app_query_interface.cc | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index 5373085..f23d98b 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -62,7 +62,7 @@ class StepCrash : public ci::Step { }; void RemoveAllRecoveryFiles() { - bf::path root_path = ci::GetRootAppPath(); + bf::path root_path = ci::GetRootAppPath(false); if (!bf::exists(root_path)) return; for (auto& dir_entry : boost::make_iterator_range( @@ -77,7 +77,7 @@ void RemoveAllRecoveryFiles() { } bf::path FindRecoveryFile() { - bf::path root_path = ci::GetRootAppPath(); + bf::path root_path = ci::GetRootAppPath(false); for (auto& dir_entry : boost::make_iterator_range( bf::directory_iterator(root_path), bf::directory_iterator())) { if (bf::is_regular_file(dir_entry)) { @@ -92,7 +92,7 @@ bf::path FindRecoveryFile() { bool ValidateFileContentInPackage(const std::string& pkgid, const std::string& relative, const std::string& expected) { - bf::path root_path = ci::GetRootAppPath(); + bf::path root_path = ci::GetRootAppPath(false); bf::path file_path = root_path / pkgid / relative; if (!bf::exists(file_path)) { LOG(ERROR) << file_path << " doesn't exist"; @@ -113,7 +113,7 @@ bool ValidateFileContentInPackage(const std::string& pkgid, } void ValidatePackageFS(const std::string& pkgid, const std::string& appid) { - bf::path root_path = ci::GetRootAppPath(); + bf::path root_path = ci::GetRootAppPath(false); bf::path package_path = root_path / pkgid; bf::path binary_path = package_path / "bin" / appid; bf::path data_path = package_path / "data"; @@ -150,7 +150,7 @@ void ValidatePackageFS(const std::string& pkgid, const std::string& appid) { } void PackageCheckCleanup(const std::string& pkgid, const std::string& appid) { - bf::path root_path = ci::GetRootAppPath(); + bf::path root_path = ci::GetRootAppPath(false); bf::path package_path = root_path / pkgid; ASSERT_FALSE(bf::exists(package_path)); @@ -367,7 +367,7 @@ TEST_F(SmokeTest, RDSMode) { ValidatePackage(pkgid, appid); // Check delta modifications - bf::path root_path = ci::GetRootAppPath(); + bf::path root_path = ci::GetRootAppPath(false); ASSERT_FALSE(bf::exists(root_path / pkgid / "res" / "wgt" / "DELETED")); ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "ADDED")); ValidateFileContentInPackage(pkgid, "res/wgt/MODIFIED", "2\n"); @@ -383,7 +383,7 @@ TEST_F(SmokeTest, DeltaMode) { ValidatePackage(pkgid, appid); // Check delta modifications - bf::path root_path = ci::GetRootAppPath(); + bf::path root_path = ci::GetRootAppPath(false); ASSERT_FALSE(bf::exists(root_path / pkgid / "res" / "wgt" / "DELETED")); ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "ADDED")); ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "css" / "style.css")); // NOLINT diff --git a/src/wgt/wgt_app_query_interface.cc b/src/wgt/wgt_app_query_interface.cc index 2798080..b45389c 100644 --- a/src/wgt/wgt_app_query_interface.cc +++ b/src/wgt/wgt_app_query_interface.cc @@ -115,7 +115,7 @@ bool WgtAppQueryInterface::IsHybridApplication(int argc, char** argv) { if (arg.find("apps_rw/recovery-") != std::string::npos) arg = ReadPkgidFromRecovery(arg); if (ci::IsPackageInstalled(arg, ci::GetRequestMode())) { - bf::path package_directory(ci::GetRootAppPath()); + bf::path package_directory(ci::GetRootAppPath(false)); if (bf::exists(package_directory / arg / kTizenManifestLocation) && bf::exists(package_directory / arg / kHybridConfigLocation)) return true; -- 2.7.4 From 7a872dc25e2e82c90a43ed104152ec9ef607181b Mon Sep 17 00:00:00 2001 From: Arkadiusz Szulakiewicz Date: Thu, 4 Feb 2016 17:39:14 +0100 Subject: [PATCH 08/16] Minor improvements for force-uninstall step Change-Id: Ide952d967df1978cff123b14c2375557155031b9 --- src/wgt/step/step_remove_encryption_data.cc | 2 +- src/wgt/step/step_remove_encryption_data.h | 24 +++--------------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/wgt/step/step_remove_encryption_data.cc b/src/wgt/step/step_remove_encryption_data.cc index 452f32b..0c601d3 100644 --- a/src/wgt/step/step_remove_encryption_data.cc +++ b/src/wgt/step/step_remove_encryption_data.cc @@ -11,7 +11,7 @@ namespace wgt { namespace encrypt { -common_installer::Step::Status StepRemoveEncryptionData::clean() { +common_installer::Step::Status StepRemoveEncryptionData::process() { wae_app_type_e enc_type = context_->request_mode.get() == common_installer::RequestMode::GLOBAL ? WAE_DOWNLOADED_GLOBAL_APP : WAE_DOWNLOADED_NORMAL_APP; diff --git a/src/wgt/step/step_remove_encryption_data.h b/src/wgt/step/step_remove_encryption_data.h index 291b92e..6156e99 100644 --- a/src/wgt/step/step_remove_encryption_data.h +++ b/src/wgt/step/step_remove_encryption_data.h @@ -22,36 +22,18 @@ class StepRemoveEncryptionData : public common_installer::Step { using Step::Step; /** - * \brief Empty method - the actual work is done in clean() to delay it - * - * \return Status::OK - */ - Status process() override { return Status::OK; } - - /** * \brief Remove encryption keys from database * - * \return Status::ERROR in case of failure, - * Status::OK otherwise - */ - Status clean() override; - - /** - * \brief Empty method - * * \return Status::OK */ + Status process() override; + Status clean() override { return Status::OK; } Status undo() override { return Status::OK; } - - /** - * \brief Empty method - * - * \return Status::OK - */ Status precheck() override { return Status::OK; } SCOPE_LOG_TAG(RemoveEncryptionData) }; } // namespace encrypt } // namespace wgt + #endif // WGT_STEP_STEP_REMOVE_ENCRYPTION_DATA_H_ -- 2.7.4 From 0d640c227d2a57b0f0b1c1519305ebca669ba977 Mon Sep 17 00:00:00 2001 From: Arkadiusz Szulakiewicz Date: Mon, 8 Feb 2016 15:52:31 +0100 Subject: [PATCH 09/16] Move step remove manifest to app-installer Requires: https://review.tizen.org/gerrit/59034 https://review.tizen.org/gerrit/59035 Change-Id: I0ecb72b1b9ea005c7beef34e35cfcef4fb884b04 --- src/hybrid/hybrid_installer.cc | 4 ++-- src/wgt/CMakeLists.txt | 1 - src/wgt/step/step_wgt_remove_manifest.cc | 40 -------------------------------- src/wgt/step/step_wgt_remove_manifest.h | 40 -------------------------------- src/wgt/wgt_installer.cc | 5 ++-- 5 files changed, 4 insertions(+), 86 deletions(-) delete mode 100644 src/wgt/step/step_wgt_remove_manifest.cc delete mode 100644 src/wgt/step/step_wgt_remove_manifest.h diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 0a88baf..48e693d 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -55,7 +56,6 @@ #include "wgt/step/step_remove_encryption_data.h" #include "wgt/step/step_wgt_patch_icons.h" #include "wgt/step/step_wgt_patch_storage_directories.h" -#include "wgt/step/step_wgt_remove_manifest.h" namespace ci = common_installer; @@ -141,7 +141,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); + AddStep(); break; case ci::RequestType::Reinstall: // RDS is not supported for hybrid apps diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt index 405d9e4..6cb1e7a 100644 --- a/src/wgt/CMakeLists.txt +++ b/src/wgt/CMakeLists.txt @@ -14,7 +14,6 @@ SET(SRCS step/step_wgt_patch_icons.cc step/step_wgt_patch_storage_directories.cc step/step_wgt_resource_directory.cc - step/step_wgt_remove_manifest.cc step/step_add_default_privileges.cc wgt_app_query_interface.cc wgt_installer.cc diff --git a/src/wgt/step/step_wgt_remove_manifest.cc b/src/wgt/step/step_wgt_remove_manifest.cc deleted file mode 100644 index 68a982e..0000000 --- a/src/wgt/step/step_wgt_remove_manifest.cc +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved -// Use of this source code is governed by a apache 2.0 license that can be -// found in the LICENSE file. - -#include "wgt/step/step_wgt_remove_manifest.h" - -#include -#include -#include - -#include -#include - -#include -#include - -#include "common/utils/file_util.h" - -namespace bf = boost::filesystem; -namespace bs = boost::system; - -namespace wgt { -namespace pkgmgr { - - -common_installer::Step::Status StepRemoveManifest::process() { - bs::error_code error; - bf::remove(context_->xml_path.get(), error); - - if (error) { - LOG(ERROR) << "Failed to remove xml manifest file"; - return Status::MANIFEST_ERROR; - } - LOG(DEBUG) << "Manifest file removed"; - return Status::OK; -} - - -} // namespace wgt -} // namespace pkgmgr diff --git a/src/wgt/step/step_wgt_remove_manifest.h b/src/wgt/step/step_wgt_remove_manifest.h deleted file mode 100644 index 459d633..0000000 --- a/src/wgt/step/step_wgt_remove_manifest.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved -// Use of this source code is governed by a apache 2.0 license that can be -// found in the LICENSE file. - -#ifndef WGT_STEP_STEP_WGT_REMOVE_MANIFEST_H_ -#define WGT_STEP_STEP_WGT_REMOVE_MANIFEST_H_ - -#include - -#include "common/installer_context.h" -#include "common/step/step.h" - -namespace wgt { -namespace pkgmgr { - -/** - * \brief Step responsbile for removing manifest file during uninstallation - */ -class StepRemoveManifest : public common_installer::Step { - public: - using common_installer::Step::Step; - - /** - * \brief main logic of remove manifest - * - * \return Status::OK if success, Status::ERROR otherwise - */ - Status process() override; - - Status clean() override { return Status::OK; } - Status undo() override { return Status::OK; } - Status precheck() override { return Status::OK; } - - SCOPE_LOG_TAG(RemoveManifest) -}; - -} // namespace pkgmgr -} // namespace wgt - -#endif // WGT_STEP_STEP_WGT_REMOVE_MANIFEST_H_ diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index 2397ebd..4eec68c 100644 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -41,9 +41,9 @@ #include #include #include +#include #include - #include "wgt/step/step_add_default_privileges.h" #include "wgt/step/step_check_settings_level.h" #include "wgt/step/step_check_wgt_background_category.h" @@ -58,7 +58,6 @@ #include "wgt/step/step_wgt_patch_icons.h" #include "wgt/step/step_wgt_patch_storage_directories.h" #include "wgt/step/step_wgt_resource_directory.h" -#include "wgt/step/step_wgt_remove_manifest.h" namespace ci = common_installer; @@ -133,7 +132,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); - AddStep(); + AddStep(); break; } case ci::RequestType::Reinstall: { -- 2.7.4 From ba3c463b3178e37dd367e5d5b950377548b402ad Mon Sep 17 00:00:00 2001 From: Lukasz Wartalowicz Date: Wed, 20 Jan 2016 14:22:56 +0100 Subject: [PATCH 10/16] Add StepRunParserPlugin to wgt-backend Requires: - https://review.tizen.org/gerrit/#/c/57334/ Add StepRunParserPlugin to wgt-backend Change-Id: I82179c534894f11de8e812e5d4c9fb9f4e8abfc1 --- src/hybrid/hybrid_installer.cc | 9 +++++++++ src/wgt/wgt_installer.cc | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 48e693d..12368b7 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -90,6 +91,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); + AddStep( + ci::PluginsLauncher::ActionType::Install); AddStep(); AddStep(); break; @@ -125,6 +128,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); + AddStep( + ci::PluginsLauncher::ActionType::Upgrade); break; case ci::RequestType::Uninstall: AddStep(pkgmgr_); @@ -134,6 +139,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep( ci::parse::StepParseManifest::ManifestLocation::INSTALLED, ci::parse::StepParseManifest::StoreLocation::NORMAL); + AddStep( + ci::PluginsLauncher::ActionType::Uninstall); AddStep(); AddStep(); AddStep(); @@ -182,6 +189,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); + AddStep( + ci::PluginsLauncher::ActionType::Upgrade); break; case ci::RequestType::Recovery: AddStep(pkgmgr_); diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index 4eec68c..d3ca732 100644 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -89,6 +90,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep( + ci::PluginsLauncher::ActionType::Install); AddStep(); break; } @@ -117,6 +120,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep( + ci::PluginsLauncher::ActionType::Upgrade); AddStep(); break; } @@ -126,6 +131,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) ci::parse::StepParseManifest::ManifestLocation::INSTALLED, ci::parse::StepParseManifest::StoreLocation::NORMAL); AddStep(); + AddStep( + ci::PluginsLauncher::ActionType::Uninstall); AddStep(); AddStep(); AddStep(); @@ -176,6 +183,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep( + ci::PluginsLauncher::ActionType::Upgrade); AddStep(); break; } -- 2.7.4 From d76eedd2dd64f32f98f1038e969dc1d627dae099 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Thu, 11 Feb 2016 17:17:02 +0100 Subject: [PATCH 11/16] Code cleanup Given TODO is outdated. StepParseManifest re-reads all necessary information. Change-Id: I1486de660ef9019e57ba39f76987e0d5843b60f8 --- src/hybrid/hybrid_installer.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 12368b7..23a1855 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -133,9 +133,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) break; case ci::RequestType::Uninstall: AddStep(pkgmgr_); - // TODO(t.iwanek): this parses both configuration files - // tpk and wgt, removing pkgmgr-parser should change this code - // that it will still support parsing both files AddStep( ci::parse::StepParseManifest::ManifestLocation::INSTALLED, ci::parse::StepParseManifest::StoreLocation::NORMAL); -- 2.7.4 From d372a85c569cba6384e8dcebbc21df80bdda939a Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Tue, 16 Feb 2016 10:18:31 +0100 Subject: [PATCH 12/16] Adjust to change in PkgmgrInterface Following changes need to be submitted together: - https://review.tizen.org/gerrit/59442 - https://review.tizen.org/gerrit/59443 - https://review.tizen.org/gerrit/59444 To verify: $ /usr/bin/wgt-backend-ut/smoke_test # install, update, uninstall and wgt package by wgt-backend directly Change-Id: I89c72f9be7d6695d629c6e9d292c4f8e82a7d138 --- src/unit_tests/smoke_test.cc | 36 ++++++++++++++++++++++++++++++++---- src/wgt_backend/wgt_backend.cc | 4 +++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index f23d98b..39d8dd7 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -48,6 +48,22 @@ enum class RequestResult { CRASH }; +class TestPkgmgrInstaller : public ci::PkgmgrInstallerInterface { + public: + bool CreatePkgMgrInstaller(pkgmgr_installer** installer, + ci::InstallationMode* mode) { + *installer = pkgmgr_installer_new(); + if (!*installer) + return false; + *mode = ci::InstallationMode::ONLINE; + return true; + } + + bool ShouldCreateSignal() const { + return false; + } +}; + class StepCrash : public ci::Step { public: using Step::Step; @@ -209,11 +225,12 @@ ci::AppInstaller::Result RunInstallerWithPkgrmgr(ci::PkgMgrPtr pkgmgr, ci::AppInstaller::Result Install(const bf::path& path, RequestResult mode = RequestResult::NORMAL) { const char* argv[] = {"", "-i", path.c_str()}; + TestPkgmgrInstaller pkgmgr_installer; std::unique_ptr query_interface = CreateQueryInterface(); auto pkgmgr = ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), - query_interface.get()); + &pkgmgr_installer, query_interface.get()); if (!pkgmgr) { LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; @@ -234,11 +251,12 @@ ci::AppInstaller::Result Update(const bf::path& path_old, ci::AppInstaller::Result Uninstall(const std::string& pkgid, RequestResult mode = RequestResult::NORMAL) { const char* argv[] = {"", "-d", pkgid.c_str()}; + TestPkgmgrInstaller pkgmgr_installer; std::unique_ptr query_interface = CreateQueryInterface(); auto pkgmgr = ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), - query_interface.get()); + &pkgmgr_installer, query_interface.get()); if (!pkgmgr) { LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; @@ -254,11 +272,12 @@ ci::AppInstaller::Result Reinstall(const bf::path& path, return ci::AppInstaller::Result::UNKNOWN; } const char* argv[] = {"", "-r", delta_dir.c_str()}; + TestPkgmgrInstaller pkgmgr_installer; std::unique_ptr query_interface = CreateQueryInterface(); auto pkgmgr = ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), - query_interface.get()); + &pkgmgr_installer, query_interface.get()); if (!pkgmgr) { LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; @@ -278,11 +297,12 @@ ci::AppInstaller::Result DeltaInstall(const bf::path& path, ci::AppInstaller::Result Recover(const bf::path& recovery_file, RequestResult mode = RequestResult::NORMAL) { const char* argv[] = {"", "-b", recovery_file.c_str()}; + TestPkgmgrInstaller pkgmgr_installer; std::unique_ptr query_interface = CreateQueryInterface(); auto pkgmgr = ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), - query_interface.get()); + &pkgmgr_installer, query_interface.get()); if (!pkgmgr) { LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; @@ -304,10 +324,18 @@ class SmokeEnvironment : public testing::Environment { bf::remove_all(home_ / KUserAppsDirBackup, error); if (bf::exists(home_ / KUserAppsDir)) { bf::rename(home_ / KUserAppsDir, home_ / KUserAppsDirBackup, error); + if (error) + LOG(ERROR) << "Failed to setup test environment. Does some previous" + << " test crashed? Directory: " + << (home_ / KUserAppsDirBackup) << " should not exist."; assert(!error); } if (bf::exists(home_ / kApplicationDir)) { bf::rename(home_ / kApplicationDir, home_ / kApplicationDirBackup, error); + if (error) + LOG(ERROR) << "Failed to setup test environment. Does some previous" + << " test crashed? Directory: " + << (home_ / kApplicationDirBackup) << " should not exist."; assert(!error); } } diff --git a/src/wgt_backend/wgt_backend.cc b/src/wgt_backend/wgt_backend.cc index 3d59c2e..14639c6 100644 --- a/src/wgt_backend/wgt_backend.cc +++ b/src/wgt_backend/wgt_backend.cc @@ -13,8 +13,10 @@ namespace ci = common_installer; int main(int argc, char** argv) { + ci::PkgmgrInstaller pkgmgr_installer; wgt::WgtAppQueryInterface query_interface; - auto pkgmgr = ci::PkgMgrInterface::Create(argc, argv, &query_interface); + auto pkgmgr = ci::PkgMgrInterface::Create(argc, argv, &pkgmgr_installer, + &query_interface); if (!pkgmgr) { LOG(ERROR) << "Options of pkgmgr installer cannot be parsed"; return EINVAL; -- 2.7.4 From 9e695908c2a3a1a7e3fe6c7a397c70ecc07291e1 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Tue, 9 Feb 2016 14:33:21 +0100 Subject: [PATCH 13/16] Smoke tests for hybrid package Verify by running new testcases: /usr/bin/wgt-backend-ut/smoke_test --gtest_filter=SmokeTest.InstallationMode_Hybrid /usr/bin/wgt-backend-ut/smoke_test --gtest_filter=SmokeTest.UpdateMode_Hybrid /usr/bin/wgt-backend-ut/smoke_test --gtest_filter=SmokeTest.DeinstallationMode_Hybrid /usr/bin/wgt-backend-ut/smoke_test --gtest_filter=SmokeTest.DeltaMode_Hybrid Change-Id: I2e29b9fbf4d0e6fdfa79ad5ecf8741dfb984d8b7 --- src/hybrid/hybrid_installer.cc | 6 +- src/unit_tests/CMakeLists.txt | 2 +- src/unit_tests/smoke_test.cc | 196 +++++++++++++++------ .../smoke/DeinstallationMode_Hybrid.wgt | Bin 0 -> 58029 bytes .../test_samples/smoke/DeltaMode_Hybrid.delta | Bin 0 -> 2323 bytes .../test_samples/smoke/DeltaMode_Hybrid.wgt | Bin 0 -> 58676 bytes .../test_samples/smoke/InstallationMode_Hybrid.wgt | Bin 0 -> 58030 bytes .../test_samples/smoke/UpdateMode_Hybrid.wgt | Bin 0 -> 58335 bytes .../test_samples/smoke/UpdateMode_Hybrid_2.wgt | Bin 0 -> 58335 bytes 9 files changed, 146 insertions(+), 58 deletions(-) create mode 100644 src/unit_tests/test_samples/smoke/DeinstallationMode_Hybrid.wgt create mode 100644 src/unit_tests/test_samples/smoke/DeltaMode_Hybrid.delta create mode 100644 src/unit_tests/test_samples/smoke/DeltaMode_Hybrid.wgt create mode 100644 src/unit_tests/test_samples/smoke/InstallationMode_Hybrid.wgt create mode 100644 src/unit_tests/test_samples/smoke/UpdateMode_Hybrid.wgt create mode 100644 src/unit_tests/test_samples/smoke/UpdateMode_Hybrid_2.wgt diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 23a1855..534a980 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -157,12 +157,10 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep( ci::parse::StepParseManifest::ManifestLocation::PACKAGE, ci::parse::StepParseManifest::StoreLocation::NORMAL); + AddStep(); AddStep(); - // TODO(t.iwanek): manifest is parsed twice... - AddStep(false); + AddStep(true); AddStep(); - AddStep(); - AddStep(true); AddStep(); AddStep(); AddStep(); diff --git a/src/unit_tests/CMakeLists.txt b/src/unit_tests/CMakeLists.txt index 9c92d11..f482f8f 100644 --- a/src/unit_tests/CMakeLists.txt +++ b/src/unit_tests/CMakeLists.txt @@ -17,6 +17,6 @@ APPLY_PKG_CONFIG(smoke_test PUBLIC # FindGTest module do not sets all needed libraries in GTEST_LIBRARIES and # GTest main libraries is still missing, so additional linking of # GTEST_MAIN_LIBRARIES is needed. -target_link_libraries(smoke_test PRIVATE ${TARGET_LIBNAME_WGT} ${GTEST_MAIN_LIBRARIES}) +target_link_libraries(smoke_test PRIVATE ${TARGET_LIBNAME_WGT} ${TARGET_LIBNAME_HYBRID} ${GTEST_MAIN_LIBRARIES}) INSTALL(TARGETS smoke_test DESTINATION ${BINDIR}/${DESTINATION_DIR}) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index 39d8dd7..5749361 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -21,7 +21,9 @@ #include #include #include +#include +#include "hybrid/hybrid_installer.h" #include "wgt/wgt_app_query_interface.h" #include "wgt/wgt_installer.h" @@ -64,6 +66,11 @@ class TestPkgmgrInstaller : public ci::PkgmgrInstallerInterface { } }; +enum class PackageType { + WGT, + HYBRID +}; + class StepCrash : public ci::Step { public: using Step::Step; @@ -128,25 +135,31 @@ bool ValidateFileContentInPackage(const std::string& pkgid, return content == expected; } -void ValidatePackageFS(const std::string& pkgid, const std::string& appid) { +void ValidatePackageFS(const std::string& pkgid, + const std::vector& appids) { bf::path root_path = ci::GetRootAppPath(false); bf::path package_path = root_path / pkgid; - bf::path binary_path = package_path / "bin" / appid; bf::path data_path = package_path / "data"; bf::path shared_path = package_path / "shared"; bf::path cache_path = package_path / "cache"; ASSERT_TRUE(bf::exists(root_path)); ASSERT_TRUE(bf::exists(package_path)); - ASSERT_TRUE(bf::exists(binary_path)); ASSERT_TRUE(bf::exists(data_path)); ASSERT_TRUE(bf::exists(shared_path)); ASSERT_TRUE(bf::exists(cache_path)); bf::path manifest_path = bf::path(getUserManifestPath(getuid())) / (pkgid + ".xml"); - bf::path icon_path = bf::path(getIconPath(getuid())) / (appid + ".png"); ASSERT_TRUE(bf::exists(manifest_path)); - ASSERT_TRUE(bf::exists(icon_path)); + + for (auto& appid : appids) { + bf::path binary_path = package_path / "bin" / appid; + ASSERT_TRUE(bf::exists(binary_path)); + bf::path icon_path = bf::path(getIconPath(getuid())) / (appid + ".png"); + ASSERT_TRUE(bf::exists(icon_path)); + bf::path icon_backup = ci::GetBackupPathForIconFile(icon_path); + ASSERT_FALSE(bf::exists(icon_backup)); + } bf::path widget_root_path = package_path / "res" / "wgt"; bf::path config_path = widget_root_path / "config.xml"; @@ -159,41 +172,44 @@ void ValidatePackageFS(const std::string& pkgid, const std::string& appid) { // backups should not exist bf::path package_backup = ci::GetBackupPathForPackagePath(package_path); bf::path manifest_backup = ci::GetBackupPathForManifestFile(manifest_path); - bf::path icon_backup = ci::GetBackupPathForIconFile(icon_path); ASSERT_FALSE(bf::exists(package_backup)); ASSERT_FALSE(bf::exists(manifest_backup)); - ASSERT_FALSE(bf::exists(icon_backup)); } -void PackageCheckCleanup(const std::string& pkgid, const std::string& appid) { +void PackageCheckCleanup(const std::string& pkgid, + const std::vector& appids) { bf::path root_path = ci::GetRootAppPath(false); bf::path package_path = root_path / pkgid; ASSERT_FALSE(bf::exists(package_path)); bf::path manifest_path = bf::path(getUserManifestPath(getuid())) / (pkgid + ".xml"); - bf::path icon_path = bf::path(getIconPath(getuid())) / (appid + ".png"); ASSERT_FALSE(bf::exists(manifest_path)); - ASSERT_FALSE(bf::exists(icon_path)); + + for (auto& appid : appids) { + bf::path icon_path = bf::path(getIconPath(getuid())) / (appid + ".png"); + ASSERT_FALSE(bf::exists(icon_path)); + bf::path icon_backup = ci::GetBackupPathForIconFile(icon_path); + ASSERT_FALSE(bf::exists(icon_backup)); + } // backups should not exist bf::path package_backup = ci::GetBackupPathForPackagePath(package_path); bf::path manifest_backup = ci::GetBackupPathForManifestFile(manifest_path); - bf::path icon_backup = ci::GetBackupPathForIconFile(icon_path); ASSERT_FALSE(bf::exists(package_backup)); ASSERT_FALSE(bf::exists(manifest_backup)); - ASSERT_FALSE(bf::exists(icon_backup)); } -void ValidatePackage(const std::string& pkgid, const std::string& appid) { +void ValidatePackage(const std::string& pkgid, + const std::vector& appids) { ASSERT_TRUE(ci::IsPackageInstalled(pkgid, ci::GetRequestMode())); - ValidatePackageFS(pkgid, appid); + ValidatePackageFS(pkgid, appids); } void CheckPackageNonExistance(const std::string& pkgid, - const std::string& appid) { + const std::vector& appids) { ASSERT_FALSE(ci::IsPackageInstalled(pkgid, ci::GetRequestMode())); - PackageCheckCleanup(pkgid, appid); + PackageCheckCleanup(pkgid, appids); } std::unique_ptr CreateQueryInterface() { @@ -202,14 +218,24 @@ std::unique_ptr CreateQueryInterface() { return query_interface; } -std::unique_ptr CreateInstaller(ci::PkgMgrPtr pkgmgr) { - std::unique_ptr installer(new wgt::WgtInstaller(pkgmgr)); - return installer; +std::unique_ptr CreateInstaller(ci::PkgMgrPtr pkgmgr, + PackageType type) { + switch (type) { + case PackageType::WGT: + return std::unique_ptr(new wgt::WgtInstaller(pkgmgr)); + case PackageType::HYBRID: + return std::unique_ptr( + new hybrid::HybridInstaller(pkgmgr)); + default: + LOG(ERROR) << "Unknown installer type"; + return nullptr; + } } ci::AppInstaller::Result RunInstallerWithPkgrmgr(ci::PkgMgrPtr pkgmgr, + PackageType type, RequestResult mode) { - std::unique_ptr installer = CreateInstaller(pkgmgr); + std::unique_ptr installer = CreateInstaller(pkgmgr, type); switch (mode) { case RequestResult::FAIL: installer->AddStep(); @@ -223,6 +249,7 @@ ci::AppInstaller::Result RunInstallerWithPkgrmgr(ci::PkgMgrPtr pkgmgr, } ci::AppInstaller::Result Install(const bf::path& path, + PackageType type, RequestResult mode = RequestResult::NORMAL) { const char* argv[] = {"", "-i", path.c_str()}; TestPkgmgrInstaller pkgmgr_installer; @@ -235,20 +262,22 @@ ci::AppInstaller::Result Install(const bf::path& path, LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; } - return RunInstallerWithPkgrmgr(pkgmgr, mode); + return RunInstallerWithPkgrmgr(pkgmgr, type, mode); } ci::AppInstaller::Result Update(const bf::path& path_old, const bf::path& path_new, + PackageType type, RequestResult mode = RequestResult::NORMAL) { - if (Install(path_old) != ci::AppInstaller::Result::OK) { + if (Install(path_old, type) != ci::AppInstaller::Result::OK) { LOG(ERROR) << "Failed to install application. Cannot update"; return ci::AppInstaller::Result::UNKNOWN; } - return Install(path_new, mode); + return Install(path_new, type, mode); } ci::AppInstaller::Result Uninstall(const std::string& pkgid, + PackageType type, RequestResult mode = RequestResult::NORMAL) { const char* argv[] = {"", "-d", pkgid.c_str()}; TestPkgmgrInstaller pkgmgr_installer; @@ -261,13 +290,14 @@ ci::AppInstaller::Result Uninstall(const std::string& pkgid, LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; } - return RunInstallerWithPkgrmgr(pkgmgr, mode); + return RunInstallerWithPkgrmgr(pkgmgr, type, mode); } ci::AppInstaller::Result Reinstall(const bf::path& path, const bf::path& delta_dir, + PackageType type, RequestResult mode = RequestResult::NORMAL) { - if (Install(path) != ci::AppInstaller::Result::OK) { + if (Install(path, type) != ci::AppInstaller::Result::OK) { LOG(ERROR) << "Failed to install application. Cannot perform RDS"; return ci::AppInstaller::Result::UNKNOWN; } @@ -282,19 +312,20 @@ ci::AppInstaller::Result Reinstall(const bf::path& path, LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; } - return RunInstallerWithPkgrmgr(pkgmgr, mode); + return RunInstallerWithPkgrmgr(pkgmgr, type, mode); } ci::AppInstaller::Result DeltaInstall(const bf::path& path, - const bf::path& delta_package) { - if (Install(path) != ci::AppInstaller::Result::OK) { + const bf::path& delta_package, PackageType type) { + if (Install(path, type) != ci::AppInstaller::Result::OK) { LOG(ERROR) << "Failed to install application. Cannot perform RDS"; return ci::AppInstaller::Result::UNKNOWN; } - return Install(delta_package); + return Install(delta_package, type); } ci::AppInstaller::Result Recover(const bf::path& recovery_file, + PackageType type, RequestResult mode = RequestResult::NORMAL) { const char* argv[] = {"", "-b", recovery_file.c_str()}; TestPkgmgrInstaller pkgmgr_installer; @@ -307,7 +338,7 @@ ci::AppInstaller::Result Recover(const bf::path& recovery_file, LOG(ERROR) << "Failed to initialize pkgmgr interface"; return ci::AppInstaller::Result::UNKNOWN; } - return RunInstallerWithPkgrmgr(pkgmgr, mode); + return RunInstallerWithPkgrmgr(pkgmgr, type, mode); } } // namespace @@ -360,8 +391,8 @@ TEST_F(SmokeTest, InstallationMode) { bf::path path = kSmokePackagesDirectory / "InstallationMode.wgt"; std::string pkgid = "smokeapp03"; std::string appid = "smokeapp03.InstallationMode"; - ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); - ValidatePackage(pkgid, appid); + ASSERT_EQ(Install(path, PackageType::WGT), ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, {appid}); } TEST_F(SmokeTest, UpdateMode) { @@ -369,8 +400,9 @@ TEST_F(SmokeTest, UpdateMode) { bf::path path_new = kSmokePackagesDirectory / "UpdateMode_2.wgt"; std::string pkgid = "smokeapp04"; std::string appid = "smokeapp04.UpdateMode"; - ASSERT_EQ(Update(path_old, path_new), ci::AppInstaller::Result::OK); - ValidatePackage(pkgid, appid); + ASSERT_EQ(Update(path_old, path_new, PackageType::WGT), + ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, {appid}); ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "2\n")); } @@ -379,10 +411,10 @@ TEST_F(SmokeTest, DeinstallationMode) { bf::path path = kSmokePackagesDirectory / "DeinstallationMode.wgt"; std::string pkgid = "smokeapp05"; std::string appid = "smokeapp05.DeinstallationMode"; - ASSERT_EQ(Install(path), + ASSERT_EQ(Install(path, PackageType::WGT), ci::AppInstaller::Result::OK); - ASSERT_EQ(Uninstall(pkgid), ci::AppInstaller::Result::OK); - CheckPackageNonExistance(pkgid, appid); + ASSERT_EQ(Uninstall(pkgid, PackageType::WGT), ci::AppInstaller::Result::OK); + CheckPackageNonExistance(pkgid, {appid}); } TEST_F(SmokeTest, RDSMode) { @@ -390,9 +422,9 @@ TEST_F(SmokeTest, RDSMode) { bf::path delta_directory = kSmokePackagesDirectory / "delta_dir/"; std::string pkgid = "smokeapp11"; std::string appid = "smokeapp11.RDSMode"; - ASSERT_EQ(Reinstall(path, delta_directory), + ASSERT_EQ(Reinstall(path, delta_directory, PackageType::WGT), ci::AppInstaller::Result::OK); - ValidatePackage(pkgid, appid); + ValidatePackage(pkgid, {appid}); // Check delta modifications bf::path root_path = ci::GetRootAppPath(false); @@ -406,9 +438,9 @@ TEST_F(SmokeTest, DeltaMode) { bf::path delta_package = kSmokePackagesDirectory / "DeltaMode.delta"; std::string pkgid = "smokeapp17"; std::string appid = "smokeapp17.DeltaMode"; - ASSERT_EQ(DeltaInstall(path, delta_package), + ASSERT_EQ(DeltaInstall(path, delta_package, PackageType::WGT), ci::AppInstaller::Result::OK); - ValidatePackage(pkgid, appid); + ValidatePackage(pkgid, {appid}); // Check delta modifications bf::path root_path = ci::GetRootAppPath(false); @@ -422,51 +454,52 @@ TEST_F(SmokeTest, DeltaMode) { TEST_F(SmokeTest, RecoveryMode_ForInstallation) { bf::path path = kSmokePackagesDirectory / "RecoveryMode_ForInstallation.wgt"; - ASSERT_DEATH(Install(path, RequestResult::CRASH), ".*"); + ASSERT_DEATH(Install(path, PackageType::WGT, RequestResult::CRASH), ".*"); std::string pkgid = "smokeapp09"; std::string appid = "smokeapp09.RecoveryModeForInstallation"; bf::path recovery_file = FindRecoveryFile(); ASSERT_FALSE(recovery_file.empty()); - ASSERT_EQ(Recover(recovery_file), + ASSERT_EQ(Recover(recovery_file, PackageType::WGT), ci::AppInstaller::Result::OK); - CheckPackageNonExistance(pkgid, appid); + CheckPackageNonExistance(pkgid, {appid}); } TEST_F(SmokeTest, RecoveryMode_ForUpdate) { bf::path path_old = kSmokePackagesDirectory / "RecoveryMode_ForUpdate.wgt"; bf::path path_new = kSmokePackagesDirectory / "RecoveryMode_ForUpdate_2.wgt"; RemoveAllRecoveryFiles(); - ASSERT_DEATH(Update(path_old, path_new, RequestResult::CRASH), ".*"); + ASSERT_DEATH(Update(path_old, path_new, PackageType::WGT, + RequestResult::CRASH), ".*"); std::string pkgid = "smokeapp10"; std::string appid = "smokeapp10.RecoveryModeForUpdate"; bf::path recovery_file = FindRecoveryFile(); ASSERT_FALSE(recovery_file.empty()); - ASSERT_EQ(Recover(recovery_file), + ASSERT_EQ(Recover(recovery_file, PackageType::WGT), ci::AppInstaller::Result::OK); - ValidatePackage(pkgid, appid); + ValidatePackage(pkgid, {appid}); ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "1\n")); } TEST_F(SmokeTest, InstallationMode_GoodSignature) { bf::path path = kSmokePackagesDirectory / "InstallationMode_GoodSignature.wgt"; // NOLINT - ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); + ASSERT_EQ(Install(path, PackageType::WGT), ci::AppInstaller::Result::OK); } TEST_F(SmokeTest, InstallationMode_WrongSignature) { bf::path path = kSmokePackagesDirectory / "InstallationMode_WrongSignature.wgt"; // NOLINT - ASSERT_EQ(Install(path), ci::AppInstaller::Result::ERROR); + ASSERT_EQ(Install(path, PackageType::WGT), ci::AppInstaller::Result::ERROR); } TEST_F(SmokeTest, InstallationMode_Rollback) { bf::path path = kSmokePackagesDirectory / "InstallationMode_Rollback.wgt"; std::string pkgid = "smokeapp06"; std::string appid = "smokeapp06.InstallationModeRollback"; - ASSERT_EQ(Install(path, RequestResult::FAIL), + ASSERT_EQ(Install(path, PackageType::WGT, RequestResult::FAIL), ci::AppInstaller::Result::ERROR); - CheckPackageNonExistance(pkgid, appid); + CheckPackageNonExistance(pkgid, {appid}); } TEST_F(SmokeTest, UpdateMode_Rollback) { @@ -474,13 +507,70 @@ TEST_F(SmokeTest, UpdateMode_Rollback) { bf::path path_new = kSmokePackagesDirectory / "UpdateMode_Rollback_2.wgt"; std::string pkgid = "smokeapp07"; std::string appid = "smokeapp07.UpdateModeRollback"; - ASSERT_EQ(Update(path_old, path_new, RequestResult::FAIL), + ASSERT_EQ(Update(path_old, path_new, PackageType::WGT, RequestResult::FAIL), ci::AppInstaller::Result::ERROR); - ValidatePackage(pkgid, appid); + ValidatePackage(pkgid, {appid}); ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "1\n")); } +TEST_F(SmokeTest, InstallationMode_Hybrid) { + bf::path path = kSmokePackagesDirectory / "InstallationMode_Hybrid.wgt"; + std::string pkgid = "smokehyb01"; + std::string appid1 = "smokehyb01.Web"; + std::string appid2 = "smokehyb01.Native"; + ASSERT_EQ(Install(path, PackageType::HYBRID), ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, {appid1, appid2}); +} + +TEST_F(SmokeTest, UpdateMode_Hybrid) { + bf::path path_old = kSmokePackagesDirectory / "UpdateMode_Hybrid.wgt"; + bf::path path_new = kSmokePackagesDirectory / "UpdateMode_Hybrid_2.wgt"; + std::string pkgid = "smokehyb02"; + std::string appid1 = "smokehyb02.Web"; + std::string appid2 = "smokehyb02.Native"; + ASSERT_EQ(Update(path_old, path_new, PackageType::HYBRID), + ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, {appid1, appid2}); + + ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "2\n")); + ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "VERSION", "2\n")); +} + +TEST_F(SmokeTest, DeinstallationMode_Hybrid) { + bf::path path = kSmokePackagesDirectory / "DeinstallationMode_Hybrid.wgt"; + std::string pkgid = "smokehyb03"; + std::string appid1 = "smokehyb03.Web"; + std::string appid2 = "smokehyb03.Native"; + ASSERT_EQ(Install(path, PackageType::HYBRID), + ci::AppInstaller::Result::OK); + ASSERT_EQ(Uninstall(pkgid, PackageType::WGT), ci::AppInstaller::Result::OK); + CheckPackageNonExistance(pkgid, {appid1, appid2}); +} + +TEST_F(SmokeTest, DeltaMode_Hybrid) { + bf::path path = kSmokePackagesDirectory / "DeltaMode_Hybrid.wgt"; + bf::path delta_package = kSmokePackagesDirectory / "DeltaMode_Hybrid.delta"; + std::string pkgid = "smokehyb04"; + std::string appid1 = "smokehyb04.Web"; + std::string appid2 = "smokehyb04.Native"; + ASSERT_EQ(DeltaInstall(path, delta_package, PackageType::HYBRID), + ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, {appid1, appid2}); + + // Check delta modifications + bf::path root_path = ci::GetRootAppPath(false); + ASSERT_FALSE(bf::exists(root_path / pkgid / "res" / "wgt" / "DELETED")); + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "ADDED")); + ASSERT_FALSE(bf::exists(root_path / pkgid / "lib" / "DELETED")); + ASSERT_TRUE(bf::exists(root_path / pkgid / "lib" / "ADDED")); + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "css" / "style.css")); // NOLINT + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "images" / "tizen_32.png")); // NOLINT + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "js" / "main.js")); + ValidateFileContentInPackage(pkgid, "res/wgt/MODIFIED", "version 2\n"); + ValidateFileContentInPackage(pkgid, "lib/MODIFIED", "version 2\n"); +} + } // namespace common_installer int main(int argc, char** argv) { diff --git a/src/unit_tests/test_samples/smoke/DeinstallationMode_Hybrid.wgt b/src/unit_tests/test_samples/smoke/DeinstallationMode_Hybrid.wgt new file mode 100644 index 0000000000000000000000000000000000000000..192ec9d130eb0bb4eabec0aedd186debd11bdb1c GIT binary patch literal 58029 zcmV(@K-RxdO9KQH000080OEQ{NJXc1_Q^;906yUW03iSz0CQ+za%E&Ma%FQbb7gXN zX=7z!aBysCV_|e@Z*DGdZf8|g2>=5}_PJIO_qkSecnbgl1n2_*00ig*007ik2|QKX z{$Iy%aLn^8C$kKdp-bi?LzGORSp!W%b<=Qjsg#DBq$1*~Zss&7B@_}$5h^p+ln}~v zOy``p*3rJ7{m%3L!@J#E@At8+v)BHuz1RAEf8*LGS1h;XC&`ci0Q~lL)-JIB5jAci z{2#!PnFl+b06VWe0Pu>UMgXx_qyQi}ZKF_Dtk~+m*MHAe{{TgM3Pmwsx4+M}om&9d z-w^NW>*m@cVM=Wov2q9xx!~aMBF?SoVs$!1EK*gI%p;NmY!3MRT-`9YU z`0>k!2w?REvN$0z5-5sp3AYAY7lVw-m8X^f&-p;i$D!B=)MzP148&}PJWM{%%M|L?gp#^^*Ca>TXi4a5ZtXxW4-Xv$ z^$L5*d18j%Y~HaJIz;($;&8XawEYzVnH3d=XR`&?Yxh1OGUjgF z*g@~AOb@UCplxq(6pI@VAE~E(?h0Dm2Z=om9>W1hHcPIa z%c-yL>g=prT5Pr2`-R70x^L0?0uS2GiC~jy>gex}+m%BXt_`*282`QK<%r`AxytiA z$2K;-kFcG7z{{AHubEqHzcI&CQ>?>TB=D?t?3v+(H|CzSI_RI25U!vUU^un1h;-=iY*LDgZ;d{)KPUx!FUu9&M`(VhozoY!g*Lh>!jGKmgWR zE9`0-MRsm72kh7_fcY1^2F)QWbA}b*)(&iAk-5WGAj##N5 ze|1}4bA#?13wiwl=dH)10t9r5+#d><1_(}ib0-w4=Y{fcSe9{%dXpQ%2^&v&DxKw) zyc{-8F0|tiIjyYtJY39qu0y1O-2#_WZi?=9@`0i73QWnV^v$@9mdh^}|u@Mr9aj$pZlQBJGc(wa=`c}b)2s29Q{DKcsTzbVj z=j)U_wYu|z7Ejcs@;h@g_|i*cZm-N>&pkQ1sq#(`he+s>0vIxkSrxY(z7CA{- zsFrh%&Hm1BZq*{yHr2aalzOyM>Y00ymqlhW~<~@>b6@S_C6ABzNoM~`n5-Od5`Uf=nw28L45qj#gCST`>IRF zNpVT}N(V{Zig8Smt~o7T>NbDTg1(sU%Yv8v-90t4HGdM1d_lUn^rGrTSxsHH)U>3u zmNZ`XVfS*kh}3nihcj*5^;|nrdEQ(~cTbC7(dR1b>YKVaKUYqR6{RI%~fcc?W;`@gGACidFBts{d)9W^N2kKKHa~TIy9Jir!K^ zk1Utr3qIyt9WjC9SN1OF=~hpU9u7X$A~vYet|6PG@0hb-%bFc&m!dCurrV`Er`z`B z8)o(=$0y}4$@Q8F6|gK_s`Ynv z)Pi!u`=WPr+p)-;DwFGPZGN#4JhQE2O^0%aUx{DIbycD&S=C`#@3Mhdmt{Fg8cB;C z7dw`|dim*dowp#I5}r|)bjL%cfL<=f6jiMo%%rfc2^y-F*DmQ`>?m~MoHfX z&oZA5MCC^vesuU3nkg6miF$!_`Bn14d+zNPGhS)j5?gU)!2IyDkxMb6I}p(!HaBYugT1kH*Jk#TE6Z zG~OC89N0E+qUqO{`oC%_nKyar3hQ;hr*83!)8zs+uT!TCFFoFIl(5`7UrW zx~09;K+`NuXS+$mqDT6V%u959yk5TbjQ6zP=^$sMqnT;AYv<$E>Hgsp?eXor9fu@i zbj#KT9JpFhG!m99k*Xu2WqirPF?{(C7d}}EX{Jb=Q5g~qQaMXHP$XaEJ6E^LuqwQc zvPM&3`H-FFvV-S8M&=nDP=2O&L#r$2m|E(&JV$=V<~ZX7iP(LLehW>F^A{XFA9*g& zDvi7>D%-c$_r1@)@{BEEcj?b|oqnLJaFOfzj;wPToL<_bY^$UXZmZO5HM#EkZt?JW z^6KOZqf6-t^IrA8%zDvyZqb#&Um5)(MIvqIvu_-C@X(g`e4n4O-RQ1K;DJU`hdAfF z<12|7CJ#?#Yx=!)O7HiG&J501J-BQ~=(@reM+)x~cJ%SOle)qV_chh_uXXa&^=iHE zJ$XD{)=d25sZ6m($!PJP>(ra}cgddcfAQpU(}jDf>BTvlD}AbcdfvBaC#)8@lotIy zT3{D{eZxKe)|L1AN5_^l>PEj(Z_GWKP06|b#N=V#mgMIZuNIrT{pL2}HtA+KP~Cjr zyLNn6)qw1wyfOWcZyQ(VQE6t+A2+%a+?T!edAnuGekzMhaJc_LlK_zuvvQCiJKpr_$Ujxv`l!Yj)%e9L&Fe$cNe^o3N;&c_jb9X9>o; zw+Tk3&H2Lz{i)BWqpcFn!MoLH73I10L23gx^PKY5k683u)>E2Kyft4k$?`gwan zP~vb^lP#4PcC?ZnIT|5I;f%N(QGT5NcwfQ~W=2Ns=DTS<)5(;|&6TPNlJslz@=Qqy z-Qe-JeYF);F;!QihoYmN`2BQ))?3ggeXFsgs6^rM^Zj}Y){U&3>Msmx3X&hZ-YV$S z`IF+$>Wr-ucSc=bCr?F5M@2C>*kgvLH|c3N!hBP4lby>l01m1E5ONfN2?p$YU`{$8 zfZh!N7{>r0>3@FxGaCTjZL_zwblXn=Uhk4L2n+^f{Vyg0fxw13*jRf4#xlz^2Cheq zj_)DS|H?IgO@jOXmobiSu#W$j2s1li`_kA^GcYt%CGn69*g4qM*a&QM2yAR}Yy^T3 zWafwL{D=q6;`+i*gE~Ah(=&zvgFZ}WfKPNfy%XZtMw_P9k5R|U;k*XK17<*G_Kg1` z?f>FMd>uCC7P z+S=MrU-*`gf_%Zx%1U9n#8O7mc0*&7F>CYI5?LkXfW8$9 z^AoZbFfua2beni$1q~1CzvG#WFdp=LOeUDiMj-R^^8-OaK_Da~1lKVNKKA#6!NCED z?PLK|u!yHcMFnum6qvEzzfGv$6{vVHttgaL(Dm(t36GAXqy#`#i9qa!g8TgW^B;o6 z2>%-+3^3HA`^a)Jpk~`R1mj=sA%4tVq^y<0tcSb5p5Nq{)b zEi8>3f~Qt{v-LW0M}5n=OLEes>p{o<7X zWzDQH83BiP$E@A~yNA|+=AzIcEiH`_Dg-W_N*&8+Zff#tY-}6=e}PN>CZJ;0X=7u% z7G|?yk`fXUa&ofZLuClmu|AptG|J^z`=jz>Ml}US94s@RhChZv_>zP9-HJ z0aZ1%I1-81nM_tBz*-Nqx3@C|hqo}+QUn{DExX0)O;$oYD7Im46ZJxl8vsdJ3-l$O z1N8oGW-W@!l>ZCi!NprNo={1J_Y8O*q&x}=3b5w{Ev+pKm`vSjsITAB($X>nzLM4c zZJ>Sul*7#2+z8f|iDIInWLY^m(Am+!%x3YR;K7*<;MuGebHA*Xf=VBZk0B%p1ib-_W!=C3nqen zZDZ82^+kn+CGghtp9OZ-Wbn^C@ZY=yJ(Fm?#AX-VOb%I*Ohy@EeO(e94U{-}c z@j-+M1UnhRA0(hT*gQ0jTrG;r=r{8eNqrFz*cS`f$XZ~U&Hz(1_@1fBKjJY48Xg?H zMPl9n5#mRuPWTXjFPX4$OwsU36?PBp8(JtcQzp+P&k+(5eh9=2Q1E2uIHdnH&ich}wX}6o1q20b<|-!G= z;{|~~F+%r|m9Sb8B9siFXJe%ZO-cz6-1Y!=NqJNm!arzHZ0KtMgZWL3M*nB!#jodo zI%#6%$IoF+)G$|#@nTAgDKol{6dbKv1u8t0kGF-TmE7AmH7gnm@qK`BB7uId_?FSlX~`m z?y!w%oeUaM05Ee_g~N*eMPU#>CS*)mSWk|ywXoL7cvp>&wXB&kzRa1eW=6?eLqh`~ zlgV&T>`OE>G#?R(L>S%JiW!4wn^8a9qU#6UdQx>?_cGV7+MCIICI`PdBLGV>t64V?e+&jS0W zKt+J6sHli2%=rf?R{~sBm8SoD-;(6Lyeu!9Aqz<$1VSJ}09)1s+GVDvm2w+fN3>g~ zrlc3`8EZ+rnIY_nwjcSOQ&U|ZM6p5o*Ancu|;77)Ik9QBmsed1dv5BAS5q& z+nn#*```TUa06(c%FW%*z4x5|JO6tA^BUf)sHmI?ebv|3=K&){5Q;Q5*q`G%+)=Iz z;^Ul&jAQ6e6g?MOJB|9U{~IbSDpG)ENs=t<3IYJEhLZy;#IN8=v&aY$il2qeZI_~3 zMxFcu7c8C3ckpuu4jj-N8wdtxDz5#5y7uiqmSev$s4$9ZYHDJQjZJGSD=XR~kpeyP z7$B(|0f_80k7#ogvt^0GbD{h^&(LVDx#|YmKmQ&IE4rsNSo&!&Cg~H);nZx#(Wrnm zlS<=7S{IMgpPX|)m&XiNNGthL^<;lo&+=e6bm$N@C>unTnd)?{QZ3-vv)|Ns`bOq7 z096)bep}m&-&ItU&n;1Y7#hY6HajcA;mPQT}fjfkIOhDOr2HIzam`d@p|&8yEvNiE??Cb#`?<4LW}lV8535v0x~E7-1o?h3lr50 z*qbhltUq1^$*jkqN>yXd{754V30DG0 zDR`{0p}{(!bf~oS%z%Ovxl*4<4mJb$GCT+Uhy8?^SJ6wQOI2%CT^CTN;f`2k!wCEV z{TUEu6Cc@Whp;?3j$#5}20Uaj^PJ3QWgRn6aj|0h6tLF*0|y>kv}p16O`CL9 z#bv+rvO$FysIRXt4(ElRudA)iKYH|NPUFY(?aY}Msc+!zlrIj%)~S%%YPf$ECgQ1g^2|5jC5IgyjU%nnK2A$>gVgcL{80`wyaI12Sz z=FF!JXH+voiqq0?L2btpNIO6=c0rfM2r@Wg*!5W*Pln(zv##`;vNMDBJ~YU&bfrCD z22@NphyyCJo;l@*B3(RWNFw>IvZ8XLdhoga{{HW&>!X(=hA(%>2D+9mT@i~FEiWx8 zp;M<$jlDovg>n>g2TVOC4J7H>E?0YOx-Te`B~687AvIu zNMw1}(q(s%qhT&tF3G77yGp*tgMr}R*G#CkV4;~hL#CIQgp)+mA9P17#H%U7xWF$3 zr=}G`CxcZAB_(pzaawU;#>RV<-{%V8tQNgS@F8nCl30DmiU0bC3E5DSE)>s?nwb}T zf9x9MenpIHDX>J`L_ooJByv*Em3PK(hah~Xrj#YI~X8&v?L0vhWr z_zp9w$x%jsa|}JR$ha^2m*#vco(D&Ro6T>?V2XK74j2wrpkVMrzgAUMPDp1mzZe)8 z_|c`r@TEA_Ubt}4)yjRjMFtp5A5F$|r5N@Lk)gS z8bj14=RB#=at$N*za~!>_ucn9Y@4Gdm`gxBXZc0a7i6vLxs|4lltB-xF1COgCWXOMob`^ro6&pMeGQr3d_{@6bFAbNaw#i zMTv7xoElOG8!zdQK0DJ%`tVF&uE!jUe6E_Bn$SpMM0LMO>0@d=~GhuPmWVMTBApmA^XVfa*D=FoUT|J}IpB^t+f^#zr=RB_M4<>h4rE|nqzA2s8e<3(Or2lHsWltqqtQoKK2 zT1wealom`Wqgj1J^zP9Fm4$65^<6dF;n<+#ufPDY1C-KoIh!*}gPxpBglORxd+4gR zsZ`T2iShxCy20yY0Gyd&h<4yUyDdl_3o3Em7!T8X{X_K6y)e|PDQJ+tZb>(#X%ro@v z?n7jk=Q}n%zMbKHP#Z;7P=T!OrnE@TY7vZx;u+QLX**t`j=~iE;{y-U;dBAzheO`C z%;1Q0#blfELN>+A3+OlR9HaZz4pUMMu!2hUwSq7uLqSTb4H5%0^+6>jLIFppY%aNy zN^ZWAI(EE5!y8`lTo&e9Gdd+{XEG1!LBB?$g)IvgExK#-rcJBJhg&ZI)#K7o=qFg9 zgbX+?X0X7FuCQ^$4Ui!DIqqD~&!4Qx?J4K~ZB-E;4xvic5+z5Y)`gU5CM z0W73}oCJ|-ORhLzdcp&#tFH&RKUSwNlDl43V(7;{_Wb$tJEM_E8)Uet`()hKjIzjj zX5_}txRS9{b8rCE($W%2q!mFUh4jQt&59W3m2MrOU{YDb$QvF_8v7IlN1gNd@jbNU ze|}E$GyR$%FlNlc?gwvjohn2mL^Fa78ql}))5_=fDDI3>X;}d!A@Y^)lnE#fRVZdG z2g!hIokP3_+&&d3aIuZnw$izk&r+u2I&YSU)r~oGg!agcMGk&oKcb!~j7HjklOKkD zpavBI9xSh@@RmccUXiYfx#7B;T9a{7Zk+jyG*+KGN3C_o`?04lgtbEpHTo=m`VmJ6=8DcV?0BAl)IlepnQN__Vxlychx z6$e^#Xw>w5&FC9e0|Fm~(@)7q+6Ik|*wdy>s|<#MT`5H%X=a!(s?%`Yf>be|sN(3j{ptEh{`lamP01OuI|t*w>4y}i(pUImj= z1C>=(E93Ea2qVXjtIW&=Iik%8X8Ejq2NP0W7XwS@#-ei&fsQzG^mIIyN3T6Nmr{en zG<-HeL4^Diw}uiURCMMLb$sw7wb`HRXAxdwK)EmnNN$i(A$gw%-CsVposJzJrs^7{ z%c1uX#tS(9F-BC@a!hQ!#>BQf?({g-%|FfonCnzer2L;gL*dR_y>CO$vT-VlIpCmM zl|&0wR93DuakRxlItUlA?d2e(6MIePC~h+VuU{bMOr>I%zwp^XUocBK2$=qtDe_=2pc4?e z$Q#CzK%NPa1@-^owl>-Yk%5Q8S=+GxGfhKy>P?w=>6Uk z^y3$Ms7P_Bt=yH-fbHr~Tg%d{3YKgeP=?8h^71kZX(UpF%6uIZa53s& z!@QqN<@8=AM6V>E1WAe%CO)iQ4hqQRH11S7?L=Un|G`wcI`tnKP}J-1@6VAgrt9U$ zsZ#v%wQwM-`gN8bUcEteG(#n^Fr_p{I)G;NOc8UbD|vD_k;XXDwv6kP!=Vyji0)8P zDOLaQaf*Lu#Rcnym|LaWhaBjV;vy>&jjkXuEhjlu(L2~BeI}WqAV)R0N{${53*tV& zfY_A!)^E~SeuIrI01nX$tCyoZ=5ra$ktP$=GO>d0x#u2Qy?V8N9$d{KKJytFmNPli z+@}>zPdxDiO*njznxnJmJe6}pUGB8C9(5)c*g(oPj4T0G&UK-4ZCmawPjmy^D{lTP zI=%Kcx=-emreBy<(XP`4RXg3bd&8PEX;O(I;tY;rn0~3$kswZF>MSb1{(BUxto1;} zhoI!44`6oV*bH~cnF)6O*;m7Hb91xSr*fqkgCniw;o(ub@rLixw5d~dT$C+mIXz}h zm6;RKev|iW*ZqM829D|l!}G0PYC60|Th&fNo9%L`>&AFsxLj!aaU|u6To=R(tYi0? z%*i7(_}Vl2$3j?IjhEGkzM;>GRx_HKno7vktIP_v(qn%TD~bhq6&a5P=0M4Dc+s@K z{guuph~NA}I^W+z=XZZV=XY$P#F72F4jO`YaaKK?cmQQ`2K#9M6dC>i6djUWY8q%` z=R^-b@(A5=#~m6ph$B2JqgpK1%~=;Yxxj6K#sA`qFM8H9tnk*nB*prkqkWT?(~10P zM6SVogE!pLuwMA2@KJAX7`7rRJ2Yh2`GQ7ux=_9Tz@x>9z8^f zzO9t#-bAAZcRSG)MFi+x7ULYjVNPUDudA!mqL)Xg398g9yhmGp_OqYSqmMr7`Fe<{ z%63bR<&iE^O}Oskk3X*8hj*YLXaW5`xw?$v1OH9EgZrp&`mL^W%-~pKqSORZidm^| zF=_beUdr~pPs5*Vqr7up=ze2ya-g9>TkmXmnyIK}Tp9%d8r!lLtHa+)Py==#*ukbe z7n$L}dXEYD)#kMnXr8UPRi}z%oL_UyR!yW(MLh);-9o7^Pf~L0I!dXATc7sifXFdd zo9Di7an6%EgnerJI zTn%=toU%*rBH^bgYzxR#A^yH!u9R#WbFS*^WO8k!AdIB; zE3cfa9xm{UWSG7YkMv+#894j8$!ebE0-4d=ni0Sv(1%SOwBF@J2nyOA3WX!eU!AP{)m<1CcJt)P-%;}X28;r|6l_ zsBS_P&7RXv>~i^m>UYk2h+J?JxQ;mt?MA<*Dl56Qwe^C*3P2(95T27#$s{(ufqDQ1 zF=a@B`0xp;-~FEyFI2A7mrDQc-as|){yWw8Z>EM&lIkkUG|j*)cm`a_tM~k(TCDeR zETc(m@NpeJmUYqh(b43#fq{XKovC`uY7JsC+vQY#xeUg0)JXcQ$(@@i`)4biUpmgZ z+?g4NQ(bVS{zbi!Xa!mAOX>e6T}P|m_-pDPI7W*XFV=bzBV2aOk7K21!nH+<7SZ0l zduijwjb0oYMj0$?v#eXUPIDiK;veWpU+^QBoXUy*E6$*nmKHj#-tk{+U!|(@I8`;* zd6u{$aL#szmN006W3l`Aq*|YV=`f_48?$#~}2PVKNvcP3|$hg@SvnP+y zq>?;(?5R~+w6b;2wBvV~vs-fVK+ZSwfZ`Mz2|8n7&W35ps&K@s^baLBG&cUIurON3 zI@NDBMLNE+B*PI(Hne-3%1a9`6vs4n&%K|@j)`UfoG7WHyth~BsW6&YiR z(3e3qs8)khE!BuPIxBghE1?0S^?D17(pw@iXQi zkSdVR@k?@)r8w}^;#b`)mLKt(GLsz3FVZ2bq0=-p&_}82mR#4y)2F#WJAQ4hD8{Gt zPg^UrPfuAwRmXcY2Z1O&xd1?51c8fj4Spr+K=*?1Q>IMO0{{ir!HM7&CIsdmaUBjm z4-x>%{YF@@y}jKN_iPlJde*OiCK!NCO-=g!?Azj4f+<~;i@lGZVS~tIEf$*L(rNBRJp!@Yh+lj8nVng*+8(1_aON3Edi01Vp3 z#s|KOkRyl)*8*Y{;u$~#*oKA%+P;0et|M3Gp+Fk3z68;+2RF`}H_x+-dF zpq*&boH=vot+(FttWXwFf3Ym6DV;(VvLUFM%F($^ww&aH}uCcK#+wx1YWJ&k2+w(iS z-`?+jI#(8yo|)Cv-Q9ck?D?JVdA{?V4K%W7sa>s|_em&6p&3)cVgrg5B?gzk&JnQ= z6C_AdU(2P`cyyPQq3no|ll1@))WB)babR`_fWe#rONOh>)%jcp>O*P+%=GA@^@gzk z<^l=?sNfm^72l!xVsMpfgPswSiWAo>M+l4R->R9vqO5025{q zvWjW%40j3&N9^ei=fXOJKBvFSfiCmx!^}aZ8VoWyi6Pq|35QEO{U^?A&k^6Fqxhp~ zNvm?lzF+%Cfa-ctJ;BYu%XHY8XTWT$_Q3bWKk_1HU$~25H9QlG>*_JS9 z4>q^OFOJd9+OF;xo}g!dIq4*~Gu*2tL%N{NQr@~sxohRlqYZc-l&raPq3rFn?SKej z^G18Oq_ctRkk?B@oDheSdii%j*v}!3=BO~r$0O!sLK^y-)k-y6Ugyh2*O29Ny~0SmTQmby9L(wsPfoON)3e|aehLKPIkJZvzU@up_nym z7A;z|$WkiUvs|a5oftR|nTzi*TR>$fu6axS-K986prDk&SIqS@s9YoqcG;f%U5h+< zk5h>=U3}ocfgf5*H7}nv)K(?Y*OTSkXn9?hw5fFVzP0pD%L4K$0=p1c+Mof;&cF{t zI`d$;`3T4&wF2PONR|dC&!Os5`{E@Et}LGDEXXh@I?#e4BT;U=@kVP?;zc2sS-!Dv z7X_>u>=#NEWFX?AP*+DshgG&pI!hIoGQ%K){X@3So;{n^tXUJ^BRxd254DIWXOrq@ z%fX2fvUA_gT-Yr{TBlBZ5OUSkcxC~5)Nm=0z56?6 zFJilvN^?xDd7DMWDoho%RCi!~iA#(r4eaffTW+EI@4ufGE?j8Sz{yY+fCc9ToDCcq zsZ-wYNOls%p@83TrTQQYNOJR z$&IA_U3BlXcj%vk8^})>d00syP>jm)UJnu-qVC2|efP!J!6F}f>@oYEkb$6F)}mSA0r)5z zH*Tc2-g?V`-(Y}kqxOa0paoYN@Drthaoi37h=GRzhyfK3Zk|4^HZvSf*;#U9wwkETdyU8U63QLU+yWr}xfVLVHg|1HvDniU2E1 zO~bNz%4LnL95!t6%m~rIFnP&<+NRXdb?wt=;jCs_)YeQ*4V5%v?#boD0Bdd9$d{Jd z;&abE7q_3aOSlwefurK~+i#~=Uwzfq%jO4D2{daI-t!G00j!r_ewmhibOFu1_y8?1 z?Oc3CGhO>T&2|+5fT*biX9#UphyW;H7%XT9{+HA#xeWuupKR7JkXi$leUE#rOER!H z1|g_{e?+qZwu`v4N~lp)DhuL!!1~T^eTO<~x6=ICzeoFmCOYBQ(eXi#`V5H4>FVjNbloKrX~AX9l&KI?PWh~jPEI0_+AjrC%6mzvm;eAv#W{e$OY^0Y z#O2OA@3is4V3Bw)&IK$v69y{0R*<)-zh}agRD0e;dhg&6t>66#{mtsVbmay0^wmq7 z==ZN|p+&Q?qtpb-4xgne!(E`nfy#NX$b1(Js4KIL9IP&LPTnK%I>MkLVZx_cmFFAf zQVLf^dLW=g`3a0H%~J2%Kd1If+vut*+Nd!7Jjz!$Q)6udUDQ%X)0%6H%z`Q5-n$Js z9TEvQklK}pb1-Az6K0A)+j$9~R!;cykw+e(d+xc%-irYMSy;|#VS$)Fm%PdhO{%UW zucg)i<>|CcGf$Ca|>T>RI(Rz;L znx%5pe&0u7x(lL7lP9;D(R`cMsI+$F^6JQSsPY~T;6lXxiDO5ov-@M3*5FZF-4I=P zUYe$z-#}G{RaxI}VKi%XY1-$y_QVrU#9k(5y8sHBEKD9KF4E3KdqKrejxc)@h>n+( z#Bs@4qs{kT`G@3JWQ^d7R*t7rR8?nKbW;sg)@G>lzyQ6l;Rtmd&C&cBwKRoJ(%zH9 zbgbuaiOni0(4`e?`&AyAh^!1Y?0ACc%^jw@#y~ z??J&m9F1qgAM0vpXZI)cY0q)$H~Lub=>fZ(KbcC0>rosgLOD+00(j-hl{RNCZARB?MA#fV$j~V}0j=5k+bIRc~+a(S*4v=J^P?`<0BJH7(fND(?9fq(GQ0guu)4w(D~@Vry8b~0!$j{MH&P!H;4 zm!XcYavgjRe}C}72d!d*chPgp{4V_$bWq-aoj2eW%#qKeqwf_|FasfP;-E>Kz)8qrPeFlsEF!ur*GX`IojX_Et%-r1B?;NEeqT3{hd)xrL%EXbh^K%je%UPrbXe zZ9$0&u35A659`M8Ic7PMCF2v62~QEWrG#05sjB(&=Z72d7@HF3Z4!-0bCuN39kF`# zYAZ+CaW0hzS4U{p<qw^}#6dVk<%JU$@Oyg` zd|G!VL3c0yI_+5VilnZRzLxXZ7Mv*TMZS}qxha0PzkQb!rTQmNoOq+Ax;k$vN=bjK zq&hvqb#XbZwO^A9N9RM{LY9Fl;Vb#sZOz^RYmc z;Qr`GKcbs&zS*+j$Wcyx7j;mOPKH!!`?$=soi(hZsYM(%d50mPz5*R=o@Lth(wN(j zX*11rPC9%-MQ%86#KnJ-1Qp7Xxp;cYl-5r3yt%S6w)f;ibaBZ6ea+?a;sU!C;D9>8 zn&Gv9j}~!63@*=$T42oQvSrIG*i5Bd_!-PLi;jFMQJ~HR?vu-x)AzprefvLh4kxPX z?Hc@IhZb}AM-x!t|2%%9>p=uAG~*LBGr~-5rfo8Oh}*5bL@pCY7N&SJ=sNfB-+wA< zN{Q89FdFbX)yb;4yrx9{ScbRg5u{BK{tdHeS+qUMF9MAdfWqgBwg+Zb9Tf%eeO(UhrWD~^t9uCeQL;LJF6;q{bGdJ%A5 zoUb$nGWruZ{%6WAm=Te!ZlHQ2QVL>XpP%pYXEP;g(IT;l6vVY8vWk{~YDWF@73nl` z^LSD@l5$g0<5;dNd0iImOV+=G!UPamkpk83|8yVy?)CHOhPF%Sr*EvcZa2tYJyW5d zBRgmi5eVso-PrG3RLXTe@W2DKVf!xHJ@qT$f~Q20Dgz-;CB>4s7Km#@8PDb?1}kTd zp>+h^ClXlMcdYB6e@8~L!N9=a^W{JdcJJEtaeI4vw~s2&QrM6o9VjL|gig&}H+krnkKmmI_kZ3lt@K0@R>{4O@y9lssg*ylU_` zWrv4ipLDt6@&)UJC~Q@jdb)S*+SyG)$j6{Yauqx8zLH9%A4S59xOs|Yxz77X^>dCAwQZ)OKgOc|gIW&_BlpEp374oYS7ltz>T*2RqE!vC{5 z%9v|MK08i>d6-G1ncE~)%7SNuW9;AjTiUYbb-JXXi}rnEnPuTXYBXiq)`xA6`$*h_ ztA>4796e-H$AV?b!7e9B*r6cXBKujk7nx0sdGsoUVbh~QjY`4Ds=u$uWF9msa9Rc) z%V{{deWq*--zPO*9#Laaw5wC`Y}kn$mvr)L_fp;ES5uXt!fe5_lFdHC$Vj;8kc1m{ zp-rwqVFvG%%}QnlTYWXv*9t|e447yuxC9pe!sGSUYpbZjfYI8&pH3g@qWtvBiwcqx zKrcM+dGU3=2AN!ariThqFdXX}x-FWc@uwUFu??Qj<;rNn06V=yszVE1Aw4mL0fd$*>&^w-q$$3Lfh%>)4;GhLRmwsl32BhwXJ<$Pn6`PnU8 z)2pXZcsGnhMJ46#dNMTdz38Cmz;%Ssp?^J2hf_>iCEY!q!}r6pGMpC*^RNg8#}Y?q z-~b!8D%yn2^@dk2r_*;o9sZUy`*pG7@B{`xLw^qq^?X{AMn@|~GQ%9VPxpDO5t~oL z$(|uczF(IY!8fMF+FUlcKTh*ZMMk}BTiK# zz>SdRG&r1h*OvfO(SD5UHDCfTuy{B?;D1J368zCvSHla8`5n=w$+?qM_uH2&D=i)g z!=e-6XTnq0!s|7dh}!jDS!+Q4ul>^!d@h!g8GLr^*zpc2Dn%JZsgc5zGnDd^L^Ao0 zfnSUX(iAD9#C3yRo~3f0D0vUh)L3nA{;fn8UlnS$f$VV&=D^rn# zIaPE@u<;Kzh;^z=p_pVqpc$MYGS@yA41)Ug|3>~L?c}%2aM-EQ0Me$88Bxid>ql`s z?W`G(g}?-2`sgPVCc_$~sFdsF!nSSOUdWD&ATFeY3i;6cyyz@UNLEgWXG0TJq9yblAR0&WE60^D`({%Rh*y(;n2vL3Z7(HZ zp)_H%D@&(f2u{qYkAGtO7OCEcm4$>>g@X2m>P+SGBjqp;T;t1*B4ER74rt- z7##6w+QbaaXfy`@nbX$(gt-C=g@((D5CiI>BHg+8O~WBWd7bM*Doun`nM#C|nu;kl z1edzjm-LMu+%Dxv>Lc8r_}@_LMx*n*NMB^LAt75IHlV(ph-#Of4LQfD0oCBj^LQzq zD@DmgS-??OX3kfs^154XJWx?N3PveMd=9Ph{1E8C3t}(>HovkyO>eEHx>Sz3_a3I5 z-Fqyn#XK%15TF3*b*!$rO)gQ#+Rxz^en9mzFC%Ya%V_UXgqfcmrrhpLluVDFMssm4 zZ4$CR6ZLu43@FH?F*nH_TXP9D;SD3%>`Ey|c_d5uDi2=Lz?0&f3{uJpR#b2u^3B?$ z)%Dc$r%#11N5#}{9#brpnl#LJi_{!m9X;F%Chy?(WBop6&{lh&}>*XLT2gKoh0fmk)t>!|M@c!7DahUUXjhlP6v-|RL{OZ ztSnK)f+I>D$^}%@R73y?3a^pQ@W#c(X*8(p@oG-wDEHd4u^g3b z7oYjx{5lTl(IGTkkKE~kpUL;|wS1w_bNKM#hv^(tdQMQI&i9SHIcY}GUz&#m5+nvk z%1*h)6$b}Xah7e4#pRV~eBb%s{4Q0_yu4IiGH{-tToN)h1~;Nq#v%efJ6u6a&NmwC z?A=pzWYO0s`q;LUPSUY$+v%j!v27a_+qTuQZQC8&wsrIW?zrcC=ZuS&`URbf5(uF&KZ&gbTJTzD z&GH=HEGBen^)&fAcNnD(g7Vk%g_y}#8+weN43&ZqpJ|eb2Lqw|L%RM%gsL%hu&H1# zJ}i{8U?(*=jwVpv!WGK8$gZ6PU2|$X6{$6K@EeUs2K$(6c`+*J0p#J-g(#%ssIc#z z@B*{)X;juy5n9;mQa7F!VCOkJ+Z{x$O%~C?oyP?Xe%lZUv9d_^tM4T*g1kWW<-c zf8ZD8g|E#hZj2H67%ej=lvg&a{;HD~1Hm3sc+LdFeelED19D#z5OBiIv)TVQQ@KDt z>n0nCAwywkKW#?)HHB8Y11$JsgFjd__yAr$U-?VSuJKi1`Boe3lra>v5czfPSwVR- zCZg6XLXI=qaL1Ue74m;Eh`qKs9E`iIDfA-7hl=3+$i*EE6zs2sw6-0bnn}_kRPxf` zW}R&50bIa>O9D&csD?Rn4R-E{c)1B1vHgUb2?zsNm#+yoX#ANmfqYy^G`Tu${pXtm zYFADv1fkSrAjxxy`zb|UOTyymnr+lWq|6&bnmi4toz$O%ELxAw?=s7A4bPAVyHm_ei&XeDX84K7rs%P(Fc4tv!*;$C zwh*5^1EKExh`9nk)LqnnAoU2snZzq<-RRiEe@U5qAZQ#zxVEGa!;w+bgw1t4n^q0f zanq#CShSF-rP1<8K&m}--OeCEzS%UYSc)Qx(BK|fT|Z+O(A-=Pqp zUw^#SGiA-B{?a_2OpiWa(z~}e5|68)uD-#B#+{CP^jE11s*aO)HG0QhMZ)<4Bs2T~ zg-${9aKGhRp;B9eYL#9vAtpv8oRQt*P{n zL;(prFfFvwJbwgYIzJ_Ft#Y(AM}_KmN8|)KDhdi~bj&~0M|ngk0gWgyxm!8@{cveu zaW9$49=*rMEs|DqEWB6EBNJYammY`Qhifi6Ss0RC>Y(LIHOu~@Vmdgb`zh6`QJI|- zrGn|7&}_CxpQ$piNi z@#mBaV^TZc0@IDXWC^Q9KJn;liLHocpEoQG)Nb>5zcs2-B~}UvZ$fT=+%|xooW2GD zPH^)7xxc=?x)ATV$=K`-Y`MGEda9ebjk$zoPre`K zW^s?JAEH`4xO^ct(z|R_uXqm-c4W`|c%e}xUpHSyQ_$+m{f7VtcP7Zg9Vpom0&Ei> zZ>@D47e-6ug?fA|=JlY&r=GXyT}ViQ7eQ&`r6q=^z(}7yc1y~R<)O*aq=tio1ED{g zMKLSn*bNu--&3&7#VE4)5osu2YXhborpbh+(KKL6(O>3uDgR7JobXC_Wx^#3mUVH& zHV?O#<&5i={|I_PdR45iP!>`PSh1W@aF(pDjsdygsRffZcRu}7&y0Ki+=Z4t+2?B3 zF7p~8sLkf!k8C9X9#0m;A8%Bu_^AbMo(~G5X?g+G-4R-jY-*$IUhpq&SG^aTma9O2 zMw^bX{eA#gvYtz+RG9!^Y~qLDNBP=FY*Qy_gj|n@jf1nYy13{9is}ly3`vQGvfryb zXOR9nE5W+|%k;|_@Y15eD86~-vC4$k0W3%|IO!zsJHeLx$`D5H)Uo7Kl#)mk2OTPb5bVJ+3rg!7TWwetjyA%qF+)mV8$pMQk;eJa{&u+xZF zq7EkdXpa*&!nz%5(X!hs0^dG;HKmwAP zSz#FzH~X!jd!0YMe*`ml9X{^vN@qfS6#f?@X?`iiu>u(gD3k&S2;<90`Z_!Fe}g0a zzrjco>Rz@=i-}#Al1#Nf$Fh-b8z}mJAPF!<^@+!^L1`crvpHL0$DtgGCT0Bu_iCO+ zt-)5$2}5NOYMb0z*5h&F-(yRIG6PZX0u-_%b2G;8 z7i6tTNkPR^`cer1q3aj05oL}AAC{Of-!pih)+FrZU`wsSM9G*G0>iciO5C0!@Nv5<`3as{{#!q?B$Rk zJFwK=NwrvNG(ITs(4Q_Db*Q&kD}4Mqeyfp|$7?n?y4$Dja-2Aq!*lpxAEiN(`jIfA zdLErjNxmw)s%qjuloI~briLm`ILP|;3#!TV$sEdy>ut*E=FsuY9^VHyV3Kou#{8FD zXKo#P`7ZQ)zKd=*W_Wm62QVX*o>t`#XvR+JJydWcXk;4-^_Z>uS8zK_-M}376U1;k z;(GTL@GdM&(A)shLEiI;ZB^wv*VkTRjAxKS_kX?j0Q6^P+wvZq@VtuQRVql?;w_~QL1NCQ!VcH;9JA9oG-8!r&NHtc} z*;!#Dqaaut2knv@v$0G+6$f!3OE*c%qj##9(5S@6|8OKFsiIJcPSDo&_6(HEM-DqG z7l|9a6v-e0(E?}oN&MI)k;ru*5Qo8#CkmYO#5ux?=?X!^y z|MGrOiU{1~lLrA;SQNP|Tn44?*y}K0XkKLaN0#iKtt@hOzP^E)J(cTE>T$>QiHI|1 z?#rjhJ^jY7oUX8w?9A;slPPVD-j17>2<7yVH38u&DIqo>^nQfoHkcA%^lB028tWz_T{jD`)l# zZ_~DWZx(ML#4nR(7W92FC1xt?zWXOgB_D_f9;f87FlKIo)68M1F^P@ri&EI^d~U)C zgMDdaTT&&?H?dkAudbk%zn`hX%tr^fv%hWYm>(gUA6KaZ@7Gi9(mw;G+icD}qRTj( z*qkPpxO0>J6AD2Qe<#{$FrObdzDCx2K)CDv==6APe4nG&_sRi9yyU-SwPl&Jp14cV z>77aB^?GYk;O!`$y@)OMU^(YYv5Pi*koCG@d1_moF1j0?E{tY!5BP@_Fp2$ z^oB@0S97}p; zWTjn5pYu4W_`1MGS8t*$H7oY4E2~f6=T^DVg{4DcLbj)fz9{&;B;5;d9S6L@r!O?Z zT>Cfcqx{x%;=NnuN51l>-uz=ur{WB|+~Ga-?Tc7uXYh$jo;U50$*R1ehn!K|T&j(n zAU3d(OcU^muyhiEweS|d4~*9}9^0cqZ`4L;`Vpaz#`6O!CssATKoyyGRS&ZMM8N6! za{Qv6s?7Tqy+S#f*q@BxADnNYj_EuE#gUw)-snMDYe%pl5?Wij^_EXcH;bhX|L~)s zJ2<*Ll^HY?eTdo`SlT*qxD@AV!TAwE}vypSoZ zy?VjTBi3WAm=j)z`w{?ig;@>N@M3Eby0{=)N2h9-vf?1xTKf1ge?Db9v;c!Gji+1v zgQTX3vx`~l+S=g8Jx!)+g~+tdEcd`06?s&pOLt4zRF3jsO{fUA1u;YyH6(x%4?D`` zz1yW2J_4y4R?lYRHITtpZ~^P>oC-VS402)%KSPItG>+8@w5<*~1MYp;Cm}lhZA6!T zk1bqRabuQ0rjpKN)vyfO_=2%|gRx4LT#>tOys2O2B)deVb!ers2%f%tUpq1UK&Wan z)RR;@G(bq#q%O58iE7L5@ASk4rn!&kPrEc9)5Fxr&qt9h`EX@f^@cO_u&|DIs+4l6 zSqNVfg;CdmS}C&B_&eY{)?W;xin-Rynq2P?J0mp5W1t9behBLYY&Btt^lDnmfb8ba zhwi39@H7K?_IzpRuA2C>7f`1sNG=#tDx@BEK!bfyGyCf7nrF0E3*MkQU z>2f+AE?(rrU=XVdHx3T|DPAPCYFtEcd}!PjtVcfZD;;AN;JoCWZb)6+-^)#7wb6OI zvH=7Ksgd0psr6qu5oT!Zemlq>lEQh=I%c@kwQ7pv(cEs{ACwU_3FCCnOg!gZvK9c4II+BrO{2uru)y2#$hSC zy!=ci-@@$Yv2Ouk1j2Vx=pD5{9dWth%6C6R7E6y>K^*agqsxv2Md%f0q+zC|DO&Hm z`)vzRk~US1pLKE;iLg}EYV=1p{elxg+tJJN&yo?G zkD9M(cM#n14D$*7CG>NJ+tp!LF?i*Pyv8@yM<%kTW|Au-lz?~kQ$I;EV!t|7aIA8o zk7=>LsYAN#-%~l|pWQ?JjlLRR`{CHaCDfzYZoBN2(e06u zQ|O_nOZomh-{BajsZ7S=0MsLMjv?-4PCjJczK@emLy9vU{IFi-*~|M-xnR&w$X@MI zevD{R!wNC+cxIGS*g#Pe9*lUDUu&>Ku1S8q3;LwcR5i_@HUdY2{Al-q@!rUYZ}0Lb z)u|z`!=KbmH_5C4)yKRjp`!SLaoGy2i&zMRll*B$IY1%I^rTy}uo`Zt@+K1TrDvk3 zj5c8I^CDS5`r78iK?BJ$Mn-Q<<}$ZWP7P!mZ{7(+yXol%o*K!h^vAHnd}m;K0C!l1@>B%8KKFn)22a zK+BKZLh={#S;IvR%;C>E4C#ZMvjM3!*n`%|Fg}kA@Ql%t$wM?wUp|%wf-Ba~NXGZh z5DxG)Bs2|y4lL#sit>1U+1a5BgbmKiLn$6mg4dmrU%R_D`k^6i)-~Jts^~qcb!TPy zDq}awjnf8Ul5mUzPd8knpaT|s=`6#9fawf}yUzk13~Uoc%Y-oHhjo=H0X@>C)WfWY zsdp&YzrBns+;mWwi1N;*cgWYjor>7UBiq@I2NIBp${1xL3J2fndEFFV?ZO|@S4S2k zr^R_S-tx!4uZ}VZ0^4L^3t{+yk&p-1Kvk>Y;}_0aL2Mu}eC4mfj}D07OGw6YcJ!Sq z_P;&bYIuEb#LwQrd#_`r*sur0&6gIoD=yCNYt0bixH!GY7vas>qa2n7FHtk{u_ciNS-)rqD58a(j#tpGL_Q zw=kbd-bV2_qubRDqn5%GJ)Zv8letuM8IMNppmNswNmLn6+mC*`;U_n^s+%*~mx9qn zMR&FR24=z=SjRUZ{4R+h`hV9x#k)nbV^4hr6PTg{`3(~nOER65cZ z5M0EI{D}9_rw0W=L$BH%l3DV@`$oG)e9vstO_l0GvGTsmPsh_A?5&TlK} zx;E{eANp~Rr#PJt$F7|EL81uhluo+*Xn?#?Mi;49yHKB8SUC)w3e$ML(%M z^`6zA-=4MrmpicU$gHk+hq#{J?L;5geEc77SS4x`hNi(+89_rXC-fGscpb@(PmfOa z8w$gVCr@I++b&e6EcW$}toZVtc9cJUzP@ft&_hjRMbYI}G_3j)CP2}GulY|<#eWiu z#t{1<@>5I35KH=PMML}AmQUeg9C_$oG=zrjw1s=x=_2Iqm`6~amhAiBv2vd!}ofn|e1;Y}tKB#Ae+u4tsgGArKP*RxY2 zSeczJ?U|!;vDsWWdw@k-D5c~6Qp3=BX^DRTEsVr%(1GyUE~9#HQhcdOy*YuufmB#Y zp#LNbH@f=cWp)4Gl0Qh^k`fRZ)p+p0KtPvY4dyHPV_;)#Y-U2|YGwIf2_J#C7M1_B z|4qWSiW!sZV?Yvpe1;kGI1^IKp^yZJ?F8ya;e24hX7$$PmK|N(E%-r;SasH7a-k_- zgX<(7wFRoKG^^2=3l>oiBdavKn0%NH*;-bsFR&m$3eEN-`Ux7^+Q5`idM`fsbo37maZskN-v%IvUEq5oQ*MR&1WqH}ALD zEad@5OLP5{l3ydFsr(kMUzq`)idX2{@rh%C(7^>t|ZGkCT zM0sSZ#yxMyk_VBP>5~a(__+UFjMNWk8OLO2nU8RnRz{Pw-)VSdn;Mi)nw=l@x6aY) zE+AH?cPTPqM!UZs!2f494fQLay~|BA?_d7-&{sfFz5?oK=5Az7Yo%vxW^Cl(_&)+G z`W4jwwEsP@ih|Yw3~=qYVZ$!NjUCG9)lIw)^L*W4ePUqb#A@|-_YHtXiS@O!)a!`d z8&AT_G_$aO4&d?w&}cQ+75kljQ_<2NFjQoF7?~!20lXQf<#@4H;*6BB4&_^Ezg*|I zmg#qTMCRL*!E67$qF}O_={Mx2$90Oy-NSsYW(6~`emKt6Qy9X z`9A{*{1wRmPPZd{1@b>;yNih|fYARNiDcm5 zK=0t_W@$wC_3FReuKx!Y$xBH`-k$-9-MB&y};37 z?rEJ?Az`~7nrH3)vA9c{e%k=pJJC{8IgECeG59c3w<-XSHVu|*;Y zbyvag-{(P6KlUt)+)R{NT1RTn0+@-lTJb8ycGO+2@Z!pBpLC-cINnsmgk2|zNY^h{ ze6CM;ENmhxrdVo)c^}#|$dqk=6lNTUr`o=7OzNJmEW;o8{;E2-_VH*<;S)w+#TM?TL?RQsg95JkQF-6 zhQ%WS#m%mAs%N-VY}U3qZJXuCEuIOp!-T16N~xdL`lGb*A?Kho;U^LNFWk+SOs|_m zf2d~;Ywv?|*#8y2vfrJ>p8filtwH}!LG1s6ugo3jt@O;S>CFFM|6-?Kg4U}HNIcS2 zs#p3r@P@?#^v-BG6`-U7vv@m*(>p8rG_k;vYQJGWJEWy@GKCSrhEtdK?SshmdffEh zRT`QnNAIGMO(1>tWC{ht+x!&9Rrt z@_R8Zhv>MkA#RGUc3Czp#vp@1$s-C}u}dUeA*tIrkE=FztQ~()7Q+K=XE$H*H(m!v z&gZh4G`m+q9j%!R{-FA}ZF1?hpz1nQH`%?K$gXp5x(6p^%Gg=MOhxaVF(L`k_^z7Wo)h1*!DE zgg9`kgnjXQ%%yT|lOFjtCbvRnqn~!KH=4C0`Y%khQUCtcFHxPX)H}>MZc}qdki`V@ zaN2|FbkX`>|8dqLQ<|Y~fUMj?uuh(Xq+VvaQ<+bpRZ)1pQC%fcX;TfPnrp z28>B(J2Ef<0sW`p{HkYe3ssO4hlj!W&*#ERN{IaWdba#e zgM#>aj5hu=0R+VOC@CVS?3!`zW#WkT=bsg<$m9&zVTN5da6EH}Wo-|eu4OloJsPnI zsh0C3meVial4t) z|BQM3l-#|gR4RHKpK6{eSF4L7mrX+(yF?)1X$FlRFyOm5ebK4AKbpy}=cpf9sxcrb zl1*lVb!e~J3N|$wOr}OBu@GyX>qm0kxXzF68{}up^$`ke<`>K@=-^&K&@FQY;s|6AsXFk))ZSCVpeq9Kx zfWb~VLPD*G19rX5<&jxTHq*+_$j>$&_USV~x5Fd`ulFNdgm)m+~?o_VLqXoh#uWvS+gLp-f#MbRc}s!^S^te_If zt|&Nz!C*wf58)uVEmj_D{*Uc+j+PuvNBZN6;8c!j%Eo*d$TT@tTKXGIOCMa)CWGbI zV~57nxCslS!TTLnUhA%pAL)k1vLY{Wt~Jh=4T7)_sa$kRd~S@1JhvPNHGUn%-LZBk zyKy3H={(k-AJ*v-l17r*L(v4hFF)#P1Ui;!eW$Ssq8k&gon9Z#X9^@yS*+Kv;Bi<4 z-e2xBhl1d7^VI5$1ySMS1=%>Pf0<>cM@O_VReDhL`CYgF8#=$-tRGP=ExqeL@9=nZ zP9)$)XU9i2<-fiEDq(yAB-#z7u!~?HaZf(&y`j!xK0oaCxyV4bba>!8DQnExxZ5E0 zYxd6W^?h@Nv=`XMJ35hTNPUyJi(Dz*a)q|oPVO~`at|yj6hUV^CCb|Xi z<+Fo>gFjKQv9W0nt8SXFp;|`<{-CN!7(Ndr#H{TNM~Yf+=7X_Wt<2N=!gs!5z_V+M z%;o!tFI{KPaP6DaqfYa!JFO$8(CQgum<=&oK@v_N82TBIQTGIaCk%(8l9PS$+8%4o z&DOKSE4zb{t78Oa2$~a5Xv3V&o(!qQa^}mmh4CV$ev0h+eCFq$$oB{zAwj|3Lh&R% z;Hl875D;EI12;T;09qkGf?k5XMRrN}iO-JYO>xn`u$20Ccu=|NEiN4_4p7WnUhAp)actwU_?T$aD{>b~l4k~Gon(H$@M6{%J zn@@Yqld#Il3&0M&@(}Fmb0|!2>hT%W`r095QTu#D0td^60DIS&t_%UP8qsHL!b0d~ zMI23uGDi^26DC|Hxzd@806o8YqfXg`FI0_I0uhO`o5|Ux;CYYFljsOJWz`&>%(mWF zrg5=5VTGt*^$OZfp5sMf`D!@zSVC)A*7f1X>}oxeCz_>XUniU@8JG#R4`En+`y{YB zws$5E9$v~_Cm2;DBUv{@(@0_&lJ&%E6X*DrCejn7WzEQm#NfusM@^C^73yO?Nt_Ey0aiAaEx}EJR+ks9fat}H z+aZQFrBun7)Y?;T=LX>_`X;v~0ca_rX~T>M>1;l)kEJju3x9t|#7=YyU#J9#^cxc& zYbjY()s)?%q-<-ixEx-e}rno@}`0mmVuLkDP_rXqPWr*r!J=dRc~=uQpcf8iM>IcIW1apCtKwlZH}rMbBFD@l~0JRL9m+cdL;q zBLqJ;0zN-SFUB{snk$kO2zB<@tQf=|ANOmZtZDRH%1MPY=K0#66MnY&-R~#susuJl z+7PxH$u)LD&UyQdaui0hcx6*^^q9}rWB;AvAOd6x_i$py@{1MB09E8btNQ`3tXN8l zwdZs+o+ZRP#^{}Jc#NcvfY4Gw{@_xU}olLf82HXo!3G*;dbFs z@mg(QS`iQWp^LvD=Q^%HOf`6)+~JL?ItvJk8^L26lWh!IRYLUDhScEBbET!%-w6wN0@_|k`VV@K1AYrB)*yGvIIDv>*Uam z36ut;Q*d3v;e?=yKc0vF5Dw;~b|;rf0hrAd>20*Tg+xb-3kiYztI!BG8cWi9zS&o; zGmgA<-z}0|YPKVhBU}p7!d=YWt+%2;wZqE_QMwW-l74VU$igO`QS5zqUR3%_r%EtF6Z(;A(r195UZFhVB&pMaXNC#X6CWI^fk)@}n z!lxgnC|r{X{rO{L3DF!!02R+!Nwh3y7;uwNk;xXKoX|N8O*>L1qMBs@Cj0;SjDiiYMmFcRX>nbe23 zKLre(6@km=YjG*Mgiwe=^W}$^s@3c-Z zuv&g1x>XRayw(a|<+=JMlz+{bNlp)BhwQuzqI*%308)LAU-S6+#|zUT6l01 zrp8QRZ^_SW+<2m)6CiAFj zyeHH@2zcEC6y?{85d9`Bz;UkIA}!_}sRAioH8t^mDJjJ!Chl`Eo<4voKT9zU(uJ0= zSh9~sEd~F|2d|gVTP4+7-9x1yjwstO$pej}`(>n;X8E!mOo&Hh%A;-V{Cwb*aMX&C zWsR$#cjtY`BU<1PqxBp(K@dEVtf)JKj)vYX1*5wURxL%%d{qGSu+~b`Ue5>d>9IuU&AKGhEBVa@%%jNhs5U$@i+&$GS0k+G9nk2ImnhQ@dG*y5cV8PmlRhtw(K3k659D_+pZn!4pvULj}HAYe*Yy?&HX8&)kLlI|G zZC$D^bg+gQmFm9wX>dEG{#Sk7;o)K1jB}XXpQ;%xLe!qJZEQM25}r4Qt8-uGUL2H_JR14%o2nlcv@WGK zbdo{T%3nMdL*uv2#qy+>kvV|C1D!vfD{l}aUpZ)1F*=?R?Ed`Y*VLHr-`v zC#sDo-Y3YEv07mZ#b5SpPb49$-yAvsff8?26ae(_wy@djMFsC?Cvk*q?aa`_#r1yb zQ=1+5*ghAwO`&_MCPiVOvW`;%oU@i_vRA?!#XZmYO0893xjG3lQkMIgm-I!F#ecki zx((0Jt0o(jfn_}pg2cXM6C|d~JW$n= z{wm_|KrP~6qhzfiRBG#-lfQ60)b>yMJF@MKKVWS_@j9FC+4u_ZF51K0+b(mjH@<3P zUIDA)e;`z#Amj>`HGa^{(x$7RrbZ*eBmop#O{TK2AGZF16?7`5F^+K-G@o~`)&8jU z-871;mV_uz5PtCVD-eUe?R-R1yfwg!aiep_YMRUe7#SPy6d9%$Efb+sXKnXgo3GBe z)^1`bV>RO&Q3S_DVr07FffpD5U^yv=i}^XBV+###K%c*~Lru|eM>Pton}}k)Rl0!f zYHdZPjnS?BRmNa}bh)JS9>bh;Q_KpuyeG@UwDyuu9ZJ^|Wx7$eyt6tX`++M;*kB2Zw(l=aYt43j$6zcVrv6x6j;xf*J~9K}bIb8MzJLxPC6@{z15f)eXed5({mnrXaCbwHt6!R&xWLDj(^FB@V6% z!|QBel#Ywkcv9HAipO_RaCy{XLF2S+{Nz(7a0fVxcM2EpZsv~#p~@B4jUeUpL00ZO zUaWHyv#Tihv|UUHEbb!C&>fSeiHhV3zE(yTRJDc#6*X{iA5TBi6VP*Ut(1x=Ah4#B zsCvp)Ly=+&lFvPZse?9;);>sO#SeAa?}r)usnQ;3uvo-XLNW_Rz_;)IxAMb4|2As< z`fh6hr3)edDgiZavY4bFvkRtQTZj?3yZ}hWdzn=kr912Ej@qp)H{O2=vb36Rz4KnN z{A9XHJHKM5v3FHDyv-W`ty>W^R!gu(Jvs%C`3I-;F(=kAc zkXjNii0`b4VeUiDdjPybfMLZ)(P28E$AU)~-kRBIn_*T|W1ew48+81JNz2GMV^@^w ztpo#&WdPrkml68|%yO|(t3;_d>a*Fnn=HjJJt<4oK9ACsh0jFP7u`M*v;Ak7OW?1p z%@5}!P}QTexvTLufTv+Hkc!Y=b;Ph<;Qpe*&+S%HT=oF1R98_T52d}U%n7xpZt`F! zmkq&qbnzJ`dpdQm{SMlcOuvPUudL0Jpk2HW_!#68#-D0Z14`0gaT5g6bMy>742a$1 zMWTCn^a{ZjBxiu+8`%PK))fcL`@%m9YTjrK;-dK~tCdj(pt1&6?@>E6D(u4r0%!W; zKiZ(MmIaHaQW*O-DWT%DDY((F2VaOz16b;uC9a5xiSb%gf{#gjzb5}Kfb#2S0klka zupcO0Lg3|je9npCU18*4)#QO%Q!s7XDAn51qiD`X+wZi?B@J&JX%cKpJKE*%2rt^QoZ zpbd?iz2qZJSJ#b}$5#4da$CD0fhFtbxcmx}6E2-EdV9lq99i}|u{ha&1LJZ%#C5|$ ze*3iZ+V*&5jLL<{TgcU4*+#BFZJauJ96`gxtj#&S!1TB)agE_-;|hM!eMJjAPMXdq zrcnh1@aj?O%I)Ldi`RZYV$NO+KI|va8IcEC9k)SmbgBJ%kj(0X%1z_TN&I!7rLn2~ zWRSXXw=N0-cK~C7d7|ONgt{W=;2DXfdEF+k#mqQlXjNAH9BWR24*Hv`DASi!+@Dxg zn32iaPsV48?f5NlgifdAXE&q!qu9H4=d+^xs%eHPcG9T>93q@^RIk^&L+>L9gv)GH zK=e0v$8&Ot+L1u^8R9uuP2=Vf8i7GMaaIYF<~s5szSzfdMp+Gg#mPFo+{{fm8(Wm7 z*UyVl5u>(HB;rwyC=`PtuXF@WjAhVS*i)83g%kMpKxCMVy$Qk^II=LP)nW#Rxf@X$ zCFcxOt9tXn8nt*i8|X0`8!@5m|4g71W?>hNwgwv5uij2hT~*uc%Y-QR5RD@9ysK2D9W3TfsfF=yWG#PHh7- zbMBKja}I`EN|xzSWVzi>6KR5xi3Uk)(^Z01NM6>24&&tw~@V!v0rfiisA!Akz1itd7!VE&U}`zgRnEAU&kIcRjO zDsQxwnu5rGdQ>k_P_I>L&S z+p?NWKI;s~cq%F0E=vFDpHm99bqWwVHg;%*MiVjXJ;%Xh#&*Q#*O3q8v=gp1^O!YI z3p$Erj7%@on1KTjnGIPw_c5@Q)rR094H6?b#q2y+Rzwu2PE`CGScb? z_@w$y!a}6!*OF7LkGlGHv-FU#aRQ;56s|Iv`pob!JeKjgX8{s@n-)E=@6&+p!x&CP zflu6k!)A*Gexr!}M#>q5Rwztn5bX@nuh9>u+liEW$6wYP-*V)GZEbbV-m1{)A}}*E z^QJVEsl~3h-4+V|0T#GvR9)Ohp=L=Byl;WOR%UjeaUCoTM$uu&7L07z3XR1*^>?A{ zU5$P!Swm9J3un0M;Luu(^*_HXK7531T~^6WnOS~#3b*kS&W3CQDW?)vVexu4&B9e% zz+DCFem;yEWZnq)go%pozP5BcE}Y^g5PEb6AP<&4XWH);D$|DmUA+8i2+mJL(%?R8 zi&4%L$fSG=C*o^s-~hFn8@k*21G>-q#;EBIv=d07ev_?t1_A+IEK>%iR+#8gzaGv zfk4S<0B`8337%7Mgb9T{ZPK{M_3IqQqzTT|d1IU!o){8^Hlfdv#r|j_f&pcjAx&yJ zW_JplonIoX8x$9Js+O=5wM6<~LudDNFS4>H^-z+|r)4X=2gG$j#2lcs&=5D>(WP_} z44C}NtyJ{n>%A~(koljXO34a>SfV*nunIr%#4^Q^f&Xs3ISlh(miN=u9L){$GsA}k{DnZ z$y>w}(VVm*`bixZ5IS0qRS=lg{Zx%*pUzQxr(1lA#siGVeZrCYk|`VrF1O)0eSjq5 z9k&HYK`0o3mBfY9LFG^8n~rnxEBpYHQblLtUI#Ago<~DVwFOIjp?{$Ns82m-0~ai+ zNf1dbz^mmoMq*!;d?wC;NlJsqQX9m=fMUSeET)OurV8iDUJa;R#mm!5fr3c!BYS;k zhSa^;<_ArbSToml7c$nY>cvm&zK=8)S5t zjo%dk8RHnX!!jV5I%j)hG@^~6e=gx;k32Vm+|S1&FD4zu^f?HINqgqO0@NSSYUK73 z4}Nu*UJ8)JY=H^IoY`2LBmnC!DGXE@%(Lom&vEYrycY59l~8-o#;sI>I((w>Yh+nw zZjb>|QZh1#uM<4C+*t-}-h*EEL%rjd@z918M)Q9ZoVs@bs=!J~Ex<)I`PZDNsFPS% zSS#9Ge-eih9O`zLM4_1fFkqLAE5#ce$Z&yWSfc*+s>C?rwK6Re+}%obgLtNJn>hxV zrwo9Scn(kmqjEg4lcbBvy#g~z1Y)%$mqL^jTfV9&nYJOxI*Jd$acVdEA=^XA4rcc8 z_KYB52rj4(qK7kNv8FR71;Z3MMVZPIC1-O)KW^7ODfsYkzWTnLHX6ZgBd9RNU< z$#NKp`#IT=PT7e+bf%t5n{M1_T07}Uw>gpeZwzx*R*Z6Ne9^b0!XSIFj=h`t1C3`6 ztU#@FnEu$kWSCIxw<=0F@h(ChmKv*maKqJ-S4aUD8Yv63j_^_ zAjIz3Lg`G^`~`S?hBn{9lK{GBGJynXrdTt6L8jEfI5cKykf9%-kjr4vyVP>4cxzqq z-6J>thB&~x-Dy@kSW$gondx*GIGa+C7MVIYA?V!%%NLs2JPWw;Ts2b{0G=2C`BEN|TF*TKTJ?5IRe z{U@uSJU39ij4cONw2A}tKGlcw0X15X2zcFVEe`n3rFiKz<9E>-`@-*kjbC+s%MQoX zvHXM#VYSg`HezUUExKgxAe-yVU?8NIT?zKfN97Mg|Yp1a|65&uFIWLFyl4u1)1(z<{*H>=sY|GG$rm}EuEw{;wBJk|Zf7^?80HMobp1Eg zb;&?Oqham;Xxu!Yn%KGp93mi11VS%@^o~eJs!Atx5CJiCL+_nSQIL*OLk~?sK|+o6 zA_Nc!2q>XTZ;4b<3FYCv?>+tRU*5~CGn33(^PQc2_L(&+Cm+pK0(qysd+oB_B2%6c z$RYL1vli4l`)XpLOw>v4psbSB(&2I$QKl+ho|1)=Iauu$RU@myK|dLtHRdz1%1iSu{Fgd*oossApv3gh7cd{#Dy#ap;a8$!7iS zbcncu+tO~g%=V4I4+MFN0fy6|L@kYOw^zQ$>G6H83Hn2VnCPH{G%**d!71%du?_ha zt8xh%GGvpoaleDh6OEI2Ol*To4Z<`#%Aw0xd#Z%3H^9o8jZ>gZvK*Gd;^N}Gw|4U( z;LB7hMDev+yjz$At(ddc%H)~)X0*#_w5n;lb)xrz``xCqTm$QCLZL0B4)`}3BzA5I zW#zLzQtCapEEoAFUv<`t!7ciy`CazL2)zOp2w4s`%?D`AU7Q03BRM@0q(0IT^To zTAGhRAJ3v3Uxb6BjbpTG(|zIq=c^j+d3Myva#gmq{Z;Z+JGoz#w_48B6$=kCIn8FT zUQ^hRErbvPhpp%#wTalJy~7djp<1dma)0_XQwy01hf8_ewkXZa%^lzYV>9}E)xE^f z_PZV}dlO49kD;Kn_BAM1fLygsA|}pgKd8cHW^uEIiS9D5oy7!jqH4$Cr2ta8#q}nv zuxa(mn9?^jS*824w)A0-GfaTP*;9TuA7Hf_#lv10%ei%@=gKIL7BxjWqGdsnXfNo; zd8>o+!P$C>G9L%B^rjn6*);NX`pQ{T{pg6_s64O1J1}~84tSCedfrW{&L3H+dDNqn z9*eo8|J_L$}1{)w_tg_kAUsu_V7izri2B>tw1yZ0WoyQH7cNwdg=ctYL_E-CdJ z^Edp~oGq2umH%ipPFo(j0U~EBe>F9x+1am`T!Rg%HYMn%@uwmhB-XyCPaW8pG!Uhi zVKAojW|AZt#jes7_tXHgWJ3${<%WB)Ti6hMl33wj1}|)J3lk>Qx@Z?GQjC3@1xPUQ zPtpZmuds4WQ+Y_?`2IFBW-6PJO$Sl0+d~+gLHuIQSD0y)n7M54;!huFIgG&Ubk|XB z04NrsvUz;>JujQ?#qSHDHG>>0xdl;F9r>P#JK34x(_YnJ#h6h6jm0>HsBWM&UaVtp zM1JFI?jPbW5r^XD!D8NwffbF1v17G9>Tux?RmiudCBsI#aML@960DV}BBAJLNh^u| zDf{<@O~lp&ToQ8XwL+vXPBw3M{0ir|1&Ju?b< zz^E8}_{hT_^OlHA{pF7;6<@*IC1cN&1wXm~ZIue;;DT@%F?-`{Yw5UVx*j0e z&x>Lb+1R2@fC_pHom?zra6~)^wU2AOl8Fv6^xvMSNRW~L>IXA*br*~uTPrP&9U&Vp zZZnJJ1<=z9anQ@>@>b^N#HaAS@up!wA!bjgheDO{1^6prtzhH4La39t`&ZFA4Om0p z?9u~x7;Mf9GN`SUG9u6A|K5Bk2MO@YY3#gwC8sF(-I@})&$WfDZxgN6t98M{RG%82 zMtJuA7`}4AOY+oE34VCQ)zDOvu(t$n>R0BwQnps;UAb~1nVy#wLlZ++xGfcBp{ts| zP4rPh;tIR2`R2pa&t^{$?=+r`rXejI!{EJy@^QI!2V?NosQ#TBr!PlL{U38YgCfpa|ow?@b-osI-1 z5@Y>ri>pfyHR)lKl(-og51BF_kYLP|K)H^}VeXvq&=c;9=|MB-^&D-Z_%T3UyC;uc zqpbMJ;ZnCDkg?1u$KDa-U?u5a4QK@MT=r0#I%6?dbkSm*7FAE$l>(yu&YyL**64#T zuUdHR%+|Dxzo-Stl~NV>2FpZt$*Wj1utj_#z;AEZrUV@F;K) zojHeU%uHQ9bz-+Ce=dgg))~ij)#fwh2*vEz8uf>QgFeO$UY!n)<6|iFXH|1bhw;^d z^0$awV^SPgG09U&H1ARkoj*IKb)0t2Bg8G; zroI>}wD8mEi^y^LGwY9)vYCdNIedT;9M-d&5H(ibs4cE<2*Qh=MZTR0y$3hoYS?7+A=cb1Zn;gsT zgB9a}pu6;3NAT~vIDR=zz;-U7K3+DIGh#D8^941(V^XDy#)}u;{gsr~V9&=Zya}9%TV_k8?_uvWlaBOWC8NHD!NbdBb@`IHVSs1HA zuYDv-nVX6$FR=y6p`*G3tm)szlTDwm_S7VvZj-uGoAg~gDI}T@K^13L0M($D-=rc_ z`=a*2FuhlVA77PaBMnJcbBt$AtBDzS=(AjGQq^uiH{^2t(MK-&#Z?C<)(|bMn#BoI zD^)o2$T;n2**WmAEpj{`Q>J^9kAGOT&NB5yzS&8^?S*sa&QSOjgpNS?lTF3J#0Tt$ zObPcg3;puC3v@Rt5FFsBP{H^SIRP&$;Xd`n)Aw3o=v{j+<@iMU`>f5wS_%qmS&L~l zT7Mv5XqPS+O@CmoZu%XPD2MsAlKm=~&uySO_G-SoUKgR(BSG*q>Zq;tB$3^qp&8eF z{QBIzsK*WKymP1U+!ErI_W8b{fwC(vOV`-JZ0TsGF8k@JLlLvc%yL!65^d9WhSGJV zI&L=8Xd60)(&C|$G-5~}5yGxtW|f3Yv(a30$=nN7vkRt#_{H#%zJ9YfouQ+*n8j0N z`r1tHbsh=r<%RSvmF;^N(U-vsZ$PiAP5f5E)m!KwaPW>!H^M2}#*~2?A(?)$ zE=K}UBSaVgdA)@1E}3uKC2*}Q{ieqX>YVN^8DAL&V(9Yplvg!5$Wg*!hCn}36>G;x zQj2_#zNJ&C^}R37g;nw?0farynPHOhC<5I&N965lwwu^wk+bh^%GU>zlv#z7^vTR9 zD9xr2%eez)RaR7p6fTCvwvY1#C)4}mflz2OATybdp{ywNMr9tr%o$Beo20Eu!2V9b zIEAC5^cxXRo0$A<0LuoEuk?gf=l;StDG6vHp z2|duTW$$C#UkI}EcV=Nk?!6QfRwzvgXF&LZE~g;v3=svO%ABr(@`jF_q#QWrsfc5~a#O;+B*QXbF z?Amj{neZB9W{XY~*x(w7-U;x1?9YLe&dp%ZhNg{#lzfRv82gl<7veIWDhkgu&yVw( z$HN~?^k&{c>WLX0cpVHzz()I6iDWW}bqpO<3>|ZCneV`cbP$i3x>|7y#glBD zmo~3hTxyQx8tPk6C9hrasOPwvBxa-G*!HWmmC8FYyj=F1spkhYf{(hFaEG`ZN=Br5 z60=lBf$yNmj08_7)^u70Y$w1b7=1+peV5Bi<-ulEdd}6!K!Ok*#-puT-&XzzMJ|fh zf)S>)o$tvYJVXdip!vp-9f@HlFZQX^uBd{zJxDz{H=Z)TO}Sc+X(&lGNFaZ&<+$bA zux;80-vb^=YL`|mSDcpQ;c1$Y^^hR_Y_a}16~Z^IQrs%IS4^R)jdk!-IK3)PfC_wb z%NG~DW+_@k9kO|RP@c`7{VAs|F#IFadWW&~#lp_T@{V0Emo#05tsZ=~l{THGGajuJ z6V;8NIx`wBeY~4Eo$#!vWmM=Uvxr4Q)R9Q`ske0c0p+-Vg z78UO&-!aa0i?6I}IgH4rJ6tbLIrGm)emr)ELh7eTkhN*^yeq`!RWV7U!P{z2+-$_? zpwyktq!4y;$ca#eGZ4c9#0&x%bxib0AsIx7eV{p%pwfIooHj=wRdzEr!p~srIPANv zYkC@o0dNzevaF2Uvw<7sW`B6~9BT9M>g}18!AD&5pXxl4_w!gD;||Eo!_n;RUTGjR zYIPoB=9;?53E!v^fw}`@>LeCftTS~MKSOBmW*L|fBz+^I@J><#5VKVm$fpXhEJ(hW zS7%>rX9>-DtvL~mGB9gA{XYJ3Wxgf;#XjG#`u4}C z)R~@);4F5PcV&1(F?VHWk@=@7w%?Xci9&YKCv$;5UqoA(8_27N<|DJ5xR;xt1A$@M zG_O)DW7fEwO2+Sn_hz8FQc00}@N5$p#f>y#C^x)}_dxLxw)4wt4qC`E18SFWy!itici)F6DWREPaX6A%(UnW@FX!SZO~htVqjoasDM zZxj=Pef!*!uB%;Vc`}rKqYcvcei+M%cu?zoiPNA`Qnl3M%&v1R$s{X1+=Js~%bb(r zLs;127Pm~Cp_9@4kbSpElFWMkECy1b!!!OR(7)SO%(yP{)3;u+5cU=d;%P?RY=UgP zTDC81H*R&d)Qq1EiCjmF*acAG8!R7`U~jbVl=yk#q~Fx^ z@pWm-Mn<)Z7`vxE?&zI$e2@Ev?Lqa+hZkM7IL|(hIkS`@b*YS<^-hyO>IzaFxI*iB z`erAS<&M4!$c*9$>J{6`($}_wLUFcDnb}o;@4^i6n{VU%yQK31O1N|a~HzI57jNw>e*a@+1 zFhcwu!fx|N=)wKvbHpqBGA3{)(aIn-TQnC<#{1MAUAHQTX?L%lW3&y3SBXpfqEAd_ zprz_Tdh9VTOC)-8N+;qLtEThpAJC_MT1xBOML(LfVF#ASs0diK-vVS=-e+M}_uI$9 zUMe`{Wc9<2$sOsc^TJjy2ZP7NSBU%7Ucx9T*7y&a9<+I0QbMXWljh`vStEA_%_XAU z&WB&;p0UV?!qO9VMD#Gd)-Fd7na|jsPU81TRnyc%8lXUy8x9quGz(5FQ=h^^p0A(R zirih{skC_)BfbRF#rO5kVir;DDy}udSlYGfa}4iTz5p)XW=5gIzY2dYmV3DS3TPET zAZpE;Y4h?^oS$*^~IXv*}irogF$RXHG?h+pKTZ^0J4sUH$4e zU1jK-YP8P{R0?%ihclNw7UcrpSnUX$xeVe_?2L&ud}3Y+$QI5N%@i5> zejm$jdtN#a5_%?~ysWgJhez$VC=jRgvZn{lPJW#{`neU>o+=wP;PfPbWPds*T55WC z-`s{o{Zf>!UPvh6VzS`N7mCv2MWgvmLb3C3cZ52L2D-WaX`v~eG@1Queu3lw0>X_8 zpXtw?+p`g)cN|oxoglK9meHJqG_A2*efaW+>j-cF^BGC0R#>nWb4{|h?T_{y5OpQ^4eu*jp|DJM}eb96x~gVr&5@k(?m97W~!Vn;w5@jbZ+FSdTnUK zve^iuo^*>nA*?UXpC{yTG7aC#{X_nqRrk-1TfGc0A9O9d%-0EECp+6s=f3-8qfp)lokPi>j1`!^MAeS zBYz%!9@%(1*o*y?&U_ra{h@XaHlCiYP&*r6sE7MsRuK{4lE%?Ljq2aKnZUq&tEd5h zIDPpH7vCn~giv(ZR>}uj;r%RzrH>C#V_jLq|l3i{~zdo zbPs<=*O&i7|864wC+@$q)_$+Ku~)yi|I%UmPaXVK)c<@(`W1LY8oN o@45cRY59v=ANgwj7x(u``tRZ;`f1i(R4W-E`lr~r@blAu0cEDPd;kCd literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/DeltaMode_Hybrid.delta b/src/unit_tests/test_samples/smoke/DeltaMode_Hybrid.delta new file mode 100644 index 0000000000000000000000000000000000000000..c9bea7921ac3e38e892ce538ab3c4e36fd2ada58 GIT binary patch literal 2323 zcmWIWW@h1H0D%P!o*vHkJ4~2>Y!K#TkYUKlOwxCBadCAC4dG;9mS)%$HXn#fE4UdL zSza(RFn|dKt^lARB0w!142ytlJ6DJxzG z`FUxX>3S8pIbavh`oA-5IS`|{ICsKnzrzLsuHS!hovwbv6uUsfla+fP!x16NZzhta zbqUtKr>;L{$xcQO7OrAyuW9xz7*Uy9zgkfmn}mv8W;>(iglX5Y1XQYV&`@202)5B-%E)Re4q z)=cVht$#9GNKTL~S9A$uRL_cFCfC(HOM=f778PdBU(S-te_`IMv(xrE`gRI`Qjppq zrt$H^#l`Gj_nq6F9DPbWIn$R#*z?1tB^e?;YkGG@f3@wnQLW&X@gv=``%Lqf30{hv zJ|)x3eExNp?=noE6*^01_5EngA2Iv>ZTVc*f47_|_w|<i0yF{`pxZyZ z)%y>OxZ}V86#@omNoG}Qo^EbpUS?WqaS1$Nr{f6NK*zjh1A#rCxw79sSn_t^s)jpN zZ&ubGND@m*ye3u_@Z$Aurd!LhYNF5gq#ui(w{CH;vG2vIbq^wB90aBBN4?YjQBi+( zzT?rBJBvR1h;C>Po;y`}(_0NS)uKMpIl)}|QR=@vV}7i>E>r4YoZv4g!Z!PVg^fu6 zg0eMD7QY(Lc^6kS*&C{O%+<6^ol%o6t9dN&$Kw1HhP}-bm)(>)Wyq4wt2VJadc)hd zr;pBNF!tQ6Ey-whwwL8fMd3*{bvD^u8X?p4I}Sb!a-5}CG|_ zEA4%u3xZ3oE;#w!zhPluK7pJXa^{oB+Piw<^d%Xpxr^M+r?dvi-5 zQ}Tjo%TEfZZ4;Be`*6-2)!i!pAIqIhc%)@9|MRq{&>)s~%<-@IH>JKg{%B@G{bdD~ z!@~FYdu<=tGJ=v4q%hgt66=m!nD7GqUzA#`U!GoqRGw!&TKli~||e(C7*^4&fD`iJ*!HkBOKS3bF$?0!>6taX|Ax)e9c;Fw0Y9 z^O%5@EVj}WXfCL9#bYjJ;eu?gFR)%lFKU2hf{GffX5z}QC}y%Sz;hk6JpeQklzp)p z35g)gtcz^qG$bR@f)$jJ@tBL5av|nIBK|!q!l@{c4@$=vrn0huba4RTJYaOhgLwcT Cz6!Yj literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/DeltaMode_Hybrid.wgt b/src/unit_tests/test_samples/smoke/DeltaMode_Hybrid.wgt new file mode 100644 index 0000000000000000000000000000000000000000..bd02dbd60e8fa5df509a39d3b3d29db7eb571207 GIT binary patch literal 58676 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⪙t-IfJ4zW{ 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 V7yqYOhwWApKqPh}1TX!3_FvGp!vX*R literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/UpdateMode_Hybrid.wgt b/src/unit_tests/test_samples/smoke/UpdateMode_Hybrid.wgt new file mode 100644 index 0000000000000000000000000000000000000000..86df8bb0e7dd5dbc0c7e3655c9fbb5b2fd5132b4 GIT binary patch literal 58335 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%0AY`%$zWa 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 Zn?|9lf&arF1d!nlZk+F&k2?hb_!poi5YPYs literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/UpdateMode_Hybrid_2.wgt b/src/unit_tests/test_samples/smoke/UpdateMode_Hybrid_2.wgt new file mode 100644 index 0000000000000000000000000000000000000000..f05c192353c6c275f4059a654c1a96a9783d6d51 GIT binary patch literal 58335 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 literal 0 HcmV?d00001 -- 2.7.4 From 7d8a6eb14a8feba22da2ac214c987d1959a37c70 Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Tue, 16 Feb 2016 16:08:13 +0900 Subject: [PATCH 14/16] remove not-used attribute (name of icon, name of image) Requires: https://review.tizen.org/gerrit/#/c/59508/ Change-Id: I884f00fcd00cbce4c1d808c6ecc3f0c217dd34bd Signed-off-by: jongmyeongko --- src/wgt/step/step_generate_xml.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/wgt/step/step_generate_xml.cc b/src/wgt/step/step_generate_xml.cc index b2090be..dd82f5e 100644 --- a/src/wgt/step/step_generate_xml.cc +++ b/src/wgt/step/step_generate_xml.cc @@ -143,8 +143,6 @@ common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml( for (image_x* image : GListRange(app->image)) { xmlTextWriterStartElement(writer, BAD_CAST "image"); - xmlTextWriterWriteAttribute(writer, BAD_CAST "name", - BAD_CAST image->name); if (image->lang && strcmp(DEFAULT_LOCALE, image->lang) != 0) { xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", -- 2.7.4 From d635ea27e46f4d05e2f9369216079aa90ec6c19b Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Wed, 17 Feb 2016 10:35:29 +0100 Subject: [PATCH 15/16] Rework smoke tests Reimplement smoke tests so that they don't use gtest's EXPECT_DEATH. This will fix problems that are sourced in forking test binary. "smoke-test-helper" binary is introduced purely for recovery tests to provide crash test scenario. Verification: - /usr/bin/wgt-backend-ut/smoke-test Change-Id: I76cb751ce13d88528de2da6e20ea3dd848e492a8 --- CMakeLists.txt | 4 +++- packaging/wgt-backend-tests.manifest | 1 + src/unit_tests/CMakeLists.txt | 16 +++++++++---- src/unit_tests/smoke_test.cc | 33 ++++++++++---------------- src/unit_tests/smoke_test_helper.cc | 45 ++++++++++++++++++++++++++++++++++++ 5 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 src/unit_tests/smoke_test_helper.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 10b8412..d520638 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,9 +24,11 @@ SET(CMAKE_CXX_FLAGS_CCOV "-O0 -std=c++11 -g --coverage") # Targets SET(TARGET_LIBNAME_WGT "wgt-installer") SET(TARGET_WGT_BACKEND "wgt-backend") -SET(TARGET_SMOKE_TEST "smoke_test") SET(TARGET_LIBNAME_HYBRID "hybrid-installer") +SET(TARGET_SMOKE_TEST "smoke-test") +SET(TARGET_SMOKE_TEST_HELPER "smoke-test-helper") + ADD_DEFINITIONS("-Wall") ADD_DEFINITIONS("-Wextra") ADD_DEFINITIONS("-fPIE") diff --git a/packaging/wgt-backend-tests.manifest b/packaging/wgt-backend-tests.manifest index 6c0eb4f..9e728be 100644 --- a/packaging/wgt-backend-tests.manifest +++ b/packaging/wgt-backend-tests.manifest @@ -4,5 +4,6 @@ + diff --git a/src/unit_tests/CMakeLists.txt b/src/unit_tests/CMakeLists.txt index f482f8f..e09827f 100644 --- a/src/unit_tests/CMakeLists.txt +++ b/src/unit_tests/CMakeLists.txt @@ -1,15 +1,19 @@ SET(DESTINATION_DIR wgt-backend-ut) -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../) - # Executables ADD_EXECUTABLE(${TARGET_SMOKE_TEST} smoke_test.cc ) +ADD_EXECUTABLE(${TARGET_SMOKE_TEST_HELPER} + smoke_test_helper.cc +) + +TARGET_INCLUDE_DIRECTORIES(${TARGET_SMOKE_TEST} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../) +TARGET_INCLUDE_DIRECTORIES(${TARGET_SMOKE_TEST_HELPER} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../) INSTALL(DIRECTORY test_samples/ DESTINATION ${SHAREDIR}/${DESTINATION_DIR}/test_samples) -APPLY_PKG_CONFIG(smoke_test PUBLIC +APPLY_PKG_CONFIG(${TARGET_SMOKE_TEST} PUBLIC Boost GTEST ) @@ -17,6 +21,8 @@ APPLY_PKG_CONFIG(smoke_test PUBLIC # FindGTest module do not sets all needed libraries in GTEST_LIBRARIES and # GTest main libraries is still missing, so additional linking of # GTEST_MAIN_LIBRARIES is needed. -target_link_libraries(smoke_test PRIVATE ${TARGET_LIBNAME_WGT} ${TARGET_LIBNAME_HYBRID} ${GTEST_MAIN_LIBRARIES}) +target_link_libraries(${TARGET_SMOKE_TEST} PRIVATE ${TARGET_LIBNAME_WGT} ${TARGET_LIBNAME_HYBRID} ${GTEST_MAIN_LIBRARIES}) +target_link_libraries(${TARGET_SMOKE_TEST_HELPER} PRIVATE ${TARGET_LIBNAME_WGT}) -INSTALL(TARGETS smoke_test DESTINATION ${BINDIR}/${DESTINATION_DIR}) +INSTALL(TARGETS ${TARGET_SMOKE_TEST} DESTINATION ${BINDIR}/${DESTINATION_DIR}) +INSTALL(TARGETS ${TARGET_SMOKE_TEST_HELPER} DESTINATION ${BINDIR}/${DESTINATION_DIR}) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index 5749361..551313c 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -46,15 +47,14 @@ const char KUserAppsDirBackup[] = "apps_rw.bck"; enum class RequestResult { NORMAL, - FAIL, - CRASH + FAIL }; class TestPkgmgrInstaller : public ci::PkgmgrInstallerInterface { public: bool CreatePkgMgrInstaller(pkgmgr_installer** installer, ci::InstallationMode* mode) { - *installer = pkgmgr_installer_new(); + *installer = pkgmgr_installer_offline_new(); if (!*installer) return false; *mode = ci::InstallationMode::ONLINE; @@ -71,19 +71,6 @@ enum class PackageType { HYBRID }; -class StepCrash : public ci::Step { - public: - using Step::Step; - - ci::Step::Status process() override { - raise(SIGSEGV); - return Status::OK; - } - ci::Step::Status clean() override { return ci::Step::Status::OK; } - ci::Step::Status undo() override { return ci::Step::Status::OK; } - ci::Step::Status precheck() override { return ci::Step::Status::OK; } -}; - void RemoveAllRecoveryFiles() { bf::path root_path = ci::GetRootAppPath(false); if (!bf::exists(root_path)) @@ -240,8 +227,6 @@ ci::AppInstaller::Result RunInstallerWithPkgrmgr(ci::PkgMgrPtr pkgmgr, case RequestResult::FAIL: installer->AddStep(); break; - case RequestResult::CRASH: - installer->AddStep(); default: break; } @@ -454,7 +439,9 @@ TEST_F(SmokeTest, DeltaMode) { TEST_F(SmokeTest, RecoveryMode_ForInstallation) { bf::path path = kSmokePackagesDirectory / "RecoveryMode_ForInstallation.wgt"; - ASSERT_DEATH(Install(path, PackageType::WGT, RequestResult::CRASH), ".*"); + Subprocess backend_crash("/usr/bin/wgt-backend-ut/smoke-test-helper"); + backend_crash.Run("-i", path.string()); + ASSERT_NE(backend_crash.Wait(), 0); std::string pkgid = "smokeapp09"; std::string appid = "smokeapp09.RecoveryModeForInstallation"; @@ -469,8 +456,12 @@ TEST_F(SmokeTest, RecoveryMode_ForUpdate) { bf::path path_old = kSmokePackagesDirectory / "RecoveryMode_ForUpdate.wgt"; bf::path path_new = kSmokePackagesDirectory / "RecoveryMode_ForUpdate_2.wgt"; RemoveAllRecoveryFiles(); - ASSERT_DEATH(Update(path_old, path_new, PackageType::WGT, - RequestResult::CRASH), ".*"); + Subprocess backend_test("/usr/bin/wgt-backend"); + backend_test.Run("-i", path_old.string()); + ASSERT_EQ(backend_test.Wait(), 0); + Subprocess backend_crash("/usr/bin/wgt-backend-ut/smoke-test-helper"); + backend_crash.Run("-i", path_new.string()); + ASSERT_NE(backend_crash.Wait(), 0); std::string pkgid = "smokeapp10"; std::string appid = "smokeapp10.RecoveryModeForUpdate"; diff --git a/src/unit_tests/smoke_test_helper.cc b/src/unit_tests/smoke_test_helper.cc new file mode 100644 index 0000000..c3988d6 --- /dev/null +++ b/src/unit_tests/smoke_test_helper.cc @@ -0,0 +1,45 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#include +#include + +#include "wgt/wgt_app_query_interface.h" +#include "wgt/wgt_installer.h" + +namespace ci = common_installer; + +namespace { + +class StepCrash : public ci::Step { + public: + using Step::Step; + + ci::Step::Status process() override { + raise(SIGSEGV); + return Status::OK; + } + ci::Step::Status clean() override { return ci::Step::Status::OK; } + ci::Step::Status undo() override { return ci::Step::Status::OK; } + ci::Step::Status precheck() override { return ci::Step::Status::OK; } +}; + +} // namespace + +// this main of test binay in done purely for recovery smoke test. +int main(int argc, char** argv) { + ci::PkgmgrInstaller pkgmgr_installer; + wgt::WgtAppQueryInterface query_interface; + auto pkgmgr = ci::PkgMgrInterface::Create(argc, argv, &pkgmgr_installer, + &query_interface); + if (!pkgmgr) { + LOG(ERROR) << "Options of pkgmgr installer cannot be parsed"; + return EINVAL; + } + + wgt::WgtInstaller installer(pkgmgr); + installer.AddStep(); + return (installer.Run() == ci::AppInstaller::Result::OK) ? 0 : 1; +} + -- 2.7.4 From 8978cfd34fd288d402178cbf79c0bb9434aed135 Mon Sep 17 00:00:00 2001 From: Arkadiusz Szulakiewicz Date: Tue, 16 Feb 2016 10:07:24 +0100 Subject: [PATCH 16/16] Add StepCreatePerUserStorageDirectories to installation step Change-Id: If0a11756e3cafdc7aa8805c675b0e07f571625ff --- src/hybrid/hybrid_installer.cc | 2 ++ src/wgt/wgt_installer.cc | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 534a980..7f875b3 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -95,6 +96,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) ci::PluginsLauncher::ActionType::Install); AddStep(); AddStep(); + AddStep(); break; case ci::RequestType::Update: AddStep(pkgmgr_); diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index d3ca732..4d3d84a 100644 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -92,6 +93,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep( ci::PluginsLauncher::ActionType::Install); + AddStep(); AddStep(); break; } -- 2.7.4