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