-# Copyright 2015 Intel Corporation.
+# Copyright 2015-2018 Intel Corporation., Tieto
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
"""
from core.traffic_controller_rfc2544 import TrafficControllerRFC2544
+from core.traffic_controller_rfc2889 import TrafficControllerRFC2889
+from core.vswitch_controller_clean import VswitchControllerClean
from core.vswitch_controller_p2p import VswitchControllerP2P
-from core.vswitch_controller_pvp import VswitchControllerPVP
-from core.vnf_controller_p2p import VnfControllerP2P
-from core.vnf_controller_pvp import VnfControllerPVP
-from core.collector_controller import CollectorController
+from core.vswitch_controller_pxp import VswitchControllerPXP
+from core.vswitch_controller_op2p import VswitchControllerOP2P
+from core.vswitch_controller_ptunp import VswitchControllerPtunP
+from core.vnf_controller import VnfController
+from core.pktfwd_controller import PktFwdController
def __init__():
traffic_types: 'rfc2544_throughput'
- :param traffic_type: Name of traffic type
+ :param traffic_type: Name of traffic type
:param trafficgen_class: Reference to traffic generator class to be used.
- :return: A new ITrafficController
+ :return: A new TrafficController
"""
- #TODO - full mapping from all traffic_types to
- #correct controller class
- return TrafficControllerRFC2544(trafficgen_class)
+ if traffic_type.lower().startswith('rfc2889'):
+ return TrafficControllerRFC2889(trafficgen_class)
+ else:
+ return TrafficControllerRFC2544(trafficgen_class)
-def create_vswitch(deployment_scenario, vswitch_class):
+
+def create_vswitch(deployment_scenario, vswitch_class, traffic,
+ tunnel_operation=None):
"""Return a new IVSwitchController for the deployment_scenario.
The returned controller is configured with the given vSwitch class.
- Deployment scenarios: 'p2p', 'pvp'
+ Deployment scenarios: e.g. 'p2p', 'pvp', 'pvpv12', etc.
:param deployment_scenario: The deployment scenario name
:param vswitch_class: Reference to vSwitch class to be used.
+ :param traffic: Dictionary with traffic specific details
+ :param tunnel_operation encapsulation/decapsulation or None
:return: IVSwitchController for the deployment_scenario
"""
- #TODO - full mapping from all deployment_scenarios to
- #correct controller class
- deployment_scenario = deployment_scenario.lower()
- if deployment_scenario.find("p2p") >= 0:
- return VswitchControllerP2P(vswitch_class)
- elif deployment_scenario.find("pvp") >= 0:
- return VswitchControllerPVP(vswitch_class)
-
-def create_vnf(deployment_scenario, vnf_class):
- """Return a new IVnfController for the deployment_scenario.
+ # pylint: disable=too-many-return-statements
+ deployment = deployment_scenario.lower()
+ if deployment.startswith("p2p"):
+ return VswitchControllerP2P(deployment, vswitch_class, traffic)
+ elif deployment.startswith("pvp"):
+ return VswitchControllerPXP(deployment, vswitch_class, traffic)
+ elif deployment.startswith("pvvp"):
+ return VswitchControllerPXP(deployment, vswitch_class, traffic)
+ elif deployment.startswith("pvpv"):
+ return VswitchControllerPXP(deployment, vswitch_class, traffic)
+ elif deployment.startswith("op2p"):
+ return VswitchControllerOP2P(deployment, vswitch_class, traffic, tunnel_operation)
+ elif deployment.startswith("ptunp"):
+ return VswitchControllerPtunP(deployment, vswitch_class, traffic)
+ elif deployment.startswith("clean"):
+ return VswitchControllerClean(deployment, vswitch_class, traffic)
+ else:
+ raise RuntimeError("Unknown deployment scenario '{}'.".format(deployment))
+
+
+def create_vnf(deployment_scenario, vnf_class, extra_vnfs):
+ """Return a new VnfController for the deployment_scenario.
The returned controller is configured with the given VNF class.
:param deployment_scenario: The deployment scenario name
:param vswitch_class: Reference to vSwitch class to be used.
- :return: IVnfController for the deployment_scenario
+ :param extra_vnfs: The number of VNFs not involved in given
+ deployment scenario. It will be used to correctly expand
+ configuration values and initialize shared dirs. This parameter
+ is used in case, that additional VNFs are executed by TestSteps.
+ :return: VnfController for the deployment_scenario
"""
- #TODO - full mapping from all deployment_scenarios to
- #correct controller class
- deployment_scenario = deployment_scenario.lower()
- if deployment_scenario.find("p2p") >= 0:
- return VnfControllerP2P(vnf_class)
- elif deployment_scenario.find("pvp") >= 0:
- return VnfControllerPVP(vnf_class)
-
-def create_collector(collector, collector_class):
- """Return a new CollectorController of the given class
-
- Supported collector type strings:
- 'cpu'
- 'memory':
-
- :param collector: Collector type string
+ return VnfController(deployment_scenario, vnf_class, extra_vnfs)
+
+def create_collector(collector_class, result_dir, test_name):
+ """Return a new Collector of the given class
+
:param collector_class: The collector class to be used.
+ :param result_dir: Directory with test results
+ :param test_name: Test to be run
:return: A new CollectorController.
"""
- collector = collector.lower()
- if "cpu" in collector or "memory" in collector:
- return CollectorController(collector_class)
+ return collector_class(result_dir, test_name)
+
+def create_loadgen(loadgen_class, loadgen_cfg):
+ """Return a new ILoadGenerator for the loadgen class.
+
+ The returned load generator is of given loadgen generator class.
+
+ :param loadgen_class: Name to load generator class to be used.
+ :param loadgen_cfg: Configuration for the loadgen
+ :return: A new ILoadGenerator class
+ """
+ return loadgen_class(loadgen_cfg)
+def create_pktfwd(deployment, pktfwd_class):
+ """Return a new packet forwarder controller
+
+ The returned controller is configured with the given
+ packet forwarder class.
+
+ :param pktfwd_class: Reference to packet forwarder class to be used.
+ :param deployment: The deployment scenario name
+ :return: packet forwarder controller
+ """
+ return PktFwdController(deployment, pktfwd_class)