Merge "updater: Fix the broken case for apply_patch_check()."
This commit is contained in:
commit
9f2062657d
2 changed files with 50 additions and 1 deletions
|
@ -127,6 +127,55 @@ TEST_F(UpdaterTest, sha1_check) {
|
|||
expect(nullptr, "sha1_check()", kArgsParsingFailure);
|
||||
}
|
||||
|
||||
TEST_F(UpdaterTest, apply_patch_check) {
|
||||
// Zero-argument is not valid.
|
||||
expect(nullptr, "apply_patch_check()", kArgsParsingFailure);
|
||||
|
||||
// File not found.
|
||||
expect("", "apply_patch_check(\"/doesntexist\")", kNoCause);
|
||||
|
||||
std::string src_file = from_testdata_base("old.file");
|
||||
std::string src_content;
|
||||
ASSERT_TRUE(android::base::ReadFileToString(src_file, &src_content));
|
||||
size_t src_size = src_content.size();
|
||||
std::string src_hash = get_sha1(src_content);
|
||||
|
||||
// One-argument with EMMC:file:size:sha1 should pass the check.
|
||||
std::string filename = android::base::Join(
|
||||
std::vector<std::string>{ "EMMC", src_file, std::to_string(src_size), src_hash }, ":");
|
||||
std::string cmd = "apply_patch_check(\"" + filename + "\")";
|
||||
expect("t", cmd.c_str(), kNoCause);
|
||||
|
||||
// EMMC:file:(size-1):sha1:(size+1):sha1 should fail the check.
|
||||
std::string filename_bad = android::base::Join(
|
||||
std::vector<std::string>{ "EMMC", src_file, std::to_string(src_size - 1), src_hash,
|
||||
std::to_string(src_size + 1), src_hash },
|
||||
":");
|
||||
cmd = "apply_patch_check(\"" + filename_bad + "\")";
|
||||
expect("", cmd.c_str(), kNoCause);
|
||||
|
||||
// EMMC:file:(size-1):sha1:size:sha1:(size+1):sha1 should pass the check.
|
||||
filename_bad =
|
||||
android::base::Join(std::vector<std::string>{ "EMMC", src_file, std::to_string(src_size - 1),
|
||||
src_hash, std::to_string(src_size), src_hash,
|
||||
std::to_string(src_size + 1), src_hash },
|
||||
":");
|
||||
cmd = "apply_patch_check(\"" + filename_bad + "\")";
|
||||
expect("t", cmd.c_str(), kNoCause);
|
||||
|
||||
// Multiple arguments.
|
||||
cmd = "apply_patch_check(\"" + filename + "\", \"wrong_sha1\", \"wrong_sha2\")";
|
||||
expect("", cmd.c_str(), kNoCause);
|
||||
|
||||
cmd = "apply_patch_check(\"" + filename + "\", \"wrong_sha1\", \"" + src_hash +
|
||||
"\", \"wrong_sha2\")";
|
||||
expect("t", cmd.c_str(), kNoCause);
|
||||
|
||||
cmd = "apply_patch_check(\"" + filename_bad + "\", \"wrong_sha1\", \"" + src_hash +
|
||||
"\", \"wrong_sha2\")";
|
||||
expect("t", cmd.c_str(), kNoCause);
|
||||
}
|
||||
|
||||
TEST_F(UpdaterTest, file_getprop) {
|
||||
// file_getprop() expects two arguments.
|
||||
expect(nullptr, "file_getprop()", kArgsParsingFailure);
|
||||
|
|
|
@ -691,7 +691,7 @@ Value* ApplyPatchCheckFn(const char* name, State* state, const std::vector<std::
|
|||
const std::string& filename = args[0];
|
||||
|
||||
std::vector<std::string> sha1s;
|
||||
if (!ReadArgs(state, argv, &sha1s, 1, argv.size() - 1)) {
|
||||
if (argv.size() > 1 && !ReadArgs(state, argv, &sha1s, 1, argv.size() - 1)) {
|
||||
return ErrorAbort(state, kArgsParsingFailure, "%s() Failed to parse the argument(s)", name);
|
||||
}
|
||||
int result = applypatch_check(filename.c_str(), sha1s);
|
||||
|
|
Loading…
Reference in a new issue