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