[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