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.



