aboutsummaryrefslogtreecommitdiffstats
path: root/core/component_factory.py
diff options
context:
space:
mode:
authorBilly O'Mahony <billy.o.mahony@intel.com>2015-05-29 15:24:03 +0100
committerBilly O'Mahony <billy.o.mahony@intel.com>2015-06-08 13:55:35 +0000
commit8d6777df09c3dc441013a31f21cc50ab3b0f42a3 (patch)
treed00f189e00631c33385122012727dd3c6438f406 /core/component_factory.py
parentacd2499310f81565c6b1eb11d18528f7372894f5 (diff)
framework: Add reworked framework to repo
This commit adds the vSwitch Integration Test Framework whose design, based off TOIT, is outlined in the HLD previously made availiable to the community for review. The design of this framework allows developers to add different implementations of components, specifically vSwitches, Traffic Generators, Metrics Collectors and VNFs, easily. The goal of this design is that all testcases should run regardless of what is "under the hood". This commit adds support for running the framework for a phy to phy RFC2544 testcase only. More testcases will be added by the community. vSwitches supported at this time: * Intel DPDK (r) accelerated OpenvSwitch Traffic Generators supported at this time: * IxNet - IxNetwork Implementation * Ixia - IxExplorer Implementation * Dummy - Manual Implementation Metrics Collectors supported at this time: * Linux Metrics No VNFs are supported at this time but the framework outlines how they should be integrated and provides APIs for them to adhere to. JIRA: VSPERF-27 Change-Id: I312e1a1199487ffee8f824be06cd97d4f793eee0 Signed-off-by: Stephen Finucane <Stephen.Finucane@intel.com> Signed-off-by: Meghan Halton <Meghan.Halton@intel.com> Signed-off-by: Christopher Nolan <Christopher.Nolan@intel.com> Signed-off-by: Maryam Tahhan <Maryam.Tahhan@intel.com> Signed-off-by: Ciara Loftus <Ciara.Loftus@intel.com> Signed-off-by: Mark Kavanagh <Mark.B.Kavanagh@intel.com> Signed-off-by: Cian Ferriter <Cian.Ferriter@intel.com> Signed-off-by: Timo Puha <TimoX.Puha@intel.com> Signed-off-by: Billy O'Mahony <billy.o.mahony@intel.com> Signed-off-by: Michal Weglicki <MichalX.Weglicki@intel.com> Signed-off-by: Rory Sexton <Rory.Sexton@intel.com> Signed-off-by: Ian Stokes <Ian.Stokes@intel.com> Signed-off-by: Kevin Traynor <Kevin.Traynor@intel.com> Signed-off-by: Dino Simeon Madarang <dino.simeonx.madarang@intel.com> Reviewed-by: Eugene Snider <Eugene.Snider@huawei.com> Reviewed-by: Aihua Li <aihua.li@huawei.com>
Diffstat (limited to 'core/component_factory.py')
-rw-r--r--core/component_factory.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/core/component_factory.py b/core/component_factory.py
new file mode 100644
index 00000000..eb963d6f
--- /dev/null
+++ b/core/component_factory.py
@@ -0,0 +1,101 @@
+# Copyright 2015 Intel Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Functions for creating controller objects based on deployment or traffic
+"""
+
+from core.traffic_controller_rfc2544 import TrafficControllerRFC2544
+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
+
+
+def __init__():
+ """Finds and loads all the modules required.
+
+ Very similar code to load_trafficgens().
+ """
+ pass
+
+def create_traffic(traffic_type, trafficgen_class):
+ """Return a new IVSwitchController for the traffic type.
+
+ The returned traffic controller has the given traffic type and traffic
+ generator class.
+
+ traffic_types: 'rfc2544_throughput'
+
+ :param traffic_type: Name of traffic type
+ :param trafficgen_class: Reference to traffic generator class to be used.
+ :return: A new ITrafficController
+ """
+ #TODO - full mapping from all traffic_types to
+ #correct controller class
+ return TrafficControllerRFC2544(trafficgen_class)
+
+def create_vswitch(deployment_scenario, vswitch_class):
+ """Return a new IVSwitchController for the deployment_scenario.
+
+ The returned controller is configured with the given vSwitch class.
+
+ Deployment scenarios: 'p2p', 'pvp'
+
+ :param deployment_scenario: The deployment scenario name
+ :param vswitch_class: Reference to vSwitch class to be used.
+ :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.
+
+ The returned controller is configured with the given VNF class.
+
+ Deployment scenarios: 'p2p', 'pvp'
+
+ :param deployment_scenario: The deployment scenario name
+ :param vswitch_class: Reference to vSwitch class to be used.
+ :return: IVnfController 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
+ :param collector_class: The collector class to be used.
+ :return: A new CollectorController.
+ """
+ collector = collector.lower()
+ if "cpu" in collector or "memory" in collector:
+ return CollectorController(collector_class)
+