summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.sh31
-rw-r--r--functest/ci/download_images.sh3
-rw-r--r--functest/cli/commands/cli_tier.py2
-rw-r--r--functest/cli/functest-complete.sh8
-rw-r--r--functest/opnfv_tests/openstack/rally/rally.py2
-rw-r--r--functest/opnfv_tests/openstack/rally/scenario/full/opnfv-gnocchi.yaml18
-rw-r--r--functest/opnfv_tests/openstack/rally/scenario/sanity/opnfv-gnocchi.yaml9
-rw-r--r--functest/opnfv_tests/openstack/vping/vping_base.py41
-rw-r--r--functest/opnfv_tests/openstack/vping/vping_ssh.py7
-rw-r--r--functest/opnfv_tests/openstack/vping/vping_userdata.py2
-rw-r--r--functest/opnfv_tests/vnf/epc/juju_epc.py30
-rw-r--r--functest/tests/unit/openstack/vping/test_vping.py38
-rw-r--r--test-requirements.txt1
-rw-r--r--tox.ini11
14 files changed, 133 insertions, 70 deletions
diff --git a/build.sh b/build.sh
index 563d25248..9f0542b1a 100644
--- a/build.sh
+++ b/build.sh
@@ -14,23 +14,34 @@ docker/parser"}
arm64_dirs=${arm64_dirs-${amd64_dirs}}
build_opts=(--pull=true --no-cache --force-rm=true)
-find . -name Dockerfile -exec sed -i -e "s|opnfv/functest-core|${repo}/functest-core:amd64-latest|g" {} +
+find . -name Dockerfile -exec sed -i \
+ -e "s|opnfv/functest-core|${repo}/functest-core:amd64-latest|g" {} +
for dir in ${amd64_dirs}; do
- (cd "${dir}" && docker build "${build_opts[@]}" -t "${repo}/functest-${dir##**/}:amd64-latest" .)
- docker push "${repo}/functest-${dir##**/}:amd64-latest"
- [ "${dir}" != "docker/core" ] && (docker rmi "${repo}/functest-${dir##**/}:amd64-latest" || true)
+ (cd "${dir}" &&
+ docker build "${build_opts[@]}" \
+ -t "${repo}/functest-${dir##**/}:amd64-latest" .)
+ docker push "${repo}/functest-${dir##**/}:amd64-latest"
+ [ "${dir}" != "docker/core" ] &&
+ (docker rmi "${repo}/functest-${dir##**/}:amd64-latest" || true)
done
-[ ! -z "${amd64_dirs}" ] && (docker rmi "${repo}/functest-core:amd64-latest" alpine:3.7 || true)
+[ ! -z "${amd64_dirs}" ] &&
+ (docker rmi "${repo}/functest-core:amd64-latest" alpine:3.7 || true)
find . -name Dockerfile -exec git checkout {} +
-find . -name Dockerfile -exec sed -i -e "s|alpine:3.7|multiarch/alpine:arm64-v3.7|g" {} +
-find . -name Dockerfile -exec sed -i -e "s|opnfv/functest-core|${repo}/functest-core:arm64-latest|g" {} +
+find . -name Dockerfile -exec sed -i \
+ -e "s|alpine:3.7|multiarch/alpine:arm64-v3.7|g" {} +
+find . -name Dockerfile -exec sed -i \
+ -e "s|opnfv/functest-core|${repo}/functest-core:arm64-latest|g" {} +
for dir in ${arm64_dirs}; do
- (cd "${dir}" && docker build "${build_opts[@]}" -t "${repo}/functest-${dir##**/}:arm64-latest" .)
+ (cd "${dir}" && docker build "${build_opts[@]}" \
+ -t "${repo}/functest-${dir##**/}:arm64-latest" .)
docker push "${repo}/functest-${dir##**/}:arm64-latest"
- [ "${dir}" != "docker/core" ] && (docker rmi "${repo}/functest-${dir##**/}:arm64-latest" || true)
+ [ "${dir}" != "docker/core" ] &&
+ (docker rmi "${repo}/functest-${dir##**/}:arm64-latest" || true)
done
-[ ! -z "${arm64_dirs}" ] && (docker rmi "${repo}/functest-core:arm64-latest" multiarch/alpine:arm64-v3.7 || true)
+[ ! -z "${arm64_dirs}" ] &&
+ (docker rmi "${repo}/functest-core:arm64-latest" \
+ multiarch/alpine:arm64-v3.7 || true)
find . -name Dockerfile -exec git checkout {} +
exit $?
diff --git a/functest/ci/download_images.sh b/functest/ci/download_images.sh
index d0b302d94..c498b9bcc 100644
--- a/functest/ci/download_images.sh
+++ b/functest/ci/download_images.sh
@@ -19,4 +19,5 @@ http://cloud.centos.org/altarch/7/images/aarch64/CentOS-7-aarch64-GenericCloud.q
https://sourceforge.net/projects/ool-opnfv/files/vyos-1.1.7.img
EOF
-xz --decompress --force --keep ${1:-/home/opnfv/functest/images}/CentOS-7-aarch64-GenericCloud.qcow2.xz
+xz --decompress --force --keep \
+ ${1:-/home/opnfv/functest/images}/CentOS-7-aarch64-GenericCloud.qcow2.xz
diff --git a/functest/cli/commands/cli_tier.py b/functest/cli/commands/cli_tier.py
index a035f8551..ad722a1b9 100644
--- a/functest/cli/commands/cli_tier.py
+++ b/functest/cli/commands/cli_tier.py
@@ -23,7 +23,7 @@ class Tier(object):
self.tiers = tier_builder.TierBuilder(
env.get('INSTALLER_TYPE'),
env.get('DEPLOY_SCENARIO'),
- pkg_resources.resource_filename('functest', 'ci/testcases.yaml'))
+ pkg_resources.resource_filename('xtesting', 'ci/testcases.yaml'))
def list(self):
summary = ""
diff --git a/functest/cli/functest-complete.sh b/functest/cli/functest-complete.sh
deleted file mode 100644
index f01490713..000000000
--- a/functest/cli/functest-complete.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-_functest_completion() {
- COMPREPLY=( $( env COMP_WORDS="${COMP_WORDS[*]}" \
- COMP_CWORD=$COMP_CWORD \
- _FUNCTEST_COMPLETE=complete $1 ) )
- return 0
-}
-
-complete -F _functest_completion -o default functest;
diff --git a/functest/opnfv_tests/openstack/rally/rally.py b/functest/opnfv_tests/openstack/rally/rally.py
index 248086e15..8048eddeb 100644
--- a/functest/opnfv_tests/openstack/rally/rally.py
+++ b/functest/opnfv_tests/openstack/rally/rally.py
@@ -80,7 +80,7 @@ class RallyBase(testcase.TestCase):
TEMP_DIR = os.path.join(RALLY_DIR, "var")
RALLY_PRIVATE_NET_NAME = getattr(config.CONF, 'rally_network_name')
- RALLY_PRIVATE_SUBNET_NAME = getattr(config.CONF, 'rally_subnet_name')
+ RALLY_PRIVATE_SUBNET_NAME = str(getattr(config.CONF, 'rally_subnet_name'))
RALLY_PRIVATE_SUBNET_CIDR = getattr(config.CONF, 'rally_subnet_cidr')
RALLY_ROUTER_NAME = getattr(config.CONF, 'rally_router_name')
diff --git a/functest/opnfv_tests/openstack/rally/scenario/full/opnfv-gnocchi.yaml b/functest/opnfv_tests/openstack/rally/scenario/full/opnfv-gnocchi.yaml
index 8da5142e7..b4487daa0 100644
--- a/functest/opnfv_tests/openstack/rally/scenario/full/opnfv-gnocchi.yaml
+++ b/functest/opnfv_tests/openstack/rally/scenario/full/opnfv-gnocchi.yaml
@@ -161,3 +161,21 @@
{{ constant_runner(concurrency=concurrency, times=iterations, is_smoke=smoke) }}
sla:
{{ no_failures_sla() }}
+
+ GnocchiResource.create_resource:
+ -
+ context:
+ {{ user_context(tenants_amount, users_amount, use_existing_users) }}
+ runner:
+ {{ constant_runner(concurrency=concurrency, times=iterations, is_smoke=smoke) }}
+ sla:
+ {{ no_failures_sla() }}
+
+ GnocchiResource.create_delete_resource:
+ -
+ context:
+ {{ user_context(tenants_amount, users_amount, use_existing_users) }}
+ runner:
+ {{ constant_runner(concurrency=concurrency, times=iterations, is_smoke=smoke) }}
+ sla:
+ {{ no_failures_sla() }}
diff --git a/functest/opnfv_tests/openstack/rally/scenario/sanity/opnfv-gnocchi.yaml b/functest/opnfv_tests/openstack/rally/scenario/sanity/opnfv-gnocchi.yaml
index 15185f385..d99b15f81 100644
--- a/functest/opnfv_tests/openstack/rally/scenario/sanity/opnfv-gnocchi.yaml
+++ b/functest/opnfv_tests/openstack/rally/scenario/sanity/opnfv-gnocchi.yaml
@@ -108,3 +108,12 @@
{{ constant_runner(concurrency=concurrency, times=iterations, is_smoke=smoke) }}
sla:
{{ no_failures_sla() }}
+
+ GnocchiResource.create_delete_resource:
+ -
+ context:
+ {{ user_context(tenants_amount, users_amount, use_existing_users) }}
+ runner:
+ {{ constant_runner(concurrency=concurrency, times=iterations, is_smoke=smoke) }}
+ sla:
+ {{ no_failures_sla() }}
diff --git a/functest/opnfv_tests/openstack/vping/vping_base.py b/functest/opnfv_tests/openstack/vping/vping_base.py
index 05fe9b453..4b6e4e97f 100644
--- a/functest/opnfv_tests/openstack/vping/vping_base.py
+++ b/functest/opnfv_tests/openstack/vping/vping_base.py
@@ -16,11 +16,14 @@ import time
import uuid
from snaps.config.flavor import FlavorConfig
-from snaps.config.network import NetworkConfig, SubnetConfig
+from snaps.config.network import NetworkConfig
+from snaps.config.network import SubnetConfig
from snaps.config.router import RouterConfig
from snaps.openstack.create_flavor import OpenStackFlavor
+from snaps.openstack.create_image import OpenStackImage
+from snaps.openstack.create_network import OpenStackNetwork
+from snaps.openstack.create_router import OpenStackRouter
from snaps.openstack.tests import openstack_tests
-from snaps.openstack.utils import deploy_utils
from xtesting.core import testcase
from functest.opnfv_tests.openstack.snaps import snaps_utils
@@ -85,20 +88,20 @@ class VPingBase(testcase.TestCase):
'%Y-%m-%d %H:%M:%S'))
image_base_name = '{}-{}'.format(
- getattr(config.CONF, 'vping_image_name'),
- str(self.guid))
+ getattr(config.CONF, 'vping_image_name'), self.guid)
os_image_settings = openstack_tests.cirros_image_settings(
image_base_name, image_metadata=self.cirros_image_config)
self.logger.info("Creating image with name: '%s'", image_base_name)
- self.image_creator = deploy_utils.create_image(
+ self.image_creator = OpenStackImage(
self.os_creds, os_image_settings)
+ self.image_creator.create()
self.creators.append(self.image_creator)
private_net_name = getattr(
config.CONF, 'vping_private_net_name') + self.guid
- private_subnet_name = getattr(
- config.CONF, 'vping_private_subnet_name') + self.guid
+ private_subnet_name = str(getattr(
+ config.CONF, 'vping_private_subnet_name') + self.guid)
private_subnet_cidr = getattr(config.CONF, 'vping_private_subnet_cidr')
vping_network_type = None
@@ -116,29 +119,31 @@ class VPingBase(testcase.TestCase):
self.logger.info(
"Creating network with name: '%s'", private_net_name)
- self.network_creator = deploy_utils.create_network(
+ subnet_settings = SubnetConfig(
+ name=private_subnet_name,
+ cidr=private_subnet_cidr,
+ dns_nameservers=[env.get('NAMESERVER')])
+ self.network_creator = OpenStackNetwork(
self.os_creds,
NetworkConfig(
name=private_net_name,
network_type=vping_network_type,
physical_network=vping_physical_network,
segmentation_id=vping_segmentation_id,
- subnet_settings=[SubnetConfig(
- name=private_subnet_name,
- cidr=private_subnet_cidr,
- dns_nameservers=[env.get('NAMESERVER')])]))
+ subnet_settings=[subnet_settings]))
+ self.network_creator.create()
self.creators.append(self.network_creator)
# Creating router to external network
- log = "Creating router with name: '%s'" % self.router_name
- self.logger.info(log)
+ self.logger.info("Creating router with name: '%s'", self.router_name)
ext_net_name = snaps_utils.get_ext_net_name(self.os_creds)
- self.router_creator = deploy_utils.create_router(
+ self.router_creator = OpenStackRouter(
self.os_creds,
RouterConfig(
name=self.router_name,
external_gateway=ext_net_name,
- internal_subnets=[private_subnet_name]))
+ internal_subnets=[subnet_settings.name]))
+ self.router_creator.create()
self.creators.append(self.router_creator)
self.logger.info(
@@ -187,8 +192,8 @@ class VPingBase(testcase.TestCase):
for creator in reversed(self.creators):
try:
creator.clean()
- except Exception as error: # pylint: disable=broad-except
- self.logger.error('Unexpected error cleaning - %s', error)
+ except Exception: # pylint: disable=broad-except
+ self.logger.exception('Unexpected error cleaning')
def _do_vping(self, vm_creator, test_ip):
"""
diff --git a/functest/opnfv_tests/openstack/vping/vping_ssh.py b/functest/opnfv_tests/openstack/vping/vping_ssh.py
index 7cdcd2576..93c9c0976 100644
--- a/functest/opnfv_tests/openstack/vping/vping_ssh.py
+++ b/functest/opnfv_tests/openstack/vping/vping_ssh.py
@@ -9,6 +9,7 @@
"""vPingSSH testcase."""
+import logging
import time
from scp import SCPClient
@@ -29,6 +30,7 @@ from functest.utils import config
class VPingSSH(vping_base.VPingBase):
+ # pylint: disable=too-many-instance-attributes
"""
VPingSSH testcase implementation.
@@ -41,6 +43,7 @@ class VPingSSH(vping_base.VPingBase):
if "case_name" not in kwargs:
kwargs["case_name"] = "vping_ssh"
super(VPingSSH, self).__init__(**kwargs)
+ self.logger = logging.getLogger(__name__)
self.kp_name = getattr(config.CONF, 'vping_keypair_name') + self.guid
self.kp_priv_file = getattr(config.CONF, 'vping_keypair_priv_file')
@@ -120,8 +123,8 @@ class VPingSSH(vping_base.VPingBase):
self.creators.append(self.vm2_creator)
return self._execute()
- except Exception as exc: # pylint: disable=broad-except
- self.logger.error('Unexpected error running test - ' + exc.message)
+ except Exception: # pylint: disable=broad-except
+ self.logger.exception('Unexpected error running test')
return testcase.TestCase.EX_RUN_ERROR
def _do_vping(self, vm_creator, test_ip):
diff --git a/functest/opnfv_tests/openstack/vping/vping_userdata.py b/functest/opnfv_tests/openstack/vping/vping_userdata.py
index 7d9a57c93..c2ff75150 100644
--- a/functest/opnfv_tests/openstack/vping/vping_userdata.py
+++ b/functest/opnfv_tests/openstack/vping/vping_userdata.py
@@ -9,6 +9,7 @@
"""vping_userdata testcase."""
+import logging
import time
from snaps.config.network import PortConfig
@@ -28,6 +29,7 @@ class VPingUserdata(vping_base.VPingBase):
if "case_name" not in kwargs:
kwargs["case_name"] = "vping_userdata"
super(VPingUserdata, self).__init__(**kwargs)
+ self.logger = logging.getLogger(__name__)
def run(self, **kwargs):
"""
diff --git a/functest/opnfv_tests/vnf/epc/juju_epc.py b/functest/opnfv_tests/vnf/epc/juju_epc.py
index 1ba883d40..50253ccac 100644
--- a/functest/opnfv_tests/vnf/epc/juju_epc.py
+++ b/functest/opnfv_tests/vnf/epc/juju_epc.py
@@ -82,7 +82,7 @@ class JujuEpc(vnf.VnfOnBoarding):
__logger = logging.getLogger(__name__)
- juju_wait_timeout = '3600'
+ juju_timeout = '3600'
def __init__(self, **kwargs):
if "case_name" not in kwargs:
@@ -287,7 +287,8 @@ class JujuEpc(vnf.VnfOnBoarding):
name=image_name, image_user='cloud', img_format='qcow2',
image_file=image_file))
image_id = image_creator.create().id
- cmd = ['juju', 'metadata', 'generate-image', '-d', '/root',
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'metadata', 'generate-image', '-d', '/root',
'-i', image_id, '-s', image_name,
'-r', self.snaps_creds.region_name,
'-u', self.public_auth_url]
@@ -295,7 +296,8 @@ class JujuEpc(vnf.VnfOnBoarding):
self.__logger.info("%s\n%s", " ".join(cmd), output)
self.created_object.append(image_creator)
self.__logger.info("Network ID : %s", net_id)
- cmd = ['juju', 'bootstrap', 'abot-epc', 'abot-controller',
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'bootstrap', 'abot-epc', 'abot-controller',
'--metadata-source', '/root',
'--constraints', 'mem=2G',
'--bootstrap-series', 'xenial',
@@ -334,11 +336,12 @@ class JujuEpc(vnf.VnfOnBoarding):
flavor_creator.create()
self.created_object.append(flavor_creator)
self.__logger.info("Deploying Abot-epc bundle file ...")
- cmd = ['juju', 'deploy', '{}'.format(descriptor.get('file_name'))]
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'deploy', '{}'.format(descriptor.get('file_name'))]
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
self.__logger.info("%s\n%s", " ".join(cmd), output)
self.__logger.info("Waiting for instances .....")
- cmd = ['timeout', '-t', JujuEpc.juju_wait_timeout, 'juju-wait']
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout, 'juju-wait']
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
self.__logger.info("%s\n%s", " ".join(cmd), output)
self.__logger.info("Deployed Abot-epc on Openstack")
@@ -364,12 +367,14 @@ class JujuEpc(vnf.VnfOnBoarding):
if not self.check_app(app):
return False
self.__logger.info("Copying the feature files to Abot_node ")
- cmd = ['juju', 'scp', '--', '-r', '-v',
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'scp', '--', '-r', '-v',
'{}/featureFiles'.format(self.case_dir), 'abot-epc-basic/0:~/']
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
self.__logger.info("%s\n%s", " ".join(cmd), output)
self.__logger.info("Copying the feature files in Abot_node ")
- cmd = ['juju', 'ssh', 'abot-epc-basic/0',
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'ssh', 'abot-epc-basic/0',
'sudo', 'rsync', '-azvv', '~/featureFiles',
'/etc/rebaca-test-suite/featureFiles']
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
@@ -380,16 +385,18 @@ class JujuEpc(vnf.VnfOnBoarding):
"""Run test on ABoT."""
start_time = time.time()
self.__logger.info("Running VNF Test cases....")
- cmd = ['juju', 'run-action', 'abot-epc-basic/0', 'run',
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'run-action', 'abot-epc-basic/0', 'run',
'tagnames={}'.format(self.details['test_vnf']['tag_name'])]
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
self.__logger.info("%s\n%s", " ".join(cmd), output)
- cmd = ['timeout', '-t', JujuEpc.juju_wait_timeout, 'juju-wait']
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout, 'juju-wait']
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
self.__logger.info("%s\n%s", " ".join(cmd), output)
duration = time.time() - start_time
self.__logger.info("Getting results from Abot node....")
- cmd = ['juju', 'scp', '--', '-v',
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'scp', '--', '-v',
'abot-epc-basic/0:'
'/var/lib/abot-epc-basic/artifacts/TestResults.json',
'{}/.'.format(self.res_dir)]
@@ -417,7 +424,8 @@ class JujuEpc(vnf.VnfOnBoarding):
self.__logger.debug("%s\n%s", " ".join(cmd), output)
if not self.orchestrator['requirements']['preserve_setup']:
self.__logger.info("Destroying Orchestrator...")
- cmd = ['juju', 'destroy-controller', '-y', 'abot-controller',
+ cmd = ['timeout', '-t', JujuEpc.juju_timeout,
+ 'juju', 'destroy-controller', '-y', 'abot-controller',
'--destroy-all-models']
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
self.__logger.info("%s\n%s", " ".join(cmd), output)
diff --git a/functest/tests/unit/openstack/vping/test_vping.py b/functest/tests/unit/openstack/vping/test_vping.py
index 3aaa4594a..adc0f69a6 100644
--- a/functest/tests/unit/openstack/vping/test_vping.py
+++ b/functest/tests/unit/openstack/vping/test_vping.py
@@ -60,14 +60,16 @@ class VPingUserdataTesting(unittest.TestCase):
'get_ext_net_name', return_value='foo')
def test_vping_userdata(self, *args):
# pylint: disable=unused-argument
- with mock.patch('snaps.openstack.utils.deploy_utils.create_image',
+ with mock.patch('snaps.openstack.create_image.OpenStackImage.create',
return_value=OpenStackImage(self.os_creds, None)), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=OpenStackNetwork(
- self.os_creds, NetworkConfig(name='foo'))), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_router',
- return_value=OpenStackRouter(
- self.os_creds, RouterConfig(name='foo'))), \
+ mock.patch(
+ 'snaps.openstack.create_network.OpenStackNetwork.create',
+ return_value=OpenStackNetwork(
+ self.os_creds, NetworkConfig(name='foo'))), \
+ mock.patch(
+ 'snaps.openstack.create_router.OpenStackRouter.create',
+ return_value=OpenStackRouter(
+ self.os_creds, RouterConfig(name='foo'))), \
mock.patch('snaps.openstack.utils.deploy_utils.'
'create_vm_instance',
return_value=OpenStackVmInstance(
@@ -133,14 +135,15 @@ class VPingSSHTesting(unittest.TestCase):
cidr='10.0.0.1/24',
dns_nameservers=[env.get('NAMESERVER')])
- with mock.patch('snaps.openstack.utils.deploy_utils.create_image',
+ with mock.patch('snaps.openstack.create_image.OpenStackImage.create',
return_value=OpenStackImage(self.os_creds, None)), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=OpenStackNetwork(
- self.os_creds,
- NetworkConfig(
- name='foo',
- subnet_settings=[subnet_config]))), \
+ mock.patch(
+ 'snaps.openstack.create_network.OpenStackNetwork.create',
+ return_value=OpenStackNetwork(
+ self.os_creds,
+ NetworkConfig(
+ name='foo',
+ subnet_settings=[subnet_config]))), \
mock.patch('snaps.openstack.utils.deploy_utils.'
'create_vm_instance',
return_value=OpenStackVmInstance(
@@ -153,9 +156,10 @@ class VPingSSHTesting(unittest.TestCase):
mock.patch('snaps.openstack.utils.deploy_utils.create_keypair',
return_value=OpenStackKeypair(
self.os_creds, KeypairConfig(name='foo'))), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_router',
- return_value=OpenStackRouter(
- self.os_creds, RouterConfig(name='foo'))), \
+ mock.patch(
+ 'snaps.openstack.create_router.OpenStackRouter.create',
+ return_value=OpenStackRouter(
+ self.os_creds, RouterConfig(name='foo'))), \
mock.patch('snaps.openstack.utils.deploy_utils.'
'create_security_group',
return_value=OpenStackSecurityGroup(
diff --git a/test-requirements.txt b/test-requirements.txt
index 84c5a4435..2f570745e 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -11,3 +11,4 @@ sphinx-opnfv-theme
sphinx-rtd-theme
yamllint
doc8>=0.6.0 # Apache-2.0
+bashate>=0.5.1 # Apache-2.0
diff --git a/tox.ini b/tox.ini
index 9fb5a416c..d77850634 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
[tox]
-envlist = docs,pep8,pylint,yamllint,py35,py27,perm,cover
+envlist = docs,pep8,pylint,yamllint,bashate,py35,py27,perm,cover
[testenv]
usedevelop = True
@@ -103,6 +103,15 @@ dirs =
functest/tests/unit/utils
commands = nosetests {[testenv:py35]dirs}
+[testenv:bashate]
+basepython = python2.7
+files =
+ functest/opnfv_tests/openstack/rally/scenario/support/instance_dd_test.sh
+ functest/opnfv_tests/openstack/vping/ping.sh
+ functest/ci/download_images.sh
+ build.sh
+commands = bashate {[testenv:bashate]files}
+
[testenv:cover]
basepython = python2.7
dirs =