blob: 9dd9e91726461a4a9b1aa70a89abb60221180d78 [file] [log] [blame]
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.