[PATCH blktests 05/11] nvme/rc: introduce NVMET_TR_TYPES
Shinichiro Kawasaki
shinichiro.kawasaki at wdc.com
Mon Apr 15 22:20:54 PDT 2024
On Apr 11, 2024 / 20:12, Shin'ichiro Kawasaki wrote:
> Some of the test cases in nvme test group can be run under various nvme
> target transport types. The configuration parameter nvme_trtype
> specifies the transport to use. But this configuration method has two
> drawbacks. Firstly, the blktests check script needs to be invoked
> multiple times to cover multiple transport types. Secondly, the test
> cases irrelevant to the transport types are executed exactly same
> conditions in the multiple blktests runs.
>
> To avoid the drawbacks, introduce new configuration parameter
> NVMET_TR_TYPES. This is an array, and multiple transport types can
> be set like:
>
> NVMET_TR_TYPES=(loop tcp)
>
> Also introduce _nvmet_set_nvme_trtype() which can be called from the
> set_conditions() hook of the transport type dependent test cases.
> Blktests will repeat the test case as many as the number of elements in
> NVMET_TR_TYPES, and set nvme_trtype for each test case run.
>
> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki at wdc.com>
> ---
> Documentation/running-tests.md | 6 +++++-
> tests/nvme/rc | 30 +++++++++++++++++++++++++++++-
> 2 files changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/running-tests.md b/Documentation/running-tests.md
> index ae80860..ede3a81 100644
> --- a/Documentation/running-tests.md
> +++ b/Documentation/running-tests.md
> @@ -102,8 +102,12 @@ RUN_ZONED_TESTS=1
>
> The NVMe tests can be additionally parameterized via environment variables.
>
> +- NVMET_TR_TYPES (array)
> + Set up NVME target backends with the specified transport.
> + Valid elements are 'loop', 'tcp', 'rdma' and 'fc'. Default value is '(loop)'.
> - nvme_trtype: 'loop' (default), 'tcp', 'rdma' and 'fc'
> - Run the tests with the given transport.
> + Run the tests with the given transport. This parameter is still usable but
> + replaced with NVMET_TR_TYPES. Use NVMET_TR_TYPES instead.
I noticed that nvme_trtype is still useful. nvmet_trtypes can be set in both in
the config file and the command line. But NVMET_TRTYPES can be set in the config
file only, because bash does not support setting arrays in the command line.
# nvme_trtypes=rdma ./check nvme/006 ... works
# NVMET_TRTYPES=(rdma) ./check nvme/006 ... does not work
I will modify the descriptions above in the v2 series to note that both
nvme_trtype and NVMET_TRTYPES are supported and usable.
> - nvme_img_size: '1G' (default)
> Run the tests with given image size in bytes. 'm', 'M', 'g'
> and 'G' postfix are supported.
> diff --git a/tests/nvme/rc b/tests/nvme/rc
> index 1f5ff44..df6bf77 100644
> --- a/tests/nvme/rc
> +++ b/tests/nvme/rc
> @@ -18,10 +18,38 @@ def_hostid="0f01fb42-9f7f-4856-b0b3-51e60b8de349"
> def_hostnqn="nqn.2014-08.org.nvmexpress:uuid:${def_hostid}"
> export def_subsysnqn="blktests-subsystem-1"
> export def_subsys_uuid="91fdba0d-f87b-4c25-b80f-db7be1418b9e"
> -nvme_trtype=${nvme_trtype:-"loop"}
> nvme_img_size=${nvme_img_size:-"1G"}
> nvme_num_iter=${nvme_num_iter:-"1000"}
>
> +# Check consistency of NVMET_TR_TYPES and nvme_trtype configurations.
> +# If neither is configured, set the default value.
> +first_call=${first_call:-1}
> +if ((first_call)); then
> + if [[ -n $nvme_trtype ]]; then
> + if [[ -n $NVMET_TR_TYPES ]]; then
> + echo "Both nvme_trtype and NVMET_TR_TYPES are specified"
> + exit 1
> + fi
> + NVMET_TR_TYPES=("$nvme_trtype")
> + elif [[ -z ${NVMET_TR_TYPES[*]} ]]; then
> + nvme_trtype="loop"
> + NVMET_TR_TYPES=("$nvme_trtype")
> + fi
> + first_call=0
> +fi
> +
> +_set_nvme_trtype() {
> + local index=$1
> +
> + if [[ -z $index ]]; then
> + echo ${#NVMET_TR_TYPES[@]}
> + return
> + fi
> +
> + nvme_trtype=${NVMET_TR_TYPES[index]}
> + COND_DESC="nvmet tr=${nvme_trtype}"
> +}
> +
> # TMPDIR can not be referred out of test() or test_device() context. Instead of
> # global variable def_flie_path, use this getter function.
> _nvme_def_file_path() {
> --
> 2.44.0
>
More information about the Linux-nvme
mailing list