From 9455d897de5b4788fee1b9c820d8a09b3e6e8968 Mon Sep 17 00:00:00 2001 From: George Paraskevopoulos Date: Tue, 13 Dec 2016 16:05:28 +0200 Subject: Use ovs_logger module from releng JIRA: SFC-61 Releng is now installed as a python module and ovs_utils has been transfered there in "opnfv.utils.ovs_logger" module, so we should use that instead. ofctl_time_counter is still hosted here under utils.py as it's not generic enough to be moved in releng Change-Id: Ie721c95f20a7f515f7f2eb45b7f8edd0460a6ea8 Signed-off-by: George Paraskevopoulos --- tests/functest/odl-sfc/ovs_utils.py | 138 --------------------- tests/functest/odl-sfc/run_tests.py | 4 +- tests/functest/odl-sfc/sfc.py | 4 +- ...ain_two_service_functions_different_computes.py | 4 +- tests/functest/odl-sfc/utils.py | 24 +++- 5 files changed, 28 insertions(+), 146 deletions(-) delete mode 100644 tests/functest/odl-sfc/ovs_utils.py (limited to 'tests') diff --git a/tests/functest/odl-sfc/ovs_utils.py b/tests/functest/odl-sfc/ovs_utils.py deleted file mode 100644 index 48dfd620..00000000 --- a/tests/functest/odl-sfc/ovs_utils.py +++ /dev/null @@ -1,138 +0,0 @@ -############################################################################## -# Copyright (c) 2015 Ericsson AB and others. -# Author: George Paraskevopoulos (geopar@intracom-telecom.com) -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -import functest.utils.functest_logger as rl -import os -import time -import shutil -import re - -logger = rl.Logger('ovs_utils').getLogger() - - -class OVSLogger(object): - def __init__(self, basedir, ft_resdir): - self.ovs_dir = basedir - self.ft_resdir = ft_resdir - self.__mkdir_p(self.ovs_dir) - self.__mkdir_p(self.ft_resdir) - - def __mkdir_p(self, dirpath): - if not os.path.exists(dirpath): - os.makedirs(dirpath) - - def __ssh_host(self, ssh_conn, host_prefix='10.20.0'): - try: - _, stdout, _ = ssh_conn.exec_command('hostname -I') - hosts = stdout.readline().strip().split(' ') - found_host = [h for h in hosts if h.startswith(host_prefix)][0] - return found_host - except Exception, e: - logger.error(e) - - def __dump_to_file(self, operation, host, text, timestamp=None): - ts = (timestamp if timestamp is not None - else time.strftime("%Y%m%d-%H%M%S")) - dumpdir = os.path.join(self.ovs_dir, ts) - self.__mkdir_p(dumpdir) - fname = '{0}_{1}'.format(operation, host) - with open(os.path.join(dumpdir, fname), 'w') as f: - f.write(text) - - def __remote_cmd(self, ssh_conn, cmd): - try: - _, stdout, stderr = ssh_conn.exec_command(cmd) - errors = stderr.readlines() - if len(errors) > 0: - host = self.__ssh_host(ssh_conn) - logger.error(''.join(errors)) - raise Exception('Could not execute {0} in {1}' - .format(cmd, host)) - output = ''.join(stdout.readlines()) - return output - except Exception, e: - logger.error('[__remote_command(ssh_client, {0})]: {1}' - .format(cmd, e)) - return None - - def create_artifact_archive(self): - shutil.make_archive(self.ovs_dir, - 'zip', - root_dir=os.path.dirname(self.ovs_dir), - base_dir=self.ovs_dir) - shutil.copy2('{0}.zip'.format(self.ovs_dir), self.ft_resdir) - - def ofctl_dump_flows(self, ssh_conn, br='br-int', - choose_table=None, timestamp=None): - try: - cmd = 'ovs-ofctl -OOpenFlow13 dump-flows {0}'.format(br) - if choose_table is not None: - cmd = '{0} table={1}'.format(cmd, choose_table) - output = self.__remote_cmd(ssh_conn, cmd) - operation = 'ofctl_dump_flows' - host = self.__ssh_host(ssh_conn) - self.__dump_to_file(operation, host, output, timestamp=timestamp) - return output - except Exception, e: - logger.error('[ofctl_dump_flows(ssh_client, {0}, {1})]: {2}' - .format(br, choose_table, e)) - return None - - def vsctl_show(self, ssh_conn, timestamp=None): - try: - cmd = 'ovs-vsctl show' - output = self.__remote_cmd(ssh_conn, cmd) - operation = 'vsctl_show' - host = self.__ssh_host(ssh_conn) - self.__dump_to_file(operation, host, output, timestamp=timestamp) - return output - except Exception, e: - logger.error('[vsctl_show(ssh_client)]: {0}'.format(e)) - return None - - def dump_ovs_logs(self, controller_clients, compute_clients, - related_error=None, timestamp=None): - if timestamp is None: - timestamp = time.strftime("%Y%m%d-%H%M%S") - - for controller_client in controller_clients: - self.ofctl_dump_flows(controller_client, - timestamp=timestamp) - self.vsctl_show(controller_client, - timestamp=timestamp) - - for compute_client in compute_clients: - self.ofctl_dump_flows(compute_client, - timestamp=timestamp) - self.vsctl_show(compute_client, - timestamp=timestamp) - - if related_error is not None: - dumpdir = os.path.join(self.ovs_dir, timestamp) - with open(os.path.join(dumpdir, 'error'), 'w') as f: - f.write(related_error) - - def ofctl_time_counter(self, ssh_conn): - try: - # We get the flows from table 11 - table = 11 - br = "br-int" - output = self.ofctl_dump_flows(ssh_conn, br, table) - pattern = "NXM_NX_NSP" - rsps = [] - lines = output.split(",") - for line in lines: - is_there = re.findall(pattern, line) - if is_there: - value = line.split(":")[1].split("-")[0] - rsps.append(value) - return rsps - except Exception, e: - logger.error('Error when countering %s' % e) - return None diff --git a/tests/functest/odl-sfc/run_tests.py b/tests/functest/odl-sfc/run_tests.py index 451ce564..d9093952 100644 --- a/tests/functest/odl-sfc/run_tests.py +++ b/tests/functest/odl-sfc/run_tests.py @@ -14,7 +14,7 @@ import importlib import os import sys import time -import ovs_utils +import opnfv.utils.ovs_logger as ovs_log import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import yaml @@ -69,7 +69,7 @@ def set_tacker_rc_file_env(): def main(): set_tacker_rc_file_env() - ovs_logger = ovs_utils.OVSLogger( + ovs_logger = ovs_log.OVSLogger( os.path.join(COMMON_CONFIG.sfc_test_dir, 'ovs-logs'), COMMON_CONFIG.functest_results_dir) diff --git a/tests/functest/odl-sfc/sfc.py b/tests/functest/odl-sfc/sfc.py index 22301a28..36e6fa84 100755 --- a/tests/functest/odl-sfc/sfc.py +++ b/tests/functest/odl-sfc/sfc.py @@ -5,7 +5,7 @@ import functest.utils.functest_logger as ft_logger import functest.utils.openstack_utils as os_utils import functest.utils.openstack_tacker as os_tacker import threading -import ovs_utils +import opnfv.utils.ovs_logger as ovs_log import utils as test_utils import config as sfc_config from results import Results @@ -70,7 +70,7 @@ def main(): compute_clients = test_utils.get_ssh_clients("compute", COMMON_CONFIG.fuel_proxy) - ovs_logger = ovs_utils.OVSLogger( + ovs_logger = ovs_log.OVSLogger( os.path.join(COMMON_CONFIG.sfc_test_dir, 'ovs-logs'), COMMON_CONFIG.functest_results_dir) diff --git a/tests/functest/odl-sfc/sfc_one_chain_two_service_functions_different_computes.py b/tests/functest/odl-sfc/sfc_one_chain_two_service_functions_different_computes.py index b903f837..8f289670 100755 --- a/tests/functest/odl-sfc/sfc_one_chain_two_service_functions_different_computes.py +++ b/tests/functest/odl-sfc/sfc_one_chain_two_service_functions_different_computes.py @@ -7,7 +7,7 @@ import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils import functest.utils.openstack_tacker as os_tacker import re -import ovs_utils +import opnfv.utils.ovs_logger as ovs_log import utils as test_utils import config as sfc_config @@ -112,7 +112,7 @@ def main(): controller_clients = test_utils.get_ssh_clients("controller", PROXY) compute_clients = test_utils.get_ssh_clients("compute", PROXY) - ovs_logger = ovs_utils.OVSLogger( + ovs_logger = ovs_log.OVSLogger( os.path.join(COMMON_CONFIG.sfc_test_dir, 'ovs-logs'), COMMON_CONFIG.functest_results_dir) diff --git a/tests/functest/odl-sfc/utils.py b/tests/functest/odl-sfc/utils.py index de23b812..826aaca7 100644 --- a/tests/functest/odl-sfc/utils.py +++ b/tests/functest/odl-sfc/utils.py @@ -355,14 +355,34 @@ def timethis(func): return timed +def ofctl_time_counter(ovs_logger, ssh_conn): + try: + # We get the flows from table 11 + table = 11 + br = "br-int" + output = ovs_logger.ofctl_dump_flows(ssh_conn, br, table) + pattern = "NXM_NX_NSP" + rsps = [] + lines = output.split(",") + for line in lines: + is_there = re.findall(pattern, line) + if is_there: + value = line.split(":")[1].split("-")[0] + rsps.append(value) + return rsps + except Exception, e: + logger.error('Error when countering %s' % e) + return None + + @timethis def capture_time_log(ovs_logger, compute_clients, timeout=200): - rsps = ovs_logger.ofctl_time_counter(compute_clients[0]) + rsps = ofctl_time_counter(ovs_logger, compute_clients[0]) first_RSP = rsps[0] if len(rsps) > 0 else '' while not ((len(rsps) > 1) and (first_RSP != rsps[0]) and (rsps[0] == rsps[1])): - rsps = ovs_logger.ofctl_time_counter(compute_clients[0]) + rsps = ofctl_time_counter(ovs_logger, compute_clients[0]) timeout -= 1 if timeout == 0: logger.error( -- cgit 1.2.3-korg