aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/functest/odl-sfc/SSHUtils.py120
-rw-r--r--tests/functest/odl-sfc/config.py6
-rw-r--r--tests/functest/odl-sfc/config.yaml6
-rw-r--r--tests/functest/odl-sfc/ovs_utils.py138
-rw-r--r--tests/functest/odl-sfc/run_tests.py6
-rwxr-xr-xtests/functest/odl-sfc/sfc.py9
-rwxr-xr-xtests/functest/odl-sfc/sfc_one_chain_two_service_functions_different_computes.py4
-rw-r--r--tests/functest/odl-sfc/utils.py26
8 files changed, 45 insertions, 270 deletions
diff --git a/tests/functest/odl-sfc/SSHUtils.py b/tests/functest/odl-sfc/SSHUtils.py
deleted file mode 100644
index 9c8c2c72..00000000
--- a/tests/functest/odl-sfc/SSHUtils.py
+++ /dev/null
@@ -1,120 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
-# Authors: George Paraskevopoulos (geopar@intracom-telecom.com)
-# Jose Lausuch (jose.lausuch@ericsson.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 paramiko
-import functest.utils.functest_logger as rl
-import os
-
-logger = rl.Logger('SSHUtils').getLogger()
-
-
-def get_ssh_client(hostname, username, password=None, proxy=None):
- client = None
- try:
- if proxy is None:
- client = paramiko.SSHClient()
- else:
- client = ProxyHopClient()
- client.configure_jump_host(proxy['ip'],
- proxy['username'],
- proxy['password'])
-
- if client is None:
- raise Exception('Could not connect to client')
-
- client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- client.connect(hostname,
- username=username,
- password=password)
- return client
- except Exception, e:
- logger.error(e)
- return None
-
-
-def get_file(ssh_conn, src, dest):
- try:
- sftp = ssh_conn.open_sftp()
- sftp.get(src, dest)
- return True
- except Exception, e:
- logger.error("Error [get_file(ssh_conn, '%s', '%s']: %s" %
- (src, dest, e))
- return None
-
-
-def put_file(ssh_conn, src, dest):
- try:
- sftp = ssh_conn.open_sftp()
- sftp.put(src, dest)
- return True
- except Exception, e:
- logger.error("Error [put_file(ssh_conn, '%s', '%s']: %s" %
- (src, dest, e))
- return None
-
-
-class ProxyHopClient(paramiko.SSHClient):
- '''
- Connect to a remote server using a proxy hop
- '''
- def __init__(self, *args, **kwargs):
- self.logger = rl.Logger("ProxyHopClient").getLogger()
- self.proxy_ssh = None
- self.proxy_transport = None
- self.proxy_channel = None
- self.proxy_ip = None
- self.proxy_ssh_key = None
- self.local_ssh_key = os.path.join(os.getcwd(), 'id_rsa')
- super(ProxyHopClient, self).__init__(*args, **kwargs)
-
- def configure_jump_host(self, jh_ip, jh_user, jh_pass,
- jh_ssh_key='/root/.ssh/id_rsa'):
- self.proxy_ip = jh_ip
- self.proxy_ssh_key = jh_ssh_key
- self.proxy_ssh = paramiko.SSHClient()
- self.proxy_ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- self.proxy_ssh.connect(jh_ip,
- username=jh_user,
- password=jh_pass)
- self.proxy_transport = self.proxy_ssh.get_transport()
-
- def connect(self, hostname, port=22, username='root', password=None,
- pkey=None, key_filename=None, timeout=None, allow_agent=True,
- look_for_keys=True, compress=False, sock=None, gss_auth=False,
- gss_kex=False, gss_deleg_creds=True, gss_host=None,
- banner_timeout=None):
- try:
- if self.proxy_ssh is None:
- raise Exception('You must configure the jump '
- 'host before calling connect')
-
- get_file_res = get_file(self.proxy_ssh,
- self.proxy_ssh_key,
- self.local_ssh_key)
- if get_file_res is None:
- raise Exception('Could\'t fetch SSH key from jump host')
- proxy_key = (paramiko.RSAKey
- .from_private_key_file(self.local_ssh_key))
-
- self.proxy_channel = self.proxy_transport.open_channel(
- "direct-tcpip",
- (hostname, 22),
- (self.proxy_ip, 22))
-
- self.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- super(ProxyHopClient, self).connect(hostname,
- username=username,
- pkey=proxy_key,
- sock=self.proxy_channel)
- os.remove(self.local_ssh_key)
- except Exception, e:
- self.logger.error(e)
diff --git a/tests/functest/odl-sfc/config.py b/tests/functest/odl-sfc/config.py
index d7498327..3b76e3bc 100644
--- a/tests/functest/odl-sfc/config.py
+++ b/tests/functest/odl-sfc/config.py
@@ -36,6 +36,12 @@ class CommonConfig(object):
}
self.flavor = ft_utils.get_parameter_from_yaml(
"defaults.flavor", self.config_file)
+ self.ram_size_in_mb = ft_utils.get_parameter_from_yaml(
+ "defaults.ram_size_in_mb", self.config_file)
+ self.disk_size_in_gb = ft_utils.get_parameter_from_yaml(
+ "defaults.disk_size_in_gb", self.config_file)
+ self.vcpu_count = ft_utils.get_parameter_from_yaml(
+ "defaults.vcpu_count", self.config_file)
self.image_name = ft_utils.get_parameter_from_yaml(
"defaults.image_name", self.config_file)
self.image_file_name = ft_utils.get_parameter_from_yaml(
diff --git a/tests/functest/odl-sfc/config.yaml b/tests/functest/odl-sfc/config.yaml
index 7861d771..78cf42fb 100644
--- a/tests/functest/odl-sfc/config.yaml
+++ b/tests/functest/odl-sfc/config.yaml
@@ -1,5 +1,9 @@
defaults:
- flavor: custom #odl-sfc uses custom flavor
+ #odl-sfc uses custom flavors as per below params
+ flavor: custom
+ ram_size_in_mb: 1500
+ disk_size_in_gb: 10
+ vcpu_count: 1
image_name: sf_nsh_colorado
image_file_name: sf_nsh_colorado.qcow2
fuel_master_ip: 10.20.0.2
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..cb96c206 100644
--- a/tests/functest/odl-sfc/run_tests.py
+++ b/tests/functest/odl-sfc/run_tests.py
@@ -14,12 +14,12 @@ 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
import utils
-import SSHUtils as ssh_utils
+import opnfv.utils.SSHUtils as ssh_utils
parser = argparse.ArgumentParser()
@@ -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..5d1024db 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
@@ -55,7 +55,10 @@ def main():
test_utils.download_image(COMMON_CONFIG.url,
COMMON_CONFIG.image_path)
_, custom_flv_id = os_utils.get_or_create_flavor(
- COMMON_CONFIG.flavor, 1500, 10, 1, public=True)
+ COMMON_CONFIG.flavor,
+ COMMON_CONFIG.ram_size_in_mb,
+ COMMON_CONFIG.disk_size_in_gb,
+ COMMON_CONFIG.vcpu_count, public=True)
if not custom_flv_id:
logger.error("Failed to create custom flavor")
sys.exit(1)
@@ -70,7 +73,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..4bff0a77 100644
--- a/tests/functest/odl-sfc/utils.py
+++ b/tests/functest/odl-sfc/utils.py
@@ -6,7 +6,7 @@ import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
import re
import json
-import SSHUtils as ssh_utils
+import opnfv.utils.SSHUtils as ssh_utils
import functools
@@ -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(