.. SPDX-FileCopyrightText: 2021 Open Networking Foundation <info@opennetworking.org>
.. SPDX-License-Identifier: Apache-2.0

System Integration Test (TestON)
================================

Each component of SD-Fabric has it's own testing infrastructure for component level tests. However, we need a way to
test all the components together. For SD-Fabric, we are using a framework called `TestON`_ to write these tests. We
use TestON to manipulate the components via CLI sessions over ssh or rest APIs. More information on how TestON works
can be found in the `TestON Guide`_. The dataplane for these tests are either an emulated network running in Mininet
using software switches, or hardware pods located in our lab. We use a variety of traffic generation tools running
on the hosts to create traffic in the fabric.

The current :ref:`topology<Topology>` for the hardware pod used for integration test is a set of leaf pair switches,
a dual homed management server, and 3 compute nodes. One compute node is dual homed, one is dual homed with a second
link to the second leaf switch, and one single homed to the second leaf switch.

.. image:: ../images/paired-leaves-pod.svg
  :scale: 100

We also run soak testing and failure/recovery test in a 2x2 hardware pod.

.. image:: ../images/topology-2x2.png
   :width: 300px

Test Suites
-----------

 * Functionality Tests

     * `Paired Leaves <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves>`_

        * Basic Connectivity - All hosts can ping each other and their fabric interfaces.

        * Link Failure - Verify a traffic stream fails over when there is a link failure. We test both failure of both
          the source and destination links for dual and single homed hosts.

        * Switch Failure - Verify a traffic stream fails over when there is a switch failure. We test several device
          failure modes for both the source and destination leaves for dual and single homed hosts.

     * `Bridging <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/SRBridging>`_ - Verify bridging works between different host VLAN configurations.

     * `Routing <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/SRRouting>`_ - Verify routing works with different route configurations.

     * `INT <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/INT>`_ - Verify INT reports for different packet drop reasons.

     * `UPF <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/UP4>`_ - Tests ONOS UP4 APIs, such as attachment and detachment of UEs as well as verify encapsulation of both
       upstream and downstream traffic.

     * QOS

        * `QOS <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/QOS>`_ - Generate traffic flows with different QFIs and verify QOS using port statistics.

        * `QOSNonMobile <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/QOSNonMobile>`_ - Generate traffic flows with non mobile Traffic Classification and verify QOS using port statistics.

 * Failure/Recovery Tests

    * Link Failure Tests - Setup a flow from between hosts connected to different leaves, disable a link between a
      leaf and a spine used by the flow, verify and measure how fast the flow is rerouted to another link.

       * `Access Leaf <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/SRStaging/SReNBLeafSpinePortstateFailure>`_ - Disable a link between the access leaf and a spine.

       * `Upstream Leaf <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/SRStaging/SRupstreamLeafSpinePortstateFailure>`_ - Disable a link between the upstream lead and a spine.

    * Switch Failure Tests - Setup a flow from between hosts connected to different leaves, disable a spine used by
      the flow, verify and measure how fast the flow is rerouted to another spine.

       * `Switch OS Reboot <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/SRStaging/SRONLReboot>`_ - Simulate a switch failure by restarting ONL on the switch.

       * `Stratum Restart <https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/tests/USECASE/SegmentRouting/SRStaging/SRstratumRestart>`_ - Simulate a switch failure by killing the stratum agent on the switch.


Test Results
------------

The nightly test results can be found by looking at the `SD-Fabric Nightly Tests`_ view on the `Aether Jenkins`_
website. The functionality test suites are run on the Paired Leaves Pod and the failure/recovery jobs are run on the
Staging Pod.

.. _SD-Fabric Nightly Tests: https://jenkins.aetherproject.org/view/SD-Fabric%20Nightly%20Tests/
.. _Aether Jenkins: https://jenkins.aetherproject.org/login
.. _TestON: https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON
.. _TestON Guide: https://wiki.onosproject.org/display/ONOS/System+Testing+Guide
