functest_utils.py : bugfix: logg-->logger
[functest.git] / docs / functest.rst
index d8606aa..55c3aa1 100644 (file)
 OPNFV functional test guide
 ===========================
 
-The goal of this document consists in describing how to run functional tests on OPNFV solution and how to automate these tests.
+Testing is a key challenge of OPNFV.
+It shall be possible to run functional tests on any OPNFV solution.
 
-For release 1, several test cases have been selected:
- * Rally Bench test suite
- * Tempest tes suite
+The goal of this document consists in
+ * a description of functional tests for OPNFV
+ * a description of the tools needed to perform these tests
+ * the procedure to configure the tools and the scenarios associated with these tests
+
+Functional tests shall be automated (as much as possible) and collected results shall be used to improve the robustness and the reliability of the overall system.
+
+Function tests may cover any domain that could lead to improve the OPNFV solution and define "Telco Cloud" KPI.
+
+The last section also describes how to automate these tests within the OPNFV continuous integration project.
+
+.. _ETSI: http://docbox.etsi.org/ISG/NFV/Open/Published/gs_NFV001v010101p%20-%20Use%20Cases.pdf
+
+ETSI NFV defined 9 use cases (ref ETSI_):
+ * VNF as a Service
+ * NFV as a service
+ * VNF Forwarding graphs
+ * Virtual Network Platform as a Service
+ * Virtualisation of Mobile Core and IMS
+ * Virtualisation of Mobile station
+ * Fixed Access NFV
+ * Virtualization of CDNs (vCDN)
+ * Virtualization of the Home environment
+
+.. _`Openstack Telco Working Group`: https://wiki.openstack.org/wiki/TelcoWorkingGroup
+
+Most of the use cases are also discussed in upstream projects (e.g. `Openstack Telco Working Group`_ )
+
+For release 1 (Arno), 4 test suites have been selected:
+ * Rally Bench test suite for Openstack
+ * Openstack Tempest test suite
  * OpenDaylight test suite
  * vPing
- * vIMS
+
+The 3 first suites are directly inherited from upstream projects.
+vPing, that is already present in Tempest suite, has been developped to provided a basic "hello world" functional test example.
+
+.. _`Continuous Integration`: https://build.opnfv.org/ci/view/functest/
+
+vIMS, vEPC, vPE, vHGW, vCDN use cases are not considered for first release.
+It does not mean that such use cases cannot be tested on OPNFV Arno.
+It means that these testcases have not been integrated in the `Continuous Integration`_ and no specific work (integration or developpment) have been done for R1.
+We may expect that new VNFs and new scenarios will be created and integrated in the future releases.
 
 .. _prereqs:
 
 -------------
 Prerequisites
 -------------
-We assume that an OPNFV solution has been installed (System Under Test).
-For release 1, the tools needed for functional testing are not part of the installer and are not automatically installed.
+We assume that an OPNFV Arno solution has been installed.
 
-.. _pharos: https://wiki.opnfv.org/pharos
+.. _here: https://wiki.opnfv.org/documentation/Arno
+
+The installation of the OPNFV solution is out of scope of this document but can be found [here_].
+In the rest of the document the OPNFV solution would be considered as the System Under Test (SUT).
 
-It is recommended to install the tools on the jump host server as defined in the Pharos project.
+The installation and configuration of the tools needed to perform the tests will be described in the following sections.
 
-.. _installation:
+For release 1, the tools are not fully automatically installed, more details will be provided in the configuration section.
 
-------------
-Installation
-------------
+.. _pharos: https://wiki.opnfv.org/pharos
+
+It is recommended to install the different tools on the jump host server as defined in the pharos_ project.
+The high level architecture can be described as follow::
+
+ CIMC/Lights+out management                  Admin     Private   Public   Storage
+                                              PXE
+                                                                   +
+ +                                             +     IP_PRIV/24    |        |
+ |                                             |         +         +        |
+ |                                             |         |    IP_PUB/24     |
+ |     +-----------------+                     |         |         +        |
+ |     |                 |                     |         |         |        |
+ +-----+  Jumpserver     |                     |         |         |        |
+ |     |                 +---------------------+         |         |        |
+ |     |                 |                     |         |         |        |
+ |     |  +----------+   |                     |         |         |        |
+ |     |  |  Rally   |   +---- --------------------------+         |        |
+ |     |  |          |   |                     |         |         |        |
+ |     |  |  Robot   |   |                     |         |         |        |
+ |     |  |          |   |                     |         |         |        |
+ |     |  |  vPing   |   |                     |         |         |        |
+ |     |  |          |   |                     |         |         |        |
+ |     |  | Tempest  |   |                     |         |         |        |
+ |     |  +----------+   |                     |         |         |        |
+ |     |   FuncTests     +-----------------------------------------+        |
+ |     |                 |                     |         |         |        |
+ |     |                 +--------------------------------------------------+
+ |     |                 |                     |         |         |        |
+ |     +-----------------+                     |         |         |        |
+ |                                             |         |         |        |
+ |    +----------------+                       |         |         |        |
+ |    |             1  |                       |         |         |        |
+ +----+ +--------------+-+                     |         |         |        |
+ |    | |             2  |                     |         |         |        |
+ |    | | +--------------+-+                   |         |         |        |
+ |    | | |             3  |                   |         |         |        |
+ |    | | | +--------------+-+                 |         |         |        |
+ |    | | | |             4  |                 |         |         |        |
+ |    +-+ | | +--------------+-+               |         |         |        |
+ |      | | | |             5  +---------------+         |         |        |
+ |      +-+ | |  nodes for     |               |         |         |        |
+ |        | | |  deploying     +-------------------------+         |        |
+ |        +-+ |  opnfv         |               |         |         |        |
+ |          | |     SUT        +-----------------------------------+        |
+ |          +-+                |               |         |         |        |
+ |            |                +--------------------------------------------+
+ |            +----------------+               |         |         |        |
+ |                                             |         |         |        |
+ |                                             +         +         +        +
+
+.. _description:
+
+-----------------------------
+Description of the test cases
+-----------------------------
 
 Rally bench test suite
 ======================
 
-Create or enter a folder where you want to check out the tool repos. Follow `Rally installation procedure`_.
+.. _Rally: https://wiki.openstack.org/wiki/Rally
 
-.. _`Rally installation procedure`: https://rally.readthedocs.org/en/latest/tutorial/step_0_installation.html
+The OPNFV scenarios are based on the collection of Rally_ scenarios:
+ * authenticate
+ * cinder
+ * nova
+ * vm
+ * glance
+ * keystone
+ * neutron
+ * quotas
+
+The goal of this test suite is to test the different modules of OpenStack and get significant figures that could help us to define telco Cloud KPI.
+
+This test suite provides performance information on VIM (OpenStack) part.
 
+No SLA were defined for release 1, we just consider whether the tests are passed or failed.
+
+In the future SLA shall be considered (e.g. accepting booting time for a given image with a given flavour).
+
+Through its integration in Continuous Integration, the evolution of the performance of these tests shall also be considered.
 
 Tempest
 =======
 
-It is possible to use Rally to perform Tempest tests. See `tempest installation guide using Rally`_.
+.. _Tempest: http://docs.openstack.org/developer/tempest/overview.html
+
+Tempest_ is the OpenStack Integration Test Suite. We use Rally to run Tempest suite.
+
+The goal of this test is to check the OpenStack installation (sanity checks).
 
-.. _`tempest installation guide using Rally`: https://www.mirantis.com/blog/rally-openstack-tempest-testing-made-simpler/
 
 OpenDaylight
 ============
-ODL wiki page describes system preparation and running tests. See `Integration Group CSIT`_.
 
-.. _`Integration Group CSIT`: https://wiki.opendaylight.org/view/CrossProject:Integration_Group:CSIT
+The ODL suite consists in a set of basic tests inherited from ODL project. The list of tests can be described as follow:
+ * Restconf.basic: Get the controller modules via Restconf
+ * Neutron.Networks
+  * Check OpenStack Networks :: Checking OpenStack Neutron for known networks
+  * Check OpenDaylight Networks :: Checking OpenDaylight Neutron API
+  * Create Network :: Create new network in OpenStack
+  * Check Network :: Check Network created in OpenDaylight
+  * Neutron.Networks :: Checking Network created in OpenStack are pushed
+ * Neutron.Subnets
+  * Check OpenStack Subnets :: Checking OpenStack Neutron for known Subnets
+  * Check OpenDaylight subnets :: Checking OpenDaylight Neutron API
+  * Create New subnet :: Create new subnet in OpenStack
+  * Check New subnet :: Check new subnet created in OpenDaylight
+  * Neutron.Subnets :: Checking Subnets created in OpenStack are pushed
+ * Neutron.Ports
+  * Check OpenStack ports :: Checking OpenStack Neutron for known ports
+  * Check OpenDaylight ports :: Checking OpenDaylight Neutron API
+  * Create New Port :: Create new port in OpenStack
+  * Check New Port :: Check new subnet created in OpenDaylight
+  * Neutron.Ports :: Checking Port created in OpenStack are pushed
+
+vPing
+=====
 
-Summary: Set up python2.7 virtual environment::
+The goal of this test can be described as follow::
 
-    mkvirtualenv robot
+ vPing testcase
+ +-------------+                   +-------------+
+ |             |                   |             |
+ |             |                   |             |
+ |             |     Boot VM1      |             |
+ |             +------------------>|             |
+ |             |                   |             |
+ |             |     Get IP VM1    |             |
+ |             +------------------>|             |
+ |   Tester    |                   |   System    |
+ |             |     Boot VM2      |    Under    |
+ |             +------------------>|     Test    |
+ |             | VM2 pings VM1     |             |
+ |             |                   |             |
+ |             | Check console log |             |
+ |             |    If ping:       |             |
+ |             |      exit OK      |             |
+ |             |    else (timeout) |             |
+ |             |      exit KO      |             |
+ |             |                   |             |
+ |             |                   |             |
+ +-------------+                   +-------------+
 
-    pip install requests
-    pip install robotframework
-    pip install robotframework-sshlibrary
-    pip install robotframework-requests
 
-vPing
-=====
+This example, using OpenStack Python clients can be considered as an "Hello World" example and may be modified for future use.
 
-vIMS
-====
+.. _tooling_installation:
 
+----------------------
+Tooling installation
+----------------------
 
-.. _manualtest:
+2 external tools are needed for the functional tests on Arno:
+ * Rally
+ * Robot
 
---------------
-Manual testing
---------------
+Rally is used for benchmarking and running Tempest. Robot is used for OpenDaylight.
 
-Rally
-=====
-Check your deployment::
+A script (config_test.py) has been created to simplify as much as possible the installation of the different suites of tests.
+
+This script config_test.py_ is hosted in OPNFV repository and uses the configuration file config_functest.yaml_::
+
+ usage: config_functest.py [-h] [-d] [-f] path action
+
+ positional arguments:
+  repo_path    path to the repository
+  action       Possible actions are: 'start|check|clean'
+
+ optional arguments:
+  -h, --help   show this help message and exit
+  -d, --debug  Debug mode
+  -f, --force  used to avoid prompting the user for confirmation when cleaning functest environment.
+
+Actions
+ * start: will prepare the functional testing environment
+ * check: will check the configuration (scenarios available, environment variables properly set, networks,..)
+ * clean: will clean the functional test environement if existing
+
+This script will:
+ * Install Rally environment
+ * Install Tempest
+ * Retrieve test scenarios
+ * Setup ODL environment
+ * Create temporary neutron private network
+ * Create router to connect both
+ * Create Glance images
+
+
+Useful links:
+
+.. _`OpenRC`: http://docs.openstack.org/user-guide/common/cli_set_environment_variables_using_openstack_rc.html
+
+.. _`Rally installation procedure`: https://rally.readthedocs.org/en/latest/tutorial/step_0_installation.html
+
+.. _`config_test.py` : https://git.opnfv.org/cgit/functest/tree/testcases/config_functest.py
+
+.. _`config_functest.yaml` : https://git.opnfv.org/cgit/functest/tree/testcases/config_functest.yaml
+
+
+When integrated in CI, the only prerequisite consists in retrieving the OpenStack credentials (rc file).
+This file shall be saved as $HOME/functest/opnfv-openrc.shn on the jumphost server.
+In this case, the script will clone the functest repository, execute environment checks and install tools.
+
+
+The procedure to set up functional testing environment can be described as follow::
+
+    Log on the Jumphost server
+    Be sure you are no root
+    Modify and adapt needed parameters in the config_functest.yaml. Follow the instructions below.
+    Retrieve OpenStack source file (configure your `OpenRC`_ file to let Rally access to your OpenStack, you can either export it from Horizon or build it manually (OpenStack credentials are required)
+    $ source Your_OpenRC_file
+    $ python config_functest.py -d <Your_functest_directory> start
+
+At the end of the executing, a new directory will be created <functest_repo_directory> with the following structure::
+
+ <functest_repo_directory>/ODL
+ <functest_repo_directory>/Rally_repo
+ <functest_repo_directory>/Rally_test
+ <functest_repo_directory>/vPing
+ <functest_repo_directory>/config_functest.yaml
+ <functest_repo_directory>/functest-img.img
+
+NOTE: the Rally environment will be installed under ~/.rally/ the default Tempest configuration (automatically generated by Rally based on OpenStack credentials) can be found une .rally/tempest/for-deployment-<deployment_id>/tempest.conf
+
+
+HOWTO configure config_functest.yaml:
+
+Do not change the directories structure
+    * image_name:               name of the image that will be created in Glance
+    * image_url:                URL of the image to be downloaded
+    * image_disk_format:        glance image disk format (raw, qcow2, ...)
+
+    * neutron_private_net_name:     name of an OpenStack private network. If not existing, it will be created
+    * neutron_private_subnet_name:  private subnet network to be created if not existing
+    * neutron_private_subnet_cidr:  range of the private subnet.
+    * neutron_private_subnet_start: start IP
+    * neutron_private_subnet_end:   end IP
+    * neutron_router_name:          name of the router between the private and the public networks
+
+    * ping_timeout: time out of the vPing test case
+    * vm_flavor:    name of the flavor used to create the VMs
+    * vm_name_1:    name of the first VM
+    * vm_name_2:    name of the second VM
+
+
+Please note that you need to install this environment only once. Until the credentials of the System Under Test are not changing, the testing environment shall be fine.
+
+If you need more details on Rally installation, see `Rally installation procedure`_.
+
+You can check if the configuration of rally is fine by typing 'rally deployment check', you shall see the list of available services as follow::
 
     # rally deployment check
     keystone endpoints are valid and following service are available:
@@ -91,36 +332,148 @@ Check your deployment::
     | novav3    | computev3   | Available  |
     +-----------+-------------+------------+
 
-Create a new opnfv scenario directory and run test suite::
+    # rally show images
+    +--------------------------------------+----------------------------------------------+------------+
+    | UUID                                 | Name                                         | Size (B)   |
+    +--------------------------------------+----------------------------------------------+------------+
+    | 0a15951f-6388-4d5d-8531-79e7205eb140 | cirros_2015_04_10_13_13_18                   | 13167616   |
+    | b1504066-045a-4f8f-8919-8c665ef3f400 | Ubuntu 14.04 64b                             | 253297152  |
+    +--------------------------------------+----------------------------------------------+------------+
+
+    # rally show flavors
+    +--------------------------------------+---------------------+-------+----------+-----------+-----------+
+    | ID                                   | Name                | vCPUs | RAM (MB) | Swap (MB) | Disk (GB) |
+    +--------------------------------------+---------------------+-------+----------+-----------+-----------+
+    | 110e6375-a058-4af6-b21e-b765187904d2 | m1.medium           | 2     | 1024     |           | 20        |
+    | 7084d7e7-415a-455d-a55a-2ad286ddf7c9 | m1.large            | 4     | 4096     |           | 80        |
+    | a0345ba7-c667-4fd2-964f-7e98f8cda279 | m1.xlarge           | 4     | 8192     |           | 200       |
+    | accdc28c-5e20-4859-a5cc-61cf9009e56d | m1.small            | 1     | 512      |           | 10        |
+    +--------------------------------------+---------------------+-------+----------+-----------+-----------+
+
+    # rally show networks
+    Networks for user `admin` in tenant `admin`:
+    +--------------------------------------+------------------------------+------+
+    | ID                                   | Label                        | CIDR |
+    +--------------------------------------+------------------------------+------+
+    | 4f43c349-956f-4073-9ef6-75bf4e62a0e7 | functest-net                 | None |
+    | faefaab1-e503-41fc-875b-5e3112be49ed | provider_network             | None |
+    +--------------------------------------+------------------------------+------+
 
-    # cd ~/rally/samples/tasks/scenario/
-    # mkdir opnfv
-    # wget http://git.opnfv.org/.. <TODO>
-    # rally task start --abort-on-sla-failure ./opnfv.json
 
-Tempest
-=======
+--------------
+Manual testing
+--------------
+
+Rally bench suite
+=================
+
+Several scenarios are available (mainly based on native Rally scenarios):
+ * glance
+ * nova
+ * authenticate
+ * keystone
+ * neutron
+ * quotas
+ * request
+ * tempest
+ * smoke
+ * all (every module except tempest and smoke)
+
+You can run the script as follow::
+
+    # python run_rally.py keystone
+
+The script will:
+ * get the json scenario (if not already available) and put it into the scenario folder
+ * run rally
+ * generate the html result page into <result_folder>/<timestamp>/opnfv-[module name].html
+ * generate the json result page into <result_folder>/<timestamp>/opnfv-[module name].json
+ * generate OK or KO
+
+Tempest suite
+=============
+
+It is possible to use Rally to perform Tempest tests (ref: `tempest installation guide using Rally`_)
+You just need to run::
+
+     # rally verify start
+
+The different modes available are smoke, baremetal, compute, data_processing, identity, image, network, object_storage, orchestration, telemetry, and volume. By default if you do not precise anything then smoke tests be selected by default. For Arno, it was decided to focus on smoke tests.
+
+.. _`tempest installation guide using Rally`: https://www.mirantis.com/blog/rally-openstack-tempest-testing-made-simpler/
 
-If we consider running Tempest suite with Rally::
+OpenDaylight
+============
+ODL wiki page describes system preparation and running tests. See `Integration Group CSIT`_.
+
+.. _`Integration Group CSIT`: https://wiki.opendaylight.org/view/CrossProject:Integration_Group:CSIT
+
+
+.. _manualtest:
+
+--------------
+Test results
+--------------
+
+Rally bench suite
+=================
+
+Results are available in the result folder through a html page and a json file.
+
+Tempest suite
+=============
+
+You can get the results of tempest by typing::
 
-    # rally verify start
     # rally verify list
 
+You shall see the results as follow::
+
+    Total results of verification:
+
+    +--------------------------------------+--------------------------------------+----------+-------+----------+----------------------------+----------+
+    | UUID                                 | Deployment UUID                      | Set name | Tests | Failures | Created at                 | Status   |
+    +--------------------------------------+--------------------------------------+----------+-------+----------+----------------------------+----------+
+    | 0144c50f-ab03-45fb-9c36-242ad6440b46 | d9e1bb21-8e36-4d89-b137-0c852dbb308e | smoke    | 87    | 32       | 2015-05-05 16:36:00.986003 | finished |
+    +--------------------------------------+--------------------------------------+----------+-------+----------+----------------------------+----------+
+
+If you run this test several times, you will see as many lines as test attempts.
+
+You can get more details on the test by typing::
+
+    # rally verify show --uuid <UUID of the test>
+    # rally verify detailed --uuid <UUID of the test>
+
+"show" will show you all the restults including the time needed to execute the test.
+"detailed" will display additional elements (errors)
 
+Example of test result display::
 
+    +------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------+
+    | name                                                                                                                                                       | time      | status |
+    +------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+--------+
+    | tempest.api.network.test_routers.RoutersTest.test_create_show_list_update_delete_router[id-f64403e2-8483-4b34-8ccd-b09a87bcc68c,smoke]                     | 0.011466  | FAIL   |
+    | tempest.api.network.test_security_groups.SecGroupIPv6Test.test_create_list_update_show_delete_security_group[id-bfd128e5-3c92-44b6-9d66-7fe29d22c802,smoke]| 1.234566  | OK     |
+    | tempest.api.network.test_security_groups.SecGroupIPv6Test.test_create_show_delete_security_group_rule[id-cfb99e0e-7410-4a3d-8a0c-959a63ee77e9,smoke]       | 1.060221  | OK     |
+    | tempest.api.network.test_security_groups.SecGroupIPv6Test.test_list_security_groups[id-e30abd17-fef9-4739-8617-dc26da88e686,smoke]                         | 0.060797  | OK     |
+    | tempest.api.network.test_security_groups.SecGroupTest.test_create_list_update_show_delete_security_group[id-bfd128e5-3c92-44b6-9d66-7fe29d22c802,smoke]    | 0.685149  | OK     |
+    | tempest.api.network.test_security_groups.SecGroupTest.test_create_show_delete_security_group_rule[id-cfb99e0e-7410-4a3d-8a0c-959a63ee77e9,smoke]           | 0.730561  | OK     |
+    | tempest.api.network.test_security_groups.SecGroupTest.test_list_security_groups[id-e30abd17-fef9-4739-8617-dc26da88e686,smoke]                             | 0.116862  | OK     |
+    | tempest.api.object_storage.test_account_quotas.AccountQuotasTest                                                                                           | 0.0       | SKIP   |
+    | ...                                                                                                                                                        |   ...     |  ...   |
 
 OpenDaylight
 ============
 
 Tests can be executed with script *start_test.sh* from directory *functest/testcases/Controllers/ODL/CI*. For usage example see::
 
-    # bash start_test.sh -h
+    # bash ~./.functest/ODL/start_test.sh -h
 
 vPing
 =====
+The test can be executed with command::
 
-vIMS
-====
+    #python ~./.functest/vPing.py -d
 
 
 .. _automatictest:
@@ -129,20 +482,28 @@ vIMS
 Testing Automation
 ------------------
 
+For Arno, the CI job performs the following actions:
+ * clean and prepare functest environment
+ * run Tempest
+ * run vPing
+ * run Rally Bench
+ * run ODL tests
+ * save results
+ * clean functest environment
+
 Connection of your platform
 ===========================
-If you want to add your platform to the community automation, you need to declare your machine as a Jenkins slave.
- * Send a mail to OPNFV LF Helpdesk (opnfv-helpdesk@rt.linuxfoundation.org)
- * Create a local user jenkins on your machine
- * wget http://mirrors.jenkins-ci.org/war/1.599/jenkins.war
- * Extract contents, find the file named slave.jar and copy it to somewhere which jenkins user created in first step can access.
- * Create a directory /home/jenkins/opnfv_slave_root
- * check the java version (>1.7.0_75)
- * Contact Linux Foundation to manage authentication of your server
- * A key/token will be produced. Establish connection towards OPNFV Jenkins by using below command: java -jar slave.jar -jnlpUrl https://build.opnfv.org/ci/computer/<slave_name>/slave-agent.jnlp -secret <token>
-
-Continuous integration scripts
-==============================
+
+.. _`Octopus procedure`: https://wiki.opnfv.org/octopus/jenkins_slave_connection/
+
+If you want to add your platform to the community automation, please follow the `Octopus procedure`_.
+
+Integrating into CI Pipeline
+============================
+
+.. _`pipeline document`: https://wiki.opnfv.org/octopus/pipelines
+
+Contact Octopus Team (#opnfv-octopus) and see `pipeline document`_ for more details.
 
 .. _references: