}, params.pkg_type);
}
+TEST_F(SmokeTest, UninstallationMode_Rollback) {
+ fs::path path = kSmokePackagesDirectory / "UninstallationMode_Rollback.tpk";
+ std::string pkgid = "smoketpk52";
+ std::string appid = "smoketpk52.UninstallationMode_Rollback";
+ std::string exec = "smoketpk52";
+ std::string test_uid_str = std::to_string(params.test_user.uid);
+ ASSERT_EQ(BackendInterface::SubProcessResult::SUCCESS,
+ backend.InstallWithSubprocess(path));
+ FileInfoCollector expected_file_status(pkgid, params);
+ ASSERT_TRUE(expected_file_status.Init());
+ const char* argv[] = {"", "-d", pkgid.c_str(), "-u", test_uid_str.c_str()};
+ backend.TestRollbackAfterEachStep(SIZEOFARRAY(argv), argv, [&]() -> bool {
+ fs::path recovery_file = FindRecoveryFile("/tpk-recovery",
+ params.test_user.uid);
+ if (!recovery_file.empty()) {
+ std::cout << "Find recovery file : " << recovery_file << std::endl;
+ std::unique_ptr<ci::recovery::RecoveryFile> recovery_info =
+ GetRecoverFileInfo(recovery_file);
+ EXTENDED_ASSERT_EQ(backend.RecoverWithSubprocess(recovery_file),
+ BackendInterface::SubProcessResult::SUCCESS);
+ EXTENDED_ASSERT_EQ(BackendInterface::SubProcessResult::SUCCESS,
+ backend.InstallWithSubprocess(path));
+ }
+ FileInfoCollector new_file_status(pkgid, params);
+ EXTENDED_ASSERT_TRUE(new_file_status.Init());
+ EXTENDED_ASSERT_TRUE(expected_file_status.IsEqual(new_file_status));
+ EXTENDED_ASSERT_TRUE(ValidatePackage(pkgid, {appid, exec}, params));
+ return true;
+ });
+}
+
+TEST_F(PreloadSmokeTest, ReadonlyUpdateUninstallMode_Rollback) {
+ fs::path path_old = kSmokePackagesDirectory /
+ "ReadonlyUpdateUninstallMode_Rollback.tpk";
+ fs::path path_new = kSmokePackagesDirectory /
+ "ReadonlyUpdateUninstallMode_Rollback_2.tpk";
+ std::string pkgid = "smoketpk53";
+ std::string appid = "smoketpk53.ReadonlyUpdateUninstallMode_Rollback";
+ std::string exec = "smoketpk53";
+ ASSERT_EQ(backend.InstallPreloadWithSubprocess(path_old),
+ BackendInterface::SubProcessResult::SUCCESS);
+ FileInfoCollector expected_file_status_old(pkgid, params);
+ ASSERT_TRUE(expected_file_status_old.Init());
+ ASSERT_EQ(backend.InstallWithSubprocess(path_new),
+ BackendInterface::SubProcessResult::SUCCESS);
+ params.is_readonly = false;
+ FileInfoCollector expected_file_status_new(pkgid, params);
+ ASSERT_TRUE(expected_file_status_new.Init());
+
+ std::string test_uid_str = std::to_string(params.test_user.uid);
+ const char* argv[] = {"", "-d", pkgid.c_str(), "-u", test_uid_str.c_str()};
+ backend.TestRollbackAfterEachStep(SIZEOFARRAY(argv), argv, [&]() -> bool {
+ fs::path recovery_file = FindRecoveryFile("/tpk-recovery",
+ params.test_user.uid);
+ if (!recovery_file.empty()) {
+ std::cout << "Find recovery file : " << recovery_file << std::endl;
+ std::unique_ptr<ci::recovery::RecoveryFile> recovery_info =
+ GetRecoverFileInfo(recovery_file);
+ EXTENDED_ASSERT_EQ(backend.RecoverWithSubprocess(recovery_file),
+ BackendInterface::SubProcessResult::SUCCESS);
+ params.is_readonly = true;
+ FileInfoCollector new_file_status(pkgid, params);
+ EXTENDED_ASSERT_TRUE(new_file_status.Init());
+ EXTENDED_ASSERT_TRUE(expected_file_status_old.IsEqual(new_file_status));
+ EXTENDED_ASSERT_EQ(backend.InstallWithSubprocess(path_new),
+ BackendInterface::SubProcessResult::SUCCESS);
+ params.is_readonly = false;
+ }
+ FileInfoCollector new_file_status(pkgid, params);
+ EXTENDED_ASSERT_TRUE(new_file_status.Init());
+ EXTENDED_ASSERT_TRUE(expected_file_status_new.IsEqual(new_file_status));
+ EXTENDED_ASSERT_TRUE(ValidatePackage(pkgid, {appid, exec}, params));
+ return true;
+ });
+}
+
} // namespace smoke_test
const char kHelpMessage[] = R"(Allowed options: