xref: /spdk/test/nvme/cuse/spdk_smartctl_cuse.sh (revision ff9642e36c80a0260c50b778ab0b54621abe7164)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (C) 2019 Intel Corporation
4#  All rights reserved.
5#
6testdir=$(readlink -f $(dirname $0))
7rootdir=$(readlink -f $testdir/../../..)
8source $rootdir/scripts/common.sh
9source $rootdir/test/common/autotest_common.sh
10
11SMARTCTL_CMD='smartctl -d nvme'
12rpc_py=$rootdir/scripts/rpc.py
13
14"$rootdir/scripts/setup.sh"
15
16bdf=$(get_first_nvme_bdf)
17
18PCI_ALLOWED="${bdf}" $rootdir/scripts/setup.sh reset
19nvme_name=$(get_nvme_ctrlr_from_bdf ${bdf})
20if [[ -z "$nvme_name" ]]; then
21	echo "setup.sh failed bind kernel driver to ${bdf}"
22	exit 1
23fi
24
25KERNEL_SMART_JSON=$(${SMARTCTL_CMD} --json=g -a /dev/${nvme_name} | grep -v "/dev/${nvme_name}" | sort || true)
26
27${SMARTCTL_CMD} -i /dev/${nvme_name}n1
28
29# logs are not provided by json output
30KERNEL_SMART_ERRLOG=$(${SMARTCTL_CMD} -l error /dev/${nvme_name})
31
32$rootdir/scripts/setup.sh
33
34$SPDK_BIN_DIR/spdk_tgt -m 0x3 &
35spdk_tgt_pid=$!
36trap 'kill -9 ${spdk_tgt_pid}; exit 1' SIGINT SIGTERM EXIT
37
38waitforlisten $spdk_tgt_pid
39
40$rpc_py bdev_nvme_attach_controller -b Nvme0 -t PCIe -a ${bdf}
41$rpc_py bdev_nvme_cuse_register -n Nvme0
42
43sleep 5
44
45if [ ! -c /dev/spdk/nvme0 ]; then
46	exit 1
47fi
48
49CUSE_SMART_JSON=$(${SMARTCTL_CMD} --json=g -a /dev/spdk/nvme0 | grep -v "/dev/spdk/nvme0" | sort || true)
50
51DIFF_SMART_JSON=$(diff --changed-group-format='%<' --unchanged-group-format='' <(echo "$KERNEL_SMART_JSON") <(echo "$CUSE_SMART_JSON") || true)
52
53# Mask values can change
54ERR_SMART_JSON=$(grep -v "json\.nvme_smart_health_information_log\.\|json\.local_time\.\|json\.temperature\.\|json\.power_on_time\.hours" <<< $DIFF_SMART_JSON || true)
55
56if [ -n "$ERR_SMART_JSON" ]; then
57	echo "Wrong values for: $ERR_SMART_JSON"
58	exit 1
59fi
60
61CUSE_SMART_ERRLOG=$(${SMARTCTL_CMD} -l error /dev/spdk/nvme0)
62if [ "$CUSE_SMART_ERRLOG" != "$KERNEL_SMART_ERRLOG" ]; then
63	echo "Wrong values in NVMe Error log"
64	exit 1
65fi
66
67# Data integrity was checked before, now make sure other commands didn't fail
68${SMARTCTL_CMD} -i /dev/spdk/nvme0n1
69${SMARTCTL_CMD} -c /dev/spdk/nvme0
70${SMARTCTL_CMD} -A /dev/spdk/nvme0
71
72# Health test can fail
73${SMARTCTL_CMD} -x /dev/spdk/nvme0 || true
74${SMARTCTL_CMD} -H /dev/spdk/nvme0 || true
75
76$rpc_py bdev_nvme_detach_controller Nvme0
77sleep 1
78if [ -c /dev/spdk/nvme1 ]; then
79	exit 1
80fi
81
82trap - SIGINT SIGTERM EXIT
83killprocess $spdk_tgt_pid
84