Add backup_type option for smoke test 08/218508/11
authorIlho Kim <ilho159.kim@samsung.com>
Fri, 22 Nov 2019 02:26:03 +0000 (11:26 +0900)
committerilho kim <ilho159.kim@samsung.com>
Wed, 29 Jan 2020 10:03:37 +0000 (10:03 +0000)
Run smoke tests with argumant "--backup-type <move|copy>"
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 <ilho159.kim@samsung.com>
packaging/tpk-backend.spec
src/unit_tests/extensive_smoke_test.cc
src/unit_tests/recovery_test.cc
src/unit_tests/smoke_test.cc

index f837e2cd54809b0c36def24814d52c18a0af2b0f..113e4145c0137e82f56f2c0ea1376ad4fa1c15f8 100644 (file)
@@ -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
index 6522fdd37380ecbe75ffba77c1d33cefaf67708e..07ba42945ae6aaef9d7e98f40df32aac94c2a288 100644 (file)
 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<bf::path> 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<std::string>(), "<move|copy> 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<std::string>() == "move") {
+          backup_type = BackupType::MOVE;
+        } else if (opt_map["backup-type"].as<std::string>() == "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<smoke_test::SmokeEnvironment*>(
         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();
index beea2fd7f3cf55b3ff7d168939401f4a0ffe5411..2cbcefcef4dcd2551352db2c0689cd5434232314 100644 (file)
@@ -29,6 +29,11 @@ enum class ReqType : int {
   MOUNT_UPDATE_REQ,
 };
 
+enum class BackupType : int {
+  MOVE,
+  COPY_AND_REMOVE,
+};
+
 std::map<ReqType, std::string> 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<bf::path> 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<int>(), "option for performing tests repeatedly")
-        ("no-backup", "Do test without backup");
+        ("no-backup", "Do test without backup")
+        ("backup-type", bpo::value<std::string>(), "<move|copy> 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<std::string>() == "move") {
+        backup_type = BackupType::MOVE;
+      } else if (opt_map["backup-type"].as<std::string>() == "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<smoke_test::SmokeEnvironment*>(
         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();
index 32df91854ffd2213a1fb5eb06131b6c3486d7d60..2be0129e094d2d3d041a1734df299a2362bfed38 100644 (file)
@@ -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<bf::path> 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<std::string>(), "<move|copy> 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<std::string>() == "move") {
+          backup_type = BackupType::MOVE;
+        } else if (opt_map["backup-type"].as<std::string>() == "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<smoke_test::SmokeEnvironment*>(
         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);