From: Ilho Kim Date: Fri, 22 Nov 2019 02:26:03 +0000 (+0900) Subject: Add backup_type option for smoke test X-Git-Tag: submit/tizen/20200131.050227~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=43564290aaf2d7640429ce948fa9c75b5b8df2a9;p=platform%2Fcore%2Fappfw%2Ftpk-backend.git Add backup_type option for smoke test Run smoke tests with argumant "--backup-type " select backup's type 'move' or 'copy and remove' Requires: - https://review.tizen.org/gerrit/#/c/platform/core/appfw/app-installers/+/217537/ Change-Id: Iebe9c6ef1f7e6c1d03753a78bf049ecc628197ee Signed-off-by: Ilho Kim --- diff --git a/packaging/tpk-backend.spec b/packaging/tpk-backend.spec index f837e2c..113e414 100644 --- a/packaging/tpk-backend.spec +++ b/packaging/tpk-backend.spec @@ -61,9 +61,9 @@ ln -s %{_bindir}/tpk-backend %{buildroot}%{_sysconfdir}/package-manager/backend/ ln -s %{_bindir}/tpk-backend %{buildroot}%{_sysconfdir}/package-manager/backend/rpm %post tests -/usr/sbin/setcap cap_chown,cap_dac_override,cap_fowner=eip %{_bindir}/tpk-backend-ut/smoke-test -/usr/sbin/setcap cap_chown,cap_dac_override,cap_fowner=eip %{_bindir}/tpk-backend-ut/smoke-test-helper -/usr/sbin/setcap cap_chown,cap_dac_override,cap_fowner=eip %{_bindir}/tpk-backend-ut/recovery-test +/usr/sbin/setcap cap_chown,cap_dac_override,cap_fowner,cap_mac_override=eip %{_bindir}/tpk-backend-ut/smoke-test +/usr/sbin/setcap cap_chown,cap_dac_override,cap_fowner,cap_mac_override=eip %{_bindir}/tpk-backend-ut/smoke-test-helper +/usr/sbin/setcap cap_chown,cap_dac_override,cap_fowner,cap_mac_override=eip %{_bindir}/tpk-backend-ut/recovery-test %files %{_sysconfdir}/package-manager/backend/tpk diff --git a/src/unit_tests/extensive_smoke_test.cc b/src/unit_tests/extensive_smoke_test.cc index 6522fdd..07ba429 100644 --- a/src/unit_tests/extensive_smoke_test.cc +++ b/src/unit_tests/extensive_smoke_test.cc @@ -15,12 +15,19 @@ namespace bpo = boost::program_options; namespace ci = common_installer; +enum class BackupType : int { + MOVE, + COPY_AND_REMOVE, +}; + namespace smoke_test { class SmokeEnvironment : public testing::Environment { public: - explicit SmokeEnvironment(ci::RequestMode mode, bool no_backup) : - request_mode_(mode), no_backup_(no_backup) { + explicit SmokeEnvironment(ci::RequestMode mode, bool no_backup, + BackupType backup_type) : + request_mode_(mode), no_backup_(no_backup), + backup_type_(backup_type) { } void SetUp() override { if (request_mode_ == ci::RequestMode::USER) @@ -28,8 +35,13 @@ class SmokeEnvironment : public testing::Environment { if (no_backup_) return; backups_ = SetupBackupDirectories(test_user.uid); - for (auto& path : backups_) - ASSERT_TRUE(BackupPath(path)); + if (backup_type_ == BackupType::MOVE) { + for (auto& path : backups_) + ASSERT_TRUE(BackupPath(path)); + } else if (backup_type_ == BackupType::COPY_AND_REMOVE) { + for (auto& path : backups_) + ASSERT_TRUE(BackupPathCopyAndRemove(path)); + } } void TearDown() override { ASSERT_TRUE(request_mode_ == ci::RequestMode::GLOBAL || @@ -41,8 +53,13 @@ class SmokeEnvironment : public testing::Environment { ASSERT_TRUE(DeleteTestUser()); if (no_backup_) return; - for (auto& path : backups_) - ASSERT_TRUE(RestorePath(path)); + if (backup_type_ == BackupType::MOVE) { + for (auto& path : backups_) + ASSERT_TRUE(RestorePath(path)); + } else if (backup_type_ == BackupType::COPY_AND_REMOVE) { + for (auto& path : backups_) + ASSERT_TRUE(RestorePathCopyAndRemove(path)); + } } User test_user; @@ -50,6 +67,7 @@ class SmokeEnvironment : public testing::Environment { ci::RequestMode request_mode_; std::vector backups_; bool no_backup_; + BackupType backup_type_; }; } // namespace smoke_test @@ -423,6 +441,8 @@ TEST_F(SmokeTest, MountUpdateMode_Rollback) { int main(int argc, char** argv) { try { bool no_backup = false; + BackupType backup_type = BackupType::MOVE; + ci::RequestMode request_mode = smoke_test::ParseRequestMode(argc, argv); if (getuid() != 0 || request_mode != ci::RequestMode::GLOBAL) { std::cout << "Skip tests for preload request" << std::endl; @@ -435,7 +455,9 @@ int main(int argc, char** argv) { try { options.add_options() ("help", "display this help message") - ("no-backup", "Do test without backup"); + ("no-backup", "Do test without backup") + ("backup-type", bpo::value(), " set test's " + "backup type \'move\', \'copy and remove\'"); bpo::store(bpo::parse_command_line(argc, argv, options), opt_map); if (opt_map.count("help")) { std::cerr << options << std::endl; @@ -444,6 +466,16 @@ int main(int argc, char** argv) { if (opt_map.count("no-backup")) no_backup = true; + if (opt_map.count("backup-type")) { + if (opt_map["backup-type"].as() == "move") { + backup_type = BackupType::MOVE; + } else if (opt_map["backup-type"].as() == "copy") { + backup_type = BackupType::COPY_AND_REMOVE; + } else { + std::cerr << options << std::endl; + return -1; + } + } bpo::notify(opt_map); } catch (...) { std::cerr << "Exception occurred: " @@ -454,7 +486,8 @@ int main(int argc, char** argv) { ::env = static_cast( testing::AddGlobalTestEnvironment( - new smoke_test::SmokeEnvironment(request_mode, no_backup))); + new smoke_test::SmokeEnvironment(request_mode, + no_backup, backup_type))); signal(SIGINT, ::signalHandler); signal(SIGSEGV, ::signalHandler); return RUN_ALL_TESTS(); diff --git a/src/unit_tests/recovery_test.cc b/src/unit_tests/recovery_test.cc index beea2fd..2cbcefc 100644 --- a/src/unit_tests/recovery_test.cc +++ b/src/unit_tests/recovery_test.cc @@ -29,6 +29,11 @@ enum class ReqType : int { MOUNT_UPDATE_REQ, }; +enum class BackupType : int { + MOVE, + COPY_AND_REMOVE, +}; + std::map install_req_filter = { { ReqType::INSTALL_REQ, "--gtest_filter=SmokeTest.RecoveryMode_Tpk_Installation" }, @@ -50,19 +55,25 @@ namespace smoke_test { class SmokeEnvironment : public testing::Environment { public: - explicit SmokeEnvironment(ci::RequestMode mode, bool no_backup) : - request_mode_(mode), no_backup_(no_backup) { + explicit SmokeEnvironment(ci::RequestMode mode, bool no_backup, + BackupType backup_type) : + request_mode_(mode), no_backup_(no_backup), + backup_type_(backup_type) { } void SetUp() override { if (request_mode_ == ci::RequestMode::USER) ASSERT_TRUE(AddTestUser(&test_user)); - if (no_backup_) return; backups_ = SetupBackupDirectories(test_user.uid); - for (auto& path : backups_) - ASSERT_TRUE(BackupPath(path)); + if (backup_type_ == BackupType::MOVE) { + for (auto& path : backups_) + ASSERT_TRUE(BackupPath(path)); + } else if (backup_type_ == BackupType::COPY_AND_REMOVE) { + for (auto& path : backups_) + ASSERT_TRUE(BackupPathCopyAndRemove(path)); + } } void TearDown() override { @@ -83,8 +94,13 @@ class SmokeEnvironment : public testing::Environment { ASSERT_TRUE(DeleteTestUser()); if (no_backup_) return; - for (auto& path : backups_) - ASSERT_TRUE(RestorePath(path)); + if (backup_type_ == BackupType::MOVE) { + for (auto& path : backups_) + ASSERT_TRUE(RestorePath(path)); + } else if (backup_type_ == BackupType::COPY_AND_REMOVE) { + for (auto& path : backups_) + ASSERT_TRUE(RestorePathCopyAndRemove(path)); + } } User test_user; @@ -93,6 +109,7 @@ class SmokeEnvironment : public testing::Environment { ci::RequestMode request_mode_; std::vector backups_; bool no_backup_; + BackupType backup_type_; }; } // namespace smoke_test @@ -309,6 +326,7 @@ int main(int argc, char** argv) { int repeat_count = 10; ReqType req_type = ReqType::UNKNOWN_REQ; bool repeat = false; + BackupType backup_type = BackupType::MOVE; bpo::options_description options("Allowed options"); bpo::variables_map opt_map; @@ -335,7 +353,9 @@ int main(int argc, char** argv) { "use with repeat option. " "as it repeat the interval is added to delay") ("repeat", bpo::value(), "option for performing tests repeatedly") - ("no-backup", "Do test without backup"); + ("no-backup", "Do test without backup") + ("backup-type", bpo::value(), " set test's " + "backup type \'move\', \'copy and remove\'"); bpo::store(bpo::parse_command_line(argc, argv, options), opt_map); if (opt_map.count("help")) { std::cerr << options << std::endl; @@ -366,6 +386,16 @@ int main(int argc, char** argv) { if (opt_map.count("no-backup")) no_backup = true; + if (opt_map.count("backup-type")) { + if (opt_map["backup-type"].as() == "move") { + backup_type = BackupType::MOVE; + } else if (opt_map["backup-type"].as() == "copy") { + backup_type = BackupType::COPY_AND_REMOVE; + } else { + std::cerr << options << std::endl; + return -1; + } + } bpo::notify(opt_map); } catch (...) { std::cerr << "Exception occurred: " @@ -401,7 +431,7 @@ int main(int argc, char** argv) { ::env = static_cast( testing::AddGlobalTestEnvironment( new smoke_test::SmokeEnvironment(ci::RequestMode::GLOBAL, - no_backup))); + no_backup, backup_type))); signal(SIGINT, ::signalHandler); signal(SIGSEGV, ::signalHandler); return RUN_ALL_TESTS(); diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index 32df918..2be0129 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -21,12 +21,19 @@ namespace bs = boost::system; namespace ci = common_installer; namespace bpo = boost::program_options; +enum class BackupType : int { + MOVE, + COPY_AND_REMOVE, +}; + namespace smoke_test { class SmokeEnvironment : public testing::Environment { public: - explicit SmokeEnvironment(ci::RequestMode mode, bool no_backup) : - request_mode_(mode), no_backup_(no_backup) { + explicit SmokeEnvironment(ci::RequestMode mode, bool no_backup, + BackupType backup_type) : + request_mode_(mode), no_backup_(no_backup), + backup_type_(backup_type) { } void SetUp() override { if (request_mode_ == ci::RequestMode::USER) @@ -34,8 +41,13 @@ class SmokeEnvironment : public testing::Environment { if (no_backup_) return; backups_ = SetupBackupDirectories(test_user.uid); - for (auto& path : backups_) - ASSERT_TRUE(BackupPath(path)); + if (backup_type_ == BackupType::MOVE) { + for (auto& path : backups_) + ASSERT_TRUE(BackupPath(path)); + } else if (backup_type_ == BackupType::COPY_AND_REMOVE) { + for (auto& path : backups_) + ASSERT_TRUE(BackupPathCopyAndRemove(path)); + } } void TearDown() override { ASSERT_TRUE(request_mode_ == ci::RequestMode::GLOBAL || @@ -47,8 +59,13 @@ class SmokeEnvironment : public testing::Environment { ASSERT_TRUE(DeleteTestUser()); if (no_backup_) return; - for (auto& path : backups_) - ASSERT_TRUE(RestorePath(path)); + if (backup_type_ == BackupType::MOVE) { + for (auto& path : backups_) + ASSERT_TRUE(RestorePath(path)); + } else if (backup_type_ == BackupType::COPY_AND_REMOVE) { + for (auto& path : backups_) + ASSERT_TRUE(RestorePathCopyAndRemove(path)); + } } User test_user; @@ -56,6 +73,7 @@ class SmokeEnvironment : public testing::Environment { ci::RequestMode request_mode_; std::vector backups_; bool no_backup_; + BackupType backup_type_; }; } // namespace smoke_test @@ -827,6 +845,8 @@ TEST_F(SmokeTest, RecoveryMode_NonSharedDataUpdate) { int main(int argc, char** argv) { try { bool no_backup = false; + BackupType backup_type = BackupType::MOVE; + ci::RequestMode request_mode = st::ParseRequestMode(argc, argv); if (getuid() != 0 || request_mode != ci::RequestMode::GLOBAL) { std::cout << "Skip tests for preload request" << std::endl; @@ -839,7 +859,9 @@ int main(int argc, char** argv) { try { options.add_options() ("help", "display this help message") - ("no-backup", "Do test without backup"); + ("no-backup", "Do test without backup") + ("backup-type", bpo::value(), " set test's " + "backup type \'move\', \'copy and remove\'"); bpo::store(bpo::parse_command_line(argc, argv, options), opt_map); if (opt_map.count("help")) { std::cerr << options << std::endl; @@ -848,6 +870,16 @@ int main(int argc, char** argv) { if (opt_map.count("no-backup")) no_backup = true; + if (opt_map.count("backup-type")) { + if (opt_map["backup-type"].as() == "move") { + backup_type = BackupType::MOVE; + } else if (opt_map["backup-type"].as() == "copy") { + backup_type = BackupType::COPY_AND_REMOVE; + } else { + std::cerr << options << std::endl; + return -1; + } + } bpo::notify(opt_map); } catch (...) { std::cerr << "Exception occurred: " @@ -858,7 +890,8 @@ int main(int argc, char** argv) { ::env = static_cast( testing::AddGlobalTestEnvironment( - new smoke_test::SmokeEnvironment(request_mode, no_backup))); + new smoke_test::SmokeEnvironment(request_mode, + no_backup, backup_type))); signal(SIGINT, ::signalHandler); signal(SIGSEGV, ::signalHandler);