218dcd840a
NVML (Non Volatile Memory Library) changed its name to PMDK (Persistent Memory Development Kit), so make the necessary changes to the SPDK repository. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Id07a87eafb4e9a3099603030c58c0e927bafa608 Reviewed-on: https://review.gerrithub.io/406256 Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
311 lines
12 KiB
Markdown
311 lines
12 KiB
Markdown
# 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
|