diff --git a/autotest.sh b/autotest.sh index ce125580c..bc3b9868f 100755 --- a/autotest.sh +++ b/autotest.sh @@ -216,6 +216,7 @@ fi if [ $SPDK_TEST_VHOST_INIT -eq 1 ]; then run_test ./test/vhost/initiator/blockdev.sh run_test ./test/vhost/initiator/json_config.sh + run_test ./test/spdkcli/virtio.sh report_test_completion "vhost_initiator" fi diff --git a/test/spdkcli/match_files/spdkcli_virtio_pci.test.match b/test/spdkcli/match_files/spdkcli_virtio_pci.test.match new file mode 100644 index 000000000..0eca06e1b --- /dev/null +++ b/test/spdkcli/match_files/spdkcli_virtio_pci.test.match @@ -0,0 +1,18 @@ +o- bdevs ..................................................................................................................... [...] + o- aio ................................................................................................................ [Bdevs: 0] + o- error .............................................................................................................. [Bdevs: 0] + o- iscsi .............................................................................................................. [Bdevs: 0] + o- logical_volume ..................................................................................................... [Bdevs: 0] + o- malloc ............................................................................................................. [Bdevs: 2] + | o- Malloc0 ........................................................................................... [Size=32.0M, Not claimed] + | o- Malloc1 ........................................................................................... [Size=32.0M, Not claimed] + o- null ............................................................................................................... [Bdevs: 0] + o- nvme ............................................................................................................... [Bdevs: 0] + o- pmemblk ............................................................................................................ [Bdevs: 0] + o- rbd ................................................................................................................ [Bdevs: 0] + o- split_disk ......................................................................................................... [Bdevs: 0] + o- virtioblk_disk ..................................................................................................... [Bdevs: 1] + | o- virtioblk_pci $(S) [Size=$(FP)M, Not claimed] + o- virtioscsi_disk .................................................................................................... [Bdevs: 1] + o- virtioscsi_pci ............................................................................................... [$(S)] + o- virtioscsi_pcit0 $(S) [Size=$(FP)M, Not claimed] diff --git a/test/spdkcli/match_files/spdkcli_virtio_user.test.match b/test/spdkcli/match_files/spdkcli_virtio_user.test.match new file mode 100644 index 000000000..157938e74 --- /dev/null +++ b/test/spdkcli/match_files/spdkcli_virtio_user.test.match @@ -0,0 +1,8 @@ +o- vhost ..................................................................................................................... [...] + o- block ................................................................................................................... [...] + | o- sample_block $(S) [$(S)] + | o- Malloc1 ............................................................................................................. [...] + o- scsi .................................................................................................................... [...] + o- sample_scsi $(S) [$(S)] + o- Target_0 ............................................................................................ [LUNs: 1,TargetID: 0] + o- Malloc0 ........................................................................................................... [...] diff --git a/test/spdkcli/spdkcli_job.py b/test/spdkcli/spdkcli_job.py index 83331c3ea..0751b955f 100755 --- a/test/spdkcli/spdkcli_job.py +++ b/test/spdkcli/spdkcli_job.py @@ -7,7 +7,6 @@ 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) @@ -27,10 +26,13 @@ def execute_command(cmd, element=None, element_exists=False): if __name__ == "__main__": + socket = "/var/tmp/spdk.sock" + if len(sys.argv) == 5: + socket = sys.argv[4] testdir = os.path.dirname(os.path.realpath(sys.argv[0])) - child = pexpect.spawn(os.path.join(testdir, "../../scripts/spdkcli.py")) + child = pexpect.spawn(os.path.join(testdir, "../../scripts/spdkcli.py") + " -s %s" % socket) child.expect(">") child.sendline("cd /") child.expect("/>") - execute_command(*sys.argv[1:]) + execute_command(*sys.argv[1:4]) diff --git a/test/spdkcli/virtio.sh b/test/spdkcli/virtio.sh new file mode 100755 index 000000000..fd8260be1 --- /dev/null +++ b/test/spdkcli/virtio.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +set -xe + +testdir=$(readlink -f $(dirname $0)) +. $testdir/common.sh + +trap 'killprocess $virtio_pid; on_error_exit' ERR +timing_enter spdk_cli_vhost + +timing_enter run_spdk_tgt +run_spdk_tgt +timing_exit run_spdk_tgt + +timing_enter run_spdk_virtio +$SPDKCLI_BUILD_DIR/app/spdk_tgt/spdk_tgt -m 0x4 -p 0 -g -u -s 1024 -r /var/tmp/virtio.sock & +virtio_pid=$! +waitforlisten $virtio_pid /var/tmp/virtio.sock +timing_exit run_spdk_virtio + +timing_enter spdkcli_create_virtio_pci_config +$spdkcli_job "/bdevs/malloc create 32 512 Malloc0" "Malloc0" True +$spdkcli_job "/bdevs/malloc create 32 512 Malloc1" "Malloc1" True +pci_blk=$(lspci -nn -D | grep '1af4:1001' | head -1 | awk '{print $1;}') +if [ ! -z $pci_blk ]; then + $spdkcli_job "/bdevs/virtioblk_disk create virtioblk_pci pci $pci_blk" "virtioblk_pci" True +fi +pci_scsi=$(lspci -nn -D | grep '1af4:1004' | head -1 | awk '{print $1;}') +if [ ! -z $pci_scsi ]; then + $spdkcli_job "/bdevs/virtioscsi_disk create virtioscsi_pci pci $pci_scsi" "virtioscsi_pci" True +fi +$spdkcli_job "/vhost/scsi create sample_scsi" "sample_scsi" True +$spdkcli_job "/vhost/scsi/sample_scsi add_lun 0 Malloc0" "Malloc0" True +$spdkcli_job "/vhost/block create sample_block Malloc1" "Malloc1" True +timing_exit spdkcli_create_virtio_pci_config + +timing_enter spdkcli_check_match +if [ ! -z $pci_blk ] && [ ! -z $pci_scsi ]; then + MATCH_FILE="spdkcli_virtio_pci.test" + SPDKCLI_BRANCH="/bdevs" + check_match +fi +timing_exit spdkcli_check_match + +timing_exit spdkcli_create_virtio_user_config +$spdkcli_job "/bdevs/virtioblk_disk create virtioblk_user user $testdir/../../sample_block" "virtioblk_user" True "/var/tmp/virtio.sock" +$spdkcli_job "/bdevs/virtioscsi_disk create virtioscsi_user user $testdir/../../sample_scsi" "virtioscsi_user" True "/var/tmp/virtio.sock" +timing_exit spdkcli_create_virtio_user_config + +timing_enter spdkcli_check_match +MATCH_FILE="spdkcli_virtio_user.test" +SPDKCLI_BRANCH="/vhost" +check_match +timing_exit spdkcli_check_match + +timing_enter spdkcli_clear_virtio_config +$spdkcli_job "/bdevs/virtioscsi_disk delete virtioscsi_user" "" False "/var/tmp/virtio.sock" +$spdkcli_job "/bdevs/virtioblk_disk delete virtioblk_user" "" False "/var/tmp/virtio.sock" +$spdkcli_job "/vhost/block delete sample_block" "sample_block" +$spdkcli_job "/vhost/scsi/sample_scsi remove_target 0" "Malloc0" +$spdkcli_job "/vhost/scsi delete sample_scsi" " sample_scsi" +if [ ! -z $pci_blk ]; then + $spdkcli_job "/bdevs/virtioblk_disk delete virtioblk_pci" "virtioblk_pci" +fi +if [ ! -z $pci_scsi ]; then + $spdkcli_job "/bdevs/virtioscsi_disk delete virtioscsi_pci" "virtioscsi_pci" +fi +$spdkcli_job "/bdevs/malloc delete Malloc0" "Malloc0" +$spdkcli_job "/bdevs/malloc delete Malloc1" "Malloc1" +timing_exit spdkcli_clear_virtio_config + +killprocess $virtio_pid +killprocess $spdk_tgt_pid + +timing_exit spdk_cli_vhost