[PATCH V2 01/46] nvmftests: add nvmftests README file
Chaitanya Kulkarni
ckulkarnilinux at gmail.com
Tue Oct 24 18:30:18 PDT 2017
From: Chaitanya Kulkarni <chaitanya.kulkarni at wdc.com>
This adds readme file for NVMe Over Fabrics unit test
framework (nvmftests).
Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni at wdc.com>
---
tools/testing/selftests/nvmftests/README.md | 176 ++++++++++++++++++++++++++++
1 file changed, 177 insertions(+)
create mode 100644 tools/testing/selftests/nvmftests/README.md
diff --git a/tools/testing/selftests/nvmftests/README.md b/tools/testing/selftests/nvmftests/README.md
new file mode 100644
index 0000000..b20a96a
--- /dev/null
+++ b/tools/testing/selftests/nvmftests/README.md
@@ -0,0 +1,176 @@
+nvmftests
+=========
+
+
+1. Introduction
+---------------
+
+ This contains NVMe Over Fabrics unit test framework. The purpose of this
+ framework is to provide a platform to create different scenarios and test
+ specific functionality for NVMe Over Fabrics Subsystem (NVMeOF).
+
+2. Overview
+-----------
+
+ The main objective of this framework is to have a platform in place which
+ can provide :-
+ 2.1. Classes and methods for each component in the NVMeOF subsystem.
+ 2.2. Ability to build NVMeOF subsystem based on the configuration file.
+ 2.3. Ability to issue sequential and parallel commands to the different
+ namespaces and controllers from the host and target side.
+
+ All the testcases are written in python3 and nose2 format.
+
+3. Class hierarchy, design considerations and directory structure
+-----------------------------------------------------------------
+
+ This framework follows a simple class hierarchy. Each test is a
+ direct subclass or indirect subclass of NVMeOFTest. To write a new testcase
+ one can copy an existing template test_nvmf_target_template.py or
+ test_nvmf_host_template.py and start adding new testcase specific
+ functionality.
+
+ 3.1. Core Classes :- (path $NVMFTESTSHOME/nvmf/)
+ Target Classes :- (path $NVMFTESTSHOME/nvmf/target)
+ NVMeOFTarget :- Represents Target.
+ NVMeOFTargetSubsystem :- Represents a Target Subsystem.
+ NVMeOFTargetNamespace :- Represents a Target Namespace.
+ NVMeOFTargetPort :- Represents a Target Port.
+ Host Classes :- (path $NVMFTESTSHOME/nvmf/host)
+ NVMeOFHost :- Represents Host.
+ NVMeOFHostController :- Represents a Host Controller.
+ NVMeOFHostNamespace :- Represents a Host Namespace.
+
+ We divide host and target side components into two different class
+ hierarchies. On the host side, we have a controller represented as a
+ character device and each namespace as a block device. In order to
+ add any new functionality to the framework please modify core classes
+ for each component and propagate new interfaces to the top
+ level (in host.py/target.py). On the target side, we have subsystem(s),
+ namespace(s), and port(s) which are configured using configfs.
+ For detailed class hierarchy please look into documentation.
+ 3.2. Testcase class:-
+ NVMeOFTest :- Base class for each testcase, contains common functions.
+ Each testcase is direct or indirect subclass of
+ NVMeOFTest. Testcase class consumes the host and target
+ classes mentioned in the 3.1 to build the
+ NVMeOF subsystems.
+ 3.3 Directory Structure
+ Following is the quick overview of the directory structure :-
+ .
+ |-- doc :- documentation.
+ | |-- Documentation :- class documentation.
+ | |-- sequence-diag :- sequence diagram.
+ |-- nvmf :- NVMF core test framework files.
+ | |-- host :- NVMF host core files.
+ | |-- target :- NVMF target core files.
+ |-- tests :- test cases.
+ | |-- config :- test configuration JSON files.
+ |-- utils :- utility classes.
+ |-- const :- constant(s) definitions.
+ |-- diskio :- diskio related wrappers.
+ |-- fs :- fs related wrappers.
+ |-- misc :- miscellaneous files.
+ |-- shell :- shell command related wrappers.
+ |-- log :- module logger helpers.
+
+4. Adding new testcases
+-----------------------
+
+ 4.1. Please refer to host or target template testcase.
+ 4.2. Copy the template file with your testcase name.
+ 4.3. Update the class name with testcase name, this has to be unique.
+ 4.4. Update the test case function name.
+ 4.5. If necessary update the core files and add new functionality.
+ 4.6. Add testcase main function to determine success or failure.
+ 4.7. Update setUp() and tearDown() to add pre and post functionality.
+ 4.8. Once testcase is ready make sure :-
+ 4.8.1. Run pep8, flake8, pylint and fix errors/warnings.
+ -Example "$ make static_check" will run pep8, flake8, and
+ pylint on all the python files in current directory.
+ 4.8.2. Execute make doc to generate the documentation.
+ -Example "$ make doc" will create and update existing
+ documentation.
+
+5. Running testcases with framework
+-----------------------------------
+
+ Here are some examples of running testcases with nose2 :-
+ 5.1. Running single testcase with nose2 :-
+ from $NVMFTESTSHOME/tests
+ # nose2 --verbose test_nvmf_create_target
+ # nose2 --verbose test_nvmf_create_host
+
+ 5.2. Running all the testcases :-
+ from $NVMFTESTSHOME/tests
+ # nose2 --verbose
+
+ 5.3 Running all the testcases from makefile :-
+ from #NVMFTESTSHOME
+ # make run
+
+ Some notes on execution:-
+ In the current implementation, it uses file backed loop or nvme-pci
+ block device on the target side. For some testcase execution,
+ a new file is created and linked with loop device. It expects that
+ "mount_path" in the nvmftests.json has enough space available to store
+ backend files which are used for target namespaces. Please edit the
+ target subsystems and namespace configuration, size of the loop device
+ backed file on the target side in the
+ $NVMFTESTSHOME/tests/config/nvmftests.json according to your need.
+
+ For host and target setup, you may have to configure timeout (sleep())
+ values in the code to make sure previous steps are completed
+ successfully and resources are online before executing next the steps.
+ We are planning to make these sleep() calls configurable in the future
+ release.
+
+6. Logging
+----------
+
+ For each testcase, it will create a separate log directory with the test
+ name under logs/. This directory will be used for temporary files and
+ storing execution logs of each testcase. Current implementation stores
+ stdout and stderr for each testcase under log directory, e.g.:-
+ logs/
+ |-- TestNVMFCreateHost
+ | |-- TestNVMFCreateHost
+ | |-- stderr.log
+ | |-- stdout.log
+ |-- TestNVMFCreateTarget
+ | |ââ TestNVMFCreateTarget
+ | |-- stderr.log
+ | |-- stdout.log
+ |-- TestNVMFCtrlRescan
+ | |-- TestNVMFCtrlRescan
+ .
+ .
+ .
+
+7. Test configuration
+---------------------
+
+ There are two types of config files used by the framework :-
+ 7.1. nvmftests.json :- ($NVMFTESTSHOME/tests/config/nvmftests.json)
+ file contains the information about various testcase parameters.
+ 7.2. loop.json :- This file is auto-generated by the test framework
+ for the target configuration based on the parameters set in the
+ nvmftests.json.
+
+8. Dependencies
+---------------
+
+ 8.1. Python(>= 3.0)
+ 8.2. nose(http://nose.readthedocs.io
+ 8.3. nose2(Installation guide http://nose2.readthedocs.io/)
+ 8.4. pep8(https://pypi.python.org/pypi/setuptools-pep8)
+ 8.5. flake8(https://pypi.python.org/pypi/flake8)
+ 8.6. pylint(https://www.pylint.org/)
+ 8.7. Epydoc(http://epydoc.sourceforge.net/)
+ 8.8. nvme-cli(https://github.com/linux-nvme/nvme-cli.git)
+ 8.9. fio(https://github.com/axboe/fio)
+
+ Python package management system pip can be used to install most of the
+ listed packages(https://pip.pypa.io/en/stable/installing/) :-
+
+ $ pip install nose nose2 natsort pep8 flake8 pylint epydoc
--
1.8.3.1
More information about the Linux-nvme
mailing list