Data Plane Testing
******************

OFTest Overview
===============

The oftest framework consists of a test server connected to a target switch
through an OpenFlow channel and directly to the data plane ports of the OF
switch.

After programming the switch, oftest inserts packets in the data plane and
verifies if the output is as expected.

.. image:: ../images/testing-oftest.png

We recommend using a server connected to a management network, a switch
connected to the same management network, and then a **minimum of 2 ports
directly connected between the server and the switch**.

A few tests will fail if you have less than 3 ports.

OFTest Setup
============

To install OFTEST on Ubuntu, type the following:

.. code-block:: console

    $ sudo apt-get install python python-pip python-dev python-lxml libffi-dev libssl-dev -y
    $ sudo pip install cryptography
    $ sudo pip install ncclient
    $ sudo pip install scapy pycrypto
    $ sudo apt-get install python-ecdsa git
    $ git clone https://gerrit.opencord.org/fabric-oftest

Now let's configure the switch and point it to the test server.

It can be done in the same way as connecting the switch to any controller.

See `Connect Switch to Controller
<../installation.html#connect-switch-to-controller>`_ for more details.

Assuming that you plugged the ports ``12`` and ``24`` of the switch to
interfaces ``eth1`` and ``eth2`` of the server, respectively, then the
following command can tell you if everything is working.

.. code-block:: console

    $ cd oftest
    $ sudo ./oft -V1.3 --test-dir=ofdpa flows.PacketInArp -i 12@eth1 -i 24@eth2
    WARNING: No route found for IPv6 destination :: (no default route?)
    flows.PacketInArp ... ok
    ----------------------------------------------------------------------
    Ran 1 test in 4.044s
    OK

Run Tests
=========

The command below should give you the following result:

.. code-block:: console

    $ sudo ./oft -V1.3 --test-dir=ofdpa flows -i 12@eth1 -i 24@eth2
    flows.ArpNL2 ... FAIL
    flows.L2FloodQinQ ... ok
    flows.L2FloodTagged ... ok
    flows.L2FloodTaggedUnknownSrc ... ok
    flows.L2UnicastTagged ... ok
    flows.L3McastToL2 ... FAIL
    flows.L3McastToL3 ... FAIL
    flows.L3McastToVPN ... FAIL
    flows.L3UcastTagged ... ok
    flows.L3VPNMPLS ... ok
    flows.L3VPN_32 ... FAIL
    flows.MPLSBUG ... ok
    flows.MplsTermination ... FAIL
    flows.Mtu1500 ... ok
    flows.Mtu4000 ... ERROR
    flows.PacketInArp ... ok
    flows.PacketInSrcMacMiss ... FAIL
    flows.PacketInUDP ... ok

For example, in this case, all the multicast failed because we don't have three
ports, the test L3VPN failed as well, and that is a bug of the current build.
The **PacketInSrcMac** Miss failed because Mac learning is not enabled.

.. note::
    Expected test results can be found in https://github.com/opencord/fabric-oftest/blob/master/README.md

.. tip::
    OFTest can't successfully delete all groups using an OF message, because of
    that some tests interfere with others.

    If the results seem suspicious, **erase the flow tables and group tables**
    and run the test alone.
