From b217fd3f8d69401c7cd5a4b1279c37ffb12e7002 Mon Sep 17 00:00:00 2001
From: Piotr Dabrowski
Date: Thu, 1 Sep 2016 15:37:33 +0200
Subject: [PATCH 01/16] Fixes after cppcheck
> [wgt-backend/src/wgt/step/encryption/step_encrypt_resources.cc:175]: (error) Resource leak: input
> [wgt-backend/src/wgt/step/encryption/step_encrypt_resources.cc:251]: (error) Deallocating a deallocated pointer: output
> [wgt-backend/src/wgt/extension_config_parser.cc:27]: (performance) Variable 'config_xml_' is assigned in constructor body. Consider performing initialization in initialization list.
Change-Id: I4386dd4b5923566cc2e7ce941144496200fe139b
---
src/wgt/extension_config_parser.cc | 5 ++---
src/wgt/step/encryption/step_encrypt_resources.cc | 23 +++++++++++++----------
2 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/src/wgt/extension_config_parser.cc b/src/wgt/extension_config_parser.cc
index 4813d72..1a1258d 100755
--- a/src/wgt/extension_config_parser.cc
+++ b/src/wgt/extension_config_parser.cc
@@ -23,9 +23,8 @@ const char kExtensionPath[] = "extension.privilege";
const char kExtensionNameKey[] = "@name";
} // namespace
-ExtensionConfigParser::ExtensionConfigParser(std::string config_xml) {
- config_xml_ = config_xml;
-}
+ExtensionConfigParser::ExtensionConfigParser(std::string config_xml)
+ : config_xml_(config_xml) {}
std::unique_ptr
ExtensionConfigParser::LoadExtensionConfig(const std::string& config_xml) {
diff --git a/src/wgt/step/encryption/step_encrypt_resources.cc b/src/wgt/step/encryption/step_encrypt_resources.cc
index 4d5fb91..b2ec518 100644
--- a/src/wgt/step/encryption/step_encrypt_resources.cc
+++ b/src/wgt/step/encryption/step_encrypt_resources.cc
@@ -52,20 +52,22 @@ std::size_t ReadBytes(unsigned char* buffer, std::size_t count, FILE* stream) {
void WriteBytes(unsigned char* buffer, std::size_t count, FILE* stream) {
// original file is treated as destination!
+ if (count <= 0) {
+ return;
+ }
std::size_t bytes_written = 0;
- std::size_t bytes_to_write = 0;
do {
- bytes_to_write = count - bytes_written;
- bytes_written = std::fwrite(buffer + bytes_written,
- sizeof(unsigned char),
- count - bytes_written,
- stream);
- if ((bytes_written != bytes_to_write)) {
+ std::size_t bytes_appended = std::fwrite(
+ buffer + bytes_written,
+ sizeof(unsigned char),
+ count - bytes_written,
+ stream);
+ if ((bytes_appended == 0)) {
LOG(ERROR) << "Error while writing data";
- free(buffer);
- fclose(stream);
+ return;
}
- } while ((bytes_written != bytes_to_write));
+ bytes_written += bytes_appended;
+ } while ((bytes_written < count));
}
} // namespace
@@ -172,6 +174,7 @@ bool StepEncryptResources::EncryptFile(const bf::path &src) {
FILE *output = OpenFile(encFile.string().c_str(), "wb");
if (output == nullptr) {
LOG(ERROR) << "Cannot create encrypted file: " << encFile.string();
+ fclose(input);
return false;
}
--
2.7.4
From cc95a56f9b634aec29c42b7924cbe4c887b9a53e Mon Sep 17 00:00:00 2001
From: Bartlomiej Kunikowski
Date: Mon, 5 Sep 2016 15:29:49 +0200
Subject: [PATCH 02/16] Fix double parsing of config.xml in delta wgt mode
Fixed by add a optional delay in checking existence of start files
and adding new step
Requires:
- https://review.tizen.org/gerrit/#/c/86941/
Change-Id: I9efed825d5f04af28493a6bd0003e3b9d6efb3c8
---
src/wgt/CMakeLists.txt | 1 +
.../step/configuration/step_check_start_files.cc | 48 ++++++++++++++++++++++
.../step/configuration/step_check_start_files.h | 48 ++++++++++++++++++++++
src/wgt/step/configuration/step_parse.cc | 24 ++++++++---
src/wgt/wgt_backend_data.h | 4 ++
src/wgt/wgt_installer.cc | 6 +--
6 files changed, 121 insertions(+), 10 deletions(-)
create mode 100644 src/wgt/step/configuration/step_check_start_files.cc
create mode 100644 src/wgt/step/configuration/step_check_start_files.h
diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt
index fece9b1..3124963 100755
--- a/src/wgt/CMakeLists.txt
+++ b/src/wgt/CMakeLists.txt
@@ -1,5 +1,6 @@
# Target - sources
SET(SRCS
+ step/configuration/step_check_start_files.cc
step/configuration/step_parse.cc
step/encryption/step_encrypt_resources.cc
step/encryption/step_remove_encryption_data.cc
diff --git a/src/wgt/step/configuration/step_check_start_files.cc b/src/wgt/step/configuration/step_check_start_files.cc
new file mode 100644
index 0000000..7bf3ad6
--- /dev/null
+++ b/src/wgt/step/configuration/step_check_start_files.cc
@@ -0,0 +1,48 @@
+// 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/configuration/step_check_start_files.h"
+
+#include
+
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+
+namespace bf = boost::filesystem;
+
+namespace wgt {
+namespace configuration {
+
+common_installer::Step::Status StepCheckStartFiles::process() {
+ bool flag = false; // it's not important in this step to use this flag
+ std::string error;
+ bool result_check = CheckStartFile(static_cast
+ (context_->backend_data.get())->content.get(),
+ context_->unpacked_dir_path.get(),
+ &flag);
+ if (!result_check) {
+ LOG(ERROR) << "Could not find valid start file";
+ return common_installer::Step::Status::PARSE_ERROR;
+ }
+
+ result_check = CheckServicesStartFiles(static_cast(
+ context_->backend_data.get())->service_list.get(),
+ context_->unpacked_dir_path.get(),
+ &error);
+ if (!result_check) {
+ LOG(ERROR) << error;
+ return common_installer::Step::Status::PARSE_ERROR;
+ }
+
+ return common_installer::Step::Status::OK;
+}
+
+} // namespace configuration
+} // namespace wgt
diff --git a/src/wgt/step/configuration/step_check_start_files.h b/src/wgt/step/configuration/step_check_start_files.h
new file mode 100644
index 0000000..7fc7025
--- /dev/null
+++ b/src/wgt/step/configuration/step_check_start_files.h
@@ -0,0 +1,48 @@
+// 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_CONFIGURATION_STEP_CHECK_START_FILES_H_
+#define WGT_STEP_CONFIGURATION_STEP_CHECK_START_FILES_H_
+
+#include
+
+#include
+#include
+#include
+
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+namespace wgt {
+namespace configuration {
+
+/**
+ * \brief The StepCheckStartFiles class
+ * Checks if valid start files exists.
+ * It needs content info from wgt_backend_data.
+ *
+ * Step is used in delta mode.
+ */
+class StepCheckStartFiles : public common_installer::Step {
+ public:
+ using Step::Step;
+
+ Status process() override;
+ Status clean() override { return Status::OK; }
+ Status undo() override { return Status::OK; }
+ Status precheck() override { return Status::OK; }
+
+ STEP_NAME(CheckStartFiles)
+};
+
+} // namespace configuration
+} // namespace wgt
+
+#endif // WGT_STEP_CONFIGURATION_STEP_CHECK_START_FILES_H_
diff --git a/src/wgt/step/configuration/step_parse.cc b/src/wgt/step/configuration/step_parse.cc
index b2a12bf..0218240 100644
--- a/src/wgt/step/configuration/step_parse.cc
+++ b/src/wgt/step/configuration/step_parse.cc
@@ -650,15 +650,31 @@ common_installer::Step::Status StepParse::process() {
LOG(ERROR) << "[Parse] Parse failed. " << parser_->GetErrorMessage();
return common_installer::Step::Status::PARSE_ERROR;
}
+
+ WgtBackendData* backend_data =
+ static_cast(context_->backend_data.get());
+
if (check_start_file_) {
- if (!parser_->HasValidStartFile()) {
+ if (!parser_->CheckValidStartFile()) {
LOG(ERROR) << parser_->GetErrorMessage();
return common_installer::Step::Status::PARSE_ERROR;
}
- if (!parser_->HasValidServicesStartFiles()) {
+ if (!parser_->CheckValidServicesStartFiles()) {
LOG(ERROR) << parser_->GetErrorMessage();
return common_installer::Step::Status::PARSE_ERROR;
}
+ } else {
+ // making backup of content data and services content data
+ auto content_info =
+ GetManifestDataForKey(
+ wgt::application_widget_keys::kTizenContentKey);
+ auto service_list =
+ GetManifestDataForKey(
+ wgt::application_widget_keys::kTizenServiceKey);
+ if (content_info)
+ backend_data->content.set(*content_info);
+ if (service_list)
+ backend_data->service_list.set(*service_list);
}
manifest_x* manifest =
@@ -711,9 +727,6 @@ common_installer::Step::Status StepParse::process() {
if (perm_info)
permissions = perm_info->GetAPIPermissions();
- WgtBackendData* backend_data =
- static_cast(context_->backend_data.get());
-
auto settings_info =
GetManifestDataForKey(
wgt::application_widget_keys::kTizenSettingKey);
@@ -736,7 +749,6 @@ common_installer::Step::Status StepParse::process() {
LOG(DEBUG) << " ]-";
LOG(DEBUG) << "]-";
- // TODO(t.iwanek): In delta mode this step is running two times
if (context_->manifest_data.get())
pkgmgr_parser_free_manifest_xml(context_->manifest_data.get());
diff --git a/src/wgt/wgt_backend_data.h b/src/wgt/wgt_backend_data.h
index 3d2791d..c36cbad 100644
--- a/src/wgt/wgt_backend_data.h
+++ b/src/wgt/wgt_backend_data.h
@@ -9,6 +9,8 @@
#include
#include
+#include
+#include
#include
#include
@@ -28,6 +30,8 @@ class WgtBackendData : public common_installer::BackendData {
Property settings;
Property appwidgets;
+ Property content;
+ Property service_list;
};
} // namespace wgt
diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc
index b728742..282b3c0 100755
--- a/src/wgt/wgt_installer.cc
+++ b/src/wgt/wgt_installer.cc
@@ -72,6 +72,7 @@
#include
#include
+#include "wgt/step/configuration/step_check_start_files.h"
#include "wgt/step/configuration/step_parse.h"
#include "wgt/step/encryption/step_encrypt_resources.h"
#include "wgt/step/encryption/step_remove_encryption_data.h"
@@ -233,10 +234,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
case ci::RequestType::Delta: {
AddStep(pkgmgr_);
AddStep();
- // TODO(t.iwanek): manifest is parsed twice...
AddStep(
wgt::configuration::StepParse::ConfigLocation::PACKAGE, false);
- // start file may not have changed
AddStep(
ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
ci::configuration::StepParseManifest::StoreLocation::BACKUP);
@@ -244,8 +243,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
AddStep();
AddStep("res/wgt/");
AddStep();
- AddStep(
- wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
+ AddStep();
AddStep();
AddStep();
AddStep();
--
2.7.4
From afcad01824f508a6c1b0e0f16f0eaded38d7157b Mon Sep 17 00:00:00 2001
From: Tomasz Iwanek
Date: Wed, 31 Aug 2016 11:48:58 +0200
Subject: [PATCH 03/16] Set correct exec label for smoke tests
Otherwise, running from shell gives
"System::Privileged" instead of "System".
To verify run:
$ usermod -s /bin/bash app_fw
$ chsmack -a _ /etc/passwd
$ su - app_fw
$ /usr/bin/wgt-backend-ut/smoke-test
Change-Id: If2f314f77daeb28b4af4cd3568cc3ac52bbd1354
---
packaging/wgt-backend-tests.manifest | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packaging/wgt-backend-tests.manifest b/packaging/wgt-backend-tests.manifest
index 0d58b09..17bba51 100644
--- a/packaging/wgt-backend-tests.manifest
+++ b/packaging/wgt-backend-tests.manifest
@@ -3,7 +3,7 @@
-
-
+
+
--
2.7.4
From e261fce0c47da98af1c2812c25e1810ebf3a422a Mon Sep 17 00:00:00 2001
From: Tomasz Iwanek
Date: Thu, 1 Sep 2016 13:54:40 +0200
Subject: [PATCH 04/16] Recovery mode for mount install and mount update
To verify, run new smoke tests.
Recovery mode requires mounting zip package.
Signature files which needs to be read in next
step are within zip package.
Requires:
- https://review.tizen.org/gerrit/86739
Change-Id: I857ecea3dae3836cf9a0af2c11766481a016847e
---
src/hybrid/hybrid_installer.cc | 2 +
src/unit_tests/smoke_test.cc | 57 ++++++++++++++++++++-
.../test_samples/smoke/RecoveryMode_ForDelta.delta | Bin
.../smoke/RecoveryMode_ForInstallation.wgt | Bin 37654 -> 37578 bytes
.../smoke/RecoveryMode_ForMountInstall.wgt | Bin 0 -> 38679 bytes
.../smoke/RecoveryMode_ForMountUpdate.wgt | Bin 0 -> 38923 bytes
.../smoke/RecoveryMode_ForMountUpdate_2.wgt | Bin 0 -> 38921 bytes
src/wgt/wgt_installer.cc | 2 +
8 files changed, 59 insertions(+), 2 deletions(-)
mode change 100755 => 100644 src/unit_tests/test_samples/smoke/RecoveryMode_ForDelta.delta
create mode 100644 src/unit_tests/test_samples/smoke/RecoveryMode_ForMountInstall.wgt
create mode 100644 src/unit_tests/test_samples/smoke/RecoveryMode_ForMountUpdate.wgt
create mode 100644 src/unit_tests/test_samples/smoke/RecoveryMode_ForMountUpdate_2.wgt
diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc
index ea2cc76..6760416 100644
--- a/src/hybrid/hybrid_installer.cc
+++ b/src/hybrid/hybrid_installer.cc
@@ -43,6 +43,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -273,6 +274,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc
index 75c0fa3..49905e2 100644
--- a/src/unit_tests/smoke_test.cc
+++ b/src/unit_tests/smoke_test.cc
@@ -61,17 +61,26 @@ class ScopedTzipInterface {
explicit ScopedTzipInterface(const std::string& pkgid)
: pkg_path_(bf::path(ci::GetRootAppPath(false,
kTestUserId)) / pkgid),
- interface_(ci::GetMountLocation(pkg_path_)) {
+ interface_(ci::GetMountLocation(pkg_path_)),
+ mounted_(true) {
interface_.MountZip(ci::GetZipPackageLocation(pkg_path_, pkgid));
}
+ void Release() {
+ if (mounted_) {
+ interface_.UnmountZip();
+ mounted_ = false;
+ }
+ }
+
~ScopedTzipInterface() {
- interface_.UnmountZip();
+ Release();
}
private:
bf::path pkg_path_;
ci::TzipInterface interface_;
+ bool mounted_;
};
class TestPkgmgrInstaller : public ci::PkgmgrInstallerInterface {
@@ -618,6 +627,50 @@ TEST_F(SmokeTest, RecoveryMode_ForDelta) {
ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "1\n"));
}
+TEST_F(SmokeTest, RecoveryMode_ForMountInstall) {
+ bf::path path = kSmokePackagesDirectory / "RecoveryMode_ForMountInstall.wgt";
+ RemoveAllRecoveryFiles();
+ Subprocess backend_crash("/usr/bin/wgt-backend-ut/smoke-test-helper");
+ backend_crash.Run("-w", path.string(), "-u", kTestUserIdStr.c_str());
+ ASSERT_NE(backend_crash.Wait(), 0);
+
+ std::string pkgid = "smokeapp31";
+ std::string appid = "smokeapp31.RecoveryModeForMountInstall";
+ bf::path recovery_file = FindRecoveryFile();
+ ASSERT_FALSE(recovery_file.empty());
+ ASSERT_EQ(Recover(recovery_file, PackageType::WGT),
+ ci::AppInstaller::Result::OK);
+ CheckPackageNonExistance(pkgid, {appid});
+}
+
+TEST_F(SmokeTest, RecoveryMode_ForMountUpdate) {
+ bf::path path_old =
+ kSmokePackagesDirectory / "RecoveryMode_ForMountUpdate.wgt";
+ bf::path path_new =
+ kSmokePackagesDirectory / "RecoveryMode_ForMountUpdate_2.wgt";
+ std::string pkgid = "smokeapp32";
+ std::string appid = "smokeapp32.RecoveryModeForMountUpdate";
+ RemoveAllRecoveryFiles();
+ ASSERT_EQ(MountInstall(path_old, PackageType::WGT),
+ ci::AppInstaller::Result::OK);
+ Subprocess backend_crash("/usr/bin/wgt-backend-ut/smoke-test-helper");
+ backend_crash.Run("-w", path_new.string(), "-u", kTestUserIdStr.c_str());
+ ASSERT_NE(backend_crash.Wait(), 0);
+
+ // Filesystem may be mounted after crash
+ ScopedTzipInterface poweroff_unmount_interface(pkgid);
+ poweroff_unmount_interface.Release();
+
+ bf::path recovery_file = FindRecoveryFile();
+ ASSERT_FALSE(recovery_file.empty());
+ ASSERT_EQ(Recover(recovery_file, PackageType::WGT),
+ ci::AppInstaller::Result::OK);
+
+ ScopedTzipInterface interface(pkgid);
+ 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, PackageType::WGT), ci::AppInstaller::Result::OK);
diff --git a/src/unit_tests/test_samples/smoke/RecoveryMode_ForDelta.delta b/src/unit_tests/test_samples/smoke/RecoveryMode_ForDelta.delta
old mode 100755
new mode 100644
diff --git a/src/unit_tests/test_samples/smoke/RecoveryMode_ForInstallation.wgt b/src/unit_tests/test_samples/smoke/RecoveryMode_ForInstallation.wgt
index 3990f8069dc8be2e79f5820e13ec6fde4dfeb9ac..7f9dc0e6f11dd8ab6ad1c429283afcce5e43283f 100644
GIT binary patch
delta 453
zcmbQXjOo-;CiVbtW)=|!hRKE##W%`vaXNu{92^WA@)SJ-Sk$XT85tOU0x=hZ3`25$
zURq|lUPW$BXb2|*^KP*d;oE??w1S&~k>v$50|S`Y9LFinC&rXzJWSIPHqN1oH4+BFcFx>PC^3oBi
zWF{#x%1ySLBnMO#3uL!UuAc-9=*d$jDT<$HV_?WC*3V7M%+t#%M(8;^Ns;ML$K(%_
OWVk*6-F9RG$dLe&mT#E=
delta 634
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 |