Loading tests/component/updater_test.cpp +49 −0 Original line number Diff line number Diff line Loading @@ -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); Loading updater/install.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
tests/component/updater_test.cpp +49 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
updater/install.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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