Merge "Cleanup unittests for test_attacker_baremetal"
[yardstick.git] / yardstick / network_services / traffic_profile / ixia_rfc2544.py
index 83d24a4..3503889 100644 (file)
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import logging
+import collections
 
 from yardstick.common import utils
 from yardstick.network_services.traffic_profile import base as tp_base
@@ -35,6 +36,7 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         super(IXIARFC2544Profile, self).__init__(yaml_data)
         self.rate = self.config.frame_rate
         self.rate_unit = self.config.rate_unit
+        self.full_profile = {}
 
     def _get_ip_and_mask(self, ip_range):
         _ip_range = ip_range.split('-')
@@ -78,6 +80,12 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
                 'outer_l4': {},
             }
 
+            frame_rate = value.get('frame_rate')
+            if frame_rate:
+                flow_rate, flow_rate_unit = self.config.parse_rate(frame_rate)
+                result[traffickey]['rate'] = flow_rate
+                result[traffickey]['rate_unit'] = flow_rate_unit
+
             outer_l2 = value.get('outer_l2')
             if outer_l2:
                 result[traffickey]['outer_l2'].update({
@@ -164,9 +172,7 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         first_run = self.first_run
         if self.first_run:
             self.first_run = False
-            self.full_profile = {}
             self.pg_id = 0
-            self.update_traffic_profile(traffic_generator)
             self.max_rate = self.rate
             self.min_rate = 0.0
         else:
@@ -237,3 +243,33 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         samples['latency_ns_max'] = latency_ns_max
 
         return completed, samples
+
+
+class IXIARFC2544PppoeScenarioProfile(IXIARFC2544Profile):
+    """Class handles BNG PPPoE scenario tests traffic profile"""
+
+    def __init__(self, yaml_data):
+        super(IXIARFC2544PppoeScenarioProfile, self).__init__(yaml_data)
+        self.full_profile = collections.OrderedDict()
+
+    def _get_flow_groups_params(self):
+        flows_data = [key for key in self.params.keys()
+                      if key.split('_')[0] in [self.UPLINK, self.DOWNLINK]]
+        for i in range(len(flows_data)):
+            uplink = '_'.join([self.UPLINK, str(i)])
+            downlink = '_'.join([self.DOWNLINK, str(i)])
+            if uplink in flows_data:
+                self.full_profile.update({uplink: self.params[uplink]})
+            if downlink in flows_data:
+                self.full_profile.update({downlink: self.params[downlink]})
+
+    def update_traffic_profile(self, traffic_generator):
+        def port_generator():
+            for vld_id, intfs in sorted(traffic_generator.networks.items()):
+                if not vld_id.startswith((self.UPLINK, self.DOWNLINK)):
+                    continue
+                for intf in intfs:
+                    yield traffic_generator.vnfd_helper.port_num(intf)
+
+        self._get_flow_groups_params()
+        self.ports = [port for port in port_generator()]