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@xxxxxxx> > --- > 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 >