updater: Add testcase for package_extract_dir().

Test: recovery_component_test passes.
Change-Id: I3af4707bc42c7331ca961be8b967a53de82ea25b
This commit is contained in:
Tao Bao
2016-11-17 22:49:56 -08:00
parent 2e5cf3c0bc
commit 1036d36542
3 changed files with 119 additions and 17 deletions

View File

@@ -454,28 +454,32 @@ Value* SetProgressFn(const char* name, State* state, int argc, Expr* argv[]) {
return StringValue(frac_str);
}
// package_extract_dir(package_path, destination_path)
Value* PackageExtractDirFn(const char* name, State* state,
int argc, Expr* argv[]) {
if (argc != 2) {
return ErrorAbort(state, kArgsParsingFailure, "%s() expects 2 args, got %d", name, argc);
}
// package_extract_dir(package_dir, dest_dir)
// Extracts all files from the package underneath package_dir and writes them to the
// corresponding tree beneath dest_dir. Any existing files are overwritten.
// Example: package_extract_dir("system", "/system")
//
// Note: package_dir needs to be a relative path; dest_dir needs to be an absolute path.
Value* PackageExtractDirFn(const char* name, State* state, int argc, Expr* argv[]) {
if (argc != 2) {
return ErrorAbort(state, kArgsParsingFailure, "%s() expects 2 args, got %d", name, argc);
}
std::vector<std::string> args;
if (!ReadArgs(state, 2, argv, &args)) {
return ErrorAbort(state, kArgsParsingFailure, "%s() Failed to parse the argument(s)", name);
}
const std::string& zip_path = args[0];
const std::string& dest_path = args[1];
std::vector<std::string> args;
if (!ReadArgs(state, 2, argv, &args)) {
return ErrorAbort(state, kArgsParsingFailure, "%s() Failed to parse the argument(s)", name);
}
const std::string& zip_path = args[0];
const std::string& dest_path = args[1];
ZipArchiveHandle za = ((UpdaterInfo*)(state->cookie))->package_zip;
ZipArchiveHandle za = static_cast<UpdaterInfo*>(state->cookie)->package_zip;
// To create a consistent system image, never use the clock for timestamps.
struct utimbuf timestamp = { 1217592000, 1217592000 }; // 8/1/2008 default
// To create a consistent system image, never use the clock for timestamps.
constexpr struct utimbuf timestamp = { 1217592000, 1217592000 }; // 8/1/2008 default
bool success = ExtractPackageRecursive(za, zip_path, dest_path, &timestamp, sehandle);
bool success = ExtractPackageRecursive(za, zip_path, dest_path, &timestamp, sehandle);
return StringValue(success ? "t" : "");
return StringValue(success ? "t" : "");
}
// package_extract_file(package_file[, dest_file])