test/spdkcli: Add test for SPDK CLI

Change-Id: I640548858b5e2666c78ff5e1b2b2d0d8066a0ba6
Signed-off-by: Pawel Niedzwiecki <pawelx.niedzwiecki@intel.com>
Signed-off-by: Pawel Kaminski <pawelx.kaminski@intel.com>
Reviewed-on: https://review.gerrithub.io/416559
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Karol Latecki <karol.latecki@intel.com>
This commit is contained in:
Pawel Niedzwiecki 2018-06-22 21:27:31 +02:00 committed by Ben Walker
parent df214a0dd7
commit fbf057386d
6 changed files with 218 additions and 0 deletions

View File

@ -194,6 +194,10 @@ if [ $SPDK_TEST_VHOST -eq 1 ]; then
run_test ./test/vhost/spdk_vhost.sh --integrity-lvol-blk
timing_exit integrity_lvol_blk
timing_enter spdk_cli
run_test ./test/spdkcli/vhost.sh
timing_exit spdk_cli
timing_exit vhost
fi

27
test/spdkcli/common.sh Normal file
View File

@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -xe
testdir=$(readlink -f $(dirname $0))
SPDKCLI_BUILD_DIR=$(readlink -f $testdir/../..)
spdkcli_job="python3 $SPDKCLI_BUILD_DIR/test/spdkcli/spdkcli_job.py"
. $SPDKCLI_BUILD_DIR/test/common/autotest_common.sh
function on_error_exit() {
set +e
killprocess $spdk_tgt_pid
rm -f $testdir/${MATCH_FILE} $testdir/spdkcli_details_vhost.test /tmp/sample_aio
print_backtrace
exit 1
}
function run_spdk_tgt() {
$SPDKCLI_BUILD_DIR/app/spdk_tgt/spdk_tgt -m 0x3 -p 0 -s 1024 &
spdk_tgt_pid=$!
waitforlisten $spdk_tgt_pid
}
function check_match() {
python3 $SPDKCLI_BUILD_DIR/scripts/spdkcli.py ll > $testdir/${MATCH_FILE}
$SPDKCLI_BUILD_DIR/test/app/match/match -v $testdir/${MATCH_FILE}.match
rm -f $testdir/${MATCH_FILE}
}

View File

@ -0,0 +1,25 @@
{
"aliases": [],
"block_size": $(N),
"claimed": false,
"driver_specific": {
"split": {
"base_bdev": "Nvme0n1",
"offset_blocks": $(N)
}
},
"name": "Nvme0n1p0",
"num_blocks": $(N),
"product_name": "Split Disk",
"qos_ios_per_sec": 0,
"supported_io_types": {
"flush": $(S),
"nvme_admin": $(S),
"nvme_io": $(S),
"read": $(S),
"reset": $(S),
"unmap": $(S),
"write": $(S),
"write_zeroes": $(S)
}
}

36
test/spdkcli/spdkcli_job.py Executable file
View File

@ -0,0 +1,36 @@
#!/usr/bin/env python3.5
import pexpect
import os
import sys
def execute_command(cmd, element=None, element_exists=False):
child.sendline(cmd)
child.expect("/>")
print("before: %s" % child.before.decode())
if "error response" in child.before.decode():
print("Error in cmd: %s" % cmd)
exit(1)
ls_tree = cmd.split(" ")[0]
if ls_tree and element:
child.sendline("ls %s" % ls_tree)
child.expect("/>")
print("child: %s" % child.before.decode())
if element_exists:
if element not in child.before.decode():
print("Element %s not in list" % element)
exit(1)
else:
if element in child.before.decode():
print("Element %s is in list" % element)
exit(1)
if __name__ == "__main__":
testdir = os.path.dirname(os.path.realpath(sys.argv[0]))
child = pexpect.spawn(os.path.join(testdir, "../../scripts/spdkcli.py"))
child.expect(">")
child.sendline("cd /")
child.expect("/>")
execute_command(*sys.argv[1:])

View File

@ -0,0 +1,46 @@
o- / ......................................................................................................................... [...]
o- bdevs ................................................................................................................... [...]
| o- aio .............................................................................................................. [Bdevs: 1]
| | o- sample ........................................................................................... [Size=$(FP)M, Not claimed]
| o- error ............................................................................................................ [Bdevs: 1]
| | o- EE_Malloc1 ...................................................................................... [Size=$(FP)M, Not claimed]
| o- iscsi ............................................................................................................ [Bdevs: 0]
| o- logical_volume ................................................................................................... [Bdevs: 1]
| | o- $(X)-$(X)-$(X)-$(X)-$(X) .................................................. [lvs/lvol, Size=$(FP)M, Not claimed]
| o- malloc ........................................................................................................... [Bdevs: 4]
| | o- Malloc0 ............................................................................................. [Size=$(FP)M, Claimed]
| | o- Malloc1 ............................................................................................. [Size=$(FP)M, Claimed]
| | o- Malloc2 ......................................................................................... [Size=$(FP)M, Not claimed]
| | o- Malloc3 ......................................................................................... [Size=$(FP)M, Not claimed]
| o- null ............................................................................................................. [Bdevs: 1]
| | o- null_bdev ....................................................................................... [Size=$(FP)M, Not claimed]
| o- nvme ............................................................................................................. [Bdevs: 1]
| | o- Nvme0n1 $(S) [Size=$(FP)G, Claimed]
| o- pmemblk .......................................................................................................... [Bdevs: 0]
| o- rbd .............................................................................................................. [Bdevs: 0]
| o- split_disk ....................................................................................................... [Bdevs: 4]
| | o- Nvme0n1p0 $(S) [Size=$(FP)G, Not claimed]
| | o- Nvme0n1p1 $(S) [Size=$(FP)G, Not claimed]
| | o- Nvme0n1p2 $(S) [Size=$(FP)G, Not claimed]
| | o- Nvme0n1p3 $(S) [Size=$(FP)G, Not claimed]
| o- virtioblk_disk ................................................................................................... [Bdevs: 0]
| o- virtioscsi_disk .................................................................................................. [Bdevs: 0]
o- lvol_stores .................................................................................................. [Lvol stores: 1]
| o- lvs ................................................................................................ [Size=$(FP)M, Free=$(FP)M]
o- vhost ................................................................................................................... [...]
o- block ................................................................................................................. [...]
| o- vhost_blk1 $(S) [$(S)]
| | o- Nvme0n1p0 ......................................................................................................... [...]
| o- vhost_blk2 $(S) [$(S), Readonly]
| o- Nvme0n1p1 ......................................................................................................... [...]
o- scsi .................................................................................................................. [...]
o- vhost_scsi1 $(S) [$(S)]
| o- Target_0 .......................................................................................... [LUNs: 1,TargetID: 0]
| o- Malloc2 ......................................................................................................... [...]
o- vhost_scsi2 $(S) [$(S)]
o- Target_0 .......................................................................................... [LUNs: 1,TargetID: 0]
| o- Malloc3 ......................................................................................................... [...]
o- Target_1 .......................................................................................... [LUNs: 1,TargetID: 1]
| o- Nvme0n1p2 ....................................................................................................... [...]
o- Target_2 .......................................................................................... [LUNs: 1,TargetID: 2]
o- Nvme0n1p3 ....................................................................................................... [...]

80
test/spdkcli/vhost.sh Executable file
View File

@ -0,0 +1,80 @@
#!/usr/bin/env bash
set -xe
MATCH_FILE="spdkcli_vhost.test"
testdir=$(readlink -f $(dirname $0))
. $testdir/common.sh
timing_enter spdk_cli_vhost
trap 'on_error_exit' ERR
timing_enter run_spdk_tgt
run_spdk_tgt
timing_exit run_spdk_tgt
timing_enter spdkcli_create_bdevs_config
$spdkcli_job "/bdevs/malloc create 32 512 Malloc0" "Malloc0" True
$spdkcli_job "/bdevs/malloc create 32 512 Malloc1" "Malloc1" True
$spdkcli_job "/bdevs/malloc create 32 512 Malloc2" "Malloc2" True
$spdkcli_job "/bdevs/malloc create 32 4096 Malloc3" "Malloc3" True
$spdkcli_job "/bdevs/error create Malloc1" "EE_Malloc1" True
$spdkcli_job "/bdevs/null create null_bdev 32 512" "null_bdev" True
dd if=/dev/zero of=/tmp/sample_aio bs=2048 count=5000
$spdkcli_job "/bdevs/aio create sample /tmp/sample_aio 512" "sample" True
trtype=$($SPDKCLI_BUILD_DIR/scripts/gen_nvme.sh --json | jq -r '.config[].params | select(.name=="Nvme0").trtype')
traddr=$($SPDKCLI_BUILD_DIR/scripts/gen_nvme.sh --json | jq -r '.config[].params | select(.name=="Nvme0").traddr')
$spdkcli_job "/bdevs/nvme create Nvme0 $trtype $traddr" "Nvme0" True
$spdkcli_job "/bdevs/split_disk split_bdev Nvme0n1 4" "Nvme0n1p0" True
timing_exit spdkcli_create_bdevs_config
timing_enter spdkcli_create_lvols_config
$spdkcli_job "/lvol_stores create lvs Malloc0" "lvs" True
$spdkcli_job "/bdevs/logical_volume create lvol 16 lvs" "lvs/lvol" True
timing_exit spdkcli_create_lvols_config
timing_enter spdkcli_create_vhosts_config
$spdkcli_job "vhost/block create vhost_blk1 Nvme0n1p0" "Nvme0n1p0" True
$spdkcli_job "vhost/block create vhost_blk2 Nvme0n1p1 0x2 readonly" "Nvme0n1p1" True
$spdkcli_job "vhost/scsi create vhost_scsi1" "vhost_scsi1" True
$spdkcli_job "vhost/scsi create vhost_scsi2" "vhost_scsi2" True
$spdkcli_job "vhost/scsi/vhost_scsi1 add_lun 0 Malloc2" "Malloc2" True
$spdkcli_job "vhost/scsi/vhost_scsi2 add_lun 0 Malloc3" "Malloc3" True
$spdkcli_job "vhost/scsi/vhost_scsi2 add_lun 1 Nvme0n1p2" "Nvme0n1p2" True
$spdkcli_job "vhost/scsi/vhost_scsi2 add_lun 2 Nvme0n1p3" "Nvme0n1p3" True
timing_exit spdkcli_create_vhosts_config
timing_enter spdkcli_check_match
check_match
timing_exit spdkcli_check_match
timing_enter spdkcli_check_match_details
python3 $SPDKCLI_BUILD_DIR/scripts/spdkcli.py bdevs/split_disk/Nvme0n1p0 show_details | jq -r -S '.' > $testdir/spdkcli_details_vhost.test
$SPDKCLI_BUILD_DIR/test/app/match/match -v $testdir/spdkcli_details_vhost.test.match
rm -f $testdir/spdkcli_details_vhost.test
timing_exit spdkcli_check_match_details
timing_enter spdkcli_clear_config
$spdkcli_job "vhost/scsi/vhost_scsi2 remove_target 2" "Nvme0n1p3"
$spdkcli_job "vhost/scsi/vhost_scsi2 remove_target 1" "Nvme0n1p2"
$spdkcli_job "vhost/scsi/vhost_scsi2 remove_target 0" "Malloc3"
$spdkcli_job "vhost/scsi/vhost_scsi1 remove_target 0" "Malloc2"
$spdkcli_job "vhost/scsi delete vhost_scsi2" "vhost_scsi2"
$spdkcli_job "vhost/scsi delete vhost_scsi1" "vhost_scsi1"
$spdkcli_job "vhost/block delete vhost_blk2" "vhost_blk2"
$spdkcli_job "vhost/block delete vhost_blk1" "vhost_blk1"
$spdkcli_job "/bdevs/split_disk destruct_split_bdev Nvme0n1" "Nvme0n1p0"
$spdkcli_job "/bdevs/aio delete sample" "sample"
$spdkcli_job "/bdevs/nvme delete Nvme0n1" "Nvme0n1"
$spdkcli_job "/bdevs/null delete null_bdev" "null_bdev"
$spdkcli_job "/bdevs/logical_volume delete lvs/lvol" "lvs/lvol"
$spdkcli_job "/lvol_stores delete lvs" "lvs"
$spdkcli_job "/bdevs/malloc delete Malloc0" "Malloc0"
$spdkcli_job "/bdevs/malloc delete Malloc1" "Malloc1"
$spdkcli_job "/bdevs/malloc delete Malloc2" "Malloc2"
$spdkcli_job "/bdevs/malloc delete Malloc3" "Malloc3"
rm -f /tmp/sample_aio
timing_exit spdkcli_clear_config
killprocess $spdk_tgt_pid
timing_exit spdk_cli_vhost
report_test_completion spdk_cli_vhost