X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=core%2Fcomponent_factory.py;h=bd9a1019859925357703566804367c66bb5e41d6;hb=485ac777fd9cded7c145917bfcbe701276f3c855;hp=eb963d6f5deea0a421d7f8d73fdc0dec1ce89f88;hpb=f3f1ff9b08efa4a18bdcd2284d0a5f3b6ee526e0;p=vswitchperf.git diff --git a/core/component_factory.py b/core/component_factory.py index eb963d6f..bd9a1019 100644 --- a/core/component_factory.py +++ b/core/component_factory.py @@ -1,4 +1,4 @@ -# Copyright 2015 Intel Corporation. +# Copyright 2015-2017 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,11 +16,14 @@ """ 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__(): @@ -38,35 +41,52 @@ def create_traffic(traffic_type, trafficgen_class): 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 + # pylint: disable=too-many-return-statements 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. + if deployment_scenario.startswith("p2p"): + return VswitchControllerP2P(vswitch_class, traffic) + elif deployment_scenario.startswith("pvp"): + return VswitchControllerPXP(deployment_scenario, vswitch_class, traffic) + elif deployment_scenario.startswith("pvvp"): + return VswitchControllerPXP(deployment_scenario, vswitch_class, traffic) + elif deployment_scenario.startswith("pvpv"): + return VswitchControllerPXP(deployment_scenario, vswitch_class, traffic) + elif deployment_scenario.startswith("op2p"): + return VswitchControllerOP2P(vswitch_class, traffic, tunnel_operation) + elif deployment_scenario.startswith("ptunp"): + return VswitchControllerPtunP(vswitch_class, traffic) + elif deployment_scenario.startswith("clean"): + return VswitchControllerClean(vswitch_class, traffic) + else: + raise RuntimeError("Unknown deployment scenario '{}'.".format(deployment_scenario)) + + +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. @@ -74,28 +94,44 @@ def create_vnf(deployment_scenario, 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 + return VnfController(deployment_scenario, vnf_class, extra_vnfs) - Supported collector type strings: - 'cpu' - 'memory': +def create_collector(collector_class, result_dir, test_name): + """Return a new Collector of the given class - :param collector: Collector type string :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 + """ + # pylint: disable=too-many-function-args + 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)