xref: /spdk/test/rpc/rpc.sh (revision 1078198e78653b2f39414c1566740018d76ee73d)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (C) 2019 Intel Corporation
4#  All rights reserved.
5#
6testdir=$(readlink -f $(dirname $0))
7rootdir=$(readlink -f $testdir/../..)
8source $rootdir/test/common/autotest_common.sh
9
10# simply check if rpc commands have any effect on spdk
11function rpc_integrity() {
12	bdevs=$($rpc bdev_get_bdevs)
13	[ "$(jq length <<< "$bdevs")" == "0" ]
14
15	malloc=$($rpc bdev_malloc_create 8 512)
16	bdevs=$($rpc bdev_get_bdevs)
17	[ "$(jq length <<< "$bdevs")" == "1" ]
18
19	$rpc bdev_passthru_create -b "$malloc" -p Passthru0
20	bdevs=$($rpc bdev_get_bdevs)
21	[ "$(jq length <<< "$bdevs")" == "2" ]
22
23	$rpc bdev_passthru_delete Passthru0
24	$rpc bdev_malloc_delete $malloc
25	bdevs=$($rpc bdev_get_bdevs)
26	[ "$(jq length <<< "$bdevs")" == "0" ]
27}
28
29function rpc_plugins() {
30	malloc=$($rpc --plugin rpc_plugin create_malloc)
31	bdevs=$($rpc bdev_get_bdevs)
32	[ "$(jq length <<< "$bdevs")" == "1" ]
33
34	$rpc --plugin rpc_plugin delete_malloc $malloc
35	bdevs=$($rpc bdev_get_bdevs)
36	[ "$(jq length <<< "$bdevs")" == "0" ]
37}
38
39function rpc_trace_cmd_test() {
40	local info
41
42	info=$($rpc trace_get_info)
43	[ "$(jq length <<< "$info")" -gt 2 ]
44	[ "$(jq 'has("tpoint_group_mask")' <<< "$info")" = "true" ]
45	[ "$(jq 'has("tpoint_shm_path")' <<< "$info")" = "true" ]
46	[ "$(jq 'has("bdev")' <<< "$info")" = "true" ]
47	[ "$(jq -r .bdev.tpoint_mask <<< "$info")" != "0x0" ]
48}
49
50function go_rpc() {
51	bdevs=$($rootdir/build/examples/hello_gorpc)
52	[ "$(jq length <<< "$bdevs")" == "0" ]
53
54	malloc=$($rpc bdev_malloc_create 8 512)
55
56	bdevs=$($rootdir/build/examples/hello_gorpc)
57	[ "$(jq length <<< "$bdevs")" == "1" ]
58
59	$rpc bdev_malloc_delete $malloc
60	bdevs=$($rootdir/build/examples/hello_gorpc)
61	[ "$(jq length <<< "$bdevs")" == "0" ]
62}
63
64$SPDK_BIN_DIR/spdk_tgt -e bdev &
65spdk_pid=$!
66trap 'killprocess $spdk_pid; exit 1' SIGINT SIGTERM EXIT
67waitforlisten $spdk_pid
68
69export PYTHONPATH=$PYTHONPATH:$testdir
70
71# basic integrity test
72rpc=rpc_cmd
73run_test "rpc_integrity" rpc_integrity
74run_test "rpc_plugins" rpc_plugins
75run_test "rpc_trace_cmd_test" rpc_trace_cmd_test
76if [[ $SPDK_JSONRPC_GO_CLIENT -eq 1 ]]; then
77	run_test "go_rpc" go_rpc
78fi
79# same integrity test, but with rpc_cmd() instead
80rpc="rpc_cmd"
81run_test "rpc_daemon_integrity" rpc_integrity
82
83trap - SIGINT SIGTERM EXIT
84killprocess $spdk_pid
85