diff options
author | Tao Bao <tbao@google.com> | 2016-11-04 22:04:12 +0100 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-11-04 22:04:12 +0100 |
commit | 05a801ca8ea87388b537485a4d5dfa276e974aa5 (patch) | |
tree | 20005522fac7e831780e647d0097ec221860b578 | |
parent | Merge "Cleanup the duplicates of logs rotation functions" (diff) | |
parent | Merge "updater: Add a testcase for RenameFn()." (diff) | |
download | android_bootable_recovery-05a801ca8ea87388b537485a4d5dfa276e974aa5.tar android_bootable_recovery-05a801ca8ea87388b537485a4d5dfa276e974aa5.tar.gz android_bootable_recovery-05a801ca8ea87388b537485a4d5dfa276e974aa5.tar.bz2 android_bootable_recovery-05a801ca8ea87388b537485a4d5dfa276e974aa5.tar.lz android_bootable_recovery-05a801ca8ea87388b537485a4d5dfa276e974aa5.tar.xz android_bootable_recovery-05a801ca8ea87388b537485a4d5dfa276e974aa5.tar.zst android_bootable_recovery-05a801ca8ea87388b537485a4d5dfa276e974aa5.zip |
-rw-r--r-- | tests/component/updater_test.cpp | 29 | ||||
-rw-r--r-- | updater/install.cpp | 5 |
2 files changed, 33 insertions, 1 deletions
diff --git a/tests/component/updater_test.cpp b/tests/component/updater_test.cpp index 337769e6b..f922933cd 100644 --- a/tests/component/updater_test.cpp +++ b/tests/component/updater_test.cpp @@ -180,3 +180,32 @@ TEST_F(UpdaterTest, delete) { "\", \"/doesntexist2\")"); expect("1", script3.c_str(), kNoCause); } + +TEST_F(UpdaterTest, rename) { + // rename() expects two arguments. + expect(nullptr, "rename()", kArgsParsingFailure); + expect(nullptr, "rename(\"arg1\")", kArgsParsingFailure); + expect(nullptr, "rename(\"arg1\", \"arg2\", \"arg3\")", kArgsParsingFailure); + + // src_name or dst_name cannot be empty. + expect(nullptr, "rename(\"\", \"arg2\")", kArgsParsingFailure); + expect(nullptr, "rename(\"arg1\", \"\")", kArgsParsingFailure); + + // File doesn't exist (both of src and dst). + expect(nullptr, "rename(\"/doesntexist\", \"/doesntexisteither\")" , kFileRenameFailure); + + // Can't create parent directory. + TemporaryFile temp_file1; + ASSERT_TRUE(android::base::WriteStringToFile("abc", temp_file1.path)); + std::string script1("rename(\"" + std::string(temp_file1.path) + "\", \"/proc/0/file1\")"); + expect(nullptr, script1.c_str(), kFileRenameFailure); + + // Rename. + TemporaryFile temp_file2; + std::string script2("rename(\"" + std::string(temp_file1.path) + "\", \"" + + std::string(temp_file2.path) + "\")"); + expect(temp_file2.path, script2.c_str(), kNoCause); + + // Already renamed. + expect(temp_file2.path, script2.c_str(), kNoCause); +} diff --git a/updater/install.cpp b/updater/install.cpp index 25f6a9106..ed55ea517 100644 --- a/updater/install.cpp +++ b/updater/install.cpp @@ -293,7 +293,7 @@ Value* FormatFn(const char* name, State* state, int argc, Expr* argv[]) { } int64_t size; - if (!android::base::ParseInt(fs_size.c_str(), &size)) { + if (!android::base::ParseInt(fs_size, &size)) { return ErrorAbort(state, kArgsParsingFailure, "%s: failed to parse int in %s\n", name, fs_size.c_str()); } @@ -329,6 +329,9 @@ Value* FormatFn(const char* name, State* state, int argc, Expr* argv[]) { return nullptr; } +// rename(src_name, dst_name) +// Renames src_name to dst_name. It automatically creates the necessary directories for dst_name. +// Example: rename("system/app/Hangouts/Hangouts.apk", "system/priv-app/Hangouts/Hangouts.apk") Value* RenameFn(const char* name, State* state, int argc, Expr* argv[]) { if (argc != 2) { return ErrorAbort(state, kArgsParsingFailure, "%s() expects 2 args, got %d", name, argc); |