diff mbox series

[blktests,v4,10/17] nvme/rc: introduce NVMET_BLKDEV_TYPES

Message ID 20240504081448.1107562-11-shinichiro.kawasaki@wdc.com (mailing list archive)
State New
Headers show
Series support test case repeat by different conditions | expand

Commit Message

Shinichiro Kawasaki May 4, 2024, 8:14 a.m. UTC
Some of the test cases in nvme test group do the exact same test for two
blkdev types: device type and file type. Except for this difference, the
test cases are pure duplication. It is desired to avoid the duplication.
When the duplication is avoided, it is required to control which
condition to run the test.
    
To avoid the duplication and also to allow the blkdev type control,
introduce a new configuration parameter NVMET_BLKDEV_TYPES. This
parameter specifies which blkdev type to setup for the tests. It can
take one of the blkdev types. Or it can take both types, which is the
default. When both types are specified, the test cases are repeated
twice to cover the types.
    
Also add the helper function _set_nvmet_blkdev_type(). It sets up
nvmet_blkdev_type variable for each test case run from
NVMET_BLKDEV_TYPES.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
---
 Documentation/running-tests.md |  5 +++++
 tests/nvme/rc                  | 18 +++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

Comments

Daniel Wagner May 6, 2024, 2:52 p.m. UTC | #1
On Sat, May 04, 2024 at 05:14:41PM GMT, Shin'ichiro Kawasaki wrote:
> Some of the test cases in nvme test group do the exact same test for two
> blkdev types: device type and file type. Except for this difference, the
> test cases are pure duplication. It is desired to avoid the duplication.
> When the duplication is avoided, it is required to control which
> condition to run the test.
>     
> To avoid the duplication and also to allow the blkdev type control,
> introduce a new configuration parameter NVMET_BLKDEV_TYPES. This
> parameter specifies which blkdev type to setup for the tests. It can
> take one of the blkdev types. Or it can take both types, which is the
> default. When both types are specified, the test cases are repeated
> twice to cover the types.
>     
> Also add the helper function _set_nvmet_blkdev_type(). It sets up
> nvmet_blkdev_type variable for each test case run from
> NVMET_BLKDEV_TYPES.
> 
> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>

Reviewed-by: Daniel Wagner <dwagner@suse.de>
diff mbox series

Patch

diff --git a/Documentation/running-tests.md b/Documentation/running-tests.md
index 571ee04..64aff7c 100644
--- a/Documentation/running-tests.md
+++ b/Documentation/running-tests.md
@@ -108,6 +108,11 @@  The NVMe tests can be additionally parameterized via environment variables.
   tests are repeated to cover all of the transports specified.
   This parameter had an old name 'nvme_trtype'. The old name is still usable,
   but not recommended.
+- NVMET_BLKDEV_TYPES: 'device', 'file'
+  Set up NVME target backends with the specified block device type. Multiple
+  block device types can be listed with separating spaces. In this case, the
+  tests are repeated to cover all of the block device types specified. Default
+  value is "device file".
 - 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 ec54609..27d35e9 100644
--- a/tests/nvme/rc
+++ b/tests/nvme/rc
@@ -22,6 +22,7 @@  _check_conflict_and_set_default NVMET_TRTYPES nvme_trtype "loop"
 nvme_img_size=${nvme_img_size:-"1G"}
 nvme_num_iter=${nvme_num_iter:-"1000"}
 nvmet_blkdev_type=${nvmet_blkdev_type:-"device"}
+NVMET_BLKDEV_TYPES=${NVMET_BLKDEV_TYPES:-"device file"}
 
 _NVMET_TRTYPES_is_valid() {
 	local type
@@ -51,7 +52,22 @@  _set_nvme_trtype() {
 	fi
 
 	nvme_trtype=${types[index]}
-	COND_DESC="nvmet tr=${nvme_trtype}"
+	COND_DESC="tr=${nvme_trtype}"
+}
+
+_set_nvmet_blkdev_type() {
+	local index=$1
+	local -a types
+
+	read -r -a types <<< "$NVMET_BLKDEV_TYPES"
+
+	if [[ -z $index ]]; then
+		echo ${#types[@]}
+		return
+	fi
+
+	nvmet_blkdev_type=${types[index]}
+	COND_DESC="bd=${nvmet_blkdev_type}"
 }
 
 # TMPDIR can not be referred out of test() or test_device() context. Instead of