Merge "ci: Add SRIOV TC to CI daily job"
[vswitchperf.git] / core / component_factory.py
index 258b723..0256b85 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015-2016 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.
 """
 
 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.vswitch_controller_pvvp import VswitchControllerPVVP
+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
@@ -46,9 +46,12 @@ def create_traffic(traffic_type, trafficgen_class):
 
     :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
     """
-    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, traffic,
@@ -57,7 +60,7 @@ def create_vswitch(deployment_scenario, vswitch_class, traffic,
 
     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.
@@ -65,22 +68,27 @@ def create_vswitch(deployment_scenario, vswitch_class, traffic,
     :param tunnel_operation encapsulation/decapsulation or None
     :return: IVSwitchController for the deployment_scenario
     """
+    # pylint: disable=too-many-return-statements
     deployment_scenario = deployment_scenario.lower()
-    if deployment_scenario.find("p2p") == 0:
+    if deployment_scenario.startswith("p2p"):
         return VswitchControllerP2P(vswitch_class, traffic)
-    elif deployment_scenario.find("pvp") >= 0:
-        return VswitchControllerPVP(vswitch_class, traffic)
-    elif deployment_scenario.find("pvvp") >= 0:
-        return VswitchControllerPVVP(vswitch_class, traffic)
-    elif deployment_scenario.find("op2p") >= 0:
+    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.find("ptunp") >= 0:
+    elif deployment_scenario.startswith("ptunp"):
         return VswitchControllerPtunP(vswitch_class, traffic)
-    elif deployment_scenario.find("clean") >= 0:
+    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):
+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.
@@ -89,9 +97,13 @@ def create_vnf(deployment_scenario, vnf_class):
 
     :param deployment_scenario: The deployment scenario name
     :param vswitch_class: Reference to vSwitch class to be used.
+    :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
     """
-    return VnfController(deployment_scenario, vnf_class)
+    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
@@ -113,6 +125,7 @@ def create_loadgen(loadgen_type, loadgen_cfg):
     :param loadgen_class: Reference to load generator class to be used.
     :return: A new ILoadGenerator class
     """
+    # pylint: disable=too-many-function-args
     loadgen_type = loadgen_type.lower()
     if loadgen_type.find("dummy") >= 0:
         return DummyLoadGen(loadgen_cfg)