diff options
-rw-r--r-- | docker/smoke/testcases.yaml | 18 | ||||
-rw-r--r-- | functest/ci/download_images.sh | 1 | ||||
-rw-r--r-- | functest/ci/testcases.yaml | 18 | ||||
-rw-r--r-- | functest/opnfv_tests/openstack/shaker/__init__.py | 0 | ||||
-rw-r--r-- | functest/opnfv_tests/openstack/shaker/shaker.py | 78 |
5 files changed, 115 insertions, 0 deletions
diff --git a/docker/smoke/testcases.yaml b/docker/smoke/testcases.yaml index 35695edfb..d5fe5fa82 100644 --- a/docker/smoke/testcases.yaml +++ b/docker/smoke/testcases.yaml @@ -127,6 +127,24 @@ tiers: - 'test_networks_multiprovider_rbac' - + case_name: shaker + project_name: functest + criteria: 100 + blocking: false + description: >- + Shaker wraps around popular system network testing tools + like iperf, iperf3 and netperf (with help of flent). Shaker + is able to deploy OpenStack instances and networks in + different topologies. + dependencies: + installer: '' + scenario: '' + run: + module: + 'functest.opnfv_tests.openstack.shaker.shaker' + class: 'Shaker' + + - case_name: odl project_name: functest criteria: 100 diff --git a/functest/ci/download_images.sh b/functest/ci/download_images.sh index d3dcee266..5057f05fb 100644 --- a/functest/ci/download_images.sh +++ b/functest/ci/download_images.sh @@ -15,6 +15,7 @@ http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-aarch64-disk.img https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-arm64-uefi1.img http://cloud.centos.org/altarch/7/images/aarch64/CentOS-7-aarch64-GenericCloud.qcow2.xz https://sourceforge.net/projects/ool-opnfv/files/vyos-1.1.7.img +http://testresults.opnfv.org/functest/shaker-image.qcow2 EOF xz --decompress --force --keep \ diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml index f20363401..caf8ca3da 100644 --- a/functest/ci/testcases.yaml +++ b/functest/ci/testcases.yaml @@ -254,6 +254,24 @@ tiers: - 'test_networks_multiprovider_rbac' - + case_name: shaker + project_name: functest + criteria: 100 + blocking: false + description: >- + Shaker wraps around popular system network testing tools + like iperf, iperf3 and netperf (with help of flent). Shaker + is able to deploy OpenStack instances and networks in + different topologies. + dependencies: + installer: '' + scenario: '' + run: + module: + 'functest.opnfv_tests.openstack.shaker.shaker' + class: 'Shaker' + + - case_name: odl project_name: functest criteria: 100 diff --git a/functest/opnfv_tests/openstack/shaker/__init__.py b/functest/opnfv_tests/openstack/shaker/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/functest/opnfv_tests/openstack/shaker/__init__.py diff --git a/functest/opnfv_tests/openstack/shaker/shaker.py b/functest/opnfv_tests/openstack/shaker/shaker.py new file mode 100644 index 000000000..88cbe3514 --- /dev/null +++ b/functest/opnfv_tests/openstack/shaker/shaker.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python + +# Copyright (c) 2018 Orange and others. +# +# 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 + +""" +Shaker_ wraps around popular system network testing tools like iperf, iperf3 +and netperf (with help of flent). Shaker is able to deploy OpenStack instances +and networks in different topologies. Shaker scenario specifies the deployment +and list of tests to execute. + +.. _Shaker: http://pyshaker.readthedocs.io/en/latest/ +""" + +import logging +import os + +import scp + +from functest.core import singlevm + + +class Shaker(singlevm.SingleVm2): + # pylint: disable=too-many-instance-attributes + + __logger = logging.getLogger(__name__) + + filename = '/home/opnfv/functest/images/shaker-image.qcow2' + flavor_ram = 512 + flavor_vcpus = 1 + flavor_disk = 3 + username = 'ubuntu' + port = 9000 + + def create_sg_rules(self): + """ + It adds one security group rule allowing ingress 9000/tcp + + Raises: Exception on error. + """ + assert self.orig_cloud + super(Shaker, self).create_sg_rules() + self.orig_cloud.create_security_group_rule( + self.sec.id, port_range_min=self.port, port_range_max=self.port, + protocol='tcp', direction='ingress') + + def execute(self): + """ + Returns: + - 0 if success + - 1 on operation error + """ + assert self.ssh + scpc = scp.SCPClient(self.ssh.get_transport()) + scpc.put('/home/opnfv/functest/conf/env_file', '~/') + (_, stdout, stderr) = self.ssh.exec_command( + 'source ~/env_file && export OS_INTERFACE=public &&' + 'shaker --server-endpoint {}:9000 --scenario ' + 'openstack/full_l2,openstack/full_l3_east_west,' + 'openstack/full_l3_north_south,openstack/perf_l2,' + 'openstack/perf_l3_east_west,openstack/perf_l3_north_south ' + '--report report.html --output report.json ; echo $?'.format( + self.sshvm.public_v4)) + self.__logger.info("output:\n%s", stdout.read()) + self.__logger.info("error:\n%s", stderr.read()) + if not os.path.exists(self.res_dir): + os.makedirs(self.res_dir) + try: + scpc.get('report.json', self.res_dir) + scpc.get('report.html', self.res_dir) + except scp.SCPException: + self.__logger.exception("cannot get report files") + return 1 + return stdout.channel.recv_exit_status() |