Spdk/test/fuzz/llvm/vfio/run.sh

76 lines
2.1 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (C) 2022 Intel Corporation
# All rights reserved.
#
if [[ $SPDK_TEST_FUZZER_SHORT -eq 0 ]]; then
TIME=60000
else
TIME=1
fi
for i in "$@"; do
case "$i" in
--time=*)
TIME="${i#*=}"
;;
esac
done
VFIOUSER_DIR=/tmp/vfio-user/domain/1
VFIOUSER_IO_DIR=/tmp/vfio-user/domain/2
mkdir -p $VFIOUSER_DIR
mkdir -p $VFIOUSER_IO_DIR
function start_llvm_fuzz() {
local fuzzer_type=$1
local corpus_dir
corpus_dir=/tmp/llvm_fuzz$fuzzer_type
mkdir -p $corpus_dir
$rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz -m 0x1 -i 0 -F $VFIOUSER_DIR -c $testdir/fuzz_vfio_json.conf -t $TIME -D $corpus_dir -Y $VFIOUSER_IO_DIR -Z $fuzzer_type
}
function run_fuzz() {
local startday
local today
local interval=0
local weekloop
# Get the date number, format is like '22078'
# The purpose is when Jenkins schedule one fuzz in Saturday
# We can decide which one fuzz will be run , there are lots of fuzz, but only run one of them in Saturday each time
# and make sure all fuzz will be tested, so use this function. Such run fuzz 0 in 03/26, and run fuzz 1 in 04/02, run fuzz 2 in 04/09 ....
startday=$(date -d '2022-03-19' '+%y%j')
today=$(date '+%y%j')
interval=$(((today - startday) / 7))
weekloop=$((interval / fuzz_num))
if [[ $weekloop -lt 1 ]]; then # The first loop of fuzz
fuzzer_type=$interval
else
fuzzer_type=$((interval % fuzz_num))
fi
start_llvm_fuzz $fuzzer_type
}
testdir=$(readlink -f $(dirname $0))
rootdir=$(readlink -f $testdir/../../../../)
source $rootdir/test/common/autotest_common.sh
fuzzfile=$rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz.c
fuzz_num=$(($(grep -c "fn =" $fuzzfile) - 1))
[[ $fuzz_num -ne 0 ]]
trap 'process_shm --id 0; rm -rf /tmp/llvm_fuzz* $VFIOUSER_DIR $VFIOUSER_IO_DIR; exit 1' SIGINT SIGTERM EXIT
if [[ $SPDK_TEST_FUZZER_SHORT -eq 1 ]]; then
for ((i = 0; i < fuzz_num; i++)); do
start_llvm_fuzz $i
done
elif [[ $SPDK_TEST_FUZZER -eq 1 ]]; then
run_fuzz
else
start_llvm_fuzz $1
fi
rm -rf /tmp/llvm_fuzz* $VFIOUSER_DIR $VFIOUSER_IO_DIR
trap - SIGINT SIGTERM EXIT