diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2016-02-23 09:54:43 +0000 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2016-03-21 14:18:56 +0000 |
commit | b55c8beb6003f07f025fc0edbc08c3e0fcaed064 (patch) | |
tree | 435359b6ba1d382389dedc0d9bccc6964bcbb606 /vswitches/ovs_vanilla.py | |
parent | 8ee2450bd267c7dc173f62909a8a4ebe13feab84 (diff) |
integration: Support of integration testcases
Generic support for integration testcases with first
set of tests for vswitch testing.
New test option "TestSteps" has been introduced
to define test step by step directly in configuration
file.
In case that this concept will be accepted, there
are plenty of possibilities for future improvements.
For example:
* use it also for performance tests without explicit
call of validation methods
* introduce step macros for repetitive scenarios,
so new tests can be easily written
* further generalization, which would go beyond
usage of controllers and will operate directly
with vswitch, vnf and trafficgen objects
Change-Id: Ifad166c8ef9cfbda6694682fe6b3421e0e97bbf2
JIRA: VSPERF-212
Signed-off-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Christian Trautman <ctrautma@redhat.com>
Reviewed-by: Brian Castelli <brian.castelli@spirent.com>
Diffstat (limited to 'vswitches/ovs_vanilla.py')
-rw-r--r-- | vswitches/ovs_vanilla.py | 129 |
1 files changed, 15 insertions, 114 deletions
diff --git a/vswitches/ovs_vanilla.py b/vswitches/ovs_vanilla.py index 078d7006..6a380b1b 100644 --- a/vswitches/ovs_vanilla.py +++ b/vswitches/ovs_vanilla.py @@ -17,15 +17,12 @@ import logging from conf import settings -from vswitches.vswitch import IVSwitch -from src.ovs import VSwitchd, OFBridge, DPCtl +from vswitches.ovs import IVSwitchOvs +from src.ovs import VSwitchd, DPCtl from tools.module_manager import ModuleManager from tools import tasks -_LOGGER = logging.getLogger(__name__) -VSWITCHD_CONST_ARGS = ['--', '--log-file'] - -class OvsVanilla(IVSwitch): +class OvsVanilla(IVSwitchOvs): """ Open vSwitch This is wrapper for functionality implemented in src.ovs. @@ -35,16 +32,16 @@ class OvsVanilla(IVSwitch): see the interface definition. """ - _logger = logging.getLogger() _ports = settings.getValue('VSWITCH_VANILLA_PHY_PORT_NAMES') _current_id = 0 _vport_id = 0 def __init__(self): - #vswitchd_args = VSWITCHD_CONST_ARGS - vswitchd_args = ["unix:%s" % VSwitchd.get_db_sock_path()] - vswitchd_args += settings.getValue('VSWITCHD_VANILLA_ARGS') - self._vswitchd = VSwitchd(vswitchd_args=vswitchd_args, + super(OvsVanilla, self).__init__() + self._logger = logging.getLogger(__name__) + self._vswitchd_args = ["unix:%s" % VSwitchd.get_db_sock_path()] + self._vswitchd_args += settings.getValue('VSWITCHD_VANILLA_ARGS') + self._vswitchd = VSwitchd(vswitchd_args=self._vswitchd_args, expected_cmd="db.sock: connected") self._bridges = {} self._module_manager = ModuleManager() @@ -56,9 +53,7 @@ class OvsVanilla(IVSwitch): """ self._module_manager.insert_modules( settings.getValue('VSWITCH_VANILLA_KERNEL_MODULES')) - self._logger.info("Starting Vswitchd...") - self._vswitchd.start() - self._logger.info("Vswitchd...Started.") + super(OvsVanilla, self).start() def stop(self): """See IVswitch for general description @@ -70,32 +65,16 @@ class OvsVanilla(IVSwitch): tapx = 'tap' + str(i) tasks.run_task(['sudo', 'ip', 'tuntap', 'del', tapx, 'mode', 'tap'], - _LOGGER, 'Deleting ' + tapx, False) + self._logger, 'Deleting ' + tapx, False) self._vport_id = 0 - self._vswitchd.kill() + super(OvsVanilla, self).stop() dpctl = DPCtl() dpctl.del_dp() self._module_manager.remove_modules() - def add_switch(self, switch_name, params=None): - """See IVswitch for general description - """ - bridge = OFBridge(switch_name) - bridge.create(params) - bridge.set_db_attribute('Open_vSwitch', '.', - 'other_config:max-idle', '60000') - self._bridges[switch_name] = bridge - - def del_switch(self, switch_name): - """See IVswitch for general description - """ - bridge = self._bridges[switch_name] - self._bridges.pop(switch_name) - bridge.destroy() - def add_phy_port(self, switch_name): """ Method adds port based on configured VSWITCH_VANILLA_PHY_PORT_NAMES @@ -119,7 +98,7 @@ class OvsVanilla(IVSwitch): # For PVP only tasks.run_task(['sudo', 'ifconfig', port_name, '0'], - _LOGGER, 'Remove IP', False) + self._logger, 'Remove IP', False) of_port = bridge.add_port(port_name, params) self._current_id += 1 @@ -137,95 +116,17 @@ class OvsVanilla(IVSwitch): tasks.run_task(['sudo', 'ip', 'tuntap', 'del', tap_name, 'mode', 'tap'], - _LOGGER, 'Creating tap device...', False) + self._logger, 'Creating tap device...', False) tasks.run_task(['sudo', 'ip', 'tuntap', 'add', tap_name, 'mode', 'tap'], - _LOGGER, 'Creating tap device...', False) + self._logger, 'Creating tap device...', False) tasks.run_task(['sudo', 'ifconfig', tap_name, '0'], - _LOGGER, 'Bring up ' + tap_name, False) + self._logger, 'Bring up ' + tap_name, False) bridge = self._bridges[switch_name] of_port = bridge.add_port(tap_name, []) return (tap_name, of_port) - def add_tunnel_port(self, switch_name, remote_ip, tunnel_type='vxlan', - params=None): - """Creates tunneling port - """ - bridge = self._bridges[switch_name] - pcount = str(self._get_port_count('type=' + tunnel_type)) - port_name = tunnel_type + pcount - local_params = ['--', 'set', 'Interface', port_name, - 'type=' + tunnel_type, - 'options:remote_ip=' + remote_ip] - - if params is not None: - local_params = local_params + params - - of_port = bridge.add_port(port_name, local_params) - return (port_name, of_port) - - def get_ports(self, switch_name): - """See IVswitch for general description - """ - bridge = self._bridges[switch_name] - ports = list(bridge.get_ports().items()) - return [(name, of_port) for (name, (of_port, _)) in ports] - - def del_port(self, switch_name, port_name): - """See IVswitch for general description - """ - bridge = self._bridges[switch_name] - bridge.del_port(port_name) - - def add_flow(self, switch_name, flow, cache='off'): - """See IVswitch for general description - """ - bridge = self._bridges[switch_name] - bridge.add_flow(flow, cache=cache) - - def del_flow(self, switch_name, flow=None): - """See IVswitch for general description - """ - flow = flow or {} - bridge = self._bridges[switch_name] - bridge.del_flow(flow) - - def dump_flows(self, switch_name): - """See IVswitch for general description - """ - bridge = self._bridges[switch_name] - bridge.dump_flows() - - def add_route(self, switch_name, network, destination): - """See IVswitch for general description - """ - bridge = self._bridges[switch_name] - bridge.add_route(network, destination) - - def set_tunnel_arp(self, ip_addr, mac_addr, switch_name): - """See IVswitch for general description - """ - bridge = self._bridges[switch_name] - bridge.set_tunnel_arp(ip_addr, mac_addr, switch_name) - - def _get_port_count(self, param): - """Returns the number of ports having a certain parameter - - :param bridge: The src.ovs.ofctl.OFBridge on which to operate - :param param: The parameter to search for - :returns: Count of matches - """ - cnt = 0 - for k in self._bridges: - pparams = [c for (_, (_, c)) in list(self._bridges[k].get_ports().items())] - phits = [i for i in pparams if param in i] - cnt += len(phits) - - if cnt is None: - cnt = 0 - return cnt - |