xref: /spdk/test/nvme/nvme_opal.sh (revision 7192849ed24874f3e9cc31e8a33a9b32c49b9506)
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