#!/usr/bin/env python # # NEPI, a framework to manage network experiments # Copyright (C) 2013 INRIA # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Author: Alina Quereilhac # Alexandros Kouvakas # Switch1 ------- Switch2 # / \ # / \ # / \ # Host1 Host2 from nepi.execution.ec import ExperimentController from test_utils import skipIfAnyNotAlive import os import time import unittest class OvsTestCase(unittest.TestCase): def setUp(self): self.switch1 = "planetlab2.virtues.fi" self.switch2 = "planetlab2.upc.es" self.host1 = "planetlab2.ionio.gr" self.host2 = "planetlab2.cs.aueb.gr" self.user = "inria_nepi" @skipIfAnyNotAlive def t_ovs(self, user1, switch1, user2, switch2, user3, host1, user4, host2): ec = ExperimentController(exp_id = "test-ovs") node1 = ec.register_resource("PlanetlabNode") ec.set(node1, "hostname", switch1) ec.set(node1, "username", user1) ec.set(node1, "cleanHome", True) ec.set(node1, "cleanProcesses", True) ovs1 = ec.register_resource("OVSSwitch") ec.set(ovs1, "bridge_name", "nepi_bridge") ec.set(ovs1, "virtual_ip_pref", "192.168.3.1/24") ec.set(ovs1, "controller_ip", "85.23.168.77") ec.set(ovs1, "controller_port", "6633") ec.register_connection(ovs1, node1) port1 = ec.register_resource("OVSPort") ec.set(port1, "port_name", "port-1") ec.register_connection(port1, ovs1) port2 = ec.register_resource("OVSPort") ec.set(port2, "port_name", "port-2") ec.register_connection(port2, ovs1) node2 = ec.register_resource("PlanetlabNode") ec.set(node2, "hostname", switch2) ec.set(node2, "username", user2) ec.set(node2, "cleanHome", True) ec.set(node2, "cleanProcesses", True) ovs2 = ec.register_resource("OVSSwitch") ec.set(ovs2, "bridge_name", "nepi_bridge") ec.set(ovs2, "virtual_ip_pref", "192.168.3.2/24") ec.set(ovs2, "controller_ip", "85.23.168.77") ec.set(ovs2, "controller_port", "6633") ec.register_connection(ovs2, node2) port3 = ec.register_resource("OVSPort") ec.set(port3, "port_name", "port-3") ec.register_connection(port3, ovs2) port4 = ec.register_resource("OVSPort") ec.set(port4, "port_name", "port-4") ec.register_connection(port4, ovs2) node3 = ec.register_resource("PlanetlabNode") ec.set(node3, "hostname", host1) ec.set(node3, "username", user3) ec.set(node3, "cleanHome", True) ec.set(node3, "cleanProcesses", True) tap1 = ec.register_resource("PlanetlabTap") ec.set(tap1, "ip4", "192.168.3.3") ec.set(tap1, "pointopoint", "192.168.3.1") ec.set(tap1, "prefix4", 24) ec.register_connection(tap1, node3) node4 = ec.register_resource("PlanetlabNode") ec.set(node4, "hostname", host2) ec.set(node4, "username", user4) ec.set(node4, "cleanHome", True) ec.set(node4, "cleanProcesses", True) tap2 = ec.register_resource("PlanetlabTap") ec.set(tap2, "ip4", "192.168.3.4") ec.set(tap2, "pointopoint", "192.168.3.2") ec.set(tap2, "prefix4", 24) ec.register_connection(tap2, node4) ovstun1 = ec.register_resource("OVSTunnel") ec.register_connection(port1, ovstun1) ec.register_connection(tap1, ovstun1) ovstun2 = ec.register_resource("OVSTunnel") ec.register_connection(port3, ovstun2) ec.register_connection(tap2, ovstun2) ovstun3 = ec.register_resource("OVSTunnel") ec.register_connection(port2, ovstun3) ec.register_connection(port4, ovstun3) app1 = ec.register_resource("LinuxApplication") cmd = "ping -c3 192.168.3.2" ec.set(app1, "command", cmd) ec.register_connection(app1, node1) app2 = ec.register_resource("LinuxApplication") cmd = "ping -c3 192.168.3.4" ec.set(app2, "command", cmd) ec.register_connection(app2, node2) ec.deploy() ec.wait_finished(app2) if_name = ec.get(tap1, "deviceName") self.assertTrue(if_name.startswith("tap")) if_name = ec.get(tap2, "deviceName") self.assertTrue(if_name.startswith("tap")) ping1 = ec.trace(app1, 'stdout') expected1 = """3 packets transmitted, 3 received, 0% packet loss""" self.assertTrue(ping1.find(expected1) > -1) ping2 = ec.trace(app2, 'stdout') expected2 = """3 packets transmitted, 3 received, 0% packet loss""" self.assertTrue(ping2.find(expected2) > -1) ec.shutdown() def test_ovs(self): self.t_ovs(self.user, self.switch1, self.user, self.switch2, self.user, self.host1, self.user, self.host2) if __name__ == '__main__': unittest.main()