diff --git a/llvm_test_script/fuzz/build_fuzz_test.sh b/llvm_test_script/fuzz/build_fuzz_test.sh new file mode 100644 index 0000000000000000000000000000000000000000..05e75233a2ddc8e76b58ed9160f45762983ae62c --- /dev/null +++ b/llvm_test_script/fuzz/build_fuzz_test.sh @@ -0,0 +1,14 @@ +WORK_DIR=$(pwd) +cd ${WORK_DIR}/llvm-project +cmake -G Ninja -B build \ + -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind;compiler-rt" \ + -DLLVM_ENABLE_PROJECTS="clang;llvm" \ + -DLIBFUZZER_ENABLE=YES \ + -DLIBFUZZER_ENABLE_TESTS=ON \ + -DCOMPILER_RT_INCLUDE_TESTS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + ./llvm +ninja -C build +cd ${WORK_DIR}/llvm-project/build +ninja -v check-fuzzer + diff --git a/llvm_test_script/fuzz/run_fuzzer_test.sh b/llvm_test_script/fuzz/run_fuzzer_test.sh new file mode 100644 index 0000000000000000000000000000000000000000..96ec87ee887d3acd88ad5b68625f73d6fbdba4e9 --- /dev/null +++ b/llvm_test_script/fuzz/run_fuzzer_test.sh @@ -0,0 +1,202 @@ +WORK_DIR=${PWD} +mkdir -p ${WORK_DIR}/Openharmony + +git config --global user.name "maxsu" +git config --global user.email "yiibai.com@gmail.com" + +cp -r ${WORK_DIR}/llvm/toolchain/llvm-project ${WORK_DIR}/ + +# update cmake +cmake_dir=${WORK_DIR}/cmake +mkdir -p ${cmake_dir} +cd ${cmake_dir} +wget -t3 -T10 https://mirrors.huaweicloud.com/harmonyos/compiler/cmake/3.16.5/linux/cmake-linux-x86-3.16.5.tar.gz +tar -xvf cmake-linux-x86-3.16.5.tar.gz + +export PATH=${WORK_DIR}/cmake/linux-x86/bin:$PATH +source ~/.bashrc + +TIME=$(date +%Y%m%d%H%M%S) +time_dir=$(date +%Y-%m-%d) +logdir="${WORK_DIR}/llvmts-log/fuzzer/${time_dir}" +mkdir -p ${logdir} + +# start to test +startTime=`date +%Y%m%d-%H:%M:%S` +startTime_s=`date +%s` +echo "test exec start" + +# run fuzzer test +cd ${WORK_DIR} +bash -x build_fuzz_test.sh +wait +bash -x build_fuzz_test.sh 2>&1 | tee ${logdir}/fuzzer_${TIME}.txt & +wait + +echo "test exec done" +endTime=`date +%Y%m%d-%H:%M:%S` +endTime_s=`date +%s` +sumTime=$[ $endTime_s - $startTime_s ] + +echo "$startTime ---> $endTime" "Total:$sumTime seconds" + +# fuzzer test result +fuzzer_result=1 +if [ -e ${logdir}/fuzzer_${TIME}.txt ]; then + fuzzer_result=0 + # down daily report + git clone https://gitee.com/ya-ning-liu/daily_test.git ${WORK_DIR}/daily_test + + echo "generate fuzz report" + # static-libc++ tests for arch x86_64 + cat ${logdir}/fuzzer_${TIME}.txt|sed -n '/static-libc++ tests for arch x86_64/,/default tests for arch i386/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_temp1.txt + grep "Testing Time:" -A 5 ${logdir}/fuzzer_temp1.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_x86_report.txt + static_libc_x86_failed="$(grep -E "Failed+\s+:" ${logdir}/fuzzer_static_libcxx_x86_report.txt | tr -d [A-Z][a-z]' ':)" + if [[ $static_libc_x86_failed -gt 0 ]]; then + # fail report + cat ${logdir}/fuzzer_temp1.txt|sed -n '/Failed Tests (/,/FAILED: compiler-rt/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_static_libcxx_x86_report.txt + fuzzer_result=1 + # compare report + grep "libFuzzer ::" ${logdir}/fuzzer_static_libcxx_x86_report.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_x86_new.txt + grep "libFuzzer ::" ${WORK_DIR}/daily_test/report/fuzz/fuzzer_static_libcxx_x86_report.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_x86_old.txt + grep -vFf ${logdir}/fuzzer_static_libcxx_x86_old.txt ${logdir}/fuzzer_static_libcxx_x86_new.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_x86_diff.txt + if [ -s ${logdir}/fuzzer_static_libcxx_x86_diff.txt ]; then + sed -i '1iNew failed use cases:' ${logdir}/fuzzer_static_libcxx_x86_diff.txt + else + echo No failure cases added >> ${logdir}/fuzzer_static_libcxx_x86_diff.txt + fi + rm -rf ${logdir}/fuzzer_static_libcxx_x86_new.txt ${logdir}/fuzzer_static_libcxx_x86_old.txt + fi + + # default tests for arch i386 + cat ${logdir}/fuzzer_${TIME}.txt|sed -n '/default tests for arch i386/,/unit tests/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_temp2.txt + grep "Testing Time:" -A 5 ${logdir}/fuzzer_temp2.txt 2>&1 | tee ${logdir}/fuzzer_default_test_i386_report.txt + defaul_test_i386_failed="$(grep -E "Failed+\s+:" ${logdir}/fuzzer_default_test_i386_report.txt | tr -d [A-Z][a-z]' ':)" + if [[ $defaul_test_i386_failed -gt 0 ]]; then + # fail report + cat ${logdir}/fuzzer_temp2.txt|sed -n '/Failed Tests (/,/FAILED: compiler-rt/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_default_test_i386_report.txt + fuzzer_result=1 + # compare report + grep "libFuzzer ::" ${logdir}/fuzzer_default_test_i386_report.txt 2>&1 | tee ${logdir}/fuzzer_default_test_i386_new.txt + grep "libFuzzer ::" ${WORK_DIR}/daily_test/report/fuzz/fuzzer_default_test_i386_report.txt 2>&1 | tee ${logdir}/fuzzer_default_test_i386_old.txt + grep -vFf ${logdir}/fuzzer_default_test_i386_old.txt ${logdir}/fuzzer_default_test_i386_new.txt 2>&1 | tee ${logdir}/fuzzer_default_test_i386_diff.txt + if [ -s ${logdir}/fuzzer_default_test_i386_diff.txt ]; then + sed -i '1iNew failed use cases:' ${logdir}/fuzzer_default_test_i386_diff.txt + else + echo No failure cases added >> ${logdir}/fuzzer_default_test_i386_diff.txt + fi + rm -rf ${logdir}/fuzzer_default_test_i386_new.txt ${logdir}/fuzzer_default_test_i386_old.txt + fi + + # unit tests + cat ${logdir}/fuzzer_${TIME}.txt|sed -n '/unit tests/,/default tests for arch x86_64/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_temp3.txt + grep "Testing Time:" -A 5 ${logdir}/fuzzer_temp3.txt 2>&1 | tee ${logdir}/fuzzer_unit_test_report.txt + unit_test_failed="$(grep -E "Failed+\s+:" ${logdir}/fuzzer_unit_test_report.txt | tr -d [A-Z][a-z]' ':)" + if [[ $unit_test_failed -gt 0 ]]; then + # fail report + cat ${logdir}/fuzzer_temp3.txt|sed -n '/Failed Tests (/,/FAILED: compiler-rt/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_unit_test_report.txt + fuzzer_result=1 + # compare report + grep "libFuzzer ::" ${logdir}/fuzzer_unit_test_report.txt 2>&1 | tee ${logdir}/fuzzer_unit_test_new.txt + grep "libFuzzer ::" ${WORK_DIR}/daily_test/report/fuzz/fuzzer_unit_test_report.txt 2>&1 | tee ${logdir}/fuzzer_unit_test_old.txt + grep -vFf ${logdir}/fuzzer_unit_test_old.txt ${logdir}/fuzzer_unit_test_new.txt 2>&1 | tee ${logdir}/fuzzer_unit_test_diff.txt + if [ -s ${logdir}/fuzzer_unit_test_diff.txt ]; then + sed -i '1iNew failed use cases:' ${logdir}/fuzzer_unit_test_diff.txt + else + echo No failure cases added >> ${logdir}/fuzzer_unit_test_diff.txt + fi + rm -rf ${logdir}/fuzzer_unit_test_new.txt ${logdir}/fuzzer_unit_test_old.txt + fi + + # default tests for arch x86_64 + cat ${logdir}/fuzzer_${TIME}.txt|sed -n '/default tests for arch x86_64/,/libc++ tests for arch x86_64/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_temp4.txt + grep "Testing Time:" -A 5 ${logdir}/fuzzer_temp4.txt 2>&1 | tee ${logdir}/fuzzer_default_test_x86_report.txt + default_test_x86_failed="$(grep -E "Failed+\s+:" ${logdir}/fuzzer_default_test_x86_report.txt | tr -d [A-Z][a-z]' ':)" + if [[ $default_test_x86_failed -gt 0 ]]; then + # fail report + cat ${logdir}/fuzzer_temp4.txt|sed -n '/Failed Tests (/,/FAILED: compiler-rt/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_default_test_x86_report.txt + fuzzer_result=1 + # compare report + grep "libFuzzer ::" ${logdir}/fuzzer_default_test_x86_report.txt 2>&1 | tee ${logdir}/fuzzer_default_test_x86_new.txt + grep "libFuzzer ::" ${WORK_DIR}/daily_test/report/fuzz/fuzzer_default_test_x86_report.txt 2>&1 | tee ${logdir}/fuzzer_default_test_x86_old.txt + grep -vFf ${logdir}/fuzzer_default_test_x86_old.txt ${logdir}/fuzzer_default_test_x86_new.txt 2>&1 | tee ${logdir}/fuzzer_default_test_x86_diff.txt + if [ -s ${logdir}/fuzzer_default_test_x86_diff.txt ]; then + sed -i '1iNew failed use cases:' ${logdir}/fuzzer_default_test_x86_diff.txt + else + echo No failure cases added >> ${logdir}/fuzzer_default_test_x86_diff.txt + fi + rm -rf ${logdir}/fuzzer_default_test_x86_new.txt ${logdir}/fuzzer_default_test_x86_old.txt + fi + + # libc++ tests for arch x86_64 + cat ${logdir}/fuzzer_${TIME}.txt|sed -n '/libFuzzer libc++ tests for arch x86_64/,/static-libc++ tests/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_temp5.txt + grep "Testing Time:" -A 5 ${logdir}/fuzzer_temp5.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_x86_report.txt + libcxx_x86_failed="$(grep -E "Failed+\s+:" ${logdir}/fuzzer_libcxx_x86_report.txt | tr -d [A-Z][a-z]' ':)" + if [[ $libcxx_x86_failed -gt 0 ]]; then + # fail report + cat ${logdir}/fuzzer_temp5.txt|sed -n '/Failed Tests (/,/FAILED: compiler-rt/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_libcxx_x86_report.txt + fuzzer_result=1 + # compare report + grep "libFuzzer ::" ${logdir}/fuzzer_libcxx_x86_report.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_x86_new.txt + grep "libFuzzer ::" ${WORK_DIR}/daily_test/report/fuzz/fuzzer_libcxx_x86_report.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_x86_old.txt + grep -vFf ${logdir}/fuzzer_libcxx_x86_old.txt ${logdir}/fuzzer_libcxx_x86_new.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_x86_diff.txt + if [ -s ${logdir}/fuzzer_libcxx_x86_diff.txt ]; then + sed -i '1iNew failed use cases:' ${logdir}/fuzzer_libcxx_x86_diff.txt + else + echo No failure cases added >> ${logdir}/fuzzer_libcxx_x86_diff.txt + fi + rm -rf ${logdir}/fuzzer_libcxx_x86_new.txt ${logdir}/fuzzer_libcxx_x86_old.txt + fi + + # static-libc++ tests for arch i386 + cat ${logdir}/fuzzer_${TIME}.txt|sed -n '/static-libc++ tests for arch i386/,/libc++ tests/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_temp6.txt + grep "Testing Time:" -A 5 ${logdir}/fuzzer_temp6.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_i386_report.txt + static_libcxx_i386_failed="$(grep -E "Failed+\s+:" ${logdir}/fuzzer_static_libcxx_i386_report.txt | tr -d [A-Z][a-z]' ':)" + if [[ $static_libcxx_i386_failed -gt 0 ]]; then + # fail report + cat ${logdir}/fuzzer_temp6.txt|sed -n '/Failed Tests (/,/FAILED: compiler-rt/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_static_libcxx_i386_report.txt + fuzzer_result=1 + + # compare report + grep "libFuzzer ::" ${logdir}/fuzzer_static_libcxx_i386_report.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_i386_new.txt + grep "libFuzzer ::" ${WORK_DIR}/daily_test/report/fuzz/fuzzer_static_libcxx_i386_report.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_i386_old.txt + grep -vFf ${logdir}/fuzzer_static_libcxx_i386_old.txt ${logdir}/fuzzer_static_libcxx_i386_new.txt 2>&1 | tee ${logdir}/fuzzer_static_libcxx_i386_diff.txt + if [ -s ${logdir}/fuzzer_static_libcxx_i386_diff.txt ]; then + sed -i '1iNew failed use cases:' ${logdir}/fuzzer_static_libcxx_i386_diff.txt + else + echo No failure cases added >> ${logdir}/fuzzer_static_libcxx_i386_diff.txt + fi + rm -rf ${logdir}/fuzzer_static_libcxx_i386_new.txt ${logdir}/fuzzer_static_libcxx_i386_old.txt + fi + + # libc++ tests for arch i386 + grep "libFuzzer libc++ tests for arch i386" ${logdir}/fuzzer_${TIME}.txt -A 300 2>&1 | tee ${logdir}/fuzzer_temp7.txt + grep "Testing Time:" -A 5 ${logdir}/fuzzer_temp7.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_i386_report.txt + libcxx_i386_failed="$(grep -E "Failed+\s+:" ${logdir}/fuzzer_libcxx_i386_report.txt | tr -d [A-Z][a-z]' ':)" + if [[ $libcxx_i386_failed -gt 0 ]]; then + # fail report + cat ${logdir}/fuzzer_temp7.txt|sed -n '/Failed Tests (/,/FAILED: compiler-rt/p'|sed '$d' 2>&1 | tee ${logdir}/fuzzer_libcxx_i386_report.txt + fuzzer_result=1 + + # compare report + grep "libFuzzer ::" ${logdir}/fuzzer_libcxx_i386_report.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_i386_new.txt + grep "libFuzzer ::" ${WORK_DIR}/daily_test/report/fuzz/fuzzer_static_libcxx_i386_report.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_i386_old.txt + grep -vFf ${logdir}/fuzzer_libcxx_i386_old.txt ${logdir}/fuzzer_libcxx_i386_new.txt 2>&1 | tee ${logdir}/fuzzer_libcxx_i386_diff.txt + if [ -s ${logdir}/fuzzer_libcxx_i386_diff.txt ]; then + sed -i '1iNew failed use cases:' ${logdir}/fuzzer_libcxx_i386_diff.txt + else + echo No failure cases added >> ${logdir}/fuzzer_libcxx_i386_diff.txt + fi + rm -rf ${logdir}/fuzzer_libcxx_i386_new.txt ${logdir}/fuzzer_libcxx_i386_old.txt + fi + rm -rf ${logdir}/fuzzer_temp*.txt +fi + +if [[ $fuzzer_result -eq 1 ]]; then + echo "fuzz has failed tests" + exit 1 +fi + + + + diff --git a/llvm_test_script/run_docker.sh b/llvm_test_script/run_docker.sh index c687145cf870555aafd1600c7a857921fa8e1020..6fd1471933282807bfd069228a4700f124bd09f9 100755 --- a/llvm_test_script/run_docker.sh +++ b/llvm_test_script/run_docker.sh @@ -112,6 +112,18 @@ endruntime=`date +%s` timebeforetest=$[ $endruntime - $startruntime ] echo "the time before test is : ----->" "$timebeforetest" +# start run fuzz test +if echo ${check_type} | grep fuzz; then + echo "run fuzz test" + cd ${WORK_DIR}/llvmopen-source-transfer-gitee/llvm_test_script/fuzz/ + cp run_fuzzer_test.sh build_fuzz_test.sh ${WORK_DIR}/ + cd ${WORK_DIR} + bash run_fuzzer_test.sh + if [ $check_mode -eq 1 ]; then + exit + fi +fi + if echo ${check_type} | grep checksec; then echo "run checksec test" cd ${WORK_DIR}/llvmopen-source-transfer-gitee/llvm_test_script/checksec