Skip to content

Commit 5d4e204

Browse files
hreineckekawasaki
authored andcommitted
nvme: add testcase for TLS-encrypted connections
TCP connections can be encrypted using in-kernel TLS, so add a testcase to exercise the various combinations. [Shin'ichiro: used _systemctl_start and _systemctl_stop] [Shin'ichiro: fixed file mode] Signed-off-by: Hannes Reinecke <[email protected]> [Shin'ichiro: added _have_libnvme_ver and _have_systemd_tlshd_service] Signed-off-by: Shin'ichiro Kawasaki <[email protected]>
1 parent 755f984 commit 5d4e204

3 files changed

Lines changed: 119 additions & 0 deletions

File tree

tests/nvme/062

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#!/bin/bash
2+
# SPDX-License-Identifier: GPL-3.0+
3+
# Copyright (C) 2024 Hannes Reinecke, SUSE Labs
4+
#
5+
# Create TLS-encrypted connections
6+
7+
. tests/nvme/rc
8+
9+
DESCRIPTION="Create TLS-encrypted connections"
10+
QUICK=1
11+
12+
requires() {
13+
_nvme_requires
14+
_have_loop
15+
_have_kernel_option NVME_TCP_TLS
16+
_have_kernel_option NVME_TARGET_TCP_TLS
17+
_require_kernel_nvme_fabrics_feature tls
18+
_require_nvme_trtype tcp
19+
_require_nvme_cli_tls
20+
_have_libnvme_ver 1 11
21+
_have_systemd_tlshd_service
22+
}
23+
24+
set_conditions() {
25+
_set_nvme_trtype "$@"
26+
}
27+
28+
test() {
29+
echo "Running ${TEST_NAME}"
30+
31+
_setup_nvmet
32+
33+
local hostkey
34+
local ctrl
35+
36+
hostkey=$(nvme gen-tls-key -n "${def_hostnqn}" -c "${def_subsysnqn}" -m 1 -I 1 -i 2> /dev/null)
37+
if [ -z "$hostkey" ] ; then
38+
echo "nvme gen-tls-key failed"
39+
return 1
40+
fi
41+
42+
_systemctl_start tlshd
43+
44+
_nvmet_target_setup --blkdev file --tls
45+
46+
# Test unencrypted connection
47+
echo "Test unencrypted connection w/ tls not required"
48+
_nvme_connect_subsys
49+
50+
ctrl=$(_find_nvme_dev "${def_subsysnqn}")
51+
if _nvme_ctrl_tls_key "$ctrl" > /dev/null; then
52+
echo "WARNING: connection is encrypted"
53+
fi
54+
55+
_nvme_disconnect_subsys
56+
57+
# Test encrypted connection
58+
echo "Test encrypted connection w/ tls not required"
59+
_nvme_connect_subsys --tls
60+
61+
ctrl=$(_find_nvme_dev "${def_subsysnqn}")
62+
if ! _nvme_ctrl_tls_key "$ctrl" > /dev/null ; then
63+
echo "WARNING: connection is not encrypted"
64+
fi
65+
66+
_nvme_disconnect_subsys
67+
68+
# Reset target configuration
69+
_nvmet_target_cleanup
70+
71+
_nvmet_target_setup --blkdev file --force-tls
72+
73+
# Test unencrypted connection
74+
echo "Test unencrypted connection w/ tls required (should fail)"
75+
_nvme_connect_subsys
76+
77+
_nvme_disconnect_subsys
78+
79+
# Test encrypted connection
80+
echo "Test encrypted connection w/ tls required"
81+
_nvme_connect_subsys --tls
82+
83+
ctrl=$(_find_nvme_dev "${def_subsysnqn}")
84+
if ! _nvme_ctrl_tls_key "$ctrl" > /dev/null; then
85+
echo "WARNING: connection is not encrypted"
86+
fi
87+
88+
_nvme_disconnect_subsys
89+
90+
_nvmet_target_cleanup
91+
92+
_systemctl_stop
93+
94+
echo "Test complete"
95+
}

tests/nvme/062.out

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Running nvme/062
2+
Test unencrypted connection w/ tls not required
3+
disconnected 1 controller(s)
4+
Test encrypted connection w/ tls not required
5+
disconnected 1 controller(s)
6+
Test unencrypted connection w/ tls required (should fail)
7+
disconnected 0 controller(s)
8+
Test encrypted connection w/ tls required
9+
disconnected 1 controller(s)
10+
Test complete

tests/nvme/rc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,14 @@ _require_nvme_cli_auth() {
175175
return 0
176176
}
177177

178+
_require_nvme_cli_tls() {
179+
if ! nvme gen-tls-key --subsysnqn nvmf-test-subsys > /dev/null 2>&1; then
180+
SKIP_REASON+=("nvme gen-tls-key command missing")
181+
return 1
182+
fi
183+
return 0
184+
}
185+
178186
_require_kernel_nvme_fabrics_feature() {
179187
local feature="$1"
180188

@@ -630,3 +638,9 @@ _have_libnvme_ver() {
630638
fi
631639
return 0
632640
}
641+
642+
_nvme_ctrl_tls_key() {
643+
local ctrl="$1"
644+
645+
cat /sys/class/nvme/"$ctrl"/tls_key 2>/dev/null
646+
}

0 commit comments

Comments
 (0)