xref: /spdk/test/fuzz/autofuzz.sh (revision e4cb15c1facc29a2715a5a094d8bb8d59b2ac451)
1ae679483SSeth Howell#!/usr/bin/env bash
2eb53c232Spaul luse#  SPDX-License-Identifier: BSD-3-Clause
3eb53c232Spaul luse#  Copyright (C) 2019 Intel Corporation
4eb53c232Spaul luse#  All rights reserved.
5eb53c232Spaul luse#
6ae679483SSeth Howelltestdir=$(readlink -f $(dirname $0))
7ae679483SSeth Howellrootdir=$(readlink -f $testdir/../..)
8ae679483SSeth Howell
9ae679483SSeth Howellsource "$rootdir/test/common/autotest_common.sh"
10ae679483SSeth Howell
11e394fb3bSSeth HowellTEST_TIMEOUT=1200
12e394fb3bSSeth Howell
13*e4cb15c1SKamil Godzwonfunction prepare_config() {
14*e4cb15c1SKamil Godzwon	local allowed_transports
15*e4cb15c1SKamil Godzwon	local test_module=$1
16*e4cb15c1SKamil Godzwon
17*e4cb15c1SKamil Godzwon	config_params=("--enable-asan" "--enable-ubsan" "--enable-debug")
18*e4cb15c1SKamil Godzwon
19*e4cb15c1SKamil Godzwon	case "$test_module" in
20*e4cb15c1SKamil Godzwon		nvmf)
21*e4cb15c1SKamil Godzwon			allowed_transports=("rdma" "tcp")
22*e4cb15c1SKamil Godzwon			;;
23*e4cb15c1SKamil Godzwon		vhost)
24*e4cb15c1SKamil Godzwon			allowed_transports=("scsi" "blk" "all")
25*e4cb15c1SKamil Godzwon			config_params+=("--with-vhost")
26*e4cb15c1SKamil Godzwon			config_params+=("--with-virtio")
27*e4cb15c1SKamil Godzwon			;;
28*e4cb15c1SKamil Godzwon		iscsi)
29*e4cb15c1SKamil Godzwon			allowed_transports=("tcp")
30*e4cb15c1SKamil Godzwon			config_params+=("--with-iscsi-initiator")
31*e4cb15c1SKamil Godzwon			;;
32*e4cb15c1SKamil Godzwon		*)
33*e4cb15c1SKamil Godzwon			echo "Invalid module specified. Please specify either nvmf, vhost or iscsi." >&2
34*e4cb15c1SKamil Godzwon			return 1
35*e4cb15c1SKamil Godzwon			;;
36*e4cb15c1SKamil Godzwon	esac
37*e4cb15c1SKamil Godzwon
38*e4cb15c1SKamil Godzwon	if ! grep -q "$TEST_TRANSPORT" <(printf '%s\n' "${allowed_transports[@]}"); then
39*e4cb15c1SKamil Godzwon		echo "Invalid transport. Please supply one of the following for module: $test_module." >&2
40*e4cb15c1SKamil Godzwon		echo "${allowed_transports[@]}" >&2
41*e4cb15c1SKamil Godzwon		return 1
42*e4cb15c1SKamil Godzwon	fi
43*e4cb15c1SKamil Godzwon
44*e4cb15c1SKamil Godzwon	if [[ "$TEST_TRANSPORT" == "rdma" ]]; then
45*e4cb15c1SKamil Godzwon		config_params+=("--with-rdma")
46*e4cb15c1SKamil Godzwon	fi
47*e4cb15c1SKamil Godzwon
48*e4cb15c1SKamil Godzwon	printf '%s\n' "${config_params[@]}"
49*e4cb15c1SKamil Godzwon}
50*e4cb15c1SKamil Godzwon
51*e4cb15c1SKamil Godzwonfunction run_fuzzer() {
52*e4cb15c1SKamil Godzwon	local test_module=$1
53*e4cb15c1SKamil Godzwon	# supply --iso to each test module so that it can run setup.sh.
54*e4cb15c1SKamil Godzwon	"$testdir/autofuzz_$test_module.sh" --iso "--transport=$TEST_TRANSPORT" "--timeout=$TEST_TIMEOUT"
55*e4cb15c1SKamil Godzwon}
56ae679483SSeth Howell
57e394fb3bSSeth Howell# These arguments are used in addition to the test arguments in autotest_common.sh
58ae679483SSeth Howellfor i in "$@"; do
59ae679483SSeth Howell	case "$i" in
60ae679483SSeth Howell		--module=*)
61ae679483SSeth Howell			TEST_MODULE="${i#*=}"
62ae679483SSeth Howell			;;
63e394fb3bSSeth Howell		--timeout=*)
64e394fb3bSSeth Howell			TEST_TIMEOUT="${i#*=}"
65e394fb3bSSeth Howell			;;
66ae679483SSeth Howell	esac
67ae679483SSeth Howelldone
68ae679483SSeth Howell
69ae679483SSeth Howelltiming_enter autofuzz
70ae679483SSeth Howell
71*e4cb15c1SKamil Godzwonconfig_params=($(prepare_config "$TEST_MODULE"))
72ae679483SSeth Howell
73ae679483SSeth Howelltiming_enter make
74*e4cb15c1SKamil Godzwoncd "$rootdir"
75*e4cb15c1SKamil Godzwon./configure "${config_params[@]}"
76ae679483SSeth Howell$MAKE $MAKEFLAGS
77ae679483SSeth Howelltiming_exit make
78ae679483SSeth Howell
79ae679483SSeth Howelltiming_enter fuzz_module
80*e4cb15c1SKamil Godzwonrun_fuzzer "$TEST_MODULE"
81ae679483SSeth Howelltiming_exit fuzz_module
82*e4cb15c1SKamil Godzwon
83ae679483SSeth Howelltiming_exit autofuzz
84