1#!/usr/bin/env bash 2 3set -e 4 5testdir=$(readlink -f $(dirname $0)) 6rootdir=$(readlink -f $testdir/../..) 7rpc_py="$rootdir/scripts/rpc.py" 8source "$rootdir/scripts/common.sh" 9source "$rootdir/test/common/autotest_common.sh" 10 11# The OPAL CI tests is only used for P4510 devices. 12mapfile -t bdfs < <(get_nvme_bdfs_by_id 0x0a59) 13if [[ -z ${bdfs[0]} ]]; then 14 echo "No P4510 device found, exit the tests" 15 exit 1 16fi 17 18bdf=${bdfs[0]} 19 20function opal_revert_and_init() { 21 $SPDK_BIN_DIR/spdk_tgt & 22 spdk_tgt_pid=$! 23 waitforlisten $spdk_tgt_pid 24 25 $rootdir/scripts/rpc.py bdev_nvme_attach_controller -b "nvme0" -t "pcie" -a ${bdf} 26 # Ignore if this fails. 27 $rootdir/scripts/rpc.py bdev_nvme_opal_revert -b nvme0 -p test || true 28 sleep 1 29 $rpc_py bdev_nvme_opal_init -b nvme0 -p test 30 $rpc_py bdev_nvme_detach_controller nvme0 31 32 killprocess $spdk_tgt_pid 33} 34 35function test_opal_cmds() { 36 $rpc_py bdev_nvme_attach_controller -b "nvme0" -t "pcie" -a ${bdf} 37 38 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 39 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 40 $rpc_py bdev_opal_get_info -b nvme0n1r1 -p test 41 42 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 43 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 44 45 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 46 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 47 48 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 49 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 50 51 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 3 -s 4096 -l 4096 -p test 52 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 53 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 54 55 $rpc_py bdev_opal_new_user -b nvme0n1r3 -p test -i 3 -u tester3 56 $rpc_py bdev_opal_get_info -b nvme0n1r3 -p test 57 $rpc_py bdev_opal_set_lock_state -b nvme0n1r3 -i 3 -p tester3 -l readonly 58 $rpc_py bdev_opal_get_info -b nvme0n1r3 -p test 59 $rpc_py bdev_opal_set_lock_state -b nvme0n1r1 -i 0 -p test -l rwlock 60 61 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 62 $rpc_py bdev_opal_delete -b nvme0n1r3 -p test 63 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 64 65 $rpc_py bdev_nvme_detach_controller nvme0 66} 67 68function setup_test_environment() { 69 $rpc_py bdev_nvme_attach_controller -b "nvme0" -t "pcie" -a ${bdf} 70 71 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 72 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 73 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 3 -s 4096 -l 4096 -p test 74 75 $rpc_py bdev_opal_new_user -b nvme0n1r1 -p test -i 1 -u tester1 76 $rpc_py bdev_opal_set_lock_state -b nvme0n1r1 -i 1 -p tester1 -l readwrite 77 $rpc_py bdev_opal_new_user -b nvme0n1r3 -p test -i 3 -u tester3 78 $rpc_py bdev_opal_set_lock_state -b nvme0n1r3 -i 3 -p tester3 -l readwrite 79 80 $rpc_py bdev_opal_set_lock_state -b nvme0n1r2 -i 0 -p test -l readwrite 81} 82 83function clean_up() { 84 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 85 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 86 $rpc_py bdev_opal_delete -b nvme0n1r3 -p test 87} 88 89function revert() { 90 $rpc_py bdev_nvme_opal_revert -b nvme0 -p test 91} 92 93function opal_spdk_tgt() { 94 $SPDK_BIN_DIR/spdk_tgt & 95 spdk_tgt_pid=$! 96 trap 'killprocess $spdk_tgt_pid; exit 1' SIGINT SIGTERM EXIT 97 waitforlisten $spdk_tgt_pid 98 test_opal_cmds 99 killprocess $spdk_tgt_pid 100} 101 102function opal_bdevio() { 103 $rootdir/test/bdev/bdevio/bdevio -w & 104 bdevio_pid=$! 105 trap 'killprocess $bdevio_pid; exit 1' SIGINT SIGTERM EXIT 106 waitforlisten $bdevio_pid 107 setup_test_environment 108 $rootdir/test/bdev/bdevio/tests.py perform_tests 109 clean_up 110 $rpc_py bdev_nvme_detach_controller nvme0 111 trap - SIGINT SIGTERM EXIT 112 killprocess $bdevio_pid 113} 114 115function opal_bdevperf() { 116 $rootdir/test/bdev/bdevperf/bdevperf -z -q 8 -o 4096 -w verify -t 10 & 117 bdevperf_pid=$! 118 trap 'revert; killprocess $bdevperf_pid; exit 1' SIGINT SIGTERM EXIT 119 waitforlisten $bdevperf_pid 120 setup_test_environment 121 $rootdir/test/bdev/bdevperf/bdevperf.py perform_tests 122 clean_up 123 revert 124 $rpc_py bdev_nvme_detach_controller nvme0 125 trap - SIGINT SIGTERM EXIT 126 killprocess $bdevperf_pid 127} 128 129opal_revert_and_init 130 131run_test "nvme_opal_spdk_tgt" opal_spdk_tgt 132run_test "nvme_opal_bdevio" opal_bdevio 133run_test "nvme_opal_bdevperf" opal_bdevperf 134