From b2fd5b25b2176c41e37bb354ba25541a956c58c9 Mon Sep 17 00:00:00 2001 From: Pawel Niedzwiecki Date: Fri, 25 May 2018 18:41:17 +0200 Subject: [PATCH] json/rpc: Tests for nvmf subsystem Change-Id: I70044bfc01c77a367cf4634d245a58546273f40b Signed-off-by: Pawel Niedzwiecki Reviewed-on: https://review.gerrithub.io/412477 Tested-by: SPDK Automated Test System Reviewed-by: Pawel Wodkowski Reviewed-by: Pawel Kaminski Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Ben Walker --- autotest.sh | 1 + test/json_config/clear_config.py | 13 ++++++++++- test/json_config/common.sh | 28 +++++++++++++++++++--- test/nvmf/nvmfjson/json_config.sh | 39 +++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 4 deletions(-) create mode 100755 test/nvmf/nvmfjson/json_config.sh diff --git a/autotest.sh b/autotest.sh index 28ce5a527..bff51b443 100755 --- a/autotest.sh +++ b/autotest.sh @@ -133,6 +133,7 @@ fi if [ $SPDK_TEST_NVMF -eq 1 ]; then run_test ./test/nvmf/nvmf.sh + run_test ./test/nvmf/nvmfjson/json_config.sh fi if [ $SPDK_TEST_VHOST -eq 1 ]; then diff --git a/test/json_config/clear_config.py b/test/json_config/clear_config.py index d460199cd..a303e2b1e 100755 --- a/test/json_config/clear_config.py +++ b/test/json_config/clear_config.py @@ -85,8 +85,19 @@ def clear_bdev_subsystem(args, bdev_config): args.client.call(destroy_method, {bdev_name_key: bdev_name}) +def get_nvmf_destroy_method(nvmf): + destroy_method_map = {'construct_nvmf_subsystem': "delete_nvmf_subsystem", + 'set_nvmf_target_config': None, + 'set_nvmf_target_options': None + } + return destroy_method_map[nvmf['method']] + + def clear_nvmf_subsystem(args, nvmf_config): - pass + for nvmf in nvmf_config: + destroy_method = get_nvmf_destroy_method(nvmf) + if destroy_method: + args.client.call(destroy_method, {'nqn': nvmf['params']['nqn']}) def clear_scsi_subsystem(args, scsi_config): diff --git a/test/json_config/common.sh b/test/json_config/common.sh index 43b3edc3c..55ec252eb 100644 --- a/test/json_config/common.sh +++ b/test/json_config/common.sh @@ -1,6 +1,7 @@ JSON_DIR=$(readlink -f $(dirname ${BASH_SOURCE[0]})) SPDK_BUILD_DIR=$JSON_DIR/../../ source $JSON_DIR/../common/autotest_common.sh +source $JSON_DIR/../nvmf/common.sh spdk_rpc_py="python $SPDK_BUILD_DIR/scripts/rpc.py -s /var/tmp/spdk.sock" spdk_clear_config_py="$JSON_DIR/clear_config.py -s /var/tmp/spdk.sock" @@ -96,9 +97,9 @@ function test_json_config() { } function remove_config_files_after_test_json_config() { - rm $last_bdevs $base_bdevs - rm $last_json_config $base_json_config - rm $tmp_config $full_config $null_json_config + rm -f $last_bdevs $base_bdevs + rm -f $last_json_config $base_json_config + rm -f $tmp_config $full_config $null_json_config } function create_pmem_bdev_subsytem_config() { @@ -139,6 +140,27 @@ function create_bdev_subsystem_config() { $rpc_py clone_lvol_bdev lvs_test/snapshot0 clone0 } +function create_nvmf_subsystem_config() { + rdma_device_init + RDMA_IP_LIST=$(get_available_rdma_ips) + NVMF_FIRST_TARGET_IP=$(echo "$RDMA_IP_LIST" | head -n 1) + if [ -z $NVMF_FIRST_TARGET_IP ]; then + echo "Error: no NIC for nvmf test" + return 1 + fi + + bdevs="$($rpc_py construct_malloc_bdev 64 512) " + bdevs+="$($rpc_py construct_malloc_bdev 64 512)" + $rpc_py construct_nvmf_subsystem nqn.2016-06.io.spdk:cnode1 '' '' -a -s SPDK00000000000001 -n "$bdevs" + $rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t RDMA -a $NVMF_FIRST_TARGET_IP -s "$NVMF_PORT" + $rpc_py nvmf_subsystem_add_host nqn.2016-06.io.spdk:cnode1 nqn.2016-06.io.spdk:host1 + $rpc_py nvmf_subsystem_allow_any_host nqn.2016-06.io.spdk:cnode1 +} + +function clear_nvmf_subsystem_config() { + $clear_config_py clear_config +} + function clear_bdev_subsystem_config() { $rpc_py destroy_lvol_bdev lvs_test/clone0 $rpc_py destroy_lvol_bdev lvs_test/lvol0 diff --git a/test/nvmf/nvmfjson/json_config.sh b/test/nvmf/nvmfjson/json_config.sh new file mode 100755 index 000000000..b98b3cf11 --- /dev/null +++ b/test/nvmf/nvmfjson/json_config.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -xe +NVMF_JSON_DIR=$(readlink -f $(dirname $0)) +. $NVMF_JSON_DIR/../../json_config/common.sh +base_nvmf_config=$JSON_DIR/base_nvmf_config.json +last_nvmf_config=$JSON_DIR/last_nvmf_config.json + +function test_subsystems() { + run_spdk_tgt + + rpc_py="$spdk_rpc_py" + clear_config_py="$spdk_clear_config_py" + + $rpc_py start_subsystem_init + create_nvmf_subsystem_config + $rpc_py save_config -f $base_nvmf_config + test_json_config + + clear_nvmf_subsystem_config + kill_targets + + run_spdk_tgt + $rpc_py load_config -f $base_nvmf_config + $rpc_py save_config -f $last_nvmf_config + + diff $base_nvmf_config $last_nvmf_config + + clear_nvmf_subsystem_config + kill_targets + rm -f $base_nvmf_config $last_nvmf_config +} + +trap 'on_error_exit "${FUNCNAME}" "${LINENO}"; rm -f $base_nvmf_config $last_nvmf_config' ERR + +timing_enter nvmf_json_config +test_subsystems +timing_exit nvmf_json_config + +report_test_completion nvmf_json_config