From 383a21e6a2a493a82acf52a4b18f58f41e586497 Mon Sep 17 00:00:00 2001 From: xudan Date: Wed, 12 Dec 2018 04:08:02 -0500 Subject: [PATCH] Add a doc introducing dovetail framework This doc is used to introduce Dovetail framework and how to develop with this framework. JIRA: DOVETAIL-757 Change-Id: I3c56ce56151580d0e2aebf3485a55f4c7a23c8b6 Signed-off-by: xudan --- docs/images/dovetail_generic_framework.png | Bin 0 -> 92053 bytes docs/testing/developer/genericframework/index.rst | 382 ++++++++++++++++++++++ 2 files changed, 382 insertions(+) create mode 100644 docs/images/dovetail_generic_framework.png create mode 100644 docs/testing/developer/genericframework/index.rst diff --git a/docs/images/dovetail_generic_framework.png b/docs/images/dovetail_generic_framework.png new file mode 100644 index 0000000000000000000000000000000000000000..b73a067811d5f92901e5432ceb9fc60bb30cca7f GIT binary patch literal 92053 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 RIg366dr#qRuB5?V{|9t}H_iY6 literal 0 HcmV?d00001 diff --git a/docs/testing/developer/genericframework/index.rst b/docs/testing/developer/genericframework/index.rst new file mode 100644 index 00000000..9bafb3e4 --- /dev/null +++ b/docs/testing/developer/genericframework/index.rst @@ -0,0 +1,382 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) Huawei Technologies Co.,Ltd, and others + +==================================== +Dovetail as a Generic Test Framework +==================================== + +.. toctree:: + :maxdepth: 2 + + +Overview +======== + +Dovetail is responsible for the technical realization of the OPNFV Verified +Program (OVP) and other compliance verification projects within the scope of +the Linux Foundation Networking (LFN) umbrella projects. +Dovetail provides a generic framework for executing a specific set of test cases +which define the scope of a given compliance verification program, such as OVP. + +This document aims at introducing what Dovetail generic framework looks like and +how to develop within this framework. + + +Introduction of Dovetail Framework +================================== + +The following diagram illustrates Dovetail generic framework. + +.. image:: ../../../images/dovetail_generic_framework.png + :align: center + :scale: 50% + +In this diagram, there are 5 main parts, `TestcaseFactory`, `TestRunnerFactory`, +`CrawlerFactory`, `CheckerFactory` and test case groups. + +- **TestcaseFactory**: For each project, there needs to create its own + testcase class such as `FunctestTestcase` and `OnapVtpTestcase`. All these + classes are based on class `Testcase`. There are already many functions in this + base class which are mainly used to parse test case configuration files. If no + other special requirements exist, it only needs to initialize these classes with + different types. Otherwise, it needs to overload or add some functions. + +- **TestRunnerFactory**: Similar to `TestcaseFactory`, each project has its own + test runner class. Dovetail supports 2 kinds of test runners, `DockerRunner` + and `ShellRunner`. For projects based on Docker, it needs to create + their own test runner classes such as `FunctestRunner` which inherit from class + `DockerRunner`. For other projects that are based on Shell, it can use `ShellRunner` + directly. Test case runners provide many functions to support test cases runs + such as preparing test tool of each project, run all the commands defined by + each test case and clean the environment. + +- **Test case groups**: Each group is composed of one project configuration file + and a set of test cases belonging to this project. These groups are used as the + input of test runners to provide information of projects and test cases. For + `ShellRunner`, it only needs test case configuratons as the input. + +- **CrawlerFactory**: This is used to parse the results of test cases and record + them with unified format. The original result data report by each project is + different. So it needs to create different crawler classes for different projects + to parse their results. + +- **CheckerFactory**: This is used to check the result data generated by crawler. + Each project should have its own checker class due to the different requirements + of different projects. + + +Development with Dovetail Framework +=================================== + +Everyone who is interested in developing Dovetail framework to integrate new upstream +test cases will face one of the two following scenarios: + +- **Adding test cases that belong to integrated projects**: There are already some + projects integrated in Dovetail. These projects are coming from OPNFV (Open Platform + for NFV) and ONAP (Open Network Automation Platform) communities. It will be + much easier to add new test cases that belong to these projects. + +- **Adding test cases that not belong to integrated projects**: The test cases + may belong to other projects that haven't been integrated into Dovetail yet. + These projects could be in OPNFV, ONAP or other communities. This scenario is a + little more complicated. + + +Test cases belonging to integrated projects +------------------------------------------- + +Dovetail framework already includes a large amount of test cases. All these test +cases are implemented by upstream projects in OPNFV and ONAP. The upstream +projects already integrated in Dovetail are Functest, Yardstick and Bottlenecks +from OPNFV and VNF SDK and VVP from ONAP. + +In order to add a test case belonging to one of these projects, there +only need to add one test case configuration file which is in yaml format. +Following is the introduction about how to use the file to add one new test case. +Please refer to `Dovetail test case github +`_ +for all configuration files of all test cases. + +.. code-block:: bash + + --- + Test case name in Dovetail: + name: Test case name in Dovetail + objective: Test case description + validate: + type: 'shell' or name of the project already integrated in Dovetail + testcase: The test case name called in this project + image_name: Name of the Docker image used to run this test + pre_condition: + - 'Commands needed to be executed before running this test' + - 'e.g. cp src_file dest_file' + cmds: + - 'Commands used to run this test case' + post_condition: + - 'Commands needed to be executed after running this test case' + report: + source_archive_files: + - test.log + dest_archive_files: + - path/to/archive/test.log + check_results_file: results.json + sub_testcase_list: + - sub_test_1 + - sub_test_2 + - sub_test_3 + +This is the complete format of test case configuration file. Here are some +detailed description for each of the configuration options. + +- **Test case name in Dovetail**: All test cases should be named as 'xxx.yyy.zzz'. + This is the name in Dovetail and has no relationship with its name in its own + project. The first part is used to identify the project where this test case + come from (e.g. functest, onap-vtp). The second part is used to classify this + test case according to test area (e.g. healthcheck, ha). Dovetail supports to + run whole test cases in one test suite with the same test area. Also the area + is used to group all test cases and generate the summary report at the end of + the test. The last part is special for this test case itself (e.g. image, + haproxy, csar). It's better to keep the file name the same as the test case + name to make it easier to find the config file according to this test case + name in Dovetail. + +- **validate**: This is the main section to define how to run this test case. + + - **type**: This is the type of this test case. It can be `shell` which means + running this test case with Linux bash commands within Dovetail container. Also it + can be one of the projects already integrated in Dovetail (functest, yardstick, + bottlenecks, onap-vtp and onap-vvp). Then this type is used to map to its project + configuration yaml file. For example, in order to add a test case + in OPNFV project Functest to Dovetail framework, the type here should be + `functest`, and will map to `functest_config.yml` for more configurations + in project level. Please refer to `Dovetail project config github + `_ for more details. + + - **testcase**: This is the name defined in its own project. One test case can + be uniquely identified by `type` and `testcase`. Take the test case + `functest.vping.ssh` as an example. Its `type` is 'functest' and `testcase` + is 'vping_ssh'. With these 2 properties, it can be uniquely identified. Users only + need to know that there is a test case named `functest.vping.ssh` in OVP + compliance test scope. Dovetail Framework will run `vping_ssh` within Functest + Docker container. + + - **image_name**: [optional] If the type is `shell`, there is no need to give + this. For other types, there are default docker images defined in their project + configuration files. If this test case uses a different docker image, it needs + to overwrite it by adding `image_name` here. The `image_name` here should only + be the docker image name without tag. The tag is defined in project's configuration + file for all test cases belonging to this project. + + - **pre_condition**: [optional] A list of all preparations needed by this + test case. If the list is the same as the default one in its project configuration + file, then there is no need to repeat it here. Otherwise, it's necessary to + overwrite it. If its type is `shell`, then all commands in `pre_condition`, + `cmds` and `post_condition` should be executable within Dovetail Ubuntu 14.04 + Docker container. If its type is one of the Docker runner projects, then all + commands should be executable within their own containers. For Functest, it's + alpine 3.8. For Yardstick and Bottlenecks it's Ubuntu 16.04. For VNF SDK it's + Ubuntu 14.04. Also all these commands should not require network connection + because some commercial platforms may be offline environments in private labs. + + - **cmds**: [optional] A list of all commands used to run this test case. + + - **post_condition**: [optional] A list of all commands needed after executing + this test case such as some clean up operations. + +- **report**: This is the section for this test case to archive some log files and + provide the result file for reporting PASS or FAIL. + + - **source_archive_files**: [optional] If there is no need to archive any files, + this section can be removed. Otherwise, this is a list of all source files + needed to be archived. All files generated by all integrated projects will be + put under `$DOVETAIL_HOME/results`. In order to classify and avoid overwriting + them, it needs to rename some important files or move them to new directories. + Navigating directory `$DOVETAIL_HOME/results` to find out all files + needed to be archived. The paths here should be relative ones according to + `$DOVETAIL_HOME/results`. + + - **dest_archive_files**: [optional] This should be a list corresponding to the + list of `source_archive_files`. Also all paths here should be relative ones + according to `$DOVETAIL_HOME/results`. + + - **check_results_file**: This should be the name and relative path of the result + file generated by this test case. Dovetail will parse this file to get the + result (PASS or FAIL). + + - **sub_testcase_list**: [optional] This section is almost only for Tempest tests + in Functest. Take `functest.tempest.osinterop` as an example. The `sub_testcase_list` + here is an check list for this kind of tempest tests. Only when all sub test + cases list here are passed, this test case can be taken as PASS. The other kind + of tempest tests is `tempest_custom` such as `functest.tempest.image`. Besides + taking the `sub_testcase_list` as the check list, it's also used to generate an + input file of Functest to define the list of sub test cases to be tested. + + +Test cases not belonging to integrated projects +----------------------------------------------- + +If test cases waiting to be added into Dovetail do not belong to any project +that is already integrated into Dovetail framework, then besides adding the test +case configuration files introduced before, there are some other files needed to +be added or modified. + + +Step 1: Add a project configuration file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For a new test case that belongs to a new project, it needs to create a project +configuration file to define this new project in Dovetail first. Now Dovetail +only supports integration of projects by using their Docker images. If this test +case should be run with shell runner, then can only add test case configuration +files with `type` 'shell' as describing before and skip the following steps. Following is +the introduction of how to use project configuration file to add one new project +into Dovetail. Please refer to `Dovetail projects configuration github +`_ for all configuration +files of all integrated projects. + +.. code-block:: bash + + --- + + {% set validate_testcase = validate_testcase or '' %} + {% set testcase = testcase or '' %} + {% set dovetail_home = dovetail_home or '' %} + {% set debug = debug or 'false' %} + {% set build_tag = build_tag or '' %} + {% set userconfig_dir = '/tmp/userconfig' %} + {% set patches_dir = '/tmp/patches' %} + {% set result_dir = '/tmp/results' %} + + project name: + image_name: name of the docker image + docker_tag: tag of the docker image + opts: options needed such as '-itd' + envs: envs used to create containers such as '-e DEBUG={{debug}}' + volumes: + - '-v {{dovetail_home}}/pre_config:/home/opnfv/pre_config' + - '-v {{dovetail_home}}/userconfig:{{userconfig_dir}}' + - '-v {{dovetail_home}}/patches:{{patches_dir}}' + - '-v {{dovetail_home}}/results:{{result_dir}}' + patches_dir: {{patches_dir}} + pre_condition: + - 'Commands needed to be executed before running this test' + cmds: + - 'Commands used to run this test case' + post_condition: + - 'Commands needed to be executed after running this test case' + openrc: absolute path of openstack credential files + extra_container: + - container1_name + - container2_name + +This is the complete format of project configuration file. Here are some +detailed description for each of the configuration options. + +- **Jinja Template**: At the begining of this yaml file, it uses Jinja template + to define some parameters that will be used somewhere in this file (e.g. result_dir). + Also there are some parameters providing by Dovetail framework as input of this + file, and other parameters can be defined by using these ones (e.g. testcase and + dovetail_home). The whole input parameters are list below. + + - **validate_testcase**: This is the name of the test case instance which calls this + project configuration file. The name is provided by the configuration file + of this test case (validate -> testcase). + + - **testcase**: This is the name of the test case which calls this project + configuration file. Different from `validate_testcase`, this is the name + defined in Dovetail not its own project. + + - **os_insecure**: This is only for test cases aiming at OpenStack. This is + `True` or `False` according to `env_config.sh` file. + + - **cacert**: This is also only for OpenStack test cases. It is the absolute + path of the OpenStack certificate provided in `env_config.sh` file. + + - **deploy_scenario**: This is the input when running Dovetail with option + `--deploy-scenario`. + + - **ram_num**: This is the input when running Dovetail with option + `--ram-num`. + + - **dovetail_home**: This is the `DOVETAIL_HOME` getting from the ENV. + + - **debug**: This is `True` or `False` according to the command running test + cases with or without option `--debug`. + + - **build_tag**: This is a string includes the UUID generated by Dovetail. + + - **host_url**: This is only for ONAP VNF SDK to get the HOST_URL provided + in `env_config.sh` file. + + - **csar_file**: This is also only for ONAP VNF SDK to get the CSAR_FILE + provided in `env_config.sh` file. + +- **project name**: This is the project name defined in Dovetail. For example + OPNFV Functest project is named as 'functest' here in Dovetail. This project + name will be used by test case configuration files as well as somewhere in + Dovetail source code. + +- **image_name**: This is the name of the default Docker image for all test cases + within this project. Each test case can overwrite it with its own configuration. + +- **docker_tag**: This is the tag of all Docker images for all test cases within + this project. For each release, it should use one Docker image with a stable + and official release version. + +- **opts**: Here are all options used to run Docker containers except envs and + volume mappings (e.g. '-it --privileged=true'). + +- **envs**: Here are all envs used to run Docker containers (e.g. '-e ONE=one + -e TWO=two'). + +- **volumes**: A volume mapping list used to run Docker containers. Every project + should at least map the `$DOVETAIL_HOME/pre_config` and `$DOVETAIL_HOME/results` + in the test host to containers to get config files and collect all result files. + +- **patches_dir**: This is an absolute path of the patches applied to the containers. + +- **pre_condition**: A list of all default preparations needed by this project. + It can be overwritten by configurations of test cases. + +- **cmds**: A list of all default commands used to run all test cases within + this project. Also it can be overwritten by configurations of test cases. + +- **post_condition**: A list of all default cleaning commands needed by this + project. + +- **openrc**: [optional] If the system under test is OpenStack, then it needs to + provide the absolute path here to copy the credential file in the Test Host to + containers. + + +Step 2: Add related classes +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +After adding the project and test case configuration files, there also need to +add some related classes into the source code. + +- **Test Case class**: Each project should have its own test case class in + `testcase.py` for `TestcaseFactory`. + +- **Test Runner class**: Each project should have its own test runner class in + `test_runner.py` for `TestRunnerFactory`. + +- **Crawler class**: Each project should have its own test results crawler class + in `report.py` for `CrawlerFactory`. + +- **Checker class**: Each project should have its own test results checker class + in `report.py` for `CheckerFactory`. + + +Step 3: Create related logs +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the classes added in step2 have function `create_log`, then need to call +these functions in `run.py` to initial the log instances at the very begining. + + +Step 4: Update unit tests +^^^^^^^^^^^^^^^^^^^^^^^^^ + +A patch is not going to be verified without 100% coverage when applying acceptance check. -- 2.16.6