Merge "Adding new test case for prox Standalone L3FWD."
[yardstick.git] / yardstick / network_services / traffic_profile / http_ixload.py
index 39ee16b..9210f3c 100644 (file)
@@ -114,8 +114,10 @@ class IXLOADHttpTest(object):
         self.chassis = None
         self.card = None
         self.ports_to_reassign = None
+        self.links_param = None
         self.test_input = jsonutils.loads(test_input)
         self.parse_run_test()
+        self.test = None
 
     @staticmethod
     def format_ports_for_reassignment(ports):
@@ -179,6 +181,90 @@ class IXLOADHttpTest(object):
             LOG.error('Error: IxLoad config file not found: %s', config_file)
             raise
 
+    def update_network_address(self, net_traffic, address, gateway, prefix):
+        """Update ip address and gateway for net_traffic object
+
+        This function update field which configure source addresses for
+        traffic which is described by net_traffic object.
+        Do not return anything
+
+        :param net_traffic: (IxLoadObjectProxy) proxy obj to tcl net_traffic object
+        :param address: (str) Ipv4 range start address
+        :param gateway: (str) Ipv4 address of gateway
+        :param prefix: (int) subnet prefix
+        :return:
+        """
+        try:
+            ethernet = net_traffic.network.getL1Plugin()
+            ix_net_l2_ethernet_plugin = ethernet.childrenList[0]
+            ix_net_ip_v4_v6_plugin = ix_net_l2_ethernet_plugin.childrenList[0]
+            ix_net_ip_v4_v6_range = ix_net_ip_v4_v6_plugin.rangeList[0]
+
+            ix_net_ip_v4_v6_range.config(
+                prefix=prefix,
+                ipAddress=address,
+                gatewayAddress=gateway)
+        except Exception:
+            raise exceptions.InvalidRxfFile
+
+    def update_network_mac_address(self, net_traffic, mac):
+        """Update MACaddress for net_traffic object
+
+        This function update field which configure MACaddresses for
+        traffic which is described by net_traffic object.
+        If mac == "auto" then will be configured auto generated mac
+        Do not return anything.
+
+        :param net_traffic: (IxLoadObjectProxy) proxy obj to tcl net_traffic object
+        :param mac: (str) MAC
+        :return:
+        """
+        try:
+            ethernet = net_traffic.network.getL1Plugin()
+            ix_net_l2_ethernet_plugin = ethernet.childrenList[0]
+            ix_net_ip_v4_v6_plugin = ix_net_l2_ethernet_plugin.childrenList[0]
+            ix_net_ip_v4_v6_range = ix_net_ip_v4_v6_plugin.rangeList[0]
+
+            if str(mac).lower() == "auto":
+                ix_net_ip_v4_v6_range.config(autoMacGeneration=True)
+            else:
+                ix_net_ip_v4_v6_range.config(autoMacGeneration=False)
+                mac_range = ix_net_ip_v4_v6_range.getLowerRelatedRange(
+                    "MacRange")
+                mac_range.config(mac=mac)
+        except Exception:
+            raise exceptions.InvalidRxfFile
+
+    def update_network_param(self, net_traffic, param):
+        """Update net_traffic by parameters specified in param"""
+
+        self.update_network_address(net_traffic, param["address"],
+                                    param["gateway"], param["subnet_prefix"])
+
+        self.update_network_mac_address(net_traffic, param["mac"])
+
+    def update_config(self):
+        """Update some fields by parameters from traffic profile"""
+
+        net_traffics = {}
+        # self.test.communityList is a IxLoadObjectProxy to some tcl object
+        # which contain all net_traffic objects in scenario.
+        # net_traffic item has a name in format "activity_name@item_name"
+        try:
+            for item in self.test.communityList:
+                net_traffics[item.name.split('@')[1]] = item
+        except Exception:  # pylint: disable=broad-except
+            pass
+
+        for name, net_traffic in net_traffics.items():
+            try:
+                param = self.links_param[name]
+            except KeyError:
+                LOG.debug('There is no param for net_traffic %s', name)
+                continue
+
+            self.update_network_param(net_traffic, param["ip"])
+
     def start_http_test(self):
         self.ix_load = IxLoad()
 
@@ -205,16 +291,18 @@ class IXLOADHttpTest(object):
 
         # Get the first test on the testList
         test_name = repository.testList[0].cget("name")
-        test = repository.testList.getItem(test_name)
+        self.test = repository.testList.getItem(test_name)
 
         self.set_results_dir(test_controller, self.results_on_windows)
 
-        test.config(statsRequired=1, enableResetPorts=1, csvInterval=2,
-                    enableForceOwnership=True)
+        self.test.config(statsRequired=1, enableResetPorts=1, csvInterval=2,
+                         enableForceOwnership=True)
+
+        self.update_config()
 
         #  ---- Remap ports ----
         try:
-            self.reassign_ports(test, repository, self.ports_to_reassign)
+            self.reassign_ports(self.test, repository, self.ports_to_reassign)
         except Exception:  # pylint: disable=broad-except
             LOG.exception("Exception occurred during reassign_ports")
 
@@ -254,7 +342,7 @@ class IXLOADHttpTest(object):
 
         self.stat_utils.StartCollector(self.IxL_StatCollectorCommand)
 
-        test_controller.run(test)
+        test_controller.run(self.test)
         self.ix_load.waitForTestFinish()
 
         test_controller.releaseConfigWaitFinish()
@@ -266,7 +354,7 @@ class IXLOADHttpTest(object):
         test_controller.generateReport(detailedReport=1, format="PDF;HTML")
         test_controller.releaseConfigWaitFinish()
 
-        self.ix_load.delete(test)
+        self.ix_load.delete(self.test)
         self.ix_load.delete(test_controller)
         self.ix_load.delete(logger)
         self.ix_load.delete(log_engine)
@@ -304,6 +392,9 @@ class IXLOADHttpTest(object):
 
         LOG.debug("Ports to be reassigned: %s", self.ports_to_reassign)
 
+        self.links_param = self.test_input["links_param"]
+        LOG.debug("Links param to be applied: %s", self.links_param)
+
 
 def main(args):
     # Get the args from cmdline and parse and run the test