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