xref: /spdk/test/json_config/common.sh (revision 9b8579e4af16f0826736c09db858e0737f7556c5)
1#  SPDX-License-Identifier: BSD-3-Clause
2#  Copyright (C) 2024 Intel Corporation
3#  All rights reserved.
4#
5
6# $1 - target
7# $2..$n app parameters
8function json_config_test_start_app() {
9	local app=$1
10	shift
11
12	[[ -n "${#app_socket[$app]}" ]] # Check app type
13	[[ -z "${app_pid[$app]}" ]]     # Assert if app is not running
14
15	local app_extra_params=""
16	if [[ $SPDK_TEST_VHOST -eq 1 || $SPDK_TEST_VHOST_INIT -eq 1 ]]; then
17		# If PWD is nfs/sshfs we can't create UNIX sockets there. Always use safe location instead.
18		app_extra_params='-S /var/tmp'
19	fi
20
21	$SPDK_BIN_DIR/spdk_tgt ${app_params[$app]} ${app_extra_params} -r ${app_socket[$app]} "$@" &
22	app_pid["$app"]=$!
23
24	echo "Waiting for $app to run..."
25	waitforlisten ${app_pid[$app]} ${app_socket[$app]}
26	echo ""
27}
28
29# $1 - target / initiator
30function json_config_test_shutdown_app() {
31	local app=$1
32
33	# Check app type && assert app was started
34	[[ -n "${#app_socket[$app]}" ]]
35	[[ -n "${app_pid[$app]}" ]]
36
37	# spdk_kill_instance RPC will trigger ASAN
38	kill -SIGINT ${app_pid[$app]}
39
40	for ((i = 0; i < 30; i++)); do
41		if ! kill -0 ${app_pid[$app]} 2> /dev/null; then
42			app_pid["$app"]=
43			break
44		fi
45		sleep 0.5
46	done
47
48	if [[ -n "${app_pid[$app]}" ]]; then
49		echo "SPDK $app shutdown timeout"
50		return 1
51	fi
52
53	echo "SPDK $app shutdown done"
54}
55
56function tgt_rpc() {
57	$rootdir/scripts/rpc.py -s "${app_socket[target]}" "$@"
58}
59
60on_error_exit() {
61	set -x
62	set +e
63	print_backtrace
64	trap - ERR
65	echo "Error on $1 - $2"
66	exit 1
67}
68