diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/ci/load_images.sh | 2 | ||||
-rw-r--r-- | tests/opnfv/test_cases/opnfv_yardstick_tc076.yaml | 56 | ||||
-rw-r--r-- | tests/unit/benchmark/contexts/test_node.py | 96 | ||||
-rw-r--r-- | tests/unit/benchmark/core/test_task.py | 24 | ||||
-rw-r--r-- | tests/unit/benchmark/scenarios/networking/test_nstat.py | 118 |
5 files changed, 295 insertions, 1 deletions
diff --git a/tests/ci/load_images.sh b/tests/ci/load_images.sh index e1d717749..6f950ec72 100755 --- a/tests/ci/load_images.sh +++ b/tests/ci/load_images.sh @@ -206,7 +206,7 @@ create_nova_flavor() # Create the nova flavor used by some sample test cases openstack flavor create --id 100 --ram 512 --disk 3 --vcpus 1 yardstick-flavor # DPDK-enabled OVS requires guest memory to be backed by large pages - if [[ "$DEPLOY_SCENARIO" == *"-ovs-"* ]]; then + if [[ $DEPLOY_SCENARIO == *[_-]ovs[_-]* ]]; then openstack flavor set --property hw:mem_page_size=large yardstick-flavor fi # VPP requires guest memory to be backed by large pages diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc076.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc076.yaml new file mode 100644 index 000000000..c23ee97c2 --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc076.yaml @@ -0,0 +1,56 @@ +--- + +schema: "yardstick:task:0.1" + +description: > + Yardstick TC076 config file; + Monitor network metrics provided by the kernel in a host and calculate + IP datagram error rate, ICMP message error rate, TCP segment error rate and + UDP datagram error rate. + +scenarios: +- + type: Ping + run_in_background: true + options: + packetsize: 200 + + host: demeter.yardstick-TC076 + target: poseidon.yardstick-TC076 + +- + type: Nstat + options: + duration: 300 + + host: poseidon.yardstick-TC076 + + runner: + type: Iteration + iterations: 1 + + sla: + IP_datagram_error_rate: 0.01 + action: monitor + +context: + name: yardstick-TC076 + image: yardstick-image + flavor: yardstick-flavor + user: ubuntu + + placement_groups: + pgrp1: + policy: "availability" + + servers: + demeter: + floating_ip: true + placement: "pgrp1" + poseidon: + floating_ip: true + placement: "pgrp1" + + networks: + test: + cidr: '10.0.1.0/24' diff --git a/tests/unit/benchmark/contexts/test_node.py b/tests/unit/benchmark/contexts/test_node.py index 64fe4a566..53a8ffa93 100644 --- a/tests/unit/benchmark/contexts/test_node.py +++ b/tests/unit/benchmark/contexts/test_node.py @@ -14,6 +14,7 @@ from __future__ import absolute_import import os import unittest +import mock from yardstick.benchmark.contexts import node @@ -123,3 +124,98 @@ class NodeContextTestCase(unittest.TestCase): curr_path = os.path.dirname(os.path.abspath(__file__)) file_path = os.path.join(curr_path, filename) return file_path + + prefix = 'yardstick.benchmark.contexts.node' + + @mock.patch('{}.NodeContext._execute_script'.format(prefix)) + def test_deploy(self, execute_script_mock): + obj = node.NodeContext() + obj.env = { + 'setup': [ + {'node5': {}} + ] + } + obj.deploy() + self.assertTrue(execute_script_mock.called) + + @mock.patch('{}.NodeContext._execute_script'.format(prefix)) + def test_undeploy(self, execute_script_mock): + obj = node.NodeContext() + obj.env = { + 'teardown': [ + {'node5': {}} + ] + } + obj.undeploy() + self.assertTrue(execute_script_mock.called) + + @mock.patch('{}.ssh.SSH._put_file_shell'.format(prefix)) + @mock.patch('{}.ssh.SSH.execute'.format(prefix)) + def test_execute_remote_script(self, execute_mock, put_file_mock): + obj = node.NodeContext() + obj.env = {'prefix': 'yardstick.benchmark.scenarios.compute'} + node_name_args = 'node5' + obj.nodes = [{ + 'name': node_name_args, + 'user': 'ubuntu', + 'ip': '10.10.10.10', + 'pwd': 'ubuntu', + }] + + info = {'script': 'computecapacity.bash'} + execute_mock.return_value = (0, '', '') + obj._execute_remote_script('node5', info) + + self.assertTrue(put_file_mock.called) + self.assertTrue(execute_mock.called) + + @mock.patch('{}.NodeContext._execute_local_script'.format(prefix)) + def test_execute_script_local(self, local_execute_mock): + node_name = 'local' + info = {} + node.NodeContext()._execute_script(node_name, info) + self.assertTrue(local_execute_mock.called) + + @mock.patch('{}.NodeContext._execute_remote_script'.format(prefix)) + def test_execute_script_remote(self, remote_execute_mock): + node_name = 'node5' + info = {} + node.NodeContext()._execute_script(node_name, info) + self.assertTrue(remote_execute_mock.called) + + def test_get_script(self): + script_args = 'hello.bash' + info_args = { + 'script': script_args + } + script, options = node.NodeContext()._get_script(info_args) + self.assertEqual(script_args, script) + self.assertEqual('', options) + + def test_node_info(self): + node_name_args = 'node5' + obj = node.NodeContext() + obj.nodes = [{'name': node_name_args, 'check': node_name_args}] + node_info = obj._get_node_info(node_name_args) + self.assertEqual(node_info.get('check'), node_name_args) + + @mock.patch('{}.ssh.SSH.wait'.format(prefix)) + def test_get_client(self, wait_mock): + node_name_args = 'node5' + obj = node.NodeContext() + obj.nodes = [{ + 'name': node_name_args, + 'user': 'ubuntu', + 'ip': '10.10.10.10', + 'pwd': 'ubuntu', + }] + obj._get_client(node_name_args) + self.assertTrue(wait_mock.called) + + +def main(): + unittest.main() + + +if __name__ == '__main__': + main() diff --git a/tests/unit/benchmark/core/test_task.py b/tests/unit/benchmark/core/test_task.py index c56e21047..cd7ffdebb 100644 --- a/tests/unit/benchmark/core/test_task.py +++ b/tests/unit/benchmark/core/test_task.py @@ -155,6 +155,30 @@ class TaskTestCase(unittest.TestCase): self.assertEqual(task_args_fnames[0], None) self.assertEqual(task_args_fnames[1], None) + def test_change_server_name_host_str(self): + scenario = {'host': 'demo'} + suffix = '-8' + task.change_server_name(scenario, suffix) + self.assertTrue(scenario['host'], 'demo-8') + + def test_change_server_name_host_dict(self): + scenario = {'host': {'name': 'demo'}} + suffix = '-8' + task.change_server_name(scenario, suffix) + self.assertTrue(scenario['host']['name'], 'demo-8') + + def test_change_server_name_target_str(self): + scenario = {'target': 'demo'} + suffix = '-8' + task.change_server_name(scenario, suffix) + self.assertTrue(scenario['target'], 'demo-8') + + def test_change_server_name_target_dict(self): + scenario = {'target': {'name': 'demo'}} + suffix = '-8' + task.change_server_name(scenario, suffix) + self.assertTrue(scenario['target']['name'], 'demo-8') + def _get_file_abspath(self, filename): curr_path = os.path.dirname(os.path.abspath(__file__)) file_path = os.path.join(curr_path, filename) diff --git a/tests/unit/benchmark/scenarios/networking/test_nstat.py b/tests/unit/benchmark/scenarios/networking/test_nstat.py new file mode 100644 index 000000000..87a766302 --- /dev/null +++ b/tests/unit/benchmark/scenarios/networking/test_nstat.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +############################################################################## +# Copyright (c) 2017 Huawei Technologies Co.,Ltd 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 +############################################################################## + +# Unittest for yardstick.benchmark.scenarios.networking.nstat.Nstat + +from __future__ import absolute_import + +import unittest + +import mock + +from yardstick.benchmark.scenarios.networking import nstat + +@mock.patch('yardstick.benchmark.scenarios.networking.nstat.ssh') +class NstatTestCase(unittest.TestCase): + + def setUp(self): + self.ctx = { + "host": { + "ip": "192.168.50.28", + "user": "root", + "key_filename": "mykey.key" + } + } + + def test_nstat_successful_setup(self, mock_ssh): + + n = nstat.Nstat({}, self.ctx) + n.setup() + + mock_ssh.SSH().execute.return_value = (0, '', '') + self.assertIsNotNone(n.client) + self.assertEqual(n.setup_done, True) + + def test_nstat_successful_no_sla(self, mock_ssh): + + options = { + "duration": 60 + } + args = { + "options": options, + } + n = nstat.Nstat(args, self.ctx) + result = {} + + sample_output = '#kernel\nIpInReceives 1837 0.0\nIpInHdrErrors 0 0.0\nIpInAddrErrors 2 0.0\nIcmpInMsgs 319 0.0\nIcmpInErrors 0 0.0\nTcpInSegs 36 0.0\nTcpInErrs 0 0.0\nUdpInDatagrams 1318 0.0\nUdpInErrors 0 0.0\n' + + mock_ssh.SSH().execute.return_value = (0, sample_output, '') + + n.run(result) + expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318, + "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2, + "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2, + "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319, + "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0, + "Icmp_message_error_rate": 0.0, "UdpInErrors": 0} + self.assertEqual(result, expected_result) + + def test_nstat_successful_sla(self, mock_ssh): + + options = { + "duration": 60 + } + sla = { + "IP_datagram_error_rate": 0.1 + } + args = { + "options": options, + "sla": sla + } + n = nstat.Nstat(args, self.ctx) + result = {} + + sample_output = '#kernel\nIpInReceives 1837 0.0\nIpInHdrErrors 0 0.0\nIpInAddrErrors 2 0.0\nIcmpInMsgs 319 0.0\nIcmpInErrors 0 0.0\nTcpInSegs 36 0.0\nTcpInErrs 0 0.0\nUdpInDatagrams 1318 0.0\nUdpInErrors 0 0.0\n' + + mock_ssh.SSH().execute.return_value = (0, sample_output, '') + + n.run(result) + expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318, + "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2, + "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2, + "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319, + "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0, + "Icmp_message_error_rate": 0.0, "UdpInErrors": 0} + self.assertEqual(result, expected_result) + + def test_nstat_unsuccessful_cmd_error(self, mock_ssh): + + options = { + "duration": 60 + } + sla = { + "IP_datagram_error_rate": 0.1 + } + args = { + "options": options, + "sla": sla + } + n = nstat.Nstat(args, self.ctx) + result = {} + + mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR') + self.assertRaises(RuntimeError, n.run, result) + + +def main(): + unittest.main() + +if __name__ == '__main__': + main() |