summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker/smoke/testcases.yaml18
-rw-r--r--functest/ci/download_images.sh1
-rw-r--r--functest/ci/testcases.yaml18
-rw-r--r--functest/opnfv_tests/openstack/shaker/__init__.py0
-rw-r--r--functest/opnfv_tests/openstack/shaker/shaker.py78
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()