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:
parent
df214a0dd7
commit
fbf057386d
@ -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
27
test/spdkcli/common.sh
Normal 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}
|
||||
}
|
25
test/spdkcli/spdkcli_details_vhost.test.match
Normal file
25
test/spdkcli/spdkcli_details_vhost.test.match
Normal 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
36
test/spdkcli/spdkcli_job.py
Executable 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:])
|
46
test/spdkcli/spdkcli_vhost.test.match
Normal file
46
test/spdkcli/spdkcli_vhost.test.match
Normal 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
80
test/spdkcli/vhost.sh
Executable 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
|
Loading…
Reference in New Issue
Block a user