4ae9a4fdfc
See errors like: https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Fuzzer/28117 The logs only shows the tail of the stderr, in order to get information, huge logs need to be downloaded. Instead of using the tail end of the stderr logs, we get the head of the stderr logs, which is the important part for us. R=machenbach@chromium.org CC=yangguo@chromium.org,sergiyb@chromium.org gclient sync cd v8 tools/jsfunfuzz/fuzz-harness.sh out/x64.debug/d8 fuzz-results.tar.bz2 ``` Test: ``` Bug: v8:8493 Change-Id: Ia87c52f5b08ff9748cf2a81c9ca983d22fda650d Reviewed-on: https://chromium-review.googlesource.com/c/1378177 Commit-Queue: Tamer Tas <tmrts@chromium.org> Reviewed-by: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#58302}
100 lines
2.8 KiB
Bash
Executable File
100 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright 2016 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# A simple harness that downloads and runs 'jsfunfuzz' against d8. This
|
|
# takes a long time because it runs many iterations and is intended for
|
|
# automated usage. The package containing 'jsfunfuzz' can be found as an
|
|
# attachment to this bug:
|
|
# https://bugzilla.mozilla.org/show_bug.cgi?id=jsfunfuzz
|
|
|
|
JSFUNFUZZ_URL="https://bugzilla.mozilla.org/attachment.cgi?id=310631"
|
|
JSFUNFUZZ_MD5="d0e497201c5cd7bffbb1cdc1574f4e32"
|
|
|
|
v8_root=$(readlink -f $(dirname $BASH_SOURCE)/../../)
|
|
jsfunfuzz_dir="$v8_root/tools/jsfunfuzz"
|
|
cd "$jsfunfuzz_dir"
|
|
|
|
if [ -n "$1" ]; then
|
|
d8="${v8_root}/$1"
|
|
else
|
|
d8="${v8_root}/d8"
|
|
fi
|
|
|
|
if [ ! -f "$d8" ]; then
|
|
echo "Failed to find d8 binary: $d8"
|
|
exit 1
|
|
fi
|
|
|
|
# Deprecated download method. A prepatched archive is downloaded as a hook
|
|
# if jsfunfuzz=1 is specified as a gyp flag. Requires google.com authentication
|
|
# for google storage.
|
|
if [ "$3" == "--download" ]; then
|
|
|
|
jsfunfuzz_file="$v8_root/tools/jsfunfuzz.zip"
|
|
if [ ! -f "$jsfunfuzz_file" ]; then
|
|
echo "Downloading $jsfunfuzz_file ..."
|
|
wget -q -O "$jsfunfuzz_file" $JSFUNFUZZ_URL || exit 1
|
|
fi
|
|
|
|
jsfunfuzz_sum=$(md5sum "$jsfunfuzz_file" | awk '{ print $1 }')
|
|
if [ $jsfunfuzz_sum != $JSFUNFUZZ_MD5 ]; then
|
|
echo "Failed to verify checksum!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$jsfunfuzz_dir" ]; then
|
|
echo "Unpacking into $jsfunfuzz_dir ..."
|
|
unzip "$jsfunfuzz_file" -d "$jsfunfuzz_dir" || exit 1
|
|
echo "Patching runner ..."
|
|
cat << EOF | patch -s -p0 -d "$v8_root"
|
|
--- tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py~
|
|
+++ tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py
|
|
@@ -118,19 +118,19 @@
|
|
-def showtail(logfilename):
|
|
+def showtail(logfilename, method="tail"):
|
|
- cmd = "tail -n 20 %s" % logfilename
|
|
+ cmd = "%s -n 20 %s" % (method, logfilename)
|
|
print cmd
|
|
print ""
|
|
os.system(cmd)
|
|
print ""
|
|
print ""
|
|
|
|
def many_timed_runs():
|
|
iteration = 0
|
|
- while True:
|
|
+ while iteration < 100:
|
|
iteration += 1
|
|
logfilename = "w%d" % iteration
|
|
one_timed_run(logfilename)
|
|
if not succeeded(logfilename):
|
|
showtail(logfilename)
|
|
- showtail("err-" + logfilename)
|
|
+ showtail("err-" + logfilename, method="head")
|
|
|
|
many_timed_runs()
|
|
EOF
|
|
fi
|
|
|
|
fi
|
|
|
|
flags='--expose-gc --verify-gc'
|
|
python -u "$jsfunfuzz_dir/jsfunfuzz/multi_timed_run.py" 300 \
|
|
"$d8" $flags "$jsfunfuzz_dir/jsfunfuzz/jsfunfuzz.js"
|
|
exit_code=$(cat w* | grep " looking good" -c)
|
|
exit_code=$((100-exit_code))
|
|
|
|
if [ -n "$2" ]; then
|
|
archive="$2"
|
|
else
|
|
archive=fuzz-results-$(date +%Y%m%d%H%M%S).tar.bz2
|
|
fi
|
|
echo "Creating archive $archive"
|
|
tar -cjf $archive err-* w*
|
|
rm -f err-* w*
|
|
|
|
echo "Total failures: $exit_code"
|
|
exit $exit_code
|