Merge "Change PTL informatin in INFO"
[bottlenecks.git] / testsuites / vstf / vstf_scripts / vstf / controller / spirent / common / model.py
index a29794f..38bfa70 100644 (file)
@@ -24,6 +24,7 @@ reverse_dict = {
 
 
 class BaseModel(object):
+
     def __init__(self, config):
         self.config = config
 
@@ -117,6 +118,7 @@ def _tranfer_array_to_range(array):
 
 
 class TnV(BaseModel):
+
     def __init__(self, config):
         super(TnV, self).__init__(config)
         self.config = config
@@ -178,7 +180,8 @@ class TnV(BaseModel):
                 info = self.handle.get(option, 'macs')
                 macs = info.split()
                 if len(macs) != int(self.config['virtenv']) or macs == []:
-                    print("[ERROR]The macs number is not equal to vms or containers.")
+                    print(
+                        "[ERROR]The macs number is not equal to vms or containers.")
                     return False
                 for mac in macs:
                     # check mac valid
@@ -211,12 +214,12 @@ class TnV(BaseModel):
     @property
     def check_logic_invalid(self):
         return self.flow_match() and self.match_virt_env() and \
-               self.match_flows_and_nic and self.check_mac_valid() and \
-               self.check_vlan_valid()
+            self.match_flows_and_nic and self.check_mac_valid() and \
+            self.check_vlan_valid()
 
     @property
     def read_flow_init(self):
-        # The 
+        # The
         temp_flow = {}
         src_macs = self._get_range('send', 'macs')
         dst_macs = self._get_range('recv', 'macs')
@@ -233,7 +236,7 @@ class TnV(BaseModel):
         temp_flow['tester_ip'] = self._get_nic_from_file('common', 'tester_ip')
         vlan = src_vlan
         avg_flow = int(self.config['flows']) / int(self.config['virtenv'])
-        # build the main dictionary 
+        # build the main dictionary
         for _direct in sorted(fwd[self.config['direct']]):
             i = 0
             j = 0
@@ -267,9 +270,11 @@ class TnV(BaseModel):
 
                     temp_flow['qemu_thread_list'] = _vm_info['qemu_thread']
                     forward_core = {
-                        "forward": _vm_info['qemu_thread'][_queue + avg_flow * vm_index],
-                        "reverse": _vm_info['qemu_thread'][_queue + avg_flow * vm_index + int(self.config['flows'])]
-                    }
+                        "forward": _vm_info['qemu_thread'][
+                            _queue + avg_flow * vm_index],
+                        "reverse": _vm_info['qemu_thread'][
+                            _queue + avg_flow * vm_index + int(
+                                self.config['flows'])]}
                     temp_flow['fwd_thread'] = forward_core[_direct]
 
                     temp_flow['fwd_vhost'] = None
@@ -280,7 +285,8 @@ class TnV(BaseModel):
                     temp_flow['dst_nic'] = dst_nic
                     # above all
                     j += 1
-                    self.init_flows[_direct + '_' + _vm + '_' + str(_queue)] = copy.deepcopy(temp_flow)
+                    self.init_flows[_direct + '_' + _vm + '_' +
+                                    str(_queue)] = copy.deepcopy(temp_flow)
                 i += 1
             src_nic_irq, dst_nic_irq = dst_nic_irq, src_nic_irq
             vlan = dst_vlan
@@ -323,30 +329,67 @@ class TnV(BaseModel):
                         try:
                             i += 1
                             thread_info = None
-                            self.mac_learning(self.init_flows[_direct + '_' + _vm + '_' + str(_queue)],
-                                              self.init_flows[reverse_dict[_direct] + '_' + _vm + '_' + str(_queue)])
-                            streamblock = self.send_packet(self.init_flows[_direct + '_' + _vm + '_' + str(_queue)])
+                            self.mac_learning(
+                                self.init_flows[
+                                    _direct +
+                                    '_' +
+                                    _vm +
+                                    '_' +
+                                    str(_queue)],
+                                self.init_flows[
+                                    reverse_dict[_direct] +
+                                    '_' +
+                                    _vm +
+                                    '_' +
+                                    str(_queue)])
+                            streamblock = self.send_packet(
+                                self.init_flows[_direct + '_' + _vm + '_' + str(_queue)])
                             time.sleep(1)
                             result, thread_info = self.catch_thread_info()
                             thread_info = eval(thread_info)
-                            self.stop_flow(streamblock, self.init_flows[_direct + '_' + _vm + '_' + str(_queue)])
+                            self.stop_flow(
+                                streamblock, self.init_flows[
+                                    _direct + '_' + _vm + '_' + str(_queue)])
                             time.sleep(1)
                             if not result:
                                 print("[ERROR]Catch the thread info failed.")
                                 break
                         except:
-                            print("[ERROR]send flow failed error or get host thread info failed.")
+                            print(
+                                "[ERROR]send flow failed error or get host thread info failed.")
 
                         # compare the got thread info to
-                        if check_dict(thread_info, self.init_flows[_direct + '_' + _vm + '_' + str(_queue)]):
-                            self.set_thread2flow(thread_info, self.init_flows[_direct + '_' + _vm + '_' + str(_queue)])
-                            print("[INFO]Flow %s_%s_%s :     fwd_vhost %s    src_recv_irq %s   dst_send_irq %s"
-                                  % (_direct, _vm, _queue, thread_info['fwd_vhost'], thread_info['src_recv_irq'],
-                                     thread_info['dst_send_irq']))
-                            print("%s" % (self.init_flows[_direct + '_' + _vm + '_' + str(_queue)]))
+                        if check_dict(
+                            thread_info, self.init_flows[
+                                _direct + '_' + _vm + '_' + str(_queue)]):
+                            self.set_thread2flow(
+                                thread_info, self.init_flows[
+                                    _direct + '_' + _vm + '_' + str(_queue)])
+                            print(
+                                "[INFO]Flow %s_%s_%s :     fwd_vhost %s    src_recv_irq %s   dst_send_irq %s" %
+                                (_direct,
+                                 _vm,
+                                 _queue,
+                                 thread_info['fwd_vhost'],
+                                    thread_info['src_recv_irq'],
+                                    thread_info['dst_send_irq']))
+                            print(
+                                "%s" %
+                                (self.init_flows[
+                                    _direct +
+                                    '_' +
+                                    _vm +
+                                    '_' +
+                                    str(_queue)]))
                             break
                         else:
-                            dst_ip_update(self.init_flows[_direct + '_' + _vm + '_' + str(_queue)])
+                            dst_ip_update(
+                                self.init_flows[
+                                    _direct +
+                                    '_' +
+                                    _vm +
+                                    '_' +
+                                    str(_queue)])
         return self.init_flows
 
     def affinity_bind(self, aff_strategy):
@@ -361,7 +404,8 @@ class TnV(BaseModel):
         # recognize the thread id
         for flowname in sorted(self.init_flows.keys()):
             tmp_thread = self.init_flows[flowname]['fwd_thread']
-            qemu_other = qemu_other + copy.deepcopy(self.init_flows[flowname]['qemu_thread_list'])
+            qemu_other = qemu_other + \
+                copy.deepcopy(self.init_flows[flowname]['qemu_thread_list'])
             qemu_list.append(tmp_thread)
             if self.init_flows[flowname]['direct'] == 'forward':
                 dst_vhost.append(self.init_flows[flowname]['fwd_vhost'])
@@ -386,16 +430,38 @@ class TnV(BaseModel):
         handle = ConfigParser.ConfigParser()
         handle.read(self.config['strategyfile'])
         try:
-            qemu_numa = handle.get('strategy' + self.config['strategy'], 'qemu_numa')
-            src_vhost_numa = handle.get('strategy' + self.config['strategy'], 'src_vhost_numa')
-            dst_vhost_numa = handle.get('strategy' + self.config['strategy'], 'dst_vhost_numa')
-            src_irq_numa = handle.get('strategy' + self.config['strategy'], 'src_irq_numa')
-            dst_irq_numa = handle.get('strategy' + self.config['strategy'], 'dst_irq_numa')
-            loan_numa = handle.get('strategy' + self.config['strategy'], 'loan_numa')
+            qemu_numa = handle.get(
+                'strategy' +
+                self.config['strategy'],
+                'qemu_numa')
+            src_vhost_numa = handle.get(
+                'strategy' + self.config['strategy'],
+                'src_vhost_numa')
+            dst_vhost_numa = handle.get(
+                'strategy' + self.config['strategy'],
+                'dst_vhost_numa')
+            src_irq_numa = handle.get(
+                'strategy' +
+                self.config['strategy'],
+                'src_irq_numa')
+            dst_irq_numa = handle.get(
+                'strategy' +
+                self.config['strategy'],
+                'dst_irq_numa')
+            loan_numa = handle.get(
+                'strategy' +
+                self.config['strategy'],
+                'loan_numa')
         except:
             print("[ERROR]Parse the strategy file failed or get the options failed.")
 
-        for value in [qemu_numa, src_vhost_numa, dst_vhost_numa, src_irq_numa, dst_irq_numa, loan_numa]:
+        for value in [
+                qemu_numa,
+                src_vhost_numa,
+                dst_vhost_numa,
+                src_irq_numa,
+                dst_irq_numa,
+                loan_numa]:
             if value is not None or value == '':
                 raise ValueError('some option in the strategy file is none.')
         # cores mapping thread
@@ -407,26 +473,39 @@ class TnV(BaseModel):
         for node in numa_topo.keys():
             numa_topo[node]['process'] = []
             if 'node' + src_irq_numa == node:
-                numa_topo[node]['process'] = numa_topo[node]['process'] + src_irq
+                numa_topo[node]['process'] = numa_topo[
+                    node]['process'] + src_irq
             if 'node' + dst_irq_numa == node:
-                numa_topo[node]['process'] = numa_topo[node]['process'] + dst_irq
+                numa_topo[node]['process'] = numa_topo[
+                    node]['process'] + dst_irq
             if 'node' + src_vhost_numa == node:
-                numa_topo[node]['process'] = numa_topo[node]['process'] + src_vhost
+                numa_topo[node]['process'] = numa_topo[
+                    node]['process'] + src_vhost
             if 'node' + dst_vhost_numa == node:
-                numa_topo[node]['process'] = numa_topo[node]['process'] + dst_vhost
+                numa_topo[node]['process'] = numa_topo[
+                    node]['process'] + dst_vhost
             if 'node' + qemu_numa == node:
-                numa_topo[node]['process'] = numa_topo[node]['process'] + qemu_list
+                numa_topo[node]['process'] = numa_topo[
+                    node]['process'] + qemu_list
         loan_cores = ''
         for node in numa_topo.keys():
-            if len(numa_topo[node]['process']) > len(numa_topo[node]['phy_cores']):
+            if len(
+                    numa_topo[node]['process']) > len(
+                    numa_topo[node]['phy_cores']):
                 # length distance
-                diff = len(numa_topo[node]['process']) - len(numa_topo[node]['phy_cores'])
+                diff = len(numa_topo[node]['process']) - \
+                    len(numa_topo[node]['phy_cores'])
                 # first deep copy
-                numa_topo['node' + loan_numa]['process'] = numa_topo['node' + loan_numa]['process'] + copy.deepcopy(
-                    numa_topo[node]['process'][-diff:])
-                cores_str = _tranfer_array_to_range(numa_topo['node' + loan_numa]['phy_cores'][diff:])
+                numa_topo['node' + loan_numa]['process'] = numa_topo['node' + loan_numa][
+                    'process'] + copy.deepcopy(numa_topo[node]['process'][-diff:])
+                cores_str = _tranfer_array_to_range(
+                    numa_topo[
+                        'node' +
+                        loan_numa]['phy_cores'][
+                        diff:])
                 loan_cores = ','.join([loan_cores, cores_str])
-                numa_topo[node]['process'] = numa_topo[node]['process'][0:-diff]
+                numa_topo[node]['process'] = numa_topo[
+                    node]['process'][0:-diff]
         loan_cores = loan_cores[1:]
         loan_bind_list = {}
         for proc_loan in qemu_other:
@@ -435,7 +514,8 @@ class TnV(BaseModel):
         bind_list = {}
         for node in numa_topo.keys():
             for i in range(len(numa_topo[node]['process'])):
-                bind_list[numa_topo[node]['process'][i]] = str(numa_topo[node]['phy_cores'][i])
+                bind_list[numa_topo[node]['process'][i]] = str(
+                    numa_topo[node]['phy_cores'][i])
         bind_list.update(loan_bind_list)
         for key in bind_list.keys():
             self.host_instance.bind_cpu(bind_list[key], key)
@@ -459,8 +539,10 @@ class TnV(BaseModel):
 
         if suite == "throughput":
             print("[INFO]!!!!!!!!!!!!!!!Now begin to throughput test")
-            ret, result = self.send_instace.run_rfc2544_throughput(forward_init_flows, reverse_init_flows)
+            ret, result = self.send_instace.run_rfc2544_throughput(
+                forward_init_flows, reverse_init_flows)
         elif suite == "frameloss":
             print("[INFO]!!!!!!!!!!!1!!!Now begin to frameloss test")
-            ret, result = self.send_instace.run_rfc2544_frameloss(forward_init_flows, reverse_init_flows)
+            ret, result = self.send_instace.run_rfc2544_frameloss(
+                forward_init_flows, reverse_init_flows)
         return ret, result