# 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.
-from __future__ import absolute_import
import array
import io
from six.moves import cStringIO
from six.moves import zip, StringIO
-from yardstick.benchmark.scenarios.networking.vnf_generic import find_relative_file
from yardstick.common import utils
from yardstick.common.utils import SocketTopology, join_non_strings, try_int
from yardstick.network_services.helpers.iniparser import ConfigParser
""" send data to the remote instance """
LOG.debug("Sending data to socket: [%s]", to_send.rstrip('\n'))
try:
- # TODO: sendall will block, we need a timeout
+ # NOTE: sendall will block, we need a timeout
self._sock.sendall(to_send.encode('utf-8'))
- except:
+ except: # pylint: disable=bare-except
pass
def get_packet_dump(self):
finally:
container['end_tot'] = end = self.get_all_tot_stats()
- container['delta'] = TotStatsTuple(end - start for start, end in zip(start, end))
+ container['delta'] = TotStatsTuple(e - s for s, e in zip(start, end))
def tot_stats(self):
"""Get the total statistics from the remote system"""
raise KeyError(template.format(section_key, section_name))
return result
- def _build_pipeline_kwargs(self):
- tool_path = self.ssh_helper.provision_tool(tool_file=self.APP_NAME)
- self.pipeline_kwargs = {
- 'tool_path': tool_path,
- 'tool_dir': os.path.dirname(tool_path),
- }
-
def copy_to_target(self, config_file_path, prox_file):
remote_path = os.path.join("/tmp", prox_file)
self.ssh_helper.put(config_file_path, remote_path)
if port_section_name != section_name:
continue
- for index, section_data in enumerate(section):
+ for section_data in section:
if section_data[0] == "mac":
section_data[1] = "hardware"
# search for dst mac
for _, section in sections:
- # for index, (item_key, item_val) in enumerate(section):
- for index, section_data in enumerate(section):
+ for section_data in section:
item_key, item_val = section_data
if item_val.startswith("@@dst_mac"):
tx_port_iter = re.finditer(r'\d+', item_val)
return sections
for section_name, section in sections:
- for index, section_data in enumerate(section):
+ for section_data in section:
try:
if section_data[0].startswith("dofile"):
section_data[0] = self._insert_additional_file(section_data[0])
if section_data[1].startswith("dofile"):
section_data[1] = self._insert_additional_file(section_data[1])
- except:
+ except: # pylint: disable=bare-except
pass
return sections
a custom method
"""
out = []
- for i, (section_name, section) in enumerate(prox_config):
+ for (section_name, section) in prox_config:
out.append("[{}]".format(section_name))
- for index, item in enumerate(section):
+ for item in section:
key, value = item
if key == "__name__":
continue
options = self.scenario_helper.options
config_path = options['prox_config']
config_file = os.path.basename(config_path)
- config_path = find_relative_file(config_path, task_path)
+ config_path = utils.find_relative_file(config_path, task_path)
self.additional_files = {}
try:
self.lua = self.generate_prox_lua_file()
if len(self.lua) > 0:
self.upload_prox_lua("parameters.lua", self.lua)
- except:
+ except: # pylint: disable=bare-except
pass
prox_files = options.get('prox_files', [])
prox_files = [prox_files]
for key_prox_file in prox_files:
base_prox_file = os.path.basename(key_prox_file)
- key_prox_path = find_relative_file(key_prox_file, task_path)
+ key_prox_path = utils.find_relative_file(key_prox_file, task_path)
remote_prox_file = self.copy_to_target(key_prox_path, base_prox_file)
self.additional_files[base_prox_file] = remote_prox_file
self.build_config_file()
options = self.scenario_helper.options
-
prox_args = options['prox_args']
- LOG.info("Provision and start the %s", self.APP_NAME)
- self._build_pipeline_kwargs()
- self.pipeline_kwargs["args"] = " ".join(
- " ".join([k, v if v else ""]) for k, v in prox_args.items())
- self.pipeline_kwargs["cfg_file"] = self.remote_path
+ tool_path = self.ssh_helper.join_bin_path(self.APP_NAME)
- cmd_template = "sudo bash -c 'cd {tool_dir}; {tool_path} -o cli {args} -f {cfg_file} '"
- prox_cmd = cmd_template.format(**self.pipeline_kwargs)
- return prox_cmd
+ self.pipeline_kwargs = {
+ 'tool_path': tool_path,
+ 'tool_dir': os.path.dirname(tool_path),
+ 'cfg_file': self.remote_path,
+ 'args': ' '.join(' '.join([str(k), str(v) if v else ''])
+ for k, v in prox_args.items())
+ }
+
+ cmd_template = ("sudo bash -c 'cd {tool_dir}; {tool_path} -o cli "
+ "{args} -f {cfg_file} '")
+ return cmd_template.format(**self.pipeline_kwargs)
# this might be bad, sometimes we want regular ResourceHelper methods, like collect_kpi
func = getattr(self.sut, cmd, None)
if func:
return func(*args, **kwargs)
+ return None
def _connect(self, client=None):
"""Run and connect to prox on the remote system """
def samples(self):
samples = {}
for port_name, port_num in self.vnfd_helper.ports_iter():
- port_rx_total, port_tx_total = self.sut.port_stats([port_num])[6:8]
- samples[port_name] = {
- "in_packets": port_rx_total,
- "out_packets": port_tx_total,
- }
+ try:
+ port_rx_total, port_tx_total = self.sut.port_stats([port_num])[6:8]
+ samples[port_name] = {
+ "in_packets": port_rx_total,
+ "out_packets": port_tx_total,
+ }
+ except (KeyError, TypeError, NameError, MemoryError, ValueError,
+ SystemError, BufferError):
+ samples[port_name] = {
+ "in_packets": 0,
+ "out_packets": 0,
+ }
return samples
def __enter__(self):
self.tsc_hz = float(self.sut.hz())
def line_rate_to_pps(self):
- # FIXME Don't hardcode 10Gb/s
+ # NOTE: to fix, don't hardcode 10Gb/s
return self.port_count * TEN_GIGABIT / BITS_PER_BYTE / (self.pkt_size + 20)
for key, value in section:
if key == "mode" and value == mode:
core_tuple = CoreSocketTuple(section_name)
- core = core_tuple.find_in_topology(self.cpu_topology)
+ core = core_tuple.core_id
cores.append(core)
return cores
:return: return lat_min, lat_max, lat_avg
:rtype: list
"""
+
+ if not self._latency_cores:
+ self._latency_cores = self.get_cores(self.PROX_CORE_LAT_MODE)
+
if self._latency_cores:
return self.sut.lat_stats(self._latency_cores)
return []
if item_value.startswith("tag"):
core_tuple = CoreSocketTuple(section_name)
- core_tag = core_tuple.find_in_topology(self.cpu_topology)
+ core_tag = core_tuple.core_id
cores_tagged.append(core_tag)
elif item_value.startswith("udp"):
core_tuple = CoreSocketTuple(section_name)
- core_udp = core_tuple.find_in_topology(self.cpu_topology)
+ core_udp = core_tuple.core_id
cores_plain.append(core_udp)
return cores_tagged, cores_plain
if item_value.startswith("cpe"):
core_tuple = CoreSocketTuple(section_name)
- cpe_core = core_tuple.find_in_topology(self.cpu_topology)
+ cpe_core = core_tuple.core_id
cpe_cores.append(cpe_core)
elif item_value.startswith("inet"):
core_tuple = CoreSocketTuple(section_name)
- inet_core = core_tuple.find_in_topology(self.cpu_topology)
+ inet_core = core_tuple.core_id
inet_cores.append(inet_core)
elif item_value.startswith("arp"):
core_tuple = CoreSocketTuple(section_name)
- arp_core = core_tuple.find_in_topology(self.cpu_topology)
+ arp_core = core_tuple.core_id
arp_cores.append(arp_core)
# We check the tasks/core separately
if item_value.startswith("arp_task"):
core_tuple = CoreSocketTuple(section_name)
- arp_task_core = core_tuple.find_in_topology(self.cpu_topology)
+ arp_task_core = core_tuple.core_id
arp_tasks_core.append(arp_task_core)
return cpe_cores, inet_cores, arp_cores, arp_tasks_core
if item_value.startswith("cpe"):
core_tuple = CoreSocketTuple(section_name)
- core_tag = core_tuple.find_in_topology(self.cpu_topology)
+ core_tag = core_tuple.core_id
cpe_cores.append(core_tag)
elif item_value.startswith("inet"):
core_tuple = CoreSocketTuple(section_name)
- inet_core = core_tuple.find_in_topology(self.cpu_topology)
+ inet_core = core_tuple.core_id
inet_cores.append(inet_core)
return cpe_cores, inet_cores
continue
core_tuple = CoreSocketTuple(section_name)
- core_tag = core_tuple.find_in_topology(self.cpu_topology)
+ core_tag = core_tuple.core_id
for item_value in (v for k, v in section if k == 'name'):
if item_value.startswith('tun'):
tun_cores.append(core_tag)
tun_ports = []
inet_ports = []
- re_port = re.compile('port (\d+)')
+ re_port = re.compile(r'port (\d+)')
for section_name, section in self.resource_helper.setup_helper.prox_config_data:
match = re_port.search(section_name)
if not match: