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 Installation
-------------------

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.



