summaryrefslogtreecommitdiffstats
path: root/src/spdk/test/pmem/test_plan.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/spdk/test/pmem/test_plan.md
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/spdk/test/pmem/test_plan.md')
-rw-r--r--src/spdk/test/pmem/test_plan.md310
1 files changed, 310 insertions, 0 deletions
diff --git a/src/spdk/test/pmem/test_plan.md b/src/spdk/test/pmem/test_plan.md
new file mode 100644
index 00000000..18e99f36
--- /dev/null
+++ b/src/spdk/test/pmem/test_plan.md
@@ -0,0 +1,310 @@
+# PMEM bdev feature test plan
+
+## Objective
+The purpose of these tests is to verify possibility of using pmem bdev
+configuration in SPDK by running functional tests FIO traffic verification
+tests.
+
+## Configuration
+Configuration in tests is to be done using example stub application
+(spdk/example/bdev/io/bdev_io).
+All possible management is done using RPC calls with the exception of
+use of split bdevs which have to be configured in .conf file.
+
+Functional tests are executed as scenarios - sets of smaller test steps
+in which results and return codes of RPC calls are validated.
+Some configuration calls may also additionally be validated
+by use of "get" (e.g. get_bdevs) RPC calls, which provide additional
+information for veryfing results.
+In some steps additional write/read operations will be performed on
+PMEM bdevs in order to check IO path correct behavior.
+
+FIO traffic verification tests will serve as integration tests and will
+be executed to config correct behavior of PMEM bdev when working with vhost,
+nvmf_tgt and iscsi_tgt applications.
+
+## Functional tests
+
+### pmem_pool_info
+
+#### pmem_pool_info_tc1
+Negative test for checking pmem pool file.
+Call with missing path argument.
+Steps & expected results:
+- Call pmem_pool_info with missing path argument
+- Check that return code != 0 and error code =
+
+#### pmem_pool_info_tc2
+Negative test for checking pmem pool file.
+Call with non-existant path argument.
+Steps & expected results:
+- Call pmem_pool_info with path argument that points to not existing file.
+- Check that return code != 0 and error code = ENODEV
+
+#### pmem_pool_info_tc3
+Negative test for checking pmem pool file.
+Call with other type of pmem pool file.
+Steps & expected results:
+- Using pmem utility tools create pool of OBJ type instead of BLK
+(if needed utility tools are not available - create random file in filesystem)
+- Call pmem_pool_info and point to file created in previous step.
+- Check that return code != 0 and error code = ENODEV
+
+#### pmem_pool_info_tc4
+Positive test for checking pmem pool file.
+Call with existing pmem pool file.
+Steps & expected results:
+- Call pmem_pool_info with path argument that points to existing file.
+- Check that return code == 0
+
+### create_pmem_pool
+From libpmemblk documentation:
+- PMEM block size has to be bigger than 512 internal blocks; if lower value
+is used then PMEM library will silently round it up to 512 which is defined
+in pmem/libpmemblk.h file as PMEMBLK_MIN_BLK.
+- Total pool size cannot be less than 16MB which is defined i
+pmem/libpmemblk.h file as PMEMBLK_MIN_POOL
+- Total number of segments in PMEP pool file cannot be less than 256
+
+#### create_pmem_pool_tc1
+Negative test case for creating a new pmem.
+Call create_pmem_pool with missing arguments.
+Steps & expected results:
+- call create_pmem_pool without path argument
+- call return code != 0
+- call pmem_pool_info and check that pmem pool file was not created
+- call return code != 0
+- call create_pmem_pool with path but without size and block size arguments
+- call return code != 0
+- call pmem_pool_info and check that pmem pool file was not created
+- call return code != 0
+- call create_pmem_pool with path and size but without block size arguments
+- call return code != 0
+- call pmem_pool_info and check that pmem pool file was not created
+- call return code != 0
+
+#### create_pmem_pool_tc2
+Negative test case for creating a new pmem.
+Call create_pmem_pool with non existing path argument.
+Steps & expected results:
+- call create_pmem_pool with path that does not exist
+- call return code != 0
+- call pmem_pool_info and check that pmem pool file was not created
+- call return code != 0
+
+#### create_pmem_pool_tc3
+Positive test case for creating a new pmem pool on disk space.
+Steps & expected results:
+- call create_pmem_pool with correct path argument,
+blocksize=512 and total size=256MB
+- call return code = 0
+- call pmem_pool_info and check that pmem file was created
+- call return code = 0
+- call delete_pmem_pool on previously created pmem
+- return code = 0 and no error code
+
+#### create_pmem_pool_tc4
+Positive test case for creating a new pmem pool in RAM space.
+# TODO: Research test steps for creating a pool in RAM!!!
+Steps & expected results:
+- call create_pmem_pool with correct path argument,
+blocksize=512 and total size=256MB
+- call return code = 0
+- call pmem_pool_info and check that pmem file was created
+- call return code = 0
+- call delete_pmem_pool on previously created pmem
+- return code = 0 and no error code
+
+#### create_pmem_pool_tc5
+Negative test case for creating two pmems with same path.
+Steps & expected results:
+- call create_pmem_pool with correct path argument,
+blocksize=512 and total size=256MB
+- call return code = 0
+- call pmem_pool_info and check that pmem file was created
+- call return code = 0
+- call create_pmem_pool with the same path argument as before,
+blocksize=4096 and total size=512MB
+- call return code != 0, error code = EEXIST
+- call create_pmem_pool and check that first pmem pool file is still
+available and not modified (block size and total size stay the same)
+- call return code = 0
+- call delete_pmem_pool on first created pmem pool
+- return code =0 and no error code
+
+#### create_pmem_pool_tc6
+Positive test case for creating pmem pool file with various block sizes.
+Steps & expected results:
+- call create_pmem_pool with correct path argument, total size=256MB
+with different block size arguments - 1, 511, 512, 513, 1024, 4096, 128k and 256k
+- call pmem_pool_info on each of created pmem pool and check if it was created;
+For pool files created with block size <512 their block size should be rounded up
+to 512; other pool files should have the same block size as specified in create
+command
+- call return code = 0; block sizes as expected
+- call delete_pmem_pool on all created pool files
+
+#### create_pmem_pool_tc7
+Negative test case for creating pmem pool file with total size of less than 16MB.
+Steps & expected results:
+- call create_pmem_pool with correct path argument, block size=512 and
+total size less than 16MB
+- return code !=0 and error code !=0
+- call pmem_pool_info to verify pmem pool file was not created
+- return code = 0
+
+#### create_pmem_pool_tc8
+Negative test case for creating pmem pool file with less than 256 blocks.
+Steps & expected results:
+- call create_pmem_pool with correct path argument, block size=128k and
+total size=30MB
+- return code !=0 and error code !=0
+- call pmem_pool_info to verify pmem pool file was not created
+- return code = 0
+
+### delete_pmem_pool
+
+#### delete_pmem_pool_tc1
+Negative test case for deleting a pmem.
+Call delete_pmem_pool on non-exisiting pmem.
+Steps & expected results:
+- call delete_pmem_pool on non-existing pmem.
+- return code !=0 and error code = ENOENT
+
+#### delete_pmem_pool_tc2
+Negative test case for deleting a pmem.
+Call delete_pmem_pool on a file of wrong type
+Steps & expected results:
+- Using pmem utility tools create pool of OBJ type instead of BLK
+(if needed utility tools are not available - create random file in filesystem)
+- Call delete_pmem_pool and point to file created in previous step.
+- return code !=0 and error code = ENOTBLK
+
+#### delete_pmem_pool_tc3
+Positive test case for creating and deleting a pemem.
+Steps & expected results:
+- call create_pmem_pool with correct arguments
+- return code = 0 and no error code
+- using pmem_pool_info check that pmem was created
+- return code = 0 and no error code
+- call delete_pmem_pool on previously created pmem
+- return code = 0 and no error code
+- using pmem_pool_info check that pmem no longer exists
+- return code !=0 and error code = ENODEV
+
+#### delete_pmem_pool_tc4
+Negative test case for creating and deleting a pemem.
+Steps & expected results:
+- run scenario from test case 3
+- call delete_pmem_pool on already deleted pmem pool
+- return code !=0 and error code = ENODEV
+
+### construct_pmem_bdev
+
+#### construct_pmem_bdev_tc1
+Negative test for constructing new pmem bdev.
+Call create_pmem_bdev with missing argument.
+Steps & expected results:
+- Call construct_pmem_bdev with missing path argument.
+- Check that return code != 0
+
+#### construct_pmem_bdev_tc2
+Negative test for constructing new pmem bdev.
+Call construct_pmem_bdev with not existing path argument.
+Steps & expected results:
+- call construct_pmem_bdev with incorrect (not existing) path
+- call return code != 0 and error code = ENODEV
+- using get_bdevs check that no pmem bdev was created
+
+#### construct_pmem_bdev_tc3
+Negative test for constructing pmem bdevs with random file instead of pmemblk pool.
+Steps & expected results:
+- using a system tool (like dd) create a random file
+- call construct_pmem_bdev with path pointing to that file
+- return code != 0, error code = ENOTBLK
+
+#### construct_pmem_bdev_tc4
+Negative test for constructing pmem bdevs with pmemobj instead of pmemblk pool.
+Steps & expected results:
+- Using pmem utility tools create pool of OBJ type instead of BLK
+(if needed utility tools are not available - create random file in filesystem)
+- call construct_pmem_bdev with path pointing to that pool
+- return code != 0, error code = ENOTBLK
+
+#### construct_pmem_bdev_tc5
+Positive test for constructing pmem bdev.
+Steps & expected results:
+- call create_pmem_pool with correct arguments
+- return code = 0, no errors
+- call pmem_pool_info and check if pmem files exists
+- return code = 0, no errors
+- call construct_pmem_bdev with with correct arguments to create a pmem bdev
+- return code = 0, no errors
+- using get_bdevs check that pmem bdev was created
+- delete pmem bdev using delete_bdev
+- return code = 0, no error code
+- delete previously created pmem pool
+- return code = 0, no error code
+
+#### construct_pmem_bdev_tc6
+Negative test for constructing pmem bdevs twice on the same pmem.
+Steps & expected results:
+- call create_pmem_pool with correct arguments
+- return code = 0, no errors
+- call pmem_pool_info and check if pmem files exists
+- return code = 0, no errors
+- call construct_pmem_bdev with with correct arguments to create a pmem bdev
+- return code = 0, no errors
+- using get_bdevs check that pmem bdev was created
+- call construct_pmem_bdev again on the same pmem file
+- return code != 0, error code = EEXIST
+- delete pmem bdev using delete_bdev
+- return code = 0, no error code
+- delete previously created pmem pool
+- return code = 0, no error code
+
+### delete_bdev
+
+#### delete_bdev_tc1
+Positive test for deleting pmem bdevs using common delete_bdev call.
+Steps & expected results:
+- construct malloc and aio bdevs (also NVMe if possible)
+- all calls - return code = 0, no errors; bdevs created
+- call create_pmem_pool with correct path argument,
+block size=512, total size=256M
+- return code = 0, no errors
+- call pmem_pool_info and check if pmem file exists
+- return code = 0, no errors
+- call construct_pmem_bdev and create a pmem bdev
+- return code = 0, no errors
+- using get_bdevs check that pmem bdev was created
+- delete pmem bdev using delete_bdev
+- return code = 0, no errors
+- using get_bdevs confirm that pmem bdev was deleted and other bdevs
+were unaffected.
+
+#### delete_bdev_tc2
+Negative test for deleting pmem bdev twice.
+Steps & expected results:
+- call create_pmem_pool with correct path argument,
+block size=512, total size=256M
+- return code = 0, no errors
+- call pmem_pool_info and check if pmem file exists
+- return code = 0, no errors
+- call construct_pmem_bdev and create a pmem bdev
+- return code = 0, no errors
+- using get_bdevs check that pmem bdev was created
+- delete pmem bdev using delete_bdev
+- return code = 0, no errors
+- using get_bdevs confirm that pmem bdev was deleted
+- delete pmem bdev using delete_bdev second time
+- return code != 0, error code = ENODEV
+
+
+## Integration tests
+Description of integration tests which run FIO verification traffic against
+pmem_bdevs used in vhost, iscsi_tgt and nvmf_tgt applications can be found in
+test directories for these components:
+- spdk/test/vhost
+- spdk/test/nvmf
+- spdk/test/iscsi_tgt