Added traffic update capability to Ixload TG
[yardstick.git] / yardstick / network_services / vnf_generic / vnf / tg_ixload.py
index 102c66f..d254027 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import absolute_import
+import collections
 import csv
 import glob
 import logging
 import os
 import shutil
-
-from collections import OrderedDict
 import subprocess
 
+from oslo_serialization import jsonutils
+
 from yardstick.common import utils
-from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen
-from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
+from yardstick.network_services.vnf_generic.vnf import sample_vnf
+
 
 
 LOG = logging.getLogger(__name__)
@@ -45,7 +45,8 @@ IXLOAD_CONFIG_TEMPLATE = '''\
     },
     "remote_server": "%s",
     "result_dir": "%s",
-    "ixload_cfg": "C:/Results/%s"
+    "ixload_cfg": "C:/Results/%s",
+    "links_param": %s
 }'''
 
 IXLOAD_CMD = "{ixloadpy} {http_ixload} {args}"
@@ -61,11 +62,11 @@ class ResourceDataHelper(list):
         }
 
 
-class IxLoadResourceHelper(ClientResourceHelper):
+class IxLoadResourceHelper(sample_vnf.ClientResourceHelper):
 
     RESULTS_MOUNT = "/mnt/Results"
 
-    KPI_LIST = OrderedDict((
+    KPI_LIST = collections.OrderedDict((
         ('http_throughput', 'HTTP Total Throughput (Kbps)'),
         ('simulated_users', 'HTTP Simulated Users'),
         ('concurrent_connections', 'HTTP Concurrent Connections'),
@@ -75,7 +76,8 @@ class IxLoadResourceHelper(ClientResourceHelper):
 
     def __init__(self, setup_helper):
         super(IxLoadResourceHelper, self).__init__(setup_helper)
-        self.result = OrderedDict((key, ResourceDataHelper()) for key in self.KPI_LIST)
+        self.result = collections.OrderedDict((key, ResourceDataHelper())
+                                              for key in self.KPI_LIST)
         self.resource_file_name = ''
         self.data = None
 
@@ -122,16 +124,32 @@ class IxLoadResourceHelper(ClientResourceHelper):
             LOG.debug(self.result[key])
 
 
-class IxLoadTrafficGen(SampleVNFTrafficGen):
+class IxLoadTrafficGen(sample_vnf.SampleVNFTrafficGen):
 
-    def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
+    def __init__(self, name, vnfd, task_id, setup_env_helper_type=None,
+                 resource_helper_type=None):
         if resource_helper_type is None:
             resource_helper_type = IxLoadResourceHelper
 
-        super(IxLoadTrafficGen, self).__init__(name, vnfd, setup_env_helper_type,
-                                               resource_helper_type)
+        super(IxLoadTrafficGen, self).__init__(
+            name, vnfd, task_id, setup_env_helper_type, resource_helper_type)
         self._result = {}
 
+    def update_gateways(self, links):
+        for name in links:
+            try:
+                gateway = next(intf["virtual-interface"]["dst_ip"] for intf in
+                               self.setup_helper.vnfd_helper["vdu"][0][
+                                   "external-interface"] if
+                               intf["virtual-interface"]["vld_id"] == name)
+
+                links[name]["ip"]["gateway"] = gateway
+            except StopIteration:
+                LOG.debug("Cant find gateway for link %s", name)
+                links[name]["ip"]["gateway"] = "0.0.0.0"
+
+        return links
+
     def run_traffic(self, traffic_profile):
         ports = []
         card = None
@@ -143,11 +161,16 @@ class IxLoadTrafficGen(SampleVNFTrafficGen):
         for csv_file in glob.iglob(self.ssh_helper.join_bin_path('*.csv')):
             os.unlink(csv_file)
 
+        links_param = self.update_gateways(
+            traffic_profile.get_links_param())
+
         ixia_config = self.vnfd_helper.mgmt_interface["tg-config"]
         ixload_config = IXLOAD_CONFIG_TEMPLATE % (
             ixia_config["ixchassis"], ports, card,
             self.vnfd_helper.mgmt_interface["ip"], self.ssh_helper.bin_path,
-            os.path.basename(self.resource_helper.resource_file_name))
+            os.path.basename(self.resource_helper.resource_file_name),
+            jsonutils.dumps(links_param)
+        )
 
         http_ixload_path = os.path.join(VNF_PATH, "../../traffic_profile")