summaryrefslogtreecommitdiffstats
path: root/tests/unit
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/apiserver/__init__.py47
-rw-r--r--tests/unit/apiserver/resources/__init__.py0
-rw-r--r--tests/unit/apiserver/resources/test_env_action.py44
-rw-r--r--tests/unit/apiserver/utils/test_influx.py62
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_model.py278
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py37
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_sriov.py58
-rw-r--r--tests/unit/benchmark/contexts/test_heat.py8
-rw-r--r--tests/unit/benchmark/contexts/test_model.py172
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_command.py39
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_serviceha.py32
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_util.py39
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_cyclictest.py2
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_qemumigrate.py2
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py84
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_unixbench.py2
-rw-r--r--tests/unit/benchmark/scenarios/dummy/test_dummy.py4
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_check_numa_info.py9
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_volume.py83
-rwxr-xr-xtests/unit/benchmark/scenarios/networking/test_netperf.py2
-rwxr-xr-xtests/unit/benchmark/scenarios/networking/test_netperf_node.py2
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_nstat.py28
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_ping6.py2
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen.py36
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py69
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py33
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vsperf.py6
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py99
-rw-r--r--tests/unit/benchmark/scenarios/parser/test_parser.py67
-rw-r--r--tests/unit/benchmark/scenarios/storage/test_fio.py4
-rw-r--r--tests/unit/cmd/__init__.py0
-rw-r--r--tests/unit/cmd/commands/__init__.py0
-rw-r--r--tests/unit/cmd/commands/test_env.py69
-rw-r--r--tests/unit/cmd/commands/test_testcase.py29
-rw-r--r--tests/unit/cmd/test_NSBperf.py119
-rw-r--r--tests/unit/common/__init__.py0
-rw-r--r--tests/unit/common/config_sample.yaml10
-rw-r--r--tests/unit/common/test_ansible_common.py213
-rw-r--r--tests/unit/common/test_httpClient.py43
-rw-r--r--tests/unit/common/test_openstack_utils.py46
-rw-r--r--tests/unit/common/test_process.py46
-rw-r--r--tests/unit/common/test_template_format.py51
-rw-r--r--tests/unit/common/test_utils.py1070
-rw-r--r--tests/unit/common/test_yaml_loader.py32
-rw-r--r--tests/unit/dispatcher/__init__.py0
-rw-r--r--tests/unit/dispatcher/test_influxdb.py119
-rw-r--r--tests/unit/dispatcher/test_influxdb_line_protocol.py64
-rw-r--r--tests/unit/network_services/helpers/test_dpdkbindnic_helper.py21
-rw-r--r--tests/unit/network_services/nfvi/test_resource.py33
-rw-r--r--tests/unit/network_services/test_utils.py83
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py26
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_base.py287
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py33
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py130
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py50
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_router_vnf.py267
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py68
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py21
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py29
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py28
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py9
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py15
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py39
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py28
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py80
-rw-r--r--tests/unit/orchestrator/__init__.py0
-rw-r--r--tests/unit/orchestrator/test_heat.py339
-rw-r--r--tests/unit/orchestrator/test_kubernetes.py114
-rw-r--r--tests/unit/test_ssh.py563
69 files changed, 1561 insertions, 3963 deletions
diff --git a/tests/unit/apiserver/__init__.py b/tests/unit/apiserver/__init__.py
deleted file mode 100644
index 5e1ed2ea1..000000000
--- a/tests/unit/apiserver/__init__.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from __future__ import absolute_import
-
-import mock
-import os
-import socket
-import unittest
-import tempfile
-
-from oslo_serialization import jsonutils
-
-from yardstick.common import constants as consts
-
-
-class APITestCase(unittest.TestCase):
-
- def setUp(self):
- self.db_fd, self.db_path = tempfile.mkstemp()
- consts.SQLITE = 'sqlite:///{}'.format(self.db_path)
-
- # server calls gethostbyname which takes 4 seconds, and we should mock it anyway
- self.socket_mock = mock.patch.dict("sys.modules", {"socket": mock.MagicMock(
- **{"gethostbyname.return_value": "127.0.0.1", "gethostname.return_value": "localhost"})})
- self.socket_mock.start()
- try:
- from api import server
- except socket.gaierror:
- self.app = None
- return
-
- server.app.config['TESTING'] = True
- self.app = server.app.test_client()
-
- server.init_db()
-
- def tearDown(self):
- os.close(self.db_fd)
- os.unlink(self.db_path)
- self.socket_mock.stop()
-
- def _post(self, url, data):
- headers = {'Content-Type': 'application/json'}
- resp = self.app.post(url, data=jsonutils.dumps(data), headers=headers)
- return jsonutils.loads(resp.data)
-
- def _get(self, url):
- resp = self.app.get(url)
- return jsonutils.loads(resp.data)
diff --git a/tests/unit/apiserver/resources/__init__.py b/tests/unit/apiserver/resources/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/apiserver/resources/__init__.py
+++ /dev/null
diff --git a/tests/unit/apiserver/resources/test_env_action.py b/tests/unit/apiserver/resources/test_env_action.py
deleted file mode 100644
index 5417ad953..000000000
--- a/tests/unit/apiserver/resources/test_env_action.py
+++ /dev/null
@@ -1,44 +0,0 @@
-##############################################################################
-# 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
-##############################################################################
-from __future__ import absolute_import
-
-import time
-import unittest
-
-from tests.unit.apiserver import APITestCase
-
-
-class EnvTestCase(APITestCase):
-
- def test_create_grafana(self):
- if self.app is None:
- unittest.skip('host config error')
- return
-
- url = 'yardstick/env/action'
- data = {'action': 'create_grafana'}
- resp = self._post(url, data)
-
- time.sleep(0)
-
- task_id = resp['result']['task_id']
- url = '/yardstick/asynctask?task_id={}'.format(task_id)
- resp = self._get(url)
-
- time.sleep(0)
-
- self.assertTrue(u'status' in resp)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/apiserver/utils/test_influx.py b/tests/unit/apiserver/utils/test_influx.py
deleted file mode 100644
index aff0cab5c..000000000
--- a/tests/unit/apiserver/utils/test_influx.py
+++ /dev/null
@@ -1,62 +0,0 @@
-##############################################################################
-# Copyright (c) 2016 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
-##############################################################################
-from __future__ import absolute_import
-import unittest
-import mock
-
-from api.utils import influx
-
-import six.moves.configparser as ConfigParser
-
-
-class GetDataDbClientTestCase(unittest.TestCase):
-
- @mock.patch('api.utils.influx.ConfigParser')
- def test_get_data_db_client_dispatcher_not_influxdb(self, mock_parser):
- mock_parser.ConfigParser().get.return_value = 'file'
- # reset exception to avoid
- # TypeError: catching classes that do not inherit from BaseException
- mock_parser.NoOptionError = ConfigParser.NoOptionError
- try:
- influx.get_data_db_client()
- except Exception as e:
- self.assertIsInstance(e, RuntimeError)
-
-
-class GetIpTestCase(unittest.TestCase):
-
- def test_get_url(self):
- url = 'http://localhost:8086/hello'
- output = influx._get_ip(url)
-
- result = 'localhost'
- self.assertEqual(result, output)
-
-
-class QueryTestCase(unittest.TestCase):
-
- @mock.patch('api.utils.influx.ConfigParser')
- def test_query_dispatcher_not_influxdb(self, mock_parser):
- mock_parser.ConfigParser().get.return_value = 'file'
- # reset exception to avoid
- # TypeError: catching classes that do not inherit from BaseException
- mock_parser.NoOptionError = ConfigParser.NoOptionError
- try:
- sql = 'select * form tasklist'
- influx.query(sql)
- except Exception as e:
- self.assertIsInstance(e, RuntimeError)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/contexts/standalone/test_model.py b/tests/unit/benchmark/contexts/standalone/test_model.py
index 6899a0af6..6090356b6 100644
--- a/tests/unit/benchmark/contexts/standalone/test_model.py
+++ b/tests/unit/benchmark/contexts/standalone/test_model.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
# Copyright (c) 2016-2017 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,72 +12,157 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Unittest for yardstick.benchmark.contexts.standalone.model
-
-
-from __future__ import absolute_import
+import copy
import os
import unittest
-import errno
import mock
-from yardstick.common import constants as consts
+from xml.etree import ElementTree
+
from yardstick.benchmark.contexts.standalone.model import Libvirt
-from yardstick.benchmark.contexts.standalone.model import StandaloneContextHelper
from yardstick.benchmark.contexts.standalone import model
-from yardstick.network_services.utils import PciAddress
+from yardstick.network_services import utils
+XML_SAMPLE = """<?xml version="1.0"?>
+<domain type="kvm">
+ <devices>
+ </devices>
+</domain>
+"""
+
+XML_SAMPLE_INTERFACE = """<?xml version="1.0"?>
+<domain type="kvm">
+ <devices>
+ <interface>
+ </interface>
+ </devices>
+</domain>
+"""
+
class ModelLibvirtTestCase(unittest.TestCase):
+ def setUp(self):
+ self.xml = ElementTree.ElementTree(
+ element=ElementTree.fromstring(XML_SAMPLE))
+ self.pci_address_str = '0001:04:03.2'
+ self.pci_address = utils.PciAddress(self.pci_address_str)
+ self.mac = '00:00:00:00:00:01'
+ self._mock_write_xml = mock.patch.object(ElementTree.ElementTree,
+ 'write')
+ self.mock_write_xml = self._mock_write_xml.start()
+
+ self.addCleanup(self._cleanup)
+
+ def _cleanup(self):
+ self._mock_write_xml.stop()
+
def test_check_if_vm_exists_and_delete(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
+ ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
ssh.return_value = ssh_mock
- result = Libvirt.check_if_vm_exists_and_delete("vm_0", ssh_mock)
- self.assertIsNone(result)
+ # NOTE(ralonsoh): this test doesn't cover function execution.
+ model.Libvirt.check_if_vm_exists_and_delete("vm_0", ssh_mock)
def test_virsh_create_vm(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
+ ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
ssh.return_value = ssh_mock
- result = Libvirt.virsh_create_vm(ssh_mock, "vm_0")
- self.assertIsNone(result)
+ # NOTE(ralonsoh): this test doesn't cover function execution.
+ model.Libvirt.virsh_create_vm(ssh_mock, "vm_0")
def test_virsh_destroy_vm(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
+ ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
ssh.return_value = ssh_mock
- result = Libvirt.virsh_destroy_vm("vm_0", ssh_mock)
- self.assertIsNone(result)
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.ET')
- def test_add_interface_address(self, mock_et):
- pci_address = PciAddress.parse_address("0000:00:04.0", multi_line=True)
- result = Libvirt.add_interface_address("<interface/>", pci_address)
- self.assertIsNotNone(result)
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt.add_interface_address')
- @mock.patch('yardstick.benchmark.contexts.standalone.model.ET')
- def test_add_ovs_interfaces(self, mock_et, mock_add_interface_address):
- pci_address = PciAddress.parse_address("0000:00:04.0", multi_line=True)
- result = Libvirt.add_ovs_interface("/usr/local", 0, "0000:00:04.0",
- "00:00:00:00:00:01", "xml")
- self.assertIsNone(result)
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt.add_interface_address')
- @mock.patch('yardstick.benchmark.contexts.standalone.model.ET')
- def test_add_sriov_interfaces(self, mock_et, mock_add_interface_address):
- pci_address = PciAddress.parse_address("0000:00:04.0", multi_line=True)
- result = Libvirt.add_sriov_interfaces("0000:00:05.0", "0000:00:04.0",
- "00:00:00:00:00:01", "xml")
- self.assertIsNone(result)
+ # NOTE(ralonsoh): this test doesn't cover function execution.
+ model.Libvirt.virsh_destroy_vm("vm_0", ssh_mock)
+
+ def test_add_interface_address(self):
+ xml = ElementTree.ElementTree(
+ element=ElementTree.fromstring(XML_SAMPLE_INTERFACE))
+ interface = xml.find('devices').find('interface')
+ result = model.Libvirt._add_interface_address(interface, self.pci_address)
+ self.assertEqual('pci', result.get('type'))
+ self.assertEqual('0x{}'.format(self.pci_address.domain),
+ result.get('domain'))
+ self.assertEqual('0x{}'.format(self.pci_address.bus),
+ result.get('bus'))
+ self.assertEqual('0x{}'.format(self.pci_address.slot),
+ result.get('slot'))
+ self.assertEqual('0x{}'.format(self.pci_address.function),
+ result.get('function'))
+
+ def test_add_ovs_interfaces(self):
+ xml_input = mock.Mock()
+ with mock.patch.object(ElementTree, 'parse', return_value=self.xml) \
+ as mock_parse:
+ xml = copy.deepcopy(self.xml)
+ mock_parse.return_value = xml
+ model.Libvirt.add_ovs_interface(
+ '/usr/local', 0, self.pci_address_str, self.mac, xml_input)
+ mock_parse.assert_called_once_with(xml_input)
+ self.mock_write_xml.assert_called_once_with(xml_input)
+ interface = xml.find('devices').find('interface')
+ self.assertEqual('vhostuser', interface.get('type'))
+ mac = interface.find('mac')
+ self.assertEqual(self.mac, mac.get('address'))
+ source = interface.find('source')
+ self.assertEqual('unix', source.get('type'))
+ self.assertEqual('/usr/local/var/run/openvswitch/dpdkvhostuser0',
+ source.get('path'))
+ self.assertEqual('client', source.get('mode'))
+ _model = interface.find('model')
+ self.assertEqual('virtio', _model.get('type'))
+ driver = interface.find('driver')
+ self.assertEqual('4', driver.get('queues'))
+ host = driver.find('host')
+ self.assertEqual('off', host.get('mrg_rxbuf'))
+ self.assertIsNotNone(interface.find('address'))
+
+ def test_add_sriov_interfaces(self):
+ xml_input = mock.Mock()
+ with mock.patch.object(ElementTree, 'parse', return_value=self.xml) \
+ as mock_parse:
+ xml = copy.deepcopy(self.xml)
+ mock_parse.return_value = xml
+ vm_pci = '0001:05:04.2'
+ model.Libvirt.add_sriov_interfaces(
+ vm_pci, self.pci_address_str, self.mac, xml_input)
+ mock_parse.assert_called_once_with(xml_input)
+ self.mock_write_xml.assert_called_once_with(xml_input)
+ interface = xml.find('devices').find('interface')
+ self.assertEqual('yes', interface.get('managed'))
+ self.assertEqual('hostdev', interface.get('type'))
+ mac = interface.find('mac')
+ self.assertEqual(self.mac, mac.get('address'))
+ source = interface.find('source')
+ source_address = source.find('address')
+ self.assertIsNotNone(source.find('address'))
+
+ self.assertEqual('pci', source_address.get('type'))
+ self.assertEqual('0x' + self.pci_address_str.split(':')[0],
+ source_address.get('domain'))
+ self.assertEqual('0x' + self.pci_address_str.split(':')[1],
+ source_address.get('bus'))
+ self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[0],
+ source_address.get('slot'))
+ self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[1],
+ source_address.get('function'))
+
+ interface_address = interface.find('address')
+ self.assertEqual('pci', interface_address.get('type'))
+ self.assertEqual('0x' + vm_pci.split(':')[0],
+ interface_address.get('domain'))
+ self.assertEqual('0x' + vm_pci.split(':')[1],
+ interface_address.get('bus'))
+ self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[0],
+ interface_address.get('slot'))
+ self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[1],
+ interface_address.get('function'))
def test_create_snapshot_qemu(self):
result = "/var/lib/libvirt/images/0.qcow2"
@@ -88,15 +171,17 @@ class ModelLibvirtTestCase(unittest.TestCase):
ssh_mock.execute = \
mock.Mock(return_value=(0, "a", ""))
ssh.return_value = ssh_mock
- image = Libvirt.create_snapshot_qemu(ssh_mock, "0", "ubuntu.img")
+ image = model.Libvirt.create_snapshot_qemu(ssh_mock, "0", "ubuntu.img")
self.assertEqual(image, result)
- @mock.patch("yardstick.benchmark.contexts.standalone.model.Libvirt.pin_vcpu_for_perf")
- @mock.patch("yardstick.benchmark.contexts.standalone.model.Libvirt.create_snapshot_qemu")
- @mock.patch('yardstick.benchmark.contexts.standalone.model.open')
- @mock.patch('yardstick.benchmark.contexts.standalone.model.write_file')
- def test_build_vm_xml(self, mock_open, mock_write_file, mock_create_snapshot_qemu,
- mock_pin_vcpu_for_perf):
+ @mock.patch.object(model.Libvirt, 'pin_vcpu_for_perf')
+ @mock.patch.object(model.Libvirt, 'create_snapshot_qemu')
+ def test_build_vm_xml(self, mock_create_snapshot_qemu,
+ *args):
+ # NOTE(ralonsoh): this test doesn't cover function execution. This test
+ # should also check mocked function calls.
+ cfg_file = 'test_config_file.cfg'
+ self.addCleanup(os.remove, cfg_file)
result = [4]
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
@@ -105,7 +190,7 @@ class ModelLibvirtTestCase(unittest.TestCase):
ssh.return_value = ssh_mock
mock_create_snapshot_qemu.return_value = "0.img"
- status = Libvirt.build_vm_xml(ssh_mock, {}, "test", "vm_0", 0)
+ status = model.Libvirt.build_vm_xml(ssh_mock, {}, cfg_file, 'vm_0', 0)
self.assertEqual(status[0], result[0])
def test_update_interrupts_hugepages_perf(self):
@@ -114,18 +199,22 @@ class ModelLibvirtTestCase(unittest.TestCase):
ssh_mock.execute = \
mock.Mock(return_value=(0, "a", ""))
ssh.return_value = ssh_mock
- status = Libvirt.update_interrupts_hugepages_perf(ssh_mock)
- self.assertIsNone(status)
+ # NOTE(ralonsoh): 'update_interrupts_hugepages_perf' always return
+ # None, this check is trivial.
+ #status = Libvirt.update_interrupts_hugepages_perf(ssh_mock)
+ #self.assertIsNone(status)
+ Libvirt.update_interrupts_hugepages_perf(ssh_mock)
@mock.patch("yardstick.benchmark.contexts.standalone.model.CpuSysCores")
- @mock.patch("yardstick.benchmark.contexts.standalone.model.Libvirt.update_interrupts_hugepages_perf")
- def test_pin_vcpu_for_perf(self, mock_update_interrupts_hugepages_perf, mock_CpuSysCores):
+ @mock.patch.object(model.Libvirt, 'update_interrupts_hugepages_perf')
+ def test_pin_vcpu_for_perf(self, *args):
+ # NOTE(ralonsoh): test mocked methods/variables.
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "a", ""))
ssh.return_value = ssh_mock
- status = Libvirt.pin_vcpu_for_perf(ssh_mock, "vm_0", 4)
+ status = Libvirt.pin_vcpu_for_perf(ssh_mock, 4)
self.assertIsNotNone(status)
class StandaloneContextHelperTestCase(unittest.TestCase):
@@ -148,7 +237,7 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
}
def setUp(self):
- self.helper = StandaloneContextHelper()
+ self.helper = model.StandaloneContextHelper()
def test___init__(self):
self.assertIsNone(self.helper.file_path)
@@ -159,8 +248,9 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
ssh_mock.execute = \
mock.Mock(return_value=(1, "a", ""))
ssh.return_value = ssh_mock
- status = StandaloneContextHelper.install_req_libs(ssh_mock)
- self.assertIsNone(status)
+ # NOTE(ralonsoh): this test doesn't cover function execution. This test
+ # should also check mocked function calls.
+ model.StandaloneContextHelper.install_req_libs(ssh_mock)
def test_get_kernel_module(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
@@ -168,19 +258,22 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
ssh_mock.execute = \
mock.Mock(return_value=(1, "i40e", ""))
ssh.return_value = ssh_mock
- status = StandaloneContextHelper.get_kernel_module(ssh_mock, "05:00.0", None)
- self.assertEqual(status, "i40e")
+ # NOTE(ralonsoh): this test doesn't cover function execution. This test
+ # should also check mocked function calls.
+ model.StandaloneContextHelper.get_kernel_module(
+ ssh_mock, "05:00.0", None)
- @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper.get_kernel_module')
+ @mock.patch.object(model.StandaloneContextHelper, 'get_kernel_module')
def test_get_nic_details(self, mock_get_kernel_module):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "i40e ixgbe", ""))
+ ssh_mock.execute = mock.Mock(return_value=(1, "i40e ixgbe", ""))
ssh.return_value = ssh_mock
mock_get_kernel_module.return_value = "i40e"
- status = StandaloneContextHelper.get_nic_details(ssh_mock, self.NETWORKS, "dpdk-devbind.py")
- self.assertIsNotNone(status)
+ # NOTE(ralonsoh): this test doesn't cover function execution. This test
+ # should also check mocked function calls.
+ model.StandaloneContextHelper.get_nic_details(
+ ssh_mock, self.NETWORKS, 'dpdk-devbind.py')
def test_get_virtual_devices(self):
pattern = "PCI_SLOT_NAME=0000:05:00.0"
@@ -189,8 +282,10 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
ssh_mock.execute = \
mock.Mock(return_value=(1, pattern, ""))
ssh.return_value = ssh_mock
- status = StandaloneContextHelper.get_virtual_devices(ssh_mock, "0000:00:05.0")
- self.assertIsNotNone(status)
+ # NOTE(ralonsoh): this test doesn't cover function execution. This test
+ # should also check mocked function calls.
+ model.StandaloneContextHelper.get_virtual_devices(
+ ssh_mock, '0000:00:05.0')
def _get_file_abspath(self, filename):
curr_path = os.path.dirname(os.path.abspath(__file__))
@@ -204,40 +299,50 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
def test_parse_pod_file(self):
self.helper.file_path = self._get_file_abspath("dummy")
- self.assertRaises(IOError, self.helper.parse_pod_file, self.helper.file_path)
+ self.assertRaises(IOError, self.helper.parse_pod_file,
+ self.helper.file_path)
self.helper.file_path = self._get_file_abspath(self.NODE_SAMPLE)
- self.assertRaises(TypeError, self.helper.parse_pod_file, self.helper.file_path)
+ self.assertRaises(TypeError, self.helper.parse_pod_file,
+ self.helper.file_path)
self.helper.file_path = self._get_file_abspath(self.NODE_SRIOV_SAMPLE)
self.assertIsNotNone(self.helper.parse_pod_file(self.helper.file_path))
def test_get_mac_address(self):
- status = StandaloneContextHelper.get_mac_address()
+ status = model.StandaloneContextHelper.get_mac_address()
self.assertIsNotNone(status)
@mock.patch('yardstick.ssh.SSH')
- def test_get_mgmt_ip(self, mock_ssh):
+ def test_get_mgmt_ip(self, *args):
+ # NOTE(ralonsoh): test mocked methods/variables.
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "1.2.3.4 00:00:00:00:00:01", ""))
+ ssh_mock.execute = mock.Mock(
+ return_value=(1, "1.2.3.4 00:00:00:00:00:01", ""))
ssh.return_value = ssh_mock
- status = StandaloneContextHelper.get_mgmt_ip(ssh_mock, "00:00:00:00:00:01", "1.1.1.1/24", {})
+ # NOTE(ralonsoh): this test doesn't cover function execution. This test
+ # should also check mocked function calls.
+ status = model.StandaloneContextHelper.get_mgmt_ip(
+ ssh_mock, "00:00:00:00:00:01", "1.1.1.1/24", {})
self.assertIsNotNone(status)
@mock.patch('yardstick.ssh.SSH')
- def test_get_mgmt_ip_no(self, mock_ssh):
+ def test_get_mgmt_ip_no(self, *args):
+ # NOTE(ralonsoh): test mocked methods/variables.
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(1, "", ""))
ssh.return_value = ssh_mock
-
+ # NOTE(ralonsoh): this test doesn't cover function execution. This test
+ # should also check mocked function calls.
model.WAIT_FOR_BOOT = 0
- status = StandaloneContextHelper.get_mgmt_ip(ssh_mock, "99", "1.1.1.1/24", {})
+ status = model.StandaloneContextHelper.get_mgmt_ip(
+ ssh_mock, "99", "1.1.1.1/24", {})
self.assertIsNone(status)
+
class ServerTestCase(unittest.TestCase):
NETWORKS = {
@@ -257,6 +362,7 @@ class ServerTestCase(unittest.TestCase):
'cidr': '152.16.40.10/24',
'gateway_ip': '152.16.100.20'}
}
+
def setUp(self):
self.server = model.Server()
@@ -282,7 +388,8 @@ class ServerTestCase(unittest.TestCase):
'xe1': ['public_0'],
}
}
- status = self.server.generate_vnf_instance({}, self.NETWORKS, "1.1.1.1/24", 'vm_0', vnf, '00:00:00:00:00:01')
+ status = self.server.generate_vnf_instance(
+ {}, self.NETWORKS, '1.1.1.1/24', 'vm_0', vnf, '00:00:00:00:00:01')
self.assertIsNotNone(status)
class OvsDeployTestCase(unittest.TestCase):
@@ -312,14 +419,17 @@ class OvsDeployTestCase(unittest.TestCase):
self.assertIsNotNone(self.ovs_deploy.connection)
@mock.patch('yardstick.benchmark.contexts.standalone.model.os')
- def test_prerequisite(self, mock_ssh):
+ def test_prerequisite(self, *args):
+ # NOTE(ralonsoh): this test should check mocked function calls.
self.ovs_deploy.helper = mock.Mock()
self.assertIsNone(self.ovs_deploy.prerequisite())
@mock.patch('yardstick.benchmark.contexts.standalone.model.os')
- def test_prerequisite(self, mock_ssh):
+ def test_prerequisite_2(self, *args):
+ # NOTE(ralonsoh): this test should check mocked function calls. Rename
+ # this test properly.
self.ovs_deploy.helper = mock.Mock()
- self.ovs_deploy.connection.execute = \
- mock.Mock(return_value=(1, "1.2.3.4 00:00:00:00:00:01", ""))
+ self.ovs_deploy.connection.execute = mock.Mock(
+ return_value=(1, '1.2.3.4 00:00:00:00:00:01', ''))
self.ovs_deploy.prerequisite = mock.Mock()
self.assertIsNone(self.ovs_deploy.ovs_deploy())
diff --git a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py b/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
index 5d1b0421c..e39ecf4f2 100644
--- a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
+++ b/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
@@ -17,12 +17,9 @@
from __future__ import absolute_import
import os
import unittest
-import errno
import mock
-from yardstick.common import constants as consts
from yardstick.benchmark.contexts.standalone import ovs_dpdk
-from yardstick.network_services.utils import PciAddress
class OvsDpdkContextTestCase(unittest.TestCase):
@@ -68,7 +65,7 @@ class OvsDpdkContextTestCase(unittest.TestCase):
self.ovs_dpdk.helper = mock_helper
self.ovs_dpdk.vnf_node = mock_server
self.assertIsNone(self.ovs_dpdk.file_path)
- self.assertEqual(self.ovs_dpdk.first_run, True)
+ self.assertTrue(self.ovs_dpdk.first_run)
def test_init(self):
self.ovs_dpdk.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
@@ -149,12 +146,9 @@ class OvsDpdkContextTestCase(unittest.TestCase):
self.assertRaises(Exception, self.ovs_dpdk.check_ovs_dpdk_env)
@mock.patch('yardstick.ssh.SSH')
- def test_deploy(self, mock_ssh):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
+ def test_deploy(self, ssh_mock):
+ ssh_mock.execute.return_value = (0, "a", "")
+
self.ovs_dpdk.vm_deploy = False
self.assertIsNone(self.ovs_dpdk.deploy())
@@ -168,22 +162,21 @@ class OvsDpdkContextTestCase(unittest.TestCase):
self.ovs_dpdk.setup_ovs_bridge_add_flows = mock.Mock(return_value={})
self.ovs_dpdk.setup_ovs_dpdk_context = mock.Mock(return_value={})
self.ovs_dpdk.wait_for_vnfs_to_start = mock.Mock(return_value={})
+ # TODO(elfoley): This test should check states/sideeffects instead of
+ # output.
self.assertIsNone(self.ovs_dpdk.deploy())
- @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
+ @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt')
@mock.patch('yardstick.ssh.SSH')
- def test_undeploy(self, mock_ssh, mock_libvirt):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
+ def test_undeploy(self, ssh_mock, _):
+ ssh_mock.execute.return_value = (0, "a", "")
+
self.ovs_dpdk.vm_deploy = False
self.assertIsNone(self.ovs_dpdk.undeploy())
self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.connection = ssh_mock
self.ovs_dpdk.vm_names = ['vm_0', 'vm_1']
+ self.ovs_dpdk.connection = ssh_mock
self.ovs_dpdk.drivers = ['vm_0', 'vm_1']
self.ovs_dpdk.cleanup_ovs_dpdk_env = mock.Mock()
self.ovs_dpdk.networks = self.NETWORKS
@@ -326,8 +319,8 @@ class OvsDpdkContextTestCase(unittest.TestCase):
self.ovs_dpdk.get_vf_datas = mock.Mock(return_value="")
self.assertIsNone(self.ovs_dpdk.configure_nics_for_ovs_dpdk())
- @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
- def test__enable_interfaces(self, mock_add_ovs_interface):
+ @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt.add_ovs_interface')
+ def test__enable_interfaces(self, _):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -343,7 +336,7 @@ class OvsDpdkContextTestCase(unittest.TestCase):
@mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
@mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
- def test_setup_ovs_dpdk_context(self, mock_server, mock_libvirt):
+ def test_setup_ovs_dpdk_context(self, _, mock_libvirt):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -372,6 +365,6 @@ class OvsDpdkContextTestCase(unittest.TestCase):
mock_libvirt.build_vm_xml = mock.Mock(return_value=[6, "00:00:00:00:00:01"])
self.ovs_dpdk._enable_interfaces = mock.Mock(return_value="")
mock_libvirt.virsh_create_vm = mock.Mock(return_value="")
- mock_libvirt.pin_vcpu_for_perf= mock.Mock(return_value="")
+ mock_libvirt.pin_vcpu_for_perf = mock.Mock(return_value="")
self.ovs_dpdk.vnf_node.generate_vnf_instance = mock.Mock(return_value={})
self.assertIsNotNone(self.ovs_dpdk.setup_ovs_dpdk_context())
diff --git a/tests/unit/benchmark/contexts/standalone/test_sriov.py b/tests/unit/benchmark/contexts/standalone/test_sriov.py
index 50ae5fe13..7f11a7d59 100644
--- a/tests/unit/benchmark/contexts/standalone/test_sriov.py
+++ b/tests/unit/benchmark/contexts/standalone/test_sriov.py
@@ -17,12 +17,10 @@
from __future__ import absolute_import
import os
import unittest
-import errno
import mock
-from yardstick.common import constants as consts
+from yardstick import ssh
from yardstick.benchmark.contexts.standalone import sriov
-from yardstick.network_services.utils import PciAddress
class SriovContextTestCase(unittest.TestCase):
@@ -66,23 +64,23 @@ class SriovContextTestCase(unittest.TestCase):
@mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
@mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
def test___init__(self, mock_helper, mock_libvirt, mock_server):
+ # pylint: disable=unused-argument
+ # NOTE(ralonsoh): this test doesn't cover function execution.
+ # The pylint exception should be removed.
self.sriov.helper = mock_helper
self.sriov.vnf_node = mock_server
self.assertIsNone(self.sriov.file_path)
- self.assertEqual(self.sriov.first_run, True)
+ self.assertTrue(self.sriov.first_run)
def test_init(self):
self.sriov.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
self.assertIsNone(self.sriov.init(self.ATTRS))
- @mock.patch('yardstick.ssh.SSH')
+ @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
def test_deploy(self, mock_ssh):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
-
+ # pylint: disable=unused-argument
+ # NOTE(ralonsoh): this test doesn't cover function execution.
+ # The pylint exception should be removed.
self.sriov.vm_deploy = False
self.assertIsNone(self.sriov.deploy())
@@ -94,20 +92,16 @@ class SriovContextTestCase(unittest.TestCase):
self.sriov.wait_for_vnfs_to_start = mock.Mock(return_value={})
self.assertIsNone(self.sriov.deploy())
- @mock.patch('yardstick.ssh.SSH')
+ @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
@mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
def test_undeploy(self, mock_libvirt, mock_ssh):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
-
+ # pylint: disable=unused-argument
+ # NOTE(ralonsoh): the pylint exception should be removed.
self.sriov.vm_deploy = False
self.assertIsNone(self.sriov.undeploy())
self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
+ self.sriov.connection = mock_ssh
self.sriov.vm_names = ['vm_0', 'vm_1']
self.sriov.drivers = ['vm_0', 'vm_1']
self.assertIsNone(self.sriov.undeploy())
@@ -246,27 +240,27 @@ class SriovContextTestCase(unittest.TestCase):
self.sriov.drivers = []
self.sriov.networks = self.NETWORKS
self.sriov.helper.get_mac_address = mock.Mock(return_value="")
- self.sriov.get_vf_data = mock.Mock(return_value="")
+ self.sriov._get_vf_data = mock.Mock(return_value="")
self.assertIsNone(self.sriov.configure_nics_for_sriov())
+ @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
@mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- def test__enable_interfaces(self, mock_libvirt):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
+ def test__enable_interfaces(self, mock_libvirt, mock_ssh):
+ # pylint: disable=unused-argument
+ # NOTE(ralonsoh): the pylint exception should be removed.
self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
+ self.sriov.connection = mock_ssh
self.sriov.vm_names = ['vm_0', 'vm_1']
self.sriov.drivers = []
self.sriov.networks = self.NETWORKS
- self.sriov.get_vf_data = mock.Mock(return_value="")
+ self.sriov._get_vf_data = mock.Mock(return_value="")
self.assertIsNone(self.sriov._enable_interfaces(0, 0, ["private_0"], 'test'))
@mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
@mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
def test_setup_sriov_context(self, mock_libvirt, mock_server):
+ # pylint: disable=unused-argument
+ # NOTE(ralonsoh): the pylint exception should be removed.
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -296,7 +290,7 @@ class SriovContextTestCase(unittest.TestCase):
self.sriov.vnf_node.generate_vnf_instance = mock.Mock(return_value={})
self.assertIsNotNone(self.sriov.setup_sriov_context())
- def test_get_vf_data(self):
+ def test__get_vf_data(self):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -318,5 +312,7 @@ class SriovContextTestCase(unittest.TestCase):
}
}
self.sriov.networks = self.NETWORKS
- self.sriov.helper.get_virtual_devices = mock.Mock(return_value={"0000:00:01.0": ""})
- self.assertIsNotNone(self.sriov.get_vf_data("", "0000:00:01.0", "00:00:00:00:00:01", "if0"))
+ self.sriov.helper.get_virtual_devices = mock.Mock(
+ return_value={'0000:00:01.0': ''})
+ self.assertIsNotNone(self.sriov._get_vf_data(
+ '0000:00:01.0', '00:00:00:00:00:01', 'if0'))
diff --git a/tests/unit/benchmark/contexts/test_heat.py b/tests/unit/benchmark/contexts/test_heat.py
index 223d64060..f2e725df2 100644
--- a/tests/unit/benchmark/contexts/test_heat.py
+++ b/tests/unit/benchmark/contexts/test_heat.py
@@ -119,8 +119,12 @@ class HeatContextTestCase(unittest.TestCase):
"2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b")
mock_template.add_security_group.assert_called_with("foo-secgroup")
# mock_template.add_network.assert_called_with("bar-fool-network", 'physnet1', None)
- mock_template.add_router.assert_called_with("bar-fool-network-router", netattrs["external_network"], "bar-fool-network-subnet")
- mock_template.add_router_interface.assert_called_with("bar-fool-network-router-if0", "bar-fool-network-router", "bar-fool-network-subnet")
+ mock_template.add_router.assert_called_with("bar-fool-network-router",
+ netattrs["external_network"],
+ "bar-fool-network-subnet")
+ mock_template.add_router_interface.assert_called_with("bar-fool-network-router-if0",
+ "bar-fool-network-router",
+ "bar-fool-network-subnet")
@mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
def test_attrs_get(self, mock_template):
diff --git a/tests/unit/benchmark/contexts/test_model.py b/tests/unit/benchmark/contexts/test_model.py
index 48ee01cf0..53b035b82 100644
--- a/tests/unit/benchmark/contexts/test_model.py
+++ b/tests/unit/benchmark/contexts/test_model.py
@@ -282,6 +282,178 @@ class ServerTestCase(unittest.TestCase):
scheduler_hints='hints',
availability_zone='zone')
+ def test_override_ip(self):
+ network_ports = {
+ 'mgmt': ['mgmt'],
+ 'uplink_0': [
+ {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
+ ],
+ 'downlink_0': [
+ {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
+ ],
+ }
+ attrs = {
+ 'image': 'some-image', 'flavor': 'some-flavor',
+ }
+ test_server = model.Server('foo', self.mock_context, attrs)
+ test_server.interfaces = {
+ "xe0": {
+ "local_ip": "1.2.3.4",
+ "netmask": "255.255.255.0",
+ },
+ "xe1": {
+ "local_ip": "1.2.3.5",
+ "netmask": "255.255.255.0"
+ }
+ }
+ test_server.network_ports = network_ports
+
+ test_server.override_ip("uplink_0", {"port": "xe0"})
+ self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][0]["xe0"])
+
+ def test_override_ip_multiple(self):
+ network_ports = {
+ 'mgmt': ['mgmt'],
+ 'uplink_0': [
+ {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
+ {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
+ ],
+ 'downlink_0': [
+ {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
+ ],
+ }
+ attrs = {
+ 'image': 'some-image', 'flavor': 'some-flavor',
+ }
+ test_server = model.Server('foo', self.mock_context, attrs)
+ test_server.interfaces = {
+ "xe0": {
+ "local_ip": "1.2.3.4",
+ "netmask": "255.255.255.0",
+ },
+ "xe1": {
+ "local_ip": "1.2.3.5",
+ "netmask": "255.255.255.0"
+ }
+ }
+ test_server.network_ports = network_ports
+ test_server.override_ip("uplink_0", {"port": "xe0"})
+ self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][0]["xe0"])
+
+ def test_override_ip_mixed(self):
+ network_ports = {
+ 'mgmt': ['mgmt'],
+ 'uplink_0': [
+ 'xe0',
+ {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
+ ],
+ 'downlink_0': [
+ {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
+ ],
+ }
+ attrs = {
+ 'image': 'some-image', 'flavor': 'some-flavor',
+ }
+ test_server = model.Server('foo', self.mock_context, attrs)
+ test_server.interfaces = {
+ "xe0": {
+ "local_ip": "1.2.3.4",
+ "netmask": "255.255.255.0",
+ },
+ "xe1": {
+ "local_ip": "1.2.3.5",
+ "netmask": "255.255.255.0"
+ }
+ }
+ test_server.network_ports = network_ports
+ test_server.override_ip("uplink_0", {"port": "xe0"})
+ self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][1]["xe0"])
+
+ @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
+ def test__add_instance_with_ip_override_invalid_syntax(self, mock_template):
+ network_ports = {
+ 'mgmt': ['mgmt'],
+ 'uplink_0': 'xe0',
+ 'downlink_0': [
+ {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
+ ],
+ }
+ attrs = {
+ 'image': 'some-image', 'flavor': 'some-flavor',
+ }
+ test_server = model.Server('foo', self.mock_context, attrs)
+ test_server.network_ports = network_ports
+ context = type("Context", (object,), {})
+ # can't use Mock because Mock.name is reserved
+ context.name = "context"
+ networks = [model.Network(n, context, {}) for n in network_ports]
+
+ with self.assertRaises(SyntaxError):
+ test_server._add_instance(mock_template, 'some-server',
+ networks, 'hints')
+
+ @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
+ def test__add_instance_with_ip_override(self, mock_template):
+ network_ports = {
+ 'mgmt': ['mgmt'],
+ 'uplink_0': [
+ {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
+ ],
+ 'downlink_0': [
+ {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
+ ],
+ }
+ attrs = {
+ 'image': 'some-image', 'flavor': 'some-flavor',
+ }
+ test_server = model.Server('foo', self.mock_context, attrs)
+ test_server.network_ports = network_ports
+ context = type("Context", (object,), {})
+ # can't use Mock because Mock.name is reserved
+ context.name = "context"
+ networks = [model.Network(n, context, {}) for n in network_ports]
+
+ test_server._add_instance(mock_template, 'some-server',
+ networks, 'hints')
+ self.assertEqual(test_server.ports, {
+ 'downlink_0': [{'port': 'xe1', 'stack_name': 'some-server-xe1-port'}],
+ 'mgmt': [{'port': 'mgmt', 'stack_name': 'some-server-mgmt-port'}],
+ 'uplink_0': [{'port': 'xe0', 'stack_name': 'some-server-xe0-port'}]
+ })
+
+ @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
+ def test__add_instance_with_multiple_ip_override(self, mock_template):
+ network_ports = {
+ 'mgmt': ['mgmt'],
+ 'uplink_0': [
+ {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
+ {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
+ ],
+ 'downlink_0': [
+ {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
+ ],
+ }
+ attrs = {
+ 'image': 'some-image', 'flavor': 'some-flavor',
+ }
+ test_server = model.Server('foo', self.mock_context, attrs)
+ test_server.network_ports = network_ports
+ context = type("Context", (object,), {})
+ # can't use Mock because Mock.name is reserved
+ context.name = "context"
+ networks = [model.Network(n, context, {}) for n in network_ports]
+
+ test_server._add_instance(mock_template, 'some-server',
+ networks, 'hints')
+ self.assertEqual(test_server.ports, {
+ 'downlink_0': [{'port': 'xe1', 'stack_name': 'some-server-xe1-port'}],
+ 'mgmt': [{'port': 'mgmt', 'stack_name': 'some-server-mgmt-port'}],
+ 'uplink_0': [{'port': 'xe0', 'stack_name': 'some-server-xe0-port'},
+ # this is not an error, we can produce this, it is left to Heat
+ # to detect duplicate ports and error
+ {'port': 'xe0', 'stack_name': 'some-server-xe0-port'}]
+ })
+
@mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
def test__add_instance_with_user_data(self, mock_template):
user_data = "USER_DATA"
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py b/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
index 6a9b3b157..b84cef23c 100644
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
+++ b/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
@@ -19,30 +19,26 @@ import unittest
from yardstick.benchmark.scenarios.availability.monitor import monitor_command
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
- '.subprocess')
+@mock.patch('subprocess.check_output')
class ExecuteShellTestCase(unittest.TestCase):
- def test__fun_execute_shell_command_successful(self, mock_subprocess):
+ def test__fun_execute_shell_command_successful(self, mock_subprocess_check_output):
cmd = "env"
- mock_subprocess.check_output.return_value = (0, 'unittest')
- exitcode, output = monitor_command._execute_shell_command(cmd)
+ mock_subprocess_check_output.return_value = (0, 'unittest')
+ exitcode, _ = monitor_command._execute_shell_command(cmd)
self.assertEqual(exitcode, 0)
@mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.LOG')
def test__fun_execute_shell_command_fail_cmd_exception(self, mock_log,
- mock_subprocess):
+ mock_subprocess_check_output):
cmd = "env"
- mock_subprocess.check_output.side_effect = RuntimeError
- exitcode, output = monitor_command._execute_shell_command(cmd)
+ mock_subprocess_check_output.side_effect = RuntimeError
+ exitcode, _ = monitor_command._execute_shell_command(cmd)
self.assertEqual(exitcode, -1)
mock_log.error.assert_called_once()
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
- '.subprocess')
+@mock.patch('subprocess.check_output')
class MonitorOpenstackCmdTestCase(unittest.TestCase):
def setUp(self):
@@ -59,24 +55,24 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase):
'sla': {'max_outage_time': 5}
}
- def test__monitor_command_monitor_func_successful(self, mock_subprocess):
+ def test__monitor_command_monitor_func_successful(self, mock_subprocess_check_output):
instance = monitor_command.MonitorOpenstackCmd(self.config, None, {"nova-api": 10})
instance.setup()
- mock_subprocess.check_output.return_value = (0, 'unittest')
+ mock_subprocess_check_output.return_value = (0, 'unittest')
ret = instance.monitor_func()
- self.assertEqual(ret, True)
+ self.assertTrue(ret)
instance._result = {"outage_time": 0}
instance.verify_SLA()
@mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.LOG')
- def test__monitor_command_monitor_func_failure(self, mock_log, mock_subprocess):
- mock_subprocess.check_output.return_value = (1, 'unittest')
+ def test__monitor_command_monitor_func_failure(self, mock_log, mock_subprocess_check_output):
+ mock_subprocess_check_output.return_value = (1, 'unittest')
instance = monitor_command.MonitorOpenstackCmd(self.config, None, {"nova-api": 10})
instance.setup()
- mock_subprocess.check_output.side_effect = RuntimeError
+ mock_subprocess_check_output.side_effect = RuntimeError
ret = instance.monitor_func()
- self.assertEqual(ret, False)
+ self.assertFalse(ret)
mock_log.error.assert_called_once()
instance._result = {"outage_time": 10}
instance.verify_SLA()
@@ -84,12 +80,13 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase):
@mock.patch(
'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
'.ssh')
- def test__monitor_command_ssh_monitor_successful(self, mock_ssh,
- mock_subprocess):
+ def test__monitor_command_ssh_monitor_successful(self, mock_ssh, mock_subprocess_check_output):
+ mock_subprocess_check_output.return_value = (0, 'unittest')
self.config["host"] = "node1"
instance = monitor_command.MonitorOpenstackCmd(
self.config, self.context, {"nova-api": 10})
instance.setup()
mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
ret = instance.monitor_func()
+ self.assertTrue(ret)
diff --git a/tests/unit/benchmark/scenarios/availability/test_serviceha.py b/tests/unit/benchmark/scenarios/availability/test_serviceha.py
index 4ae508958..97d534894 100644
--- a/tests/unit/benchmark/scenarios/availability/test_serviceha.py
+++ b/tests/unit/benchmark/scenarios/availability/test_serviceha.py
@@ -18,9 +18,6 @@ import unittest
from yardstick.benchmark.scenarios.availability import serviceha
-@mock.patch('yardstick.benchmark.scenarios.availability.serviceha.basemonitor')
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.serviceha.baseattacker')
class ServicehaTestCase(unittest.TestCase):
def setUp(self):
@@ -51,27 +48,32 @@ class ServicehaTestCase(unittest.TestCase):
sla = {"outage_time": 5}
self.args = {"options": options, "sla": sla}
- def test__serviceha_setup_run_successful(self, mock_attacker,
+ @mock.patch('yardstick.benchmark.scenarios.availability.serviceha.basemonitor')
+ @mock.patch(
+ 'yardstick.benchmark.scenarios.availability.serviceha.baseattacker')
+ def test__serviceha_setup_run_successful(self, _,
mock_monitor):
p = serviceha.ServiceHA(self.args, self.ctx)
p.setup()
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
mock_monitor.MonitorMgr().verify_SLA.return_value = True
ret = {}
p.run(ret)
p.teardown()
-"""
- def test__serviceha_run_sla_error(self, mock_attacker, mock_monitor):
- p = serviceha.ServiceHA(self.args, self.ctx)
p.setup()
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
- result = {}
- result["outage_time"] = 10
- mock_monitor.Monitor().get_result.return_value = result
+# def test__serviceha_run_sla_error(self, mock_attacker, mock_monitor):
+# p = serviceha.ServiceHA(self.args, self.ctx)
- ret = {}
- self.assertRaises(AssertionError, p.run, ret)
-"""
+# p.setup()
+# self.assertTrue(p.setup_done)
+#
+# result = {}
+# result["outage_time"] = 10
+# mock_monitor.Monitor().get_result.return_value = result
+
+# ret = {}
+# self.assertRaises(AssertionError, p.run, ret)
diff --git a/tests/unit/benchmark/scenarios/availability/test_util.py b/tests/unit/benchmark/scenarios/availability/test_util.py
index 0974f385a..548efe91b 100644
--- a/tests/unit/benchmark/scenarios/availability/test_util.py
+++ b/tests/unit/benchmark/scenarios/availability/test_util.py
@@ -16,36 +16,43 @@ import unittest
from yardstick.benchmark.scenarios.availability import util
-@mock.patch('yardstick.benchmark.scenarios.availability.util.subprocess')
+
class ExecuteShellTestCase(unittest.TestCase):
def setUp(self):
self.param_config = {'serviceName': '@serviceName', 'value': 1}
self.intermediate_variables = {'@serviceName': 'nova-api'}
self.std_output = '| id | 1 |'
- self.cmd_config = {'cmd':'ls','param':'-a'}
+ self.cmd_config = {'cmd': 'ls', 'param': '-a'}
+
+ self._mock_subprocess = mock.patch.object(util, 'subprocess')
+ self.mock_subprocess = self._mock_subprocess.start()
+ self.addCleanup(self._stop_mock)
+
+ def _stop_mock(self):
+ self._mock_subprocess.stop()
- def test_util_build_command_shell(self,mock_subprocess):
+ def test_util_build_command_shell(self):
result = util.build_shell_command(self.param_config, True,
self.intermediate_variables)
- self.assertEqual("nova-api" in result, True)
+ self.assertIn("nova-api", result)
- def test_read_stdout_item(self,mock_subprocess):
- result = util.read_stdout_item(self.std_output,'id')
- self.assertEquals('1',result)
+ def test_read_stdout_item(self):
+ result = util.read_stdout_item(self.std_output, 'id')
+ self.assertEqual('1', result)
- def test_buildshellparams(self,mock_subprocess):
- result = util.buildshellparams(self.cmd_config,True)
- self.assertEquals('/bin/bash -s {0} {1}', result)
+ def test_buildshellparams(self):
+ result = util.buildshellparams(self.cmd_config, True)
+ self.assertEqual('/bin/bash -s {0} {1}', result)
- def test__fun_execute_shell_command_successful(self, mock_subprocess):
+ def test__fun_execute_shell_command_successful(self):
cmd = "env"
- mock_subprocess.check_output.return_value = (0, 'unittest')
- exitcode, output = util.execute_shell_command(cmd)
+ self.mock_subprocess.check_output.return_value = (0, 'unittest')
+ exitcode, _ = util.execute_shell_command(cmd)
self.assertEqual(exitcode, 0)
- def test__fun_execute_shell_command_fail_cmd_exception(self, mock_subprocess):
+ def test__fun_execute_shell_command_fail_cmd_exception(self):
cmd = "env"
- mock_subprocess.check_output.side_effect = RuntimeError
- exitcode, output = util.execute_shell_command(cmd)
+ self.mock_subprocess.check_output.side_effect = RuntimeError
+ exitcode, _ = util.execute_shell_command(cmd)
self.assertEqual(exitcode, -1)
diff --git a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py b/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
index dc52a80c7..51ffd2488 100644
--- a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
+++ b/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
@@ -74,7 +74,7 @@ class CyclictestTestCase(unittest.TestCase):
c.setup()
self.assertIsNotNone(c.guest)
self.assertIsNotNone(c.host)
- self.assertEqual(c.setup_done, True)
+ self.assertTrue(c.setup_done)
def test_cyclictest_successful_no_sla(self, mock_ssh):
result = {}
diff --git a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py b/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py
index 1f0ff3c29..fb55b809f 100644
--- a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py
+++ b/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py
@@ -71,7 +71,7 @@ class QemuMigrateTestCase(unittest.TestCase):
q.setup()
self.assertIsNotNone(q.host)
- self.assertEqual(q.setup_done, True)
+ self.assertTrue(q.setup_done)
def test_qemu_migrate_successful_no_sla(self, mock_ssh):
result = {}
diff --git a/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py b/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py
new file mode 100644
index 000000000..c428e1fb8
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py
@@ -0,0 +1,84 @@
+#!/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.compute.spec_cpu_for_vm.SpecCPUforVM
+
+from __future__ import absolute_import
+
+import unittest
+
+import mock
+
+from yardstick.benchmark.scenarios.compute import spec_cpu_for_vm
+
+
+@mock.patch('yardstick.benchmark.scenarios.compute.spec_cpu_for_vm.ssh')
+class SpecCPUforVMTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.ctx = {
+ 'host': {
+ 'ip': '172.16.0.137',
+ 'user': 'root',
+ 'key_filename': "mykey.key"
+ }
+ }
+
+ self.result = {}
+
+ def test_spec_cpu_successful_setup(self, mock_ssh):
+
+ options = {
+ "SPECint_benchmark": "perlbench",
+ "runspec_tune": "all",
+ "output_format": "all",
+ "runspec_iterations": "1",
+ "runspec_size": "test"
+ }
+ args = {"options": options}
+ s = spec_cpu_for_vm.SpecCPUforVM(args, self.ctx)
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+
+ s.setup()
+ self.assertIsNotNone(s.client)
+ self.assertTrue(s.setup_done, True)
+
+ def test_spec_cpu_successful__run_no_sla(self, mock_ssh):
+
+ options = {
+ "SPECint_benchmark": "perlbench",
+ "runspec_tune": "all",
+ "output_format": "all"
+ }
+ args = {"options": options}
+ s = spec_cpu_for_vm.SpecCPUforVM(args, self.ctx)
+
+ mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ mock_ssh.SSH.from_node().get.return_value = (0, '', '')
+ s.run(self.result)
+ expected_result = {'SPEC_CPU_result': ''}
+ self.assertEqual(self.result, expected_result)
+
+ def test_spec_cpu_unsuccessful_script_error(self, mock_ssh):
+ options = {
+ "benchmark_subset": "int"
+ }
+ args = {"options": options}
+ s = spec_cpu_for_vm.SpecCPUforVM(args, self.ctx)
+
+ mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+ self.assertRaises(RuntimeError, s.run, self.result)
+
+def main():
+ unittest.main()
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_unixbench.py b/tests/unit/benchmark/scenarios/compute/test_unixbench.py
index 7d071e91c..fec355b45 100644
--- a/tests/unit/benchmark/scenarios/compute/test_unixbench.py
+++ b/tests/unit/benchmark/scenarios/compute/test_unixbench.py
@@ -40,7 +40,7 @@ class UnixbenchTestCase(unittest.TestCase):
mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(u.client)
- self.assertEqual(u.setup_done, True)
+ self.assertTrue(u.setup_done)
def test_unixbench_successful_no_sla(self, mock_ssh):
diff --git a/tests/unit/benchmark/scenarios/dummy/test_dummy.py b/tests/unit/benchmark/scenarios/dummy/test_dummy.py
index 560675d09..bc5131806 100644
--- a/tests/unit/benchmark/scenarios/dummy/test_dummy.py
+++ b/tests/unit/benchmark/scenarios/dummy/test_dummy.py
@@ -24,11 +24,11 @@ class DummyTestCase(unittest.TestCase):
self.assertIsNone(self.test_context.scenario_cfg)
self.assertIsNone(self.test_context.context_cfg)
- self.assertEqual(self.test_context.setup_done, False)
+ self.assertFalse(self.test_context.setup_done)
def test_run(self):
result = {}
self.test_context.run(result)
self.assertEqual(result["hello"], "yardstick")
- self.assertEqual(self.test_context.setup_done, True)
+ self.assertTrue(self.test_context.setup_done)
diff --git a/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py b/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py
index bdf1e66e5..1dd461d41 100644
--- a/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py
+++ b/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py
@@ -14,7 +14,8 @@ from yardstick.benchmark.scenarios.lib.check_numa_info import CheckNumaInfo
class CheckNumaInfoTestCase(unittest.TestCase):
- @mock.patch('yardstick.benchmark.scenarios.lib.check_numa_info.CheckNumaInfo._check_vm2_status')
+ @mock.patch(
+ 'yardstick.benchmark.scenarios.lib.check_numa_info.CheckNumaInfo._check_vm2_status')
def test_check_numa_info(self, mock_check_vm2):
scenario_cfg = {'info1': {}, 'info2': {}}
obj = CheckNumaInfo(scenario_cfg, {})
@@ -37,7 +38,7 @@ class CheckNumaInfoTestCase(unittest.TestCase):
scenario_cfg = {'info1': info1, 'info2': info2}
obj = CheckNumaInfo(scenario_cfg, {})
status = obj._check_vm2_status(info1, info2)
- self.assertEqual(status, True)
+ self.assertTrue(status)
def test_check_vm2_status_length_gt_1(self):
info1 = {
@@ -55,7 +56,7 @@ class CheckNumaInfoTestCase(unittest.TestCase):
scenario_cfg = {'info1': info1, 'info2': info2}
obj = CheckNumaInfo(scenario_cfg, {})
status = obj._check_vm2_status(info1, info2)
- self.assertEqual(status, False)
+ self.assertFalse(status)
def test_check_vm2_status_length_not_in_set(self):
info1 = {
@@ -73,7 +74,7 @@ class CheckNumaInfoTestCase(unittest.TestCase):
scenario_cfg = {'info1': info1, 'info2': info2}
obj = CheckNumaInfo(scenario_cfg, {})
status = obj._check_vm2_status(info1, info2)
- self.assertEqual(status, False)
+ self.assertFalse(status)
def main():
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_volume.py b/tests/unit/benchmark/scenarios/lib/test_create_volume.py
index fc633139e..ef2c0ccaf 100644
--- a/tests/unit/benchmark/scenarios/lib/test_create_volume.py
+++ b/tests/unit/benchmark/scenarios/lib/test_create_volume.py
@@ -9,28 +9,79 @@
import unittest
import mock
-from yardstick.benchmark.scenarios.lib.create_volume import CreateVolume
+import yardstick.benchmark.scenarios.lib.create_volume
class CreateVolumeTestCase(unittest.TestCase):
+ def setUp(self):
+ self._mock_cinder_client = mock.patch(
+ 'yardstick.common.openstack_utils.get_cinder_client')
+ self.mock_cinder_client = self._mock_cinder_client.start()
+ self._mock_glance_client = mock.patch(
+ 'yardstick.common.openstack_utils.get_glance_client')
+ self.mock_glance_client = self._mock_glance_client.start()
+ self.addCleanup(self._stop_mock)
+
+ self.scenario_cfg = {
+ "options" :
+ {
+ 'volume_name': 'yardstick_test_volume_01',
+ 'size': '256',
+ 'image': 'cirros-0.3.5'
+ }
+ }
+
+ self.scenario = (
+ yardstick.benchmark.scenarios.lib.create_volume.CreateVolume(
+ scenario_cfg=self.scenario_cfg,
+ context_cfg={}))
+
+ def _stop_mock(self):
+ self._mock_cinder_client.stop()
+ self._mock_glance_client.stop()
+
+ def test_init(self):
+ self.mock_cinder_client.return_value = "All volumes are equal"
+ self.mock_glance_client.return_value = "Images are more equal"
+
+ expected_vol_name = self.scenario_cfg["options"]["volume_name"]
+ expected_vol_size = self.scenario_cfg["options"]["size"]
+ expected_im_name = self.scenario_cfg["options"]["image"]
+ expected_im_id = None
+
+ scenario = (
+ yardstick.benchmark.scenarios.lib.create_volume.CreateVolume(
+ scenario_cfg=self.scenario_cfg,
+ context_cfg={}))
+
+ self.assertEqual(expected_vol_name, scenario.volume_name)
+ self.assertEqual(expected_vol_size, scenario.volume_size)
+ self.assertEqual(expected_im_name, scenario.image_name)
+ self.assertEqual(expected_im_id, scenario.image_id)
+ self.assertEqual("All volumes are equal", scenario.cinder_client)
+ self.assertEqual("Images are more equal", scenario.glance_client)
+
+ def test_setup(self):
+ self.assertFalse(self.scenario.setup_done)
+ self.scenario.setup()
+ self.assertTrue(self.scenario.setup_done)
+
@mock.patch('yardstick.common.openstack_utils.create_volume')
@mock.patch('yardstick.common.openstack_utils.get_image_id')
- @mock.patch('yardstick.common.openstack_utils.get_cinder_client')
- @mock.patch('yardstick.common.openstack_utils.get_glance_client')
- def test_create_volume(self, mock_get_glance_client, mock_get_cinder_client, mock_image_id, mock_create_volume):
- options = {
- 'volume_name': 'yardstick_test_volume_01',
- 'size': '256',
- 'image': 'cirros-0.3.5'
- }
- args = {"options": options}
- obj = CreateVolume(args, {})
- obj.run({})
- self.assertTrue(mock_create_volume.called)
- self.assertTrue(mock_image_id.called)
- self.assertTrue(mock_get_glance_client.called)
- self.assertTrue(mock_get_cinder_client.called)
+ def test_run(self, mock_image_id, mock_create_volume):
+ self.scenario.run()
+
+ mock_image_id.assert_called_once()
+ mock_create_volume.assert_called_once()
+
+ @mock.patch.object(
+ yardstick.benchmark.scenarios.lib.create_volume.CreateVolume, 'setup')
+ def test_run_no_setup(self, scenario_setup):
+ self.scenario.setup_done = False
+ self.scenario.run()
+ scenario_setup.assert_called_once()
+
def main():
unittest.main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf.py b/tests/unit/benchmark/scenarios/networking/test_netperf.py
index d0f862fb5..d82a00931 100755
--- a/tests/unit/benchmark/scenarios/networking/test_netperf.py
+++ b/tests/unit/benchmark/scenarios/networking/test_netperf.py
@@ -48,7 +48,7 @@ class NetperfTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.server)
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
def test_netperf_successful_no_sla(self, mock_ssh):
diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py b/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
index 62874cc44..8be9bb94d 100755
--- a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
+++ b/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
@@ -48,7 +48,7 @@ class NetperfNodeTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.server)
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
def test_netperf_node_successful_no_sla(self, mock_ssh):
diff --git a/tests/unit/benchmark/scenarios/networking/test_nstat.py b/tests/unit/benchmark/scenarios/networking/test_nstat.py
index fe44cfdf4..4b58e06c1 100644
--- a/tests/unit/benchmark/scenarios/networking/test_nstat.py
+++ b/tests/unit/benchmark/scenarios/networking/test_nstat.py
@@ -19,6 +19,7 @@ import mock
from yardstick.benchmark.scenarios.networking import nstat
+
@mock.patch('yardstick.benchmark.scenarios.networking.nstat.ssh')
class NstatTestCase(unittest.TestCase):
@@ -38,7 +39,7 @@ class NstatTestCase(unittest.TestCase):
mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(n.client)
- self.assertEqual(n.setup_done, True)
+ self.assertTrue(n.setup_done)
def test_nstat_successful_no_sla(self, mock_ssh):
@@ -51,17 +52,17 @@ class NstatTestCase(unittest.TestCase):
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'
+ 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' # pylint: disable=line-too-long
mock_ssh.SSH.from_node().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}
+ "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):
@@ -79,17 +80,17 @@ class NstatTestCase(unittest.TestCase):
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'
+ 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' # pylint: disable=line-too-long
mock_ssh.SSH.from_node().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}
+ "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):
@@ -114,5 +115,6 @@ class NstatTestCase(unittest.TestCase):
def main():
unittest.main()
+
if __name__ == '__main__':
main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_ping6.py b/tests/unit/benchmark/scenarios/networking/test_ping6.py
index ecce7cee5..d2be6f576 100644
--- a/tests/unit/benchmark/scenarios/networking/test_ping6.py
+++ b/tests/unit/benchmark/scenarios/networking/test_ping6.py
@@ -59,7 +59,7 @@ class PingTestCase(unittest.TestCase):
mock_ssh.SSH.from_node().execute.return_value = (0, '0', '')
p.setup()
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
@mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
def test_ping_successful_no_sla(self, mock_ssh):
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen.py b/tests/unit/benchmark/scenarios/networking/test_pktgen.py
index 3928aacde..005b53177 100644
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen.py
+++ b/tests/unit/benchmark/scenarios/networking/test_pktgen.py
@@ -50,7 +50,7 @@ class PktgenTestCase(unittest.TestCase):
mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(p.server)
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
def test_pktgen_successful_iptables_setup(self, mock_ssh):
@@ -632,9 +632,13 @@ class PktgenTestCase(unittest.TestCase):
def test_pktgen_run_with_setup_done(self, mock_ssh):
args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
- 'sla': {'max_ppm': 1}
- }
+ 'options': {
+ 'packetsize': 60,
+ 'number_of_ports': 10,
+ 'duration': 20,
+ 'multiqueue': True},
+ 'sla': {
+ 'max_ppm': 1}}
result = {}
p = pktgen.Pktgen(args, self.ctx)
p.server = mock_ssh.SSH.from_node()
@@ -659,9 +663,13 @@ class PktgenTestCase(unittest.TestCase):
def test_pktgen_run_with_ovs_multiqueque(self, mock_ssh):
args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
- 'sla': {'max_ppm': 1}
- }
+ 'options': {
+ 'packetsize': 60,
+ 'number_of_ports': 10,
+ 'duration': 20,
+ 'multiqueue': True},
+ 'sla': {
+ 'max_ppm': 1}}
result = {}
p = pktgen.Pktgen(args, self.ctx)
@@ -683,7 +691,7 @@ class PktgenTestCase(unittest.TestCase):
mock_result3 = mock.Mock()
mock_result3.return_value = 4
- p._enable_ovs_multiqueue = mock_result3
+ p._enable_ovs_multiqueue = mock_result3
mock_result4 = mock.Mock()
p._setup_irqmapping_ovs = mock_result4
@@ -704,9 +712,13 @@ class PktgenTestCase(unittest.TestCase):
def test_pktgen_run_with_sriov_multiqueque(self, mock_ssh):
args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
- 'sla': {'max_ppm': 1}
- }
+ 'options': {
+ 'packetsize': 60,
+ 'number_of_ports': 10,
+ 'duration': 20,
+ 'multiqueue': True},
+ 'sla': {
+ 'max_ppm': 1}}
result = {}
p = pktgen.Pktgen(args, self.ctx)
@@ -739,8 +751,10 @@ class PktgenTestCase(unittest.TestCase):
expected_result["packetsize"] = 60
self.assertEqual(result, expected_result)
+
def main():
unittest.main()
+
if __name__ == '__main__':
main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
index b4b87522c..c9eec4b94 100644
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
+++ b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
@@ -20,8 +20,6 @@ import yardstick.common.utils as utils
from yardstick.benchmark.scenarios.networking import pktgen_dpdk
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk.time')
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk.ssh')
class PktgenDPDKLatencyTestCase(unittest.TestCase):
def setUp(self):
@@ -39,7 +37,20 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
}
}
- def test_pktgen_dpdk_successful_setup(self, mock_ssh, mock_time):
+ self._mock_ssh = mock.patch(
+ 'yardstick.benchmark.scenarios.networking.pktgen_dpdk.ssh')
+ self.mock_ssh = self._mock_ssh.start()
+ self._mock_time = mock.patch(
+ 'yardstick.benchmark.scenarios.networking.pktgen_dpdk.time')
+ self.mock_time = self._mock_time.start()
+
+ self.addCleanup(self._stop_mock)
+
+ def _stop_mock(self):
+ self._mock_ssh.stop()
+ self._mock_time.stop()
+
+ def test_pktgen_dpdk_successful_setup(self):
args = {
'options': {'packetsize': 60},
@@ -47,66 +58,66 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
p.setup()
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(p.server)
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
- def test_pktgen_dpdk_successful_get_port_ip(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_successful_get_port_ip(self):
args = {
'options': {'packetsize': 60},
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
+ p.server = self.mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
utils.get_port_ip(p.server, "eth1")
- mock_ssh.SSH.from_node().execute.assert_called_with(
+ self.mock_ssh.SSH.from_node().execute.assert_called_with(
"ifconfig eth1 |grep 'inet addr' |awk '{print $2}' |cut -d ':' -f2 ")
- def test_pktgen_dpdk_unsuccessful_get_port_ip(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_unsuccessful_get_port_ip(self):
args = {
'options': {'packetsize': 60},
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
+ p.server = self.mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+ self.mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, utils.get_port_ip, p.server, "eth1")
- def test_pktgen_dpdk_successful_get_port_mac(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_successful_get_port_mac(self):
args = {
'options': {'packetsize': 60},
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
+ p.server = self.mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
utils.get_port_mac(p.server, "eth1")
- mock_ssh.SSH.from_node().execute.assert_called_with(
+ self.mock_ssh.SSH.from_node().execute.assert_called_with(
"ifconfig |grep HWaddr |grep eth1 |awk '{print $5}' ")
- def test_pktgen_dpdk_unsuccessful_get_port_mac(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_unsuccessful_get_port_mac(self):
args = {
'options': {'packetsize': 60},
}
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
+ p.server = self.mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+ self.mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, utils.get_port_mac, p.server, "eth1")
- def test_pktgen_dpdk_successful_no_sla(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_successful_no_sla(self):
args = {
'options': {'packetsize': 60},
@@ -116,7 +127,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
# with python 3 we get float, might be due python division changes
@@ -125,7 +136,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
delta = result['avg_latency'] - 132
self.assertLessEqual(delta, 1)
- def test_pktgen_dpdk_successful_sla(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_successful_sla(self):
args = {
'options': {'packetsize': 60},
@@ -136,13 +147,13 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
sample_output = '100\n100\n100\n100\n100\n100\n100\n100\n100\n100\n'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
p.run(result)
self.assertEqual(result, {"avg_latency": 100})
- def test_pktgen_dpdk_unsuccessful_sla(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_unsuccessful_sla(self):
args = {
'options': {'packetsize': 60},
@@ -152,14 +163,14 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
+ p.server = self.mock_ssh.SSH.from_node()
+ p.client = self.mock_ssh.SSH.from_node()
sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
- def test_pktgen_dpdk_unsuccessful_script_error(self, mock_ssh, mock_time):
+ def test_pktgen_dpdk_unsuccessful_script_error(self):
args = {
'options': {'packetsize': 60},
@@ -169,7 +180,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+ self.mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
index d34097008..c2e35af75 100644
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
+++ b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
@@ -20,7 +20,6 @@ from yardstick.benchmark.scenarios.networking import pktgen_dpdk_throughput
@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.ssh')
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.time')
class PktgenDPDKTestCase(unittest.TestCase):
def setUp(self):
@@ -37,7 +36,16 @@ class PktgenDPDKTestCase(unittest.TestCase):
}
}
- def test_pktgen_dpdk_throughput_successful_setup(self, mock__time, mock_ssh):
+ self._mock_time = mock.patch(
+ 'yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.time')
+ self.mock_time = self._mock_time.start()
+
+ self.addCleanup(self._cleanup)
+
+ def _cleanup(self):
+ self._mock_time.stop()
+
+ def test_pktgen_dpdk_throughput_successful_setup(self, mock_ssh):
args = {
'options': {'packetsize': 60},
}
@@ -47,9 +55,9 @@ class PktgenDPDKTestCase(unittest.TestCase):
mock_ssh.SSH().execute.return_value = (0, '', '')
self.assertIsNotNone(p.server)
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
- def test_pktgen_dpdk_throughput_successful_no_sla(self, mock__time, mock_ssh):
+ def test_pktgen_dpdk_throughput_successful_no_sla(self, mock_ssh):
args = {
'options': {'packetsize': 60, 'number_of_ports': 10},
}
@@ -75,7 +83,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
expected_result["packetsize"] = 60
self.assertEqual(result, expected_result)
- def test_pktgen_dpdk_throughput_successful_sla(self, mock__time, mock_ssh):
+ def test_pktgen_dpdk_throughput_successful_sla(self, mock_ssh):
args = {
'options': {'packetsize': 60, 'number_of_ports': 10},
'sla': {'max_ppm': 10000}
@@ -101,7 +109,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
expected_result["packetsize"] = 60
self.assertEqual(result, expected_result)
- def test_pktgen_dpdk_throughput_unsuccessful_sla(self, mock__time, mock_ssh):
+ def test_pktgen_dpdk_throughput_unsuccessful_sla(self, mock_ssh):
args = {
'options': {'packetsize': 60, 'number_of_ports': 10},
'sla': {'max_ppm': 1000}
@@ -122,7 +130,8 @@ class PktgenDPDKTestCase(unittest.TestCase):
mock_ssh.SSH().execute.return_value = (0, sample_output, '')
self.assertRaises(AssertionError, p.run, result)
- def test_pktgen_dpdk_throughput_unsuccessful_script_error(self, mock__time, mock_ssh):
+ def test_pktgen_dpdk_throughput_unsuccessful_script_error(
+ self, mock_ssh):
args = {
'options': {'packetsize': 60, 'number_of_ports': 10},
'sla': {'max_ppm': 1000}
@@ -137,7 +146,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, p.run, result)
- def test_pktgen_dpdk_throughput_is_dpdk_setup(self, mock__time, mock_ssh):
+ def test_pktgen_dpdk_throughput_is_dpdk_setup(self, mock_ssh):
args = {
'options': {'packetsize': 60},
}
@@ -151,7 +160,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
mock_ssh.SSH().execute.assert_called_with(
"ip a | grep eth1 2>/dev/null")
- def test_pktgen_dpdk_throughput_dpdk_setup(self, mock__time, mock_ssh):
+ def test_pktgen_dpdk_throughput_dpdk_setup(self, mock_ssh):
args = {
'options': {'packetsize': 60},
}
@@ -163,9 +172,9 @@ class PktgenDPDKTestCase(unittest.TestCase):
p.dpdk_setup()
- self.assertEqual(p.dpdk_setup_done, True)
+ self.assertTrue(p.dpdk_setup_done)
- def test_pktgen_dpdk_throughput_dpdk_get_result(self, mock__time, mock_ssh):
+ def test_pktgen_dpdk_throughput_dpdk_get_result(self, mock_ssh):
args = {
'options': {'packetsize': 60},
}
@@ -180,8 +189,10 @@ class PktgenDPDKTestCase(unittest.TestCase):
mock_ssh.SSH().execute.assert_called_with(
"sudo /dpdk/destdir/bin/dpdk-procinfo -- --stats-reset > /dev/null 2>&1")
+
def main():
unittest.main()
+
if __name__ == '__main__':
main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf.py b/tests/unit/benchmark/scenarios/networking/test_vsperf.py
index cbbfc2b34..be8ac55d0 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vsperf.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vsperf.py
@@ -66,7 +66,7 @@ class VsperfTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
def test_vsperf_teardown(self, mock_ssh, mock_subprocess):
p = vsperf.Vsperf(self.args, self.ctx)
@@ -77,10 +77,10 @@ class VsperfTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
p.teardown()
- self.assertEqual(p.setup_done, False)
+ self.assertFalse(p.setup_done)
def test_vsperf_run_ok(self, mock_ssh, mock_subprocess):
p = vsperf.Vsperf(self.args, self.ctx)
diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
index 5759f0a90..fbe3ed804 100644
--- a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
+++ b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
@@ -27,7 +27,6 @@ from yardstick.benchmark.scenarios.networking import vsperf_dpdk
@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.subprocess')
-@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
class VsperfDPDKTestCase(unittest.TestCase):
def setUp(self):
@@ -63,7 +62,16 @@ class VsperfDPDKTestCase(unittest.TestCase):
}
}
- def test_vsperf_dpdk_setup(self, mock_ssh, mock_subprocess):
+ self._mock_ssh = mock.patch(
+ 'yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
+ self.mock_ssh = self._mock_ssh.start()
+
+ self.addCleanup(self._cleanup)
+
+ def _cleanup(self):
+ self._mock_ssh.stop()
+
+ def test_vsperf_dpdk_setup(self, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
@@ -71,9 +79,9 @@ class VsperfDPDKTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
- def test_vsperf_dpdk_teardown(self, mock_ssh, mock_subprocess):
+ def test_vsperf_dpdk_teardown(self, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
@@ -81,12 +89,12 @@ class VsperfDPDKTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
p.teardown()
- self.assertEqual(p.setup_done, False)
+ self.assertFalse(p.setup_done)
- def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_ssh, mock_subprocess):
+ def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
@@ -94,15 +102,15 @@ class VsperfDPDKTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
# is_dpdk_setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
result = p._is_dpdk_setup()
- self.assertEqual(result, False)
+ self.assertFalse(result)
- def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_ssh, mock_subprocess):
+ def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
@@ -110,16 +118,16 @@ class VsperfDPDKTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
# is_dpdk_setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
result = p._is_dpdk_setup()
- self.assertEqual(result, True)
+ self.assertTrue(result)
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_dpdk_setup_first(self, mock_time, mock_ssh, mock_subprocess):
+ @mock.patch('time.sleep')
+ def test_vsperf_dpdk_dpdk_setup_first(self, _, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
@@ -127,61 +135,61 @@ class VsperfDPDKTestCase(unittest.TestCase):
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
# is_dpdk_setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
p.dpdk_setup()
- self.assertEqual(p._is_dpdk_setup(), False)
- self.assertEqual(p.dpdk_setup_done, True)
+ self.assertFalse(p._is_dpdk_setup())
+ self.assertTrue(p.dpdk_setup_done)
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_dpdk_setup_next(self, mock_time, mock_ssh, mock_subprocess):
+ @mock.patch('time.sleep')
+ def test_vsperf_dpdk_dpdk_setup_next(self, _, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
p.dpdk_setup()
- self.assertEqual(p._is_dpdk_setup(), True)
- self.assertEqual(p.dpdk_setup_done, True)
+ self.assertTrue(p._is_dpdk_setup())
+ self.assertTrue(p.dpdk_setup_done)
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_dpdk_setup_fail(self, mock_time, mock_ssh, mock_subprocess):
+ @mock.patch('time.sleep')
+ def test_vsperf_dpdk_dpdk_setup_fail(self, _, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
p.setup()
self.assertIsNotNone(p.client)
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
- self.assertEqual(p.setup_done, True)
+ self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
+ self.assertTrue(p.setup_done)
self.assertRaises(RuntimeError, p.dpdk_setup)
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_run_ok(self, mock_time, mock_ssh, mock_subprocess):
+ @mock.patch('time.sleep')
+ def test_vsperf_dpdk_run_ok(self, _, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
# run() specific mocks
mock_subprocess.call().execute.return_value = None
- mock_ssh.SSH.from_node().execute.return_value = (
+ self.mock_ssh.SSH.from_node().execute.return_value = (
0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
result = {}
@@ -189,42 +197,41 @@ class VsperfDPDKTestCase(unittest.TestCase):
self.assertEqual(result['throughput_rx_fps'], '14797660.000')
- def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_ssh,
- mock_subprocess):
+ def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
# run() specific mocks
mock_subprocess.call().execute.return_value = None
mock_subprocess.call().execute.return_value = None
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
result = {}
self.assertRaises(RuntimeError, p.run, result)
- def test_vsperf_dpdk_run_falied_csv_report(self, mock_ssh, mock_subprocess):
+ def test_vsperf_dpdk_run_falied_csv_report(self, mock_subprocess):
p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
# setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
mock_subprocess.call().execute.return_value = None
p.setup()
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
# run() specific mocks
mock_subprocess.call().execute.return_value = None
mock_subprocess.call().execute.return_value = None
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+ self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
result = {}
self.assertRaises(RuntimeError, p.run, result)
diff --git a/tests/unit/benchmark/scenarios/parser/test_parser.py b/tests/unit/benchmark/scenarios/parser/test_parser.py
index 59b98a092..ee2bbc07d 100644
--- a/tests/unit/benchmark/scenarios/parser/test_parser.py
+++ b/tests/unit/benchmark/scenarios/parser/test_parser.py
@@ -9,50 +9,67 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-# Unittest for yardstick.benchmark.scenarios.parser.Parser
-
-from __future__ import absolute_import
+import subprocess
import unittest
-
import mock
+
from oslo_serialization import jsonutils
from yardstick.benchmark.scenarios.parser import parser
-@mock.patch('yardstick.benchmark.scenarios.parser.parser.subprocess')
class ParserTestCase(unittest.TestCase):
def setUp(self):
- pass
-
- def test_parser_successful_setup(self, mock_subprocess):
-
- p = parser.Parser({}, {})
- mock_subprocess.call().return_value = 0
- p.setup()
- self.assertEqual(p.setup_done, True)
-
- def test_parser_successful(self, mock_subprocess):
args = {
'options': {'yangfile': '/root/yardstick/samples/yang.yaml',
'toscafile': '/root/yardstick/samples/tosca.yaml'},
}
- p = parser.Parser(args, {})
+ self.scenario = parser.Parser(scenario_cfg=args, context_cfg={})
+
+ self._mock_popen = mock.patch.object(subprocess, 'Popen')
+ self.mock_popen = self._mock_popen.start()
+ self._mock_call = mock.patch.object(subprocess, 'call')
+ self.mock_call = self._mock_call.start()
+
+ self.addCleanup(self._stop_mock)
+
+ def _stop_mock(self):
+ self._mock_popen.stop()
+ self._mock_call.stop()
+
+ def test_setup_successful(self):
+
+ self.mock_call.return_value = 0
+ self.scenario.setup()
+ self.assertTrue(self.scenario.setup_done)
+
+ def test_run_successful(self):
+
result = {}
- mock_subprocess.call().return_value = 0
- sample_output = '{"yangtotosca": "success"}'
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
+ self.mock_popen().returncode = 0
+
+ expected_result = jsonutils.loads('{"yangtotosca": "success"}')
+
+ self.scenario.run(result)
+ self.assertEqual(result, expected_result)
+
+ def test_run_fail(self):
+ result = {}
+
+ self.mock_popen().returncode = 1
+ expected_result = jsonutils.loads('{"yangtotosca": "fail"}')
+
+ self.scenario.run(result)
+ self.assertEqual(result, expected_result)
- def test_parser_teardown_successful(self, mock_subprocess):
+ def test_teardown_successful(self):
- p = parser.Parser({}, {})
- mock_subprocess.call().return_value = 0
- p.teardown()
- self.assertEqual(p.teardown_done, True)
+ self.mock_call.return_value = 0
+ self.scenario.teardown()
+ self.assertTrue(self.scenario.teardown_done)
def main():
diff --git a/tests/unit/benchmark/scenarios/storage/test_fio.py b/tests/unit/benchmark/scenarios/storage/test_fio.py
index 17594b9f4..0cffea224 100644
--- a/tests/unit/benchmark/scenarios/storage/test_fio.py
+++ b/tests/unit/benchmark/scenarios/storage/test_fio.py
@@ -53,7 +53,7 @@ class FioTestCase(unittest.TestCase):
mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
def test_fio_job_file_successful_setup(self, mock_ssh):
@@ -67,7 +67,7 @@ class FioTestCase(unittest.TestCase):
mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
+ self.assertTrue(p.setup_done)
def test_fio_successful_no_sla(self, mock_ssh):
diff --git a/tests/unit/cmd/__init__.py b/tests/unit/cmd/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/cmd/__init__.py
+++ /dev/null
diff --git a/tests/unit/cmd/commands/__init__.py b/tests/unit/cmd/commands/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/cmd/commands/__init__.py
+++ /dev/null
diff --git a/tests/unit/cmd/commands/test_env.py b/tests/unit/cmd/commands/test_env.py
deleted file mode 100644
index 73cd5af47..000000000
--- a/tests/unit/cmd/commands/test_env.py
+++ /dev/null
@@ -1,69 +0,0 @@
-##############################################################################
-# Copyright (c) 2016 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
-##############################################################################
-from __future__ import absolute_import
-import unittest
-import mock
-import uuid
-
-from yardstick.cmd.commands.env import EnvCommand
-
-
-class EnvCommandTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._start_async_task')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._check_status')
- def test_do_influxdb(self, check_status_mock, start_async_task_mock):
- env = EnvCommand()
- env.do_influxdb({})
- self.assertTrue(start_async_task_mock.called)
- self.assertTrue(check_status_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._start_async_task')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._check_status')
- def test_do_grafana(self, check_status_mock, start_async_task_mock):
- env = EnvCommand()
- env.do_grafana({})
- self.assertTrue(start_async_task_mock.called)
- self.assertTrue(check_status_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._start_async_task')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._check_status')
- def test_do_prepare(self, check_status_mock, start_async_task_mock):
- env = EnvCommand()
- env.do_prepare({})
- self.assertTrue(start_async_task_mock.called)
- self.assertTrue(check_status_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.HttpClient.post')
- def test_start_async_task(self, post_mock):
- data = {'action': 'create_grafana'}
- EnvCommand()._start_async_task(data)
- self.assertTrue(post_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.HttpClient.get')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._print_status')
- def test_check_status(self, print_mock, get_mock):
- task_id = str(uuid.uuid4())
- get_mock.return_value = {'status': 2, 'result': 'error'}
- status = EnvCommand()._check_status(task_id, 'hello world')
- self.assertEqual(status, 2)
-
- def test_print_status(self):
- try:
- EnvCommand()._print_status('hello', 'word')
- except Exception as e:
- self.assertIsInstance(e, IndexError)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/cmd/commands/test_testcase.py b/tests/unit/cmd/commands/test_testcase.py
deleted file mode 100644
index 7ef157c19..000000000
--- a/tests/unit/cmd/commands/test_testcase.py
+++ /dev/null
@@ -1,29 +0,0 @@
-##############################################################################
-# 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
-##############################################################################
-import unittest
-from mock import patch
-
-from yardstick.cmd.commands.testcase import TestcaseCommands
-
-
-class TestcaseCommandsUT(unittest.TestCase):
- @patch('yardstick.cmd.commands.testcase.TestcaseCommands._format_print')
- @patch('yardstick.cmd.commands.client')
- def test_do_list(self, mock_client, mock_print):
- mock_client.get.return_value = {'result': []}
- TestcaseCommands().do_list({})
- self.assertTrue(mock_print.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/cmd/test_NSBperf.py b/tests/unit/cmd/test_NSBperf.py
deleted file mode 100644
index e1b4da7fc..000000000
--- a/tests/unit/cmd/test_NSBperf.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-import unittest
-import mock
-import subprocess
-import os
-
-from yardstick.cmd.NSBperf import YardstickNSCli
-from yardstick.cmd import NSBperf
-
-
-@mock.patch('six.moves.input', return_value='0')
-class TestHandler(unittest.TestCase):
- def test_handler(self, test):
- subprocess.call = mock.Mock(return_value=0)
- self.assertRaises(SystemExit, NSBperf.sigint_handler)
-
-
-class TestYardstickNSCli(unittest.TestCase):
- def test___init__(self):
- yardstick_ns_cli = YardstickNSCli()
- self.assertIsNotNone(yardstick_ns_cli)
-
- def test_generate_final_report(self):
- yardstick_ns_cli = YardstickNSCli()
- test_case = "tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml"
- if os.path.isfile("/tmp/yardstick.out"):
- os.remove('/tmp/yardstick.out')
- self.assertIsNone(yardstick_ns_cli.generate_final_report(test_case))
-
- def test_generate_kpi_results(self):
- yardstick_ns_cli = YardstickNSCli()
- tkey = "cpu"
- tgen = {"cpu": {"ipc": 0}}
- self.assertIsNone(yardstick_ns_cli.generate_kpi_results(tkey, tgen))
-
- def test_generate_nfvi_results(self):
- yardstick_ns_cli = YardstickNSCli()
- nfvi = {"collect_stats": {"cpu": {"ipc": 0, "Hz": 2.6}}}
- self.assertIsNone(yardstick_ns_cli.generate_nfvi_results(nfvi))
-
- def test_handle_list_options(self):
- yardstick_ns_cli = YardstickNSCli()
- CLI_PATH = os.path.dirname(os.path.realpath(__file__))
- repo_dir = CLI_PATH + "/../../"
- test_path = os.path.join(repo_dir, "../samples/vnf_samples/nsut/")
- args = {"list_vnfs": True, "list": False}
- self.assertRaises(SystemExit, yardstick_ns_cli.handle_list_options,
- args, test_path)
- args = {"list_vnfs": False, "list": True}
- self.assertRaises(SystemExit,
- yardstick_ns_cli.handle_list_options,
- args, test_path)
-
- def test_main(self):
- yardstick_ns_cli = YardstickNSCli()
- yardstick_ns_cli.parse_arguments = mock.Mock(return_value=0)
- yardstick_ns_cli.handle_list_options = mock.Mock(return_value=0)
- yardstick_ns_cli.terminate_if_less_options = mock.Mock(return_value=0)
- yardstick_ns_cli.run_test = mock.Mock(return_value=0)
- self.assertIsNone(yardstick_ns_cli.main())
-
- def test_parse_arguments(self):
- yardstick_ns_cli = YardstickNSCli()
- self.assertRaises(SystemExit, yardstick_ns_cli.parse_arguments)
-
- def test_run_test(self):
- cur_dir = os.getcwd()
- CLI_PATH = os.path.dirname(os.path.realpath(__file__))
- YARDSTICK_REPOS_DIR = os.path.join(CLI_PATH + "/../../")
- test_path = os.path.join(YARDSTICK_REPOS_DIR,
- "../samples/vnf_samples/nsut/")
- yardstick_ns_cli = YardstickNSCli()
- subprocess.check_output = mock.Mock(return_value=0)
- args = {"vnf": "vpe",
- "test": "tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml"}
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
- args = {"vnf": "vpe1"}
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
- args = {"vnf": "vpe",
- "test": "tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml."}
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
- args = []
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
-
- def test_terminate_if_less_options(self):
- yardstick_ns_cli = YardstickNSCli()
- args = {"vnf": False}
- self.assertRaises(SystemExit,
- yardstick_ns_cli.terminate_if_less_options, args)
-
- def test_validate_input(self):
- yardstick_ns_cli = YardstickNSCli()
- self.assertEqual(1, yardstick_ns_cli.validate_input("", 4))
- NSBperf.input = lambda _: 'yes'
- self.assertEqual(1, yardstick_ns_cli.validate_input(5, 4))
- subprocess.call = mock.Mock(return_value=0)
- self.assertEqual(0, yardstick_ns_cli.validate_input(2, 4))
- subprocess.call = mock.Mock(return_value=0)
diff --git a/tests/unit/common/__init__.py b/tests/unit/common/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/common/__init__.py
+++ /dev/null
diff --git a/tests/unit/common/config_sample.yaml b/tests/unit/common/config_sample.yaml
deleted file mode 100644
index 09218cc79..000000000
--- a/tests/unit/common/config_sample.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-##############################################################################
-# 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
-##############################################################################
-releng:
- dir: /home/opnfv/repos/releng
diff --git a/tests/unit/common/test_ansible_common.py b/tests/unit/common/test_ansible_common.py
deleted file mode 100644
index a1eaf969e..000000000
--- a/tests/unit/common/test_ansible_common.py
+++ /dev/null
@@ -1,213 +0,0 @@
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-from __future__ import absolute_import
-
-import os
-import tempfile
-from collections import defaultdict
-
-import mock
-import unittest
-
-from six.moves.configparser import ConfigParser
-
-from yardstick.common import ansible_common
-
-PREFIX = 'yardstick.common.ansible_common'
-
-
-class OverwriteDictTestCase(unittest.TestCase):
-
- def test_overwrite_dict_cfg(self):
- c = ConfigParser(allow_no_value=True)
- d = {
- "section_a": "empty_value",
- "section_b": {"key_c": "val_d", "key_d": "val_d"},
- "section_c": ["key_c", "key_d"],
- }
- ansible_common.overwrite_dict_to_cfg(c, d)
- # Python3 and Python2 convert empty values into None or ''
- # we don't really care but we need to compare correctly for unittest
- self.assertTrue(c.has_option("section_a", "empty_value"))
- self.assertEqual(sorted(c.items("section_b")), [('key_c', 'val_d'), ('key_d', 'val_d')])
- self.assertTrue(c.has_option("section_c", "key_c"))
- self.assertTrue(c.has_option("section_c", "key_d"))
-
-
-class FilenameGeneratorTestCase(unittest.TestCase):
- @mock.patch('{}.NamedTemporaryFile'.format(PREFIX))
- def test__handle_existing_file(self, mock_tmp):
- f = ansible_common.FileNameGenerator._handle_existing_file("/dev/null")
-
- def test_get_generator_from_file(self):
- f = ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "", "")
-
- def test_get_generator_from_file_middle(self):
- f = ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "",
- "null")
-
- def test_get_generator_from_file_prefix(self):
- f = ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "null",
- "middle")
-
-
-class AnsibleNodeTestCase(unittest.TestCase):
- def test_ansible_node(self):
- a = ansible_common.AnsibleNode()
-
- def test_ansible_node_len(self):
- a = ansible_common.AnsibleNode()
- len(a)
-
- def test_ansible_node_repr(self):
- a = ansible_common.AnsibleNode()
- repr(a)
-
- def test_ansible_node_iter(self):
- a = ansible_common.AnsibleNode()
- for _ in a:
- pass
-
- def test_is_role(self):
- a = ansible_common.AnsibleNode()
- self.assertFalse(a.is_role("", default="foo"))
-
- def test_ansible_node_get_tuple(self):
- a = ansible_common.AnsibleNode({"name": "name"})
- self.assertEqual(a.get_tuple(), ('name', a))
-
- def test_gen_inventory_line(self):
- a = ansible_common.AnsibleNode(defaultdict(str))
- self.assertEqual(a.gen_inventory_line(), "")
-
- def test_ansible_node_delitem(self):
- a = ansible_common.AnsibleNode({"name": "name"})
- del a['name']
-
- def test_ansible_node_getattr(self):
- a = ansible_common.AnsibleNode({"name": "name"})
- self.assertEqual(getattr(a, "nosuch", None), None)
-
-
-class AnsibleNodeDictTestCase(unittest.TestCase):
- def test_ansible_node_dict(self):
- n = ansible_common.AnsibleNode()
- a = ansible_common.AnsibleNodeDict(n, {})
-
- def test_ansible_node_dict_len(self):
- n = ansible_common.AnsibleNode()
- a = ansible_common.AnsibleNodeDict(n, {})
- len(a)
-
- def test_ansible_node_dict_repr(self):
- n = ansible_common.AnsibleNode()
- a = ansible_common.AnsibleNodeDict(n, {})
- repr(a)
-
- def test_ansible_node_dict_iter(self):
- n = ansible_common.AnsibleNode()
- a = ansible_common.AnsibleNodeDict(n, {})
- for _ in a:
- pass
-
- def test_ansible_node_dict_get(self):
- n = ansible_common.AnsibleNode()
- a = ansible_common.AnsibleNodeDict(n, {})
- self.assertIsNone(a.get(""))
-
- def test_gen_inventory_lines_for_all_of_type(self):
- n = ansible_common.AnsibleNode()
- a = ansible_common.AnsibleNodeDict(n, {})
- self.assertEqual(a.gen_inventory_lines_for_all_of_type(""), [])
-
-
-class AnsibleCommonTestCase(unittest.TestCase):
- def test_get_timeouts(self):
- self.assertAlmostEquals(ansible_common.AnsibleCommon.get_timeout(-100), 1200.0)
-
- def test__init__(self):
- a = ansible_common.AnsibleCommon({})
-
- def test_reset(self):
- a = ansible_common.AnsibleCommon({})
- a.reset()
-
- def test_do_install_no_dir(self):
- a = ansible_common.AnsibleCommon({})
- self.assertRaises(OSError, a.do_install, '', '')
-
- def test_gen_inventory_dict(self):
- a = ansible_common.AnsibleCommon({})
- a.inventory_dict = {}
- self.assertIsNone(a.gen_inventory_ini_dict())
-
- def test_deploy_dir(self):
- a = ansible_common.AnsibleCommon({})
- self.assertRaises(ValueError, getattr, a, "deploy_dir")
-
- def test_deploy_dir_set(self):
- a = ansible_common.AnsibleCommon({})
- a.deploy_dir = ""
-
- def test_deploy_dir_set_get(self):
- a = ansible_common.AnsibleCommon({})
- a.deploy_dir = "d"
- self.assertEqual(a.deploy_dir, "d")
-
- @mock.patch('{}.open'.format(PREFIX))
- def test__gen_ansible_playbook_file_list(self, mock_open):
- d = tempfile.mkdtemp()
- try:
- a = ansible_common.AnsibleCommon({})
- a._gen_ansible_playbook_file(["a"], d)
- finally:
- os.rmdir(d)
-
- @mock.patch('{}.NamedTemporaryFile'.format(PREFIX))
- @mock.patch('{}.open'.format(PREFIX))
- def test__gen_ansible_playbook_file_list_multiple(self, mock_open, mock_tmp):
- d = tempfile.mkdtemp()
- try:
- a = ansible_common.AnsibleCommon({})
- a._gen_ansible_playbook_file(["a", "b"], d)
- finally:
- os.rmdir(d)
-
- @mock.patch('{}.NamedTemporaryFile'.format(PREFIX))
- @mock.patch('{}.Popen'.format(PREFIX))
- @mock.patch('{}.open'.format(PREFIX))
- def test_do_install_tmp_dir(self, mock_open, mock_popen, mock_tmp):
- mock_popen.return_value.communicate.return_value = "", ""
- mock_popen.return_value.wait.return_value = 0
- d = tempfile.mkdtemp()
- try:
- a = ansible_common.AnsibleCommon({})
- a.do_install('', d)
- finally:
- os.rmdir(d)
-
- @mock.patch('{}.NamedTemporaryFile'.format(PREFIX))
- @mock.patch('{}.Popen'.format(PREFIX))
- @mock.patch('{}.open'.format(PREFIX))
- def test_execute_ansible_check(self, mock_open, mock_popen, mock_tmp):
- mock_popen.return_value.communicate.return_value = "", ""
- mock_popen.return_value.wait.return_value = 0
- d = tempfile.mkdtemp()
- try:
- a = ansible_common.AnsibleCommon({})
- a.execute_ansible('', d, ansible_check=True, verbose=True)
- finally:
- os.rmdir(d)
diff --git a/tests/unit/common/test_httpClient.py b/tests/unit/common/test_httpClient.py
deleted file mode 100644
index eb09d1a52..000000000
--- a/tests/unit/common/test_httpClient.py
+++ /dev/null
@@ -1,43 +0,0 @@
-##############################################################################
-# Copyright (c) 2016 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
-##############################################################################
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.common import httpClient
-
-
-class HttpClientTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.httpClient.requests')
- def test_post(self, mock_requests):
- url = 'http://localhost:5000/hello'
- data = {'hello': 'world'}
- headers = {'Content-Type': 'application/json'}
- httpClient.HttpClient().post(url, data)
- mock_requests.post.assert_called_with(
- url, data=jsonutils.dump_as_bytes(data),
- headers=headers)
-
- @mock.patch('yardstick.common.httpClient.requests')
- def test_get(self, mock_requests):
- url = 'http://localhost:5000/hello'
- httpClient.HttpClient().get(url)
- mock_requests.get.assert_called_with(url)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/common/test_openstack_utils.py b/tests/unit/common/test_openstack_utils.py
deleted file mode 100644
index b3dc2d9c4..000000000
--- a/tests/unit/common/test_openstack_utils.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 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.common.openstack_utils
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.common import openstack_utils
-
-
-class GetCredentialsTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.os')
- def test_get_credentials(self, mock_os):
- with mock.patch.dict('os.environ', {'OS_IDENTITY_API_VERSION': '2'},
- clear=True):
- openstack_utils.get_credentials()
-
-
-class GetHeatApiVersionTestCase(unittest.TestCase):
-
- def test_get_heat_api_version_check_result(self):
- API = 'HEAT_API_VERSION'
- expected_result = '2'
-
- with mock.patch.dict('os.environ', {API: '2'}, clear=True):
- api_version = openstack_utils.get_heat_api_version()
- self.assertEqual(api_version, expected_result)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/common/test_process.py b/tests/unit/common/test_process.py
deleted file mode 100644
index 5eee55bcc..000000000
--- a/tests/unit/common/test_process.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-import unittest
-
-import mock
-
-from yardstick.common import process
-
-
-class ProcessTestcase(unittest.TestCase):
- def test_check_if_procces_failed_None(self):
- p = mock.MagicMock(**{"exitcode": None, "name": "debug"})
- process.check_if_process_failed(p)
-
- def test_check_if_procces_failed_0(self):
- p = mock.MagicMock(**{"exitcode": 0, "name": "debug"})
- process.check_if_process_failed(p)
-
- def test_check_if_procces_failed_1(self):
- p = mock.MagicMock(**{"exitcode": 1, "name": "debug"})
- with self.assertRaises(RuntimeError):
- process.check_if_process_failed(p)
-
-
-@mock.patch("yardstick.common.process.multiprocessing")
-class TerminateChildrenTestcase(unittest.TestCase):
- def test_some_children(self, mock_multiprocessing):
- p1 = mock.MagicMock()
- p2 = mock.MagicMock()
- mock_multiprocessing.active_children.return_value = [p1, p2]
- process.terminate_children()
-
- def test_no_children(self, mock_multiprocessing):
- mock_multiprocessing.active_children.return_value = []
- process.terminate_children()
diff --git a/tests/unit/common/test_template_format.py b/tests/unit/common/test_template_format.py
deleted file mode 100644
index 2a7d80b4d..000000000
--- a/tests/unit/common/test_template_format.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-# yardstick: this file is copied from python-heatclient and slightly modified
-
-from __future__ import absolute_import
-import mock
-import unittest
-import yaml
-
-from yardstick.common import template_format
-
-
-class TemplateFormatTestCase(unittest.TestCase):
-
- def test_parse_to_value_exception(self):
-
- with mock.patch.object(yaml, 'load') as yaml_loader:
- yaml_loader.side_effect = yaml.scanner.ScannerError()
- self.assertRaises(ValueError, template_format.parse, 'FOOBAR')
- yaml_loader.side_effect = yaml.parser.ParserError()
- self.assertRaises(ValueError, template_format.parse, 'FOOBAR')
- yaml_loader.side_effect = \
- yaml.reader.ReaderError('', '', '', '', '')
- self.assertRaises(ValueError, template_format.parse, 'FOOBAR')
-
- def test_parse_no_version_format(self):
-
- yaml = ''
- self.assertRaises(ValueError, template_format.parse, yaml)
- yaml2 = "Parameters: {}\n" \
- "Mappings: {}\n" \
- "Resources: {}\n" \
- "Outputs: {}"
- self.assertRaises(ValueError, template_format.parse, yaml2)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/common/test_utils.py b/tests/unit/common/test_utils.py
deleted file mode 100644
index 42b75d1f0..000000000
--- a/tests/unit/common/test_utils.py
+++ /dev/null
@@ -1,1070 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Ericsson AB 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.common.utils
-
-from __future__ import absolute_import
-
-import ipaddress
-import os
-import unittest
-from copy import deepcopy
-from itertools import product, chain
-
-import errno
-import mock
-from six.moves import configparser
-
-import yardstick
-from yardstick.common import utils
-from yardstick.common import constants
-
-
-class IterSubclassesTestCase(unittest.TestCase):
- # Disclaimer: this class is a modified copy from
- # rally/tests/unit/common/plugin/test_discover.py
- # Copyright 2015: Mirantis Inc.
-
- def test_itersubclasses(self):
- class A(object):
- pass
-
- class B(A):
- pass
-
- class C(A):
- pass
-
- class D(C):
- pass
-
- self.assertEqual([B, C, D], list(utils.itersubclasses(A)))
-
-
-class ImportModulesFromPackageTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.utils.os.walk')
- def test_import_modules_from_package_no_mod(self, mock_walk):
- yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
- mock_walk.return_value = ([
- (os.path.join(yardstick_root, 'foo'), ['bar'], ['__init__.py']),
- (os.path.join(yardstick_root, 'foo', 'bar'), [], ['baz.txt', 'qux.rst'])
- ])
-
- utils.import_modules_from_package('foo.bar')
-
- @mock.patch('yardstick.common.utils.os.walk')
- @mock.patch('yardstick.common.utils.importutils')
- def test_import_modules_from_package(self, mock_importutils, mock_walk):
-
- yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
- mock_walk.return_value = ([
- (os.path.join(yardstick_root, 'foo', os.pardir, 'bar'), [], ['baz.py'])
- ])
-
- utils.import_modules_from_package('foo.bar')
- mock_importutils.import_module.assert_called_with('bar.baz')
-
-
-class GetParaFromYaml(unittest.TestCase):
-
- @mock.patch('yardstick.common.utils.os.environ.get')
- def test_get_param_para_not_found(self, get_env):
- file_path = 'config_sample.yaml'
- get_env.return_value = self._get_file_abspath(file_path)
- args = 'releng.file'
- default = 'hello'
- self.assertTrue(constants.get_param(args, default), default)
-
- @mock.patch('yardstick.common.utils.os.environ.get')
- def test_get_param_para_exists(self, get_env):
- file_path = 'config_sample.yaml'
- get_env.return_value = self._get_file_abspath(file_path)
- args = 'releng.dir'
- para = '/home/opnfv/repos/releng'
- self.assertEqual(para, constants.get_param(args))
-
- def _get_file_abspath(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- file_path = os.path.join(curr_path, filename)
- return file_path
-
-
-class CommonUtilTestCase(unittest.TestCase):
-
- def setUp(self):
- self.data = {
- "benchmark": {
- "data": {
- "mpstat": {
- "cpu0": {
- "%sys": "0.00",
- "%idle": "99.00"
- },
- "loadavg": [
- "1.09",
- "0.29"
- ]
- },
- "rtt": "1.03"
- }
- }
- }
-
- def test__dict_key_flatten(self):
- line = 'mpstat.loadavg1=0.29,rtt=1.03,mpstat.loadavg0=1.09,' \
- 'mpstat.cpu0.%idle=99.00,mpstat.cpu0.%sys=0.00'
- # need to sort for assert to work
- line = ",".join(sorted(line.split(',')))
- flattened_data = utils.flatten_dict_key(
- self.data['benchmark']['data'])
- result = ",".join(
- ("=".join(item) for item in sorted(flattened_data.items())))
- self.assertEqual(result, line)
-
-
-class TestMacAddressToHex(unittest.TestCase):
-
- def test_mac_address_to_hex_list(self):
- self.assertEqual(utils.mac_address_to_hex_list("ea:3e:e1:9a:99:e8"),
- ['0xea', '0x3e', '0xe1', '0x9a', '0x99', '0xe8'])
-
-
-class TranslateToStrTestCase(unittest.TestCase):
-
- def test_translate_to_str_unicode(self):
- input_str = u'hello'
- output_str = utils.translate_to_str(input_str)
-
- result = 'hello'
- self.assertEqual(result, output_str)
-
- def test_translate_to_str_dict_list_unicode(self):
- input_str = {
- u'hello': {u'hello': [u'world']}
- }
- output_str = utils.translate_to_str(input_str)
-
- result = {
- 'hello': {'hello': ['world']}
- }
- self.assertEqual(result, output_str)
-
- def test_translate_to_str_non_string(self):
- input_value = object()
- result = utils.translate_to_str(input_value)
- self.assertIs(input_value, result)
-
-
-class TestParseCpuInfo(unittest.TestCase):
-
- def test_single_socket_no_hyperthread(self):
- cpuinfo = """\
-processor : 2
-vendor_id : GenuineIntel
-cpu family : 6
-model : 60
-model name : Intel Core Processor (Haswell, no TSX)
-stepping : 1
-microcode : 0x1
-cpu MHz : 2294.684
-cache size : 4096 KB
-physical id : 0
-siblings : 5
-core id : 2
-cpu cores : 5
-apicid : 2
-initial apicid : 2
-fpu : yes
-fpu_exception : yes
-cpuid level : 13
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat
-bugs :
-bogomips : 4589.36
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 3
-vendor_id : GenuineIntel
-cpu family : 6
-model : 60
-model name : Intel Core Processor (Haswell, no TSX)
-stepping : 1
-microcode : 0x1
-cpu MHz : 2294.684
-cache size : 4096 KB
-physical id : 0
-siblings : 5
-core id : 3
-cpu cores : 5
-apicid : 3
-initial apicid : 3
-fpu : yes
-fpu_exception : yes
-cpuid level : 13
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat
-bugs :
-bogomips : 4589.36
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 4
-vendor_id : GenuineIntel
-cpu family : 6
-model : 60
-model name : Intel Core Processor (Haswell, no TSX)
-stepping : 1
-microcode : 0x1
-cpu MHz : 2294.684
-cache size : 4096 KB
-physical id : 0
-siblings : 5
-core id : 4
-cpu cores : 5
-apicid : 4
-initial apicid : 4
-fpu : yes
-fpu_exception : yes
-cpuid level : 13
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat
-bugs :
-bogomips : 4589.36
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-"""
- socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
- assert sorted(socket_map.keys()) == [0]
- assert sorted(socket_map[0].keys()) == [2, 3, 4]
-
- def test_single_socket_hyperthread(self):
- cpuinfo = """\
-processor : 5
-vendor_id : GenuineIntel
-cpu family : 6
-model : 60
-model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
-stepping : 3
-microcode : 0x1d
-cpu MHz : 3501.708
-cache size : 8192 KB
-physical id : 0
-siblings : 8
-core id : 1
-cpu cores : 4
-apicid : 3
-initial apicid : 3
-fpu : yes
-fpu_exception : yes
-cpuid level : 13
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
-bugs :
-bogomips : 6987.36
-clflush size : 64
-cache_alignment : 64
-address sizes : 39 bits physical, 48 bits virtual
-power management:
-
-processor : 6
-vendor_id : GenuineIntel
-cpu family : 6
-model : 60
-model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
-stepping : 3
-microcode : 0x1d
-cpu MHz : 3531.829
-cache size : 8192 KB
-physical id : 0
-siblings : 8
-core id : 2
-cpu cores : 4
-apicid : 5
-initial apicid : 5
-fpu : yes
-fpu_exception : yes
-cpuid level : 13
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
-bugs :
-bogomips : 6987.36
-clflush size : 64
-cache_alignment : 64
-address sizes : 39 bits physical, 48 bits virtual
-power management:
-
-processor : 7
-vendor_id : GenuineIntel
-cpu family : 6
-model : 60
-model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
-stepping : 3
-microcode : 0x1d
-cpu MHz : 3500.213
-cache size : 8192 KB
-physical id : 0
-siblings : 8
-core id : 3
-cpu cores : 4
-apicid : 7
-initial apicid : 7
-fpu : yes
-fpu_exception : yes
-cpuid level : 13
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
-bugs :
-bogomips : 6987.24
-clflush size : 64
-cache_alignment : 64
-address sizes : 39 bits physical, 48 bits virtual
-power management:
-
-"""
- socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
- assert sorted(socket_map.keys()) == [0]
- assert sorted(socket_map[0].keys()) == [1, 2, 3]
- assert sorted(socket_map[0][1]) == [5]
- assert sorted(socket_map[0][2]) == [6]
- assert sorted(socket_map[0][3]) == [7]
-
- def test_dual_socket_hyperthread(self):
- cpuinfo = """\
-processor : 1
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.976
-cache size : 56320 KB
-physical id : 0
-siblings : 44
-core id : 1
-cpu cores : 22
-apicid : 2
-initial apicid : 2
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4401.07
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 2
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1226.892
-cache size : 56320 KB
-physical id : 0
-siblings : 44
-core id : 2
-cpu cores : 22
-apicid : 4
-initial apicid : 4
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4400.84
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 43
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.305
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 28
-cpu cores : 22
-apicid : 120
-initial apicid : 120
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4411.31
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 44
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.305
-cache size : 56320 KB
-physical id : 0
-siblings : 44
-core id : 0
-cpu cores : 22
-apicid : 1
-initial apicid : 1
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4410.61
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 85
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.573
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 26
-cpu cores : 22
-apicid : 117
-initial apicid : 117
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4409.07
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 86
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.305
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 27
-cpu cores : 22
-apicid : 119
-initial apicid : 119
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4406.62
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 87
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.708
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 28
-cpu cores : 22
-apicid : 121
-initial apicid : 121
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4413.48
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-"""
- socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
- assert sorted(socket_map.keys()) == [0, 1]
- assert sorted(socket_map[0].keys()) == [0, 1, 2]
- assert sorted(socket_map[1].keys()) == [26, 27, 28]
- assert sorted(socket_map[0][0]) == [44]
- assert sorted(socket_map[0][1]) == [1]
- assert sorted(socket_map[0][2]) == [2]
- assert sorted(socket_map[1][26]) == [85]
- assert sorted(socket_map[1][27]) == [86]
- assert sorted(socket_map[1][28]) == [43, 87]
-
- def test_dual_socket_no_hyperthread(self):
- cpuinfo = """\
-processor : 1
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.976
-cache size : 56320 KB
-physical id : 0
-siblings : 44
-core id : 1
-cpu cores : 22
-apicid : 2
-initial apicid : 2
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4401.07
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 2
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1226.892
-cache size : 56320 KB
-physical id : 0
-siblings : 44
-core id : 2
-cpu cores : 22
-apicid : 4
-initial apicid : 4
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4400.84
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 43
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.305
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 28
-cpu cores : 22
-apicid : 120
-initial apicid : 120
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4411.31
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 44
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.305
-cache size : 56320 KB
-physical id : 0
-siblings : 44
-core id : 0
-cpu cores : 22
-apicid : 1
-initial apicid : 1
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4410.61
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 85
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.573
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 26
-cpu cores : 22
-apicid : 117
-initial apicid : 117
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4409.07
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 86
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.305
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 27
-cpu cores : 22
-apicid : 119
-initial apicid : 119
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4406.62
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-processor : 87
-vendor_id : GenuineIntel
-cpu family : 6
-model : 79
-model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
-stepping : 1
-microcode : 0xb00001f
-cpu MHz : 1200.708
-cache size : 56320 KB
-physical id : 1
-siblings : 44
-core id : 28
-cpu cores : 22
-apicid : 121
-initial apicid : 121
-fpu : yes
-fpu_exception : yes
-cpuid level : 20
-wp : yes
-flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
-bugs :
-bogomips : 4413.48
-clflush size : 64
-cache_alignment : 64
-address sizes : 46 bits physical, 48 bits virtual
-power management:
-
-"""
- socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
- processors = socket_map.processors()
- assert processors == [1, 2, 43, 44, 85, 86, 87]
- cores = socket_map.cores()
- assert cores == [0, 1, 2, 26, 27, 28]
- sockets = socket_map.sockets()
- assert sockets == [0, 1]
-
-
-class ChangeObjToDictTestCase(unittest.TestCase):
-
- def test_change_obj_to_dict(self):
- class A(object):
- def __init__(self):
- self.name = 'yardstick'
-
- obj = A()
- obj_r = utils.change_obj_to_dict(obj)
- obj_s = {'name': 'yardstick'}
- self.assertEqual(obj_r, obj_s)
-
-
-class SetDictValueTestCase(unittest.TestCase):
-
- def test_set_dict_value(self):
- input_dic = {
- 'hello': 'world'
- }
- output_dic = utils.set_dict_value(input_dic, 'welcome.to', 'yardstick')
- self.assertEqual(output_dic.get('welcome', {}).get('to'), 'yardstick')
-
-
-class RemoveFileTestCase(unittest.TestCase):
-
- def test_remove_file(self):
- try:
- utils.remove_file('notexistfile.txt')
- except Exception as e:
- self.assertTrue(isinstance(e, OSError))
-
-
-class TestUtils(unittest.TestCase):
-
- @mock.patch('yardstick.common.utils.os.makedirs')
- def test_makedirs(self, *_):
- self.assertIsNone(utils.makedirs('a/b/c/d'))
-
- @mock.patch('yardstick.common.utils.os.makedirs')
- def test_makedirs_exists(self, mock_os_makedirs):
- mock_os_makedirs.side_effect = OSError(errno.EEXIST, 'exists')
- self.assertIsNone(utils.makedirs('a/b/c/d'))
-
- @mock.patch('yardstick.common.utils.os.makedirs')
- def test_makedirs_busy(self, mock_os_makedirs):
- mock_os_makedirs.side_effect = OSError(errno.EBUSY, 'busy')
- with self.assertRaises(OSError):
- utils.makedirs('a/b/c/d')
-
- @mock.patch('yardstick.common.utils.jsonify')
- def test_result_handler(self, mock_jsonify):
- mock_jsonify.return_value = 432
-
- self.assertEqual(utils.result_handler('x', 234), 432)
- mock_jsonify.assert_called_once_with({'status': 'x', 'result': 234})
-
- @mock.patch('random.randint')
- @mock.patch('socket.socket')
- def test_get_free_port(self, mock_socket, mock_randint):
- mock_randint.return_value = 7777
- s = mock_socket('x', 'y')
- s.connect_ex.side_effect = iter([0, 1])
- result = utils.get_free_port('10.20.30.40')
- self.assertEqual(result, 7777)
- self.assertEqual(s.connect_ex.call_count, 2)
-
- @mock.patch('subprocess.check_output')
- def test_execute_command(self, mock_check_output):
- expected = ['hello world', '1234']
- mock_check_output.return_value = os.linesep.join(expected)
- result = utils.execute_command('my_command arg1 arg2')
- self.assertEqual(result, expected)
-
- @mock.patch('subprocess.Popen')
- def test_source_env(self, mock_popen):
- base_env = deepcopy(os.environ)
- mock_process = mock_popen()
- output_list = [
- 'garbage line before',
- 'NEW_ENV_VALUE=234',
- 'garbage line after',
- ]
- mock_process.communicate.return_value = os.linesep.join(output_list), '', 0
- expected = {'NEW_ENV_VALUE': '234'}
- result = utils.source_env('my_file')
- self.assertDictEqual(result, expected)
- os.environ.clear()
- os.environ.update(base_env)
-
- @mock.patch('yardstick.common.utils.configparser.ConfigParser')
- def test_parse_ini_file(self, mock_config_parser_type):
- defaults = {
- 'default1': 'value1',
- 'default2': 'value2',
- }
- s1 = {
- 'key1': 'value11',
- 'key2': 'value22',
- }
- s2 = {
- 'key1': 'value123',
- 'key2': 'value234',
- }
-
- mock_config_parser = mock_config_parser_type()
- mock_config_parser.read.return_value = True
- mock_config_parser.sections.return_value = ['s1', 's2']
- mock_config_parser.items.side_effect = iter([
- defaults.items(),
- s1.items(),
- s2.items(),
- ])
-
- expected = {
- 'DEFAULT': defaults,
- 's1': s1,
- 's2': s2,
- }
- result = utils.parse_ini_file('my_path')
- self.assertDictEqual(result, expected)
-
- @mock.patch('yardstick.common.utils.configparser.ConfigParser')
- def test_parse_ini_file_missing_section_header(self, mock_config_parser_type):
- mock_config_parser = mock_config_parser_type()
- mock_config_parser.read.side_effect = \
- configparser.MissingSectionHeaderError(mock.Mock(), 321, mock.Mock())
-
- with self.assertRaises(configparser.MissingSectionHeaderError):
- utils.parse_ini_file('my_path')
-
- @mock.patch('yardstick.common.utils.configparser.ConfigParser')
- def test_parse_ini_file_no_file(self, mock_config_parser_type):
- mock_config_parser = mock_config_parser_type()
- mock_config_parser.read.return_value = False
- with self.assertRaises(RuntimeError):
- utils.parse_ini_file('my_path')
-
- @mock.patch('yardstick.common.utils.configparser.ConfigParser')
- def test_parse_ini_file_no_default_section_header(self, mock_config_parser_type):
- s1 = {
- 'key1': 'value11',
- 'key2': 'value22',
- }
- s2 = {
- 'key1': 'value123',
- 'key2': 'value234',
- }
-
- mock_config_parser = mock_config_parser_type()
- mock_config_parser.read.return_value = True
- mock_config_parser.sections.return_value = ['s1', 's2']
- mock_config_parser.items.side_effect = iter([
- configparser.NoSectionError(mock.Mock()),
- s1.items(),
- s2.items(),
- ])
-
- expected = {
- 'DEFAULT': {},
- 's1': s1,
- 's2': s2,
- }
- result = utils.parse_ini_file('my_path')
- self.assertDictEqual(result, expected)
-
- def test_join_non_strings(self):
- self.assertEqual(utils.join_non_strings(':'), '')
- self.assertEqual(utils.join_non_strings(':', 'a'), 'a')
- self.assertEqual(utils.join_non_strings(':', 'a', 2, 'c'), 'a:2:c')
- self.assertEqual(utils.join_non_strings(':', ['a', 2, 'c']), 'a:2:c')
- self.assertEqual(utils.join_non_strings(':', 'abc'), 'abc')
-
- def test_validate_non_string_sequence(self):
- self.assertEqual(utils.validate_non_string_sequence([1, 2, 3]), [1, 2, 3])
- self.assertIsNone(utils.validate_non_string_sequence('123'))
- self.assertIsNone(utils.validate_non_string_sequence(1))
-
- self.assertEqual(utils.validate_non_string_sequence(1, 2), 2)
- self.assertEqual(utils.validate_non_string_sequence(1, default=2), 2)
-
- with self.assertRaises(RuntimeError):
- utils.validate_non_string_sequence(1, raise_exc=RuntimeError)
-
- def test_error_class(self):
- with self.assertRaises(RuntimeError):
- utils.ErrorClass()
-
- error_instance = utils.ErrorClass(test='')
- with self.assertRaises(AttributeError):
- error_instance.get_name()
-
-
-class TestUtilsIpAddrMethods(unittest.TestCase):
-
- GOOD_IP_V4_ADDRESS_STR_LIST = [
- u'0.0.0.0',
- u'10.20.30.40',
- u'127.0.0.1',
- u'10.20.30.40',
- u'172.29.50.75',
- u'192.168.230.9',
- u'255.255.255.255',
- ]
-
- GOOD_IP_V4_MASK_STR_LIST = [
- u'/1',
- u'/8',
- u'/13',
- u'/19',
- u'/24',
- u'/32',
- ]
-
- GOOD_IP_V6_ADDRESS_STR_LIST = [
- u'::1',
- u'fe80::250:56ff:fe89:91ff',
- u'123:4567:89ab:cdef:123:4567:89ab:cdef',
- ]
-
- GOOD_IP_V6_MASK_STR_LIST = [
- u'/1',
- u'/16',
- u'/29',
- u'/64',
- u'/99',
- u'/128',
- ]
-
- INVALID_IP_ADDRESS_STR_LIST = [
- 1,
- u'w.x.y.z',
- u'10.20.30.40/33',
- u'123:4567:89ab:cdef:123:4567:89ab:cdef/129',
- ]
-
- def test_safe_ip_address(self):
- addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
- for addr in addr_list:
- # test with no mask
- expected = ipaddress.ip_address(addr)
- self.assertEqual(utils.safe_ip_address(addr), expected, addr)
-
- def test_safe_ip_address_v6_ip(self):
- addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
- for addr in addr_list:
- # test with no mask
- expected = ipaddress.ip_address(addr)
- self.assertEqual(utils.safe_ip_address(addr), expected, addr)
-
- @mock.patch("yardstick.common.utils.logging")
- def test_safe_ip_address_negative(self, mock_logging):
- for value in self.INVALID_IP_ADDRESS_STR_LIST:
- self.assertIsNone(utils.safe_ip_address(value), value)
-
- addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
- mask_list = self.GOOD_IP_V4_MASK_STR_LIST
- for addr_mask_pair in product(addr_list, mask_list):
- value = ''.join(addr_mask_pair)
- self.assertIsNone(utils.safe_ip_address(value), value)
-
- addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
- mask_list = self.GOOD_IP_V6_MASK_STR_LIST
- for addr_mask_pair in product(addr_list, mask_list):
- value = ''.join(addr_mask_pair)
- self.assertIsNone(utils.safe_ip_address(value), value)
-
- def test_get_ip_version(self):
- addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
- for addr in addr_list:
- # test with no mask
- self.assertEqual(utils.get_ip_version(addr), 4, addr)
-
- def test_get_ip_version_v6_ip(self):
- addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
- for addr in addr_list:
- # test with no mask
- self.assertEqual(utils.get_ip_version(addr), 6, addr)
-
- @mock.patch("yardstick.common.utils.logging")
- def test_get_ip_version_negative(self, mock_logging):
- for value in self.INVALID_IP_ADDRESS_STR_LIST:
- self.assertIsNone(utils.get_ip_version(value), value)
-
- addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
- mask_list = self.GOOD_IP_V4_MASK_STR_LIST
- for addr_mask_pair in product(addr_list, mask_list):
- value = ''.join(addr_mask_pair)
- self.assertIsNone(utils.get_ip_version(value), value)
-
- addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
- mask_list = self.GOOD_IP_V6_MASK_STR_LIST
- for addr_mask_pair in product(addr_list, mask_list):
- value = ''.join(addr_mask_pair)
- self.assertIsNone(utils.get_ip_version(value), value)
-
- def test_ip_to_hex(self):
- self.assertEqual(utils.ip_to_hex('0.0.0.0'), '00000000')
- self.assertEqual(utils.ip_to_hex('10.20.30.40'), '0a141e28')
- self.assertEqual(utils.ip_to_hex('127.0.0.1'), '7f000001')
- self.assertEqual(utils.ip_to_hex('172.31.90.100'), 'ac1f5a64')
- self.assertEqual(utils.ip_to_hex('192.168.254.253'), 'c0a8fefd')
- self.assertEqual(utils.ip_to_hex('255.255.255.255'), 'ffffffff')
-
- def test_ip_to_hex_v6_ip(self):
- for value in self.GOOD_IP_V6_ADDRESS_STR_LIST:
- self.assertEqual(utils.ip_to_hex(value), value)
-
- @mock.patch("yardstick.common.utils.logging")
- def test_ip_to_hex_negative(self, mock_logging):
- addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
- mask_list = self.GOOD_IP_V4_MASK_STR_LIST
- value_iter = (''.join(pair) for pair in product(addr_list, mask_list))
- for value in chain(value_iter, self.INVALID_IP_ADDRESS_STR_LIST):
- self.assertEqual(utils.ip_to_hex(value), value)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/common/test_yaml_loader.py b/tests/unit/common/test_yaml_loader.py
deleted file mode 100644
index 90cbb8157..000000000
--- a/tests/unit/common/test_yaml_loader.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-# yardstick: this file is copied from python-heatclient and slightly modified
-
-from __future__ import absolute_import
-import unittest
-
-from yardstick.common import yaml_loader
-
-
-class TemplateFormatTestCase(unittest.TestCase):
-
- def test_parse_to_value_exception(self):
-
- self.assertEquals(yaml_loader.yaml_load("string"), u"string")
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/dispatcher/__init__.py b/tests/unit/dispatcher/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/dispatcher/__init__.py
+++ /dev/null
diff --git a/tests/unit/dispatcher/test_influxdb.py b/tests/unit/dispatcher/test_influxdb.py
deleted file mode 100644
index 7ebe8c90b..000000000
--- a/tests/unit/dispatcher/test_influxdb.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 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.dispatcher.influxdb
-
-from __future__ import absolute_import
-import unittest
-
-
-try:
- from unittest import mock
-except ImportError:
- import mock
-
-from yardstick import _init_logging
-_init_logging()
-
-from yardstick.dispatcher.influxdb import InfluxdbDispatcher
-
-
-class InfluxdbDispatcherTestCase(unittest.TestCase):
-
- def setUp(self):
- self.data1 = {
- "runner_id": 8921,
- "context_cfg": {
- "host": {
- "ip": "10.229.43.154",
- "key_filename":
- "/root/yardstick/yardstick/resources/files"
- "/yardstick_key",
- "name": "kvm.LF",
- "user": "root"
- },
- "target": {
- "ipaddr": "10.229.44.134"
- }
- },
- "scenario_cfg": {
- "runner": {
- "interval": 1,
- "object": "yardstick.benchmark.scenarios.networking.ping"
- ".Ping",
- "output_filename": "/tmp/yardstick.out",
- "runner_id": 8921,
- "duration": 10,
- "type": "Duration"
- },
- "host": "kvm.LF",
- "type": "Ping",
- "target": "10.229.44.134",
- "sla": {
- "action": "monitor",
- "max_rtt": 10
- },
- "tc": "ping",
- "task_id": "ea958583-c91e-461a-af14-2a7f9d7f79e7"
- }
- }
- self.data2 = {
- "benchmark": {
- "timestamp": "1451478117.883505",
- "errors": "",
- "data": {
- "rtt": 0.613
- },
- "sequence": 1
- },
- "runner_id": 8921
- }
-
- self.yardstick_conf = {'dispatcher_influxdb': {}}
-
- @mock.patch('yardstick.dispatcher.influxdb.requests')
- def test_record_result_data(self, mock_requests):
- type(mock_requests.post.return_value).status_code = 204
- influxdb = InfluxdbDispatcher(self.yardstick_conf)
- data = {
- 'status': 1,
- 'result': {
- 'criteria': 'PASS',
- 'info': {
- },
- 'task_id': 'b9e2bbc2-dfd8-410d-8c24-07771e9f7979',
- 'testcases': {
- }
- }
- }
- self.assertEqual(influxdb.flush_result_data(data), 0)
-
- def test__get_nano_timestamp(self):
- influxdb = InfluxdbDispatcher(self.yardstick_conf)
- results = {'timestamp': '1451461248.925574'}
- self.assertEqual(influxdb._get_nano_timestamp(results),
- '1451461248925574144')
-
- @mock.patch('yardstick.dispatcher.influxdb.time')
- def test__get_nano_timestamp_except(self, mock_time):
- results = {}
- influxdb = InfluxdbDispatcher(self.yardstick_conf)
- mock_time.time.return_value = 1451461248.925574
- self.assertEqual(influxdb._get_nano_timestamp(results),
- '1451461248925574144')
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/dispatcher/test_influxdb_line_protocol.py b/tests/unit/dispatcher/test_influxdb_line_protocol.py
deleted file mode 100644
index 51dc39e3c..000000000
--- a/tests/unit/dispatcher/test_influxdb_line_protocol.py
+++ /dev/null
@@ -1,64 +0,0 @@
-##############################################################################
-# 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.dispatcher.influxdb_line_protocol
-
-# yardstick comment: this file is a modified copy of
-# influxdb-python/influxdb/tests/test_line_protocol.py
-
-from __future__ import absolute_import
-import unittest
-from third_party.influxdb.influxdb_line_protocol import make_lines
-
-
-class TestLineProtocol(unittest.TestCase):
-
- def test_make_lines(self):
- data = {
- "tags": {
- "empty_tag": "",
- "none_tag": None,
- "integer_tag": 2,
- "string_tag": "hello"
- },
- "points": [
- {
- "measurement": "test",
- "fields": {
- "string_val": "hello!",
- "int_val": 1,
- "float_val": 1.1,
- "none_field": None,
- "bool_val": True,
- }
- }
- ]
- }
-
- self.assertEqual(
- make_lines(data),
- 'test,integer_tag=2,string_tag=hello '
- 'bool_val=True,float_val=1.1,int_val=1i,string_val="hello!"\n'
- )
-
- def test_string_val_newline(self):
- data = {
- "points": [
- {
- "measurement": "m1",
- "fields": {
- "multi_line": "line1\nline1\nline3"
- }
- }
- ]
- }
-
- self.assertEqual(
- make_lines(data),
- 'm1 multi_line="line1\\nline1\\nline3"\n'
- )
diff --git a/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py b/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
index 0f1cf7d92..9bb5ed3a7 100644
--- a/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
+++ b/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
@@ -25,8 +25,6 @@ from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_DPDK
from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_OTHER
from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_OTHER
-pass
-
class TestDpdkBindHelper(unittest.TestCase):
EXAMPLE_OUTPUT = """
@@ -116,8 +114,8 @@ Other crypto devices
dpdk_bind_helper = DpdkBindHelper(conn)
- self.assertEquals(conn, dpdk_bind_helper.ssh_helper)
- self.assertEquals(self.CLEAN_STATUS, dpdk_bind_helper.dpdk_status)
+ self.assertEqual(conn, dpdk_bind_helper.ssh_helper)
+ self.assertEqual(self.CLEAN_STATUS, dpdk_bind_helper.dpdk_status)
self.assertIsNone(dpdk_bind_helper.status_nic_row_re)
self.assertIsNone(dpdk_bind_helper._dpdk_nic_bind_attr)
self.assertIsNone(dpdk_bind_helper._status_cmd_attr)
@@ -127,7 +125,8 @@ Other crypto devices
conn.execute = mock.Mock(return_value=(0, 'output', 'error'))
conn.provision_tool = mock.Mock(return_value='tool_path')
dpdk_bind_helper = DpdkBindHelper(conn)
- self.assertEquals((0, 'output', 'error'), dpdk_bind_helper._dpdk_execute('command'))
+ self.assertEqual((0, 'output', 'error'),
+ dpdk_bind_helper._dpdk_execute('command'))
def test__dpdk_execute_failure(self):
conn = mock.Mock()
@@ -145,7 +144,7 @@ Other crypto devices
dpdk_bind_helper._addline(NETWORK_KERNEL, self.ONE_INPUT_LINE)
self.assertIsNotNone(dpdk_bind_helper.dpdk_status)
- self.assertEquals(self.ONE_INPUT_LINE_PARSED, dpdk_bind_helper.dpdk_status[NETWORK_KERNEL])
+ self.assertEqual(self.ONE_INPUT_LINE_PARSED, dpdk_bind_helper.dpdk_status[NETWORK_KERNEL])
def test__switch_active_dict_by_header(self):
line = "Crypto devices using DPDK-compatible driver"
@@ -165,7 +164,7 @@ Other crypto devices
dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
self.maxDiff = None
- self.assertEquals(self.PARSED_EXAMPLE, dpdk_bind_helper.dpdk_status)
+ self.assertEqual(self.PARSED_EXAMPLE, dpdk_bind_helper.dpdk_status)
def test_read_status(self):
conn = mock.Mock()
@@ -174,7 +173,7 @@ Other crypto devices
dpdk_bind_helper = DpdkBindHelper(conn)
- self.assertEquals(self.PARSED_EXAMPLE, dpdk_bind_helper.read_status())
+ self.assertEqual(self.PARSED_EXAMPLE, dpdk_bind_helper.read_status())
def test__get_bound_pci_addresses(self):
conn = mock.Mock()
@@ -183,9 +182,9 @@ Other crypto devices
dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
- self.assertEquals(['0000:00:04.0', '0000:00:05.0'],
+ self.assertEqual(['0000:00:04.0', '0000:00:05.0'],
dpdk_bind_helper._get_bound_pci_addresses(NETWORK_DPDK))
- self.assertEquals(['0000:00:03.0'],
+ self.assertEqual(['0000:00:03.0'],
dpdk_bind_helper._get_bound_pci_addresses(NETWORK_KERNEL))
def test_interface_driver_map(self):
@@ -195,7 +194,7 @@ Other crypto devices
dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
- self.assertEquals({'0000:00:04.0': 'igb_uio',
+ self.assertEqual({'0000:00:04.0': 'igb_uio',
'0000:00:03.0': 'virtio-pci',
'0000:00:05.0': 'igb_uio',
},
diff --git a/tests/unit/network_services/nfvi/test_resource.py b/tests/unit/network_services/nfvi/test_resource.py
index 5c2f890e8..7ad166249 100644
--- a/tests/unit/network_services/nfvi/test_resource.py
+++ b/tests/unit/network_services/nfvi/test_resource.py
@@ -12,11 +12,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from __future__ import absolute_import
-import unittest
-
import errno
+
import mock
+import unittest
from yardstick.network_services.nfvi.resource import ResourceProfile
from yardstick.network_services.nfvi import resource, collectd
@@ -103,16 +102,18 @@ class TestResourceProfile(unittest.TestCase):
self.resource_profile.connection = self.ssh_mock
def test___init__(self):
- self.assertEqual(True, self.resource_profile.enable)
+ self.assertTrue(self.resource_profile.enable)
- def test_check_if_sa_running(self):
- self.assertEqual(self.resource_profile.check_if_sa_running("collectd"),
+ def test_check_if_system_agent_running(self):
+ self.assertEqual(self.resource_profile.check_if_system_agent_running("collectd"),
(0, ""))
- def test_check_if_sa_running_excetion(self):
+ def test_check_if_system_agent_running_excetion(self):
with mock.patch.object(self.resource_profile.connection, "execute") as mock_execute:
mock_execute.side_effect = OSError(errno.ECONNRESET, "error")
- self.assertEqual(self.resource_profile.check_if_sa_running("collectd"), (1, None))
+ self.assertEqual(
+ self.resource_profile.check_if_system_agent_running("collectd"),
+ (1, None))
def test_get_cpu_data(self):
reskey = ["", "cpufreq", "cpufreq-0"]
@@ -135,12 +136,12 @@ class TestResourceProfile(unittest.TestCase):
self.resource_profile._prepare_collectd_conf("/opt/nsb_bin"))
def test__setup_ovs_stats(self):
+ # TODO(elfoley): This method doesn't actually return anything, the side
+ # effects should be checked
self.assertIsNone(
self.resource_profile._setup_ovs_stats(self.ssh_mock))
- @mock.patch("yardstick.network_services.nfvi.resource.open")
- @mock.patch("yardstick.network_services.nfvi.resource.os")
- def test__provide_config_file(self, mock_open, mock_os):
+ def test__provide_config_file(self,):
loadplugin = range(5)
port_names = range(5)
kwargs = {
@@ -151,14 +152,12 @@ class TestResourceProfile(unittest.TestCase):
self.resource_profile._provide_config_file("/opt/nsb_bin", "collectd.conf", kwargs)
self.ssh_mock.execute.assert_called_once()
- @mock.patch("yardstick.network_services.nfvi.resource.open")
- def test_initiate_systemagent(self, mock_open):
+ def test_initiate_systemagent(self):
self.resource_profile._start_collectd = mock.Mock()
self.assertIsNone(
self.resource_profile.initiate_systemagent("/opt/nsb_bin"))
- @mock.patch("yardstick.network_services.nfvi.resource.open")
- def test_initiate_systemagent_raise(self, mock_open):
+ def test_initiate_systemagent_raise(self):
self.resource_profile._start_collectd = mock.Mock(side_effect=RuntimeError)
with self.assertRaises(RuntimeError):
self.resource_profile.initiate_systemagent("/opt/nsb_bin")
@@ -267,8 +266,10 @@ class TestResourceProfile(unittest.TestCase):
def test_stop(self):
self.assertIsNone(self.resource_profile.stop())
- def test_stop(self):
+ def test_stop_amqp_not_running(self):
self.resource_profile.amqp_client = mock.MagicMock()
+ # TODO(efoley): Fix this incorrect test.
+ # Should check that we don't try to stop amqp when it's not running
self.assertIsNone(self.resource_profile.stop())
if __name__ == '__main__':
diff --git a/tests/unit/network_services/test_utils.py b/tests/unit/network_services/test_utils.py
index 993adbeae..bf98a4474 100644
--- a/tests/unit/network_services/test_utils.py
+++ b/tests/unit/network_services/test_utils.py
@@ -15,8 +15,6 @@
# Unittest for yardstick.network_services.utils
-from __future__ import absolute_import
-
import os
import unittest
import mock
@@ -62,3 +60,84 @@ class UtilsTestCase(unittest.TestCase):
ssh.return_value = ssh_mock
tool_path = utils.provision_tool(ssh_mock, self.DPDK_PATH)
self.assertEqual(tool_path, self.DPDK_PATH)
+
+
+class PciAddressTestCase(unittest.TestCase):
+
+ PCI_ADDRESS_DBSF = '000A:07:03.2'
+ PCI_ADDRESS_BSF = '06:02.1'
+ PCI_ADDRESS_DBSF_MULTILINE_1 = '0001:08:04.3\nother text\n'
+ PCI_ADDRESS_DBSF_MULTILINE_2 = 'first line\n 0001:08:04.3 \nother text\n'
+ # Will match and return the first address found.
+ PCI_ADDRESS_DBSF_MULTILINE_3 = ' 0001:08:04.1 \n 05:03.1 \nother\n'
+ PCI_ADDRESS_BSF_MULTILINE_1 = 'first line\n 08:04.3 \n 0002:05:03.1\n'
+ BAD_INPUT_1 = 'no address found'
+ BAD_INPUT_2 = '001:08:04.1'
+ BAD_INPUT_3 = '08:4.1'
+
+ def test_pciaddress_dbsf(self):
+ pci_address = utils.PciAddress(PciAddressTestCase.PCI_ADDRESS_DBSF)
+ self.assertEqual('000a', pci_address.domain)
+ self.assertEqual('07', pci_address.bus)
+ self.assertEqual('03', pci_address.slot)
+ self.assertEqual('2', pci_address.function)
+
+ def test_pciaddress_bsf(self):
+ pci_address = utils.PciAddress(PciAddressTestCase.PCI_ADDRESS_BSF)
+ self.assertEqual('0000', pci_address.domain)
+ self.assertEqual('06', pci_address.bus)
+ self.assertEqual('02', pci_address.slot)
+ self.assertEqual('1', pci_address.function)
+
+ def test_pciaddress_dbsf_multiline_1(self):
+ pci_address = utils.PciAddress(
+ PciAddressTestCase.PCI_ADDRESS_DBSF_MULTILINE_1)
+ self.assertEqual('0001', pci_address.domain)
+ self.assertEqual('08', pci_address.bus)
+ self.assertEqual('04', pci_address.slot)
+ self.assertEqual('3', pci_address.function)
+
+ def test_pciaddress_dbsf_multiline_2(self):
+ pci_address = utils.PciAddress(
+ PciAddressTestCase.PCI_ADDRESS_DBSF_MULTILINE_2)
+ self.assertEqual('0001', pci_address.domain)
+ self.assertEqual('08', pci_address.bus)
+ self.assertEqual('04', pci_address.slot)
+ self.assertEqual('3', pci_address.function)
+
+ def test_pciaddress_dbsf_multiline_3(self):
+ pci_address = utils.PciAddress(
+ PciAddressTestCase.PCI_ADDRESS_DBSF_MULTILINE_3)
+ self.assertEqual('0001', pci_address.domain)
+ self.assertEqual('08', pci_address.bus)
+ self.assertEqual('04', pci_address.slot)
+ self.assertEqual('1', pci_address.function)
+
+ def test_pciaddress_bsf_multiline_1(self):
+ pci_address = utils.PciAddress(
+ PciAddressTestCase.PCI_ADDRESS_BSF_MULTILINE_1)
+ self.assertEqual('0000', pci_address.domain)
+ self.assertEqual('08', pci_address.bus)
+ self.assertEqual('04', pci_address.slot)
+ self.assertEqual('3', pci_address.function)
+
+ def test_pciaddress_bad_input_no_address(self):
+ with self.assertRaises(ValueError) as exception:
+ utils.PciAddress(PciAddressTestCase.BAD_INPUT_1)
+ self.assertEqual('Invalid PCI address: {}'.format(
+ PciAddressTestCase.BAD_INPUT_1), str(exception.exception))
+
+ def test_pciaddress_bad_input_dbsf_bad_formatted(self):
+ # In this test case, the domain has only 3 characters instead of 4.
+ pci_address = utils.PciAddress(
+ PciAddressTestCase.BAD_INPUT_2)
+ self.assertEqual('0000', pci_address.domain)
+ self.assertEqual('08', pci_address.bus)
+ self.assertEqual('04', pci_address.slot)
+ self.assertEqual('1', pci_address.function)
+
+ def test_pciaddress_bad_input_bsf_bad_formatted(self):
+ with self.assertRaises(ValueError) as exception:
+ utils.PciAddress(PciAddressTestCase.BAD_INPUT_3)
+ self.assertEqual('Invalid PCI address: {}'.format(
+ PciAddressTestCase.BAD_INPUT_3), str(exception.exception))
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
index e9444b493..2a2647a91 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
@@ -15,8 +15,6 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
import unittest
import mock
import os
@@ -241,14 +239,14 @@ class TestAclApproxVnf(unittest.TestCase):
'password': 'r00t',
'VNF model': 'acl_vnf.yaml'}}}
- def test___init__(self, mock_process):
+ def test___init__(self, *args):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
acl_approx_vnf = AclApproxVnf(name, vnfd)
self.assertIsNone(acl_approx_vnf._vnf_process)
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, mock_time, mock_process):
+ def test_collect_kpi(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -263,7 +261,7 @@ class TestAclApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_vnf_execute_command(self, ssh, mock_time, mock_process):
+ def test_vnf_execute_command(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -275,7 +273,7 @@ class TestAclApproxVnf(unittest.TestCase):
self.assertEqual("", acl_approx_vnf.vnf_execute(cmd))
@mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, mock_process):
+ def test_get_stats(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -296,7 +294,7 @@ class TestAclApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.eval")
@mock.patch('yardstick.network_services.vnf_generic.vnf.acl_vnf.open')
@mock.patch(SSH_HELPER)
- def test_run_acl(self, ssh, mock_open, mock_eval, mock_hex, mock_process):
+ def test_run_acl(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -317,7 +315,7 @@ class TestAclApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.find_relative_file")
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
@mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh, mock_context, mock_yang, mock_find, mock_process):
+ def test_instantiate(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -333,16 +331,9 @@ class TestAclApproxVnf(unittest.TestCase):
self.assertIsNone(acl_approx_vnf.instantiate(self.scenario_cfg,
self.context_cfg))
- def test_scale(self, mock_process):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- acl_approx_vnf = AclApproxVnf(name, vnfd)
- flavor = ""
- with self.assertRaises(NotImplementedError):
- acl_approx_vnf.scale(flavor)
-
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, mock_time, mock_process):
+ def test_terminate(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -355,6 +346,3 @@ class TestAclApproxVnf(unittest.TestCase):
acl_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
acl_approx_vnf._resource_collect_stop = mock.Mock()
self.assertEqual(None, acl_approx_vnf.terminate())
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_base.py b/tests/unit/network_services/vnf_generic/vnf/test_base.py
index f812d67ef..e9488f76f 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_base.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_base.py
@@ -17,20 +17,20 @@
# Unittest for yardstick.network_services.vnf_generic.vnf.test_base
-from __future__ import absolute_import
-import unittest
+import multiprocessing
import os
+
import mock
-from multiprocessing import Queue
+import unittest
-from yardstick.network_services.vnf_generic.vnf.base import \
- QueueFileWrapper, GenericVNF, GenericTrafficGen
+from yardstick.network_services.vnf_generic.vnf import base
from yardstick.ssh import SSH
-IP_PIPELINE_CFG_FILE_TPL = """
-arp_route_tbl = ({port0_local_ip_hex},{port0_netmask_hex},1,"""
-"""{port1_local_ip_hex}) ({port1_local_ip_hex},{port1_netmask_hex},0,"""
-"""{port0_local_ip_hex})"""
+
+IP_PIPELINE_CFG_FILE_TPL = ("arp_route_tbl = ({port0_local_ip_hex},"
+ "{port0_netmask_hex},1,{port1_local_ip_hex}) "
+ "({port1_local_ip_hex},{port1_netmask_hex},0,"
+ "{port0_local_ip_hex})")
IP_PIPELINE_ND_CFG_FILE_TPL = """
nd_route_tbl = ({port1_dst_ip_hex6},"""
@@ -38,6 +38,111 @@ nd_route_tbl = ({port1_dst_ip_hex6},"""
_LOCAL_OBJECT = object()
+VNFD_0 = {
+ 'short-name': 'VpeVnf',
+ 'vdu': [
+ {
+ 'routing_table': [
+ {
+ 'network': '152.16.100.20',
+ 'netmask': '255.255.255.0',
+ 'gateway': '152.16.100.20',
+ 'if': 'xe0'
+ },
+ {
+ 'network': '152.16.40.20',
+ 'netmask': '255.255.255.0',
+ 'gateway': '152.16.40.20',
+ 'if': 'xe1'
+ },
+ ],
+ 'description': 'VPE approximation using DPDK',
+ 'name': 'vpevnf-baremetal',
+ 'nd_route_tbl': [
+ {
+ 'network': '0064:ff9b:0:0:0:0:9810:6414',
+ 'netmask': '112',
+ 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+ 'if': 'xe0'
+ },
+ {
+ 'network': '0064:ff9b:0:0:0:0:9810:2814',
+ 'netmask': '112',
+ 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+ 'if': 'xe1'
+ },
+ ],
+ 'id': 'vpevnf-baremetal',
+ 'external-interface': [
+ {
+ 'virtual-interface': {
+ 'dst_mac': '00:00:00:00:00:03',
+ 'vpci': '0000:05:00.0',
+ 'local_ip': '152.16.100.19',
+ 'type': 'PCI-PASSTHROUGH',
+ 'netmask': '255.255.255.0',
+ 'dpdk_port_num': 0,
+ 'bandwidth': '10 Gbps',
+ 'dst_ip': '152.16.100.20',
+ 'local_mac': '00:00:00:00:00:01'
+ },
+ 'vnfd-connection-point-ref': 'xe0',
+ 'name': 'xe0'
+ },
+ {
+ 'virtual-interface': {
+ 'dst_mac': '00:00:00:00:00:04',
+ 'vpci': '0000:05:00.1',
+ 'local_ip': '152.16.40.19',
+ 'type': 'PCI-PASSTHROUGH',
+ 'netmask': '255.255.255.0',
+ 'dpdk_port_num': 1,
+ 'bandwidth': '10 Gbps',
+ 'dst_ip': '152.16.40.20',
+ 'local_mac': '00:00:00:00:00:02'
+ },
+ 'vnfd-connection-point-ref': 'xe1',
+ 'name': 'xe1'
+ },
+ ],
+ },
+ ],
+ 'description': 'Vpe approximation using DPDK',
+ 'mgmt-interface': {
+ 'vdu-id': 'vpevnf-baremetal',
+ 'host': '1.1.1.1',
+ 'password': 'r00t',
+ 'user': 'root',
+ 'ip': '1.1.1.1'
+ },
+ 'benchmark': {
+ 'kpi': [
+ 'packets_in',
+ 'packets_fwd',
+ 'packets_dropped',
+ ],
+ },
+ 'connection-point': [
+ {
+ 'type': 'VPORT',
+ 'name': 'xe0',
+ },
+ {
+ 'type': 'VPORT',
+ 'name': 'xe1',
+ },
+ ],
+ 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
+}
+
+VNFD = {
+ 'vnfd:vnfd-catalog': {
+ 'vnfd': [
+ VNFD_0,
+ ]
+ }
+}
+
class FileAbsPath(object):
def __init__(self, module_file):
@@ -70,17 +175,17 @@ def mock_ssh(mock_ssh_type, spec=None, exec_result=_LOCAL_OBJECT, run_result=_LO
class TestQueueFileWrapper(unittest.TestCase):
def setUp(self):
self.prompt = "pipeline>"
- self.q_in = Queue()
- self.q_out = Queue()
+ self.q_in = multiprocessing.Queue()
+ self.q_out = multiprocessing.Queue()
def test___init__(self):
queue_file_wrapper = \
- QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+ base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
self.assertEqual(queue_file_wrapper.prompt, self.prompt)
def test_clear(self):
queue_file_wrapper = \
- QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+ base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
queue_file_wrapper.bufsize = 5
queue_file_wrapper.write("pipeline>")
queue_file_wrapper.close()
@@ -89,167 +194,45 @@ class TestQueueFileWrapper(unittest.TestCase):
def test_close(self):
queue_file_wrapper = \
- QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+ base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
self.assertEqual(None, queue_file_wrapper.close())
def test_read(self):
queue_file_wrapper = \
- QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+ base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
queue_file_wrapper.q_in.put("pipeline>")
self.assertEqual("pipeline>", queue_file_wrapper.read(20))
def test_write(self):
queue_file_wrapper = \
- QueueFileWrapper(self.q_in, self.q_out, self.prompt)
+ base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
queue_file_wrapper.write("pipeline>")
self.assertIsNotNone(queue_file_wrapper.q_out.empty())
class TestGenericVNF(unittest.TestCase):
- VNFD_0 = {
- 'short-name': 'VpeVnf',
- 'vdu': [
- {
- 'routing_table': [
- {
- 'network': '152.16.100.20',
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'if': 'xe0'
- },
- {
- 'network': '152.16.40.20',
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'if': 'xe1'
- },
- ],
- 'description': 'VPE approximation using DPDK',
- 'name': 'vpevnf-baremetal',
- 'nd_route_tbl': [
- {
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0'
- },
- {
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1'
- },
- ],
- 'id': 'vpevnf-baremetal',
- 'external-interface': [
- {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:03',
- 'vpci': '0000:05:00.0',
- 'local_ip': '152.16.100.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 0,
- 'bandwidth': '10 Gbps',
- 'dst_ip': '152.16.100.20',
- 'local_mac': '00:00:00:00:00:01'
- },
- 'vnfd-connection-point-ref': 'xe0',
- 'name': 'xe0'
- },
- {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:04',
- 'vpci': '0000:05:00.1',
- 'local_ip': '152.16.40.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 1,
- 'bandwidth': '10 Gbps',
- 'dst_ip': '152.16.40.20',
- 'local_mac': '00:00:00:00:00:02'
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1'
- },
- ],
- },
- ],
- 'description': 'Vpe approximation using DPDK',
- 'mgmt-interface': {
- 'vdu-id': 'vpevnf-baremetal',
- 'host': '1.1.1.1',
- 'password': 'r00t',
- 'user': 'root',
- 'ip': '1.1.1.1'
- },
- 'benchmark': {
- 'kpi': [
- 'packets_in',
- 'packets_fwd',
- 'packets_dropped',
- ],
- },
- 'connection-point': [
- {
- 'type': 'VPORT',
- 'name': 'xe0',
- },
- {
- 'type': 'VPORT',
- 'name': 'xe1',
- },
- ],
- 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'
- }
-
- VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- VNFD_0,
- ]
- }
- }
-
- def test___init__(self):
- generic_vnf = GenericVNF('vnf1', self.VNFD_0)
- assert generic_vnf.kpi
-
- def test_collect_kpi(self):
- generic_vnf = GenericVNF('vnf1', self.VNFD_0)
- self.assertRaises(NotImplementedError, generic_vnf.collect_kpi)
-
- def test__get_kpi_definition(self):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- generic_vnf = GenericVNF('vnf1', vnfd)
- kpi = generic_vnf._get_kpi_definition()
- self.assertEqual(kpi, ['packets_in', 'packets_fwd', 'packets_dropped'])
-
- def test_instantiate(self):
- generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- with self.assertRaises(NotImplementedError):
- generic_vnf.instantiate({}, {})
-
- def test_scale(self):
- generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- with self.assertRaises(NotImplementedError):
- generic_vnf.scale()
-
- def test_terminate(self):
- generic_vnf = GenericVNF('vnf1', self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- with self.assertRaises(NotImplementedError):
- generic_vnf.terminate()
+ def test_definition(self):
+ """Make sure that the abstract class cannot be instantiated"""
+ with self.assertRaises(TypeError) as exc:
+ # pylint: disable=abstract-class-instantiated
+ base.GenericVNF('vnf1', VNFD['vnfd:vnfd-catalog']['vnfd'][0])
+ msg = ("Can't instantiate abstract class GenericVNF with abstract "
+ "methods collect_kpi, instantiate, scale, terminate, "
+ "wait_for_instantiate")
+ self.assertEqual(msg, str(exc.exception))
class TestGenericTrafficGen(unittest.TestCase):
def test_definition(self):
"""Make sure that the abstract class cannot be instantiated"""
- vnfd = TestGenericVNF.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ vnfd = VNFD['vnfd:vnfd-catalog']['vnfd'][0]
name = 'vnf1'
with self.assertRaises(TypeError) as exc:
- GenericTrafficGen(name, vnfd)
+ # pylint: disable=abstract-class-instantiated
+ base.GenericTrafficGen(name, vnfd)
msg = ("Can't instantiate abstract class GenericTrafficGen with "
- "abstract methods run_traffic, terminate")
+ "abstract methods collect_kpi, instantiate, run_traffic, "
+ "scale, terminate")
self.assertEqual(msg, str(exc.exception))
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
index 832509ea7..f2ce18fb3 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
@@ -15,14 +15,11 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
+from copy import deepcopy
import os
import unittest
import mock
-from copy import deepcopy
-
from tests.unit import STL_MOCKS
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
@@ -305,14 +302,14 @@ class TestCgnaptApproxVnf(unittest.TestCase):
def setUp(self):
self.scenario_cfg = deepcopy(self.SCENARIO_CFG)
- def test___init__(self, mock_process):
+ def test___init__(self, *args):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
self.assertIsNone(cgnapt_approx_vnf._vnf_process)
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
@mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, mock_time, mock_process):
+ def test_collect_kpi(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -328,7 +325,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
@mock.patch(SSH_HELPER)
- def test_vnf_execute_command(self, ssh, mock_time, mock_process):
+ def test_vnf_execute_command(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -340,7 +337,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
self.assertEqual("", cgnapt_approx_vnf.vnf_execute(cmd))
@mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, mock_process):
+ def test_get_stats(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -362,7 +359,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.cgnapt_vnf.eval")
@mock.patch('yardstick.network_services.vnf_generic.vnf.cgnapt_vnf.open')
@mock.patch(SSH_HELPER)
- def test_run_vcgnapt(self, ssh, mock_hex, mock_eval, mock_open, mock_process):
+ def test_run_vcgnapt(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -377,7 +374,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
@mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh, mock_context, mock_process):
+ def test_instantiate(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -393,15 +390,9 @@ class TestCgnaptApproxVnf(unittest.TestCase):
self.assertIsNone(cgnapt_approx_vnf.instantiate(self.scenario_cfg,
self.context_cfg))
- def test_scale(self, mock_process):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- flavor = ""
- self.assertRaises(NotImplementedError, cgnapt_approx_vnf.scale, flavor)
-
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, mock_time, mock_process):
+ def test_terminate(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -417,7 +408,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test__vnf_up_post(self, ssh, mock_time, mock_process):
+ def test__vnf_up_post(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -433,7 +424,7 @@ class TestCgnaptApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test__vnf_up_post_short(self, ssh, mock_time, mock_process):
+ def test__vnf_up_post_short(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -444,7 +435,3 @@ class TestCgnaptApproxVnf(unittest.TestCase):
cgnapt_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
cgnapt_approx_vnf._resource_collect_stop = mock.Mock()
cgnapt_approx_vnf._vnf_up_post()
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py b/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
index 84eb5dc0d..0ac46c632 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
@@ -15,17 +15,18 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
+from itertools import repeat, chain
import os
import socket
-import unittest
-from itertools import repeat, chain
+import time
+
import mock
+import unittest
from tests.unit import STL_MOCKS
from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
stl_patch.start()
@@ -288,29 +289,32 @@ no data length value
"""
-@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
class TestProxSocketHelper(unittest.TestCase):
+
+ def setUp(self):
+ self.mock_time_sleep = mock.patch.object(time, 'sleep').start()
+
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
- def test___init__(self, mock_socket, mock_time):
+ def test___init__(self, mock_socket):
expected = mock_socket.socket()
prox = ProxSocketHelper()
result = prox._sock
self.assertEqual(result, expected)
- def test_connect(self, mock_time):
+ def test_connect(self):
mock_sock = mock.MagicMock()
prox = ProxSocketHelper(mock_sock)
prox.connect('10.20.30.40', 23456)
self.assertEqual(mock_sock.connect.call_count, 1)
- def test_get_sock(self, mock_time):
+ def test_get_sock(self):
mock_sock = mock.MagicMock()
prox = ProxSocketHelper(mock_sock)
result = prox.get_socket()
self.assertIs(result, mock_sock)
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.select')
- def test_get_data(self, mock_select, mock_time):
+ def test_get_data(self, mock_select):
mock_select.select.side_effect = [[1], [0]]
mock_socket = mock.MagicMock()
mock_recv = mock_socket.recv()
@@ -336,7 +340,7 @@ class TestProxSocketHelper(unittest.TestCase):
self.assertEqual(ret, 'jumped over')
self.assertEqual(len(prox._pkt_dumps), 3)
- def test__parse_socket_data_mixed_data(self, mock_time):
+ def test__parse_socket_data_mixed_data(self):
prox = ProxSocketHelper(mock.MagicMock())
ret = prox._parse_socket_data(PACKET_DUMP_NON_1, False)
self.assertEqual(ret, 'not_a_dump,1,2')
@@ -346,7 +350,7 @@ class TestProxSocketHelper(unittest.TestCase):
self.assertEqual(ret, 'not_a_dump,1,2')
self.assertEqual(len(prox._pkt_dumps), 1)
- def test__parse_socket_data_bad_data(self, mock_time):
+ def test__parse_socket_data_bad_data(self):
prox = ProxSocketHelper(mock.MagicMock())
with self.assertRaises(ValueError):
prox._parse_socket_data(PACKET_DUMP_BAD_1, False)
@@ -357,7 +361,7 @@ class TestProxSocketHelper(unittest.TestCase):
ret = prox._parse_socket_data(PACKET_DUMP_BAD_3, False)
self.assertEqual(ret, 'pktdump,3')
- def test__parse_socket_data_pkt_dump_only(self, mock_time):
+ def test__parse_socket_data_pkt_dump_only(self):
prox = ProxSocketHelper(mock.MagicMock())
ret = prox._parse_socket_data('', True)
self.assertFalse(ret)
@@ -368,20 +372,20 @@ class TestProxSocketHelper(unittest.TestCase):
ret = prox._parse_socket_data(PACKET_DUMP_2, True)
self.assertTrue(ret)
- def test_put_command(self, mock_time):
+ def test_put_command(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.put_command("data")
mock_socket.sendall.assert_called_once()
- def test_put_command_socket_error(self, mock_time):
+ def test_put_command_socket_error(self):
mock_socket = mock.MagicMock()
mock_socket.sendall.side_effect = OSError
prox = ProxSocketHelper(mock_socket)
prox.put_command("data")
mock_socket.sendall.assert_called_once()
- def test_get_packet_dump(self, mock_time):
+ def test_get_packet_dump(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox._pkt_dumps = []
@@ -391,67 +395,67 @@ class TestProxSocketHelper(unittest.TestCase):
self.assertEqual(prox.get_packet_dump(), 234)
self.assertEqual(prox._pkt_dumps, [])
- def test_stop_all_reset(self, mock_time):
+ def test_stop_all_reset(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.stop_all_reset()
mock_socket.sendall.assert_called()
- def test_stop_all(self, mock_time):
+ def test_stop_all(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.stop_all()
mock_socket.sendall.assert_called()
- def test_stop(self, mock_time):
+ def test_stop(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.stop([3, 4, 5], 16)
mock_socket.sendall.assert_called()
- def test_start_all(self, mock_time):
+ def test_start_all(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.start_all()
mock_socket.sendall.assert_called()
- def test_start(self, mock_time):
+ def test_start(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.start([3, 4, 5])
mock_socket.sendall.assert_called()
- def test_reset_stats(self, mock_time):
+ def test_reset_stats(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.reset_stats()
mock_socket.sendall.assert_called()
- def test_set_pkt_size(self, mock_time):
+ def test_set_pkt_size(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.set_pkt_size([3, 4, 5], 1024)
self.assertEqual(mock_socket.sendall.call_count, 3)
- def test_set_value(self, mock_time):
+ def test_set_value(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.set_value([3, 4, 5], 10, 20, 30)
self.assertEqual(mock_socket.sendall.call_count, 3)
- def test_reset_values(self, mock_time):
+ def test_reset_values(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.reset_values([3, 4, 5])
self.assertEqual(mock_socket.sendall.call_count, 3)
- def test_set_speed(self, mock_time):
+ def test_set_speed(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.set_speed([3, 4, 5], 1000)
self.assertEqual(mock_socket.sendall.call_count, 3)
- def test_slope_speed(self, mock_time):
+ def test_slope_speed(self):
core_data = [
{
'cores': [3, 4, 5],
@@ -473,13 +477,13 @@ class TestProxSocketHelper(unittest.TestCase):
prox.slope_speed(core_data, 5, 5)
self.assertEqual(set_speed.call_count, 10)
- def test_set_pps(self, mock_time):
+ def test_set_pps(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.set_pps([3, 4, 5], 1000, 512)
self.assertEqual(mock_socket.sendall.call_count, 3)
- def test_lat_stats(self, mock_time):
+ def test_lat_stats(self):
latency_output = [
'1, 2 , 3', # has white space
'4,5', # too short
@@ -510,7 +514,7 @@ class TestProxSocketHelper(unittest.TestCase):
self.assertEqual(mock_socket.sendall.call_count, 5)
self.assertEqual(result, expected)
- def test_get_all_tot_stats_error(self, mock_time):
+ def test_get_all_tot_stats_error(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.get_data = mock.MagicMock(return_value='3,4,5')
@@ -518,7 +522,7 @@ class TestProxSocketHelper(unittest.TestCase):
result = prox.get_all_tot_stats()
self.assertEqual(result, expected)
- def test_get_all_tot_stats(self, mock_time):
+ def test_get_all_tot_stats(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.get_data = mock.MagicMock(return_value='3,4,5,6')
@@ -526,7 +530,7 @@ class TestProxSocketHelper(unittest.TestCase):
result = prox.get_all_tot_stats()
self.assertEqual(result, expected)
- def test_hz(self, mock_time):
+ def test_hz(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.get_data = mock.MagicMock(return_value='3,4,5,6')
@@ -534,7 +538,7 @@ class TestProxSocketHelper(unittest.TestCase):
result = prox.hz()
self.assertEqual(result, expected)
- def test_core_stats(self, mock_time):
+ def test_core_stats(self):
core_stats = [
'3,4,5,6',
'7,8,9,10,NaN',
@@ -548,7 +552,7 @@ class TestProxSocketHelper(unittest.TestCase):
result = prox.core_stats([3, 4, 5], 16)
self.assertEqual(result, expected)
- def test_port_stats(self, mock_time):
+ def test_port_stats(self):
port_stats = [
','.join(str(n) for n in range(3, 15)),
','.join(str(n) for n in range(8, 32, 2)),
@@ -562,7 +566,7 @@ class TestProxSocketHelper(unittest.TestCase):
result = prox.port_stats([3, 4, 5])
self.assertEqual(result, expected)
- def test_measure_tot_stats(self, mock_time):
+ def test_measure_tot_stats(self):
start_tot = 3, 4, 5, 6
end_tot = 7, 9, 11, 13
delta_tot = 4, 5, 6, 7
@@ -584,7 +588,7 @@ class TestProxSocketHelper(unittest.TestCase):
pass
self.assertEqual(result, expected)
- def test_tot_stats(self, mock_time):
+ def test_tot_stats(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.get_data = mock.MagicMock(return_value='3,4,5,6')
@@ -592,7 +596,7 @@ class TestProxSocketHelper(unittest.TestCase):
result = prox.tot_stats()
self.assertEqual(result, expected)
- def test_tot_ierrors(self, mock_time):
+ def test_tot_ierrors(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.get_data = mock.MagicMock(return_value='3,4,5,6')
@@ -600,25 +604,25 @@ class TestProxSocketHelper(unittest.TestCase):
result = prox.tot_ierrors()
self.assertEqual(result, expected)
- def test_set_count(self, mock_time):
+ def test_set_count(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.set_count(432, [3, 4, 5])
self.assertEqual(mock_socket.sendall.call_count, 3)
- def test_dump_rx(self, mock_time):
+ def test_dump_rx(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.dump_rx(3, 5, 8)
self.assertEqual(mock_socket.sendall.call_count, 1)
- def test_quit(self, mock_time):
+ def test_quit(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.quit()
mock_socket.sendall.assert_called()
- def test_force_quit(self, mock_time):
+ def test_force_quit(self):
mock_socket = mock.MagicMock()
prox = ProxSocketHelper(mock_socket)
prox.force_quit()
@@ -1062,8 +1066,7 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
self.assertEqual(helper._prox_config_data, '44')
self.assertEqual(helper.remote_path, '55')
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
- def test_build_config(self, mock_find_path):
+ def test_build_config(self):
vnf1 = {
'prox_args': {'-f': ""},
'prox_path': '/opt/nsb_bin/prox',
@@ -1075,10 +1078,9 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
],
}
- mock_find_path.side_effect = ['1', '2']
- vnfd_helper = mock.MagicMock()
- ssh_helper = mock.MagicMock()
- ssh_helper.provision_tool.return_value = "/opt/nsb_bin/prox"
+ vnfd_helper = mock.Mock()
+ ssh_helper = mock.Mock()
+ ssh_helper.join_bin_path.return_value = '/opt/nsb_bin/prox'
scenario_helper = ScenarioHelper('vnf1')
scenario_helper.scenario_cfg = {
'task_path': 'a/b',
@@ -1087,12 +1089,16 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
},
}
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.remote_path = "/tmp/prox.cfg"
- expected = "sudo bash -c 'cd /opt/nsb_bin; /opt/nsb_bin/prox -o cli -f -f /tmp/prox.cfg '"
- with mock.patch.object(helper, "build_config_file") as mock_build_config:
+ expected = ("sudo bash -c 'cd /opt/nsb_bin; /opt/nsb_bin/prox -o cli "
+ "-f -f /tmp/prox.cfg '")
+
+ helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper,
+ scenario_helper)
+ with mock.patch.object(helper, 'build_config_file') as mock_cfg_file:
+ helper.remote_path = '/tmp/prox.cfg'
prox_cmd = helper.build_config()
self.assertEqual(prox_cmd, expected)
+ mock_cfg_file.assert_called_once()
def test__insert_additional_file(self):
vnfd_helper = mock.MagicMock()
@@ -1256,16 +1262,6 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
result = helper.put_string_to_file('my long string', 'a/b')
self.assertEqual(result, expected)
- def test__build_pipeline_kwarags(self):
- vnfd_helper = mock.MagicMock()
- ssh_helper = mock.MagicMock()
- ssh_helper.provision_tool.return_value = "/tmp/nosuch"
- scenario_helper = mock.MagicMock()
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper._build_pipeline_kwargs()
- self.assertEqual(helper.pipeline_kwargs, {'tool_path': '/tmp/nosuch', 'tool_dir': '/tmp'})
-
def test_copy_to_target(self):
vnfd_helper = mock.MagicMock()
vnfd_helper.interfaces = []
@@ -1416,7 +1412,7 @@ class TestProxResourceHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.RETRY_INTERVAL', 0)
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ProxSocketHelper')
- def test_sut(self, mock_socket_helper):
+ def test_sut(self, *args):
helper = ProxResourceHelper(mock.MagicMock())
self.assertIsNone(helper.client)
result = helper.sut
@@ -1439,9 +1435,9 @@ class TestProxResourceHelper(unittest.TestCase):
helper = ProxResourceHelper(mock.MagicMock())
helper.resource = resource = mock.MagicMock()
- resource.check_if_sa_running.return_value = 0, '1234'
+ resource.check_if_system_agent_running.return_value = 0, '1234'
resource.amqp_collect_nfvi_kpi.return_value = 543
- resource.check_if_sa_running.return_value = (0, None)
+ resource.check_if_system_agent_running.return_value = (0, None)
expected = {'core': 543}
result = helper.collect_collectd_kpi()
@@ -1453,9 +1449,9 @@ class TestProxResourceHelper(unittest.TestCase):
helper._result = {'z': 123}
helper.resource = resource = mock.MagicMock()
- resource.check_if_sa_running.return_value = 0, '1234'
+ resource.check_if_system_agent_running.return_value = 0, '1234'
resource.amqp_collect_nfvi_kpi.return_value = 543
- resource.check_if_sa_running.return_value = (0, None)
+ resource.check_if_system_agent_running.return_value = (0, None)
queue.empty.return_value = False
queue.get.return_value = {'a': 789}
@@ -1466,7 +1462,7 @@ class TestProxResourceHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ProxSocketHelper')
- def test__connect(self, mock_socket_helper_type, mock_time):
+ def test__connect(self, mock_socket_helper_type, *args):
client = mock_socket_helper_type()
client.connect.side_effect = chain(repeat(socket.error, 5), [None])
@@ -1869,7 +1865,7 @@ class TestProxProfileHelper(unittest.TestCase):
self.assertIs(result, expected)
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
- def test_traffic_context(self, mock_time):
+ def test_traffic_context(self, *args):
setup_helper = mock.MagicMock()
setup_helper.vnfd_helper.interfaces = []
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
index e29e8ddcd..769279066 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
@@ -15,8 +15,6 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
import errno
import os
import unittest
@@ -316,13 +314,13 @@ class TestProxApproxVnf(unittest.TestCase):
}
@mock.patch(SSH_HELPER)
- def test___init__(self, ssh, mock_time):
+ def test___init__(self, ssh, *args):
mock_ssh(ssh)
prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
self.assertIsNone(prox_approx_vnf._vnf_process)
@mock.patch(SSH_HELPER)
- def test_collect_kpi_no_client(self, ssh, mock_time):
+ def test_collect_kpi_no_client(self, ssh, *args):
mock_ssh(ssh)
prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
@@ -337,7 +335,7 @@ class TestProxApproxVnf(unittest.TestCase):
self.assertEqual(result, expected)
@mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, mock_time):
+ def test_collect_kpi(self, ssh, *args):
mock_ssh(ssh)
resource_helper = mock.MagicMock()
@@ -357,7 +355,7 @@ class TestProxApproxVnf(unittest.TestCase):
self.assertEqual(result, expected)
@mock.patch(SSH_HELPER)
- def test_collect_kpi_error(self, ssh, mock_time):
+ def test_collect_kpi_error(self, ssh, *args):
mock_ssh(ssh)
resource_helper = mock.MagicMock()
@@ -370,31 +368,13 @@ class TestProxApproxVnf(unittest.TestCase):
with self.assertRaises(RuntimeError):
prox_approx_vnf.collect_kpi()
- def _get_file_abspath(self, filename, mock_time):
+ def _get_file_abspath(self, filename, *args):
curr_path = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(curr_path, filename)
return file_path
- @mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', create=True)
- @mock.patch('yardstick.network_services.helpers.iniparser.open', create=True)
- @mock.patch(SSH_HELPER)
- def test_run_prox(self, ssh, *_):
- mock_ssh(ssh)
-
- prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
- prox_approx_vnf.scenario_helper.scenario_cfg = self.SCENARIO_CFG
- prox_approx_vnf.ssh_helper.provision_tool.return_value = '/tool_path12/tool_file34'
- prox_approx_vnf.setup_helper.remote_path = 'configs/file56.cfg'
-
- expected = "sudo bash -c 'cd /tool_path12; " \
- "/tool_path12/tool_file34 -o cli -t -f /tmp/l3-swap-2.cfg '"
-
- prox_approx_vnf._run()
- result = prox_approx_vnf.ssh_helper.run.call_args[0][0]
- self.assertEqual(result, expected)
-
@mock.patch(SSH_HELPER)
- def bad_test_instantiate(self, ssh, mock_time):
+ def bad_test_instantiate(self, *args):
prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
prox_approx_vnf.scenario_helper = mock.MagicMock()
prox_approx_vnf.setup_helper = mock.MagicMock()
@@ -403,7 +383,7 @@ class TestProxApproxVnf(unittest.TestCase):
prox_approx_vnf.setup_helper.build_config.assert_called_once()
@mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_panic(self, ssh, mock_time):
+ def test_wait_for_instantiate_panic(self, ssh, *args):
mock_ssh(ssh, exec_result=(1, "", ""))
prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
prox_approx_vnf._vnf_process = mock.MagicMock(**{"is_alive.return_value": True})
@@ -413,16 +393,9 @@ class TestProxApproxVnf(unittest.TestCase):
with self.assertRaises(RuntimeError):
prox_approx_vnf.wait_for_instantiate()
- @mock.patch(SSH_HELPER)
- def test_scale(self, ssh, mock_time):
- mock_ssh(ssh)
- prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
- with self.assertRaises(NotImplementedError):
- prox_approx_vnf.scale()
-
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
@mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, mock_socket, mock_time):
+ def test_terminate(self, ssh, *args):
mock_ssh(ssh)
prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
prox_approx_vnf._vnf_process = mock.MagicMock()
@@ -434,7 +407,7 @@ class TestProxApproxVnf(unittest.TestCase):
self.assertIsNone(prox_approx_vnf.terminate())
@mock.patch(SSH_HELPER)
- def test__vnf_up_post(self, ssh, mock_time):
+ def test__vnf_up_post(self, ssh, *args):
mock_ssh(ssh)
prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
prox_approx_vnf.resource_helper = resource_helper = mock.Mock()
@@ -443,7 +416,7 @@ class TestProxApproxVnf(unittest.TestCase):
self.assertEqual(resource_helper.up_post.call_count, 1)
@mock.patch(SSH_HELPER)
- def test_vnf_execute_oserror(self, ssh, mock_time):
+ def test_vnf_execute_oserror(self, ssh, *args):
mock_ssh(ssh)
prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
prox_approx_vnf.resource_helper = resource_helper = mock.Mock()
@@ -457,6 +430,3 @@ class TestProxApproxVnf(unittest.TestCase):
resource_helper.execute.side_effect = OSError(errno.EADDRINUSE, "")
with self.assertRaises(OSError):
prox_approx_vnf.vnf_execute("", _ignore_errors=True)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_router_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_router_vnf.py
new file mode 100644
index 000000000..9ed6fd5b3
--- /dev/null
+++ b/tests/unit/network_services/vnf_generic/vnf/test_router_vnf.py
@@ -0,0 +1,267 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+
+import unittest
+import mock
+
+from tests.unit import STL_MOCKS
+from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
+
+
+STLClient = mock.MagicMock()
+stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
+stl_patch.start()
+
+if stl_patch:
+ from yardstick.network_services.vnf_generic.vnf.router_vnf import RouterVNF
+
+
+TEST_FILE_YAML = 'nsb_test_case.yaml'
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+
+
+name = 'vnf__1'
+
+
+class TestRouterVNF(unittest.TestCase):
+ VNFD = {'vnfd:vnfd-catalog':
+ {'vnfd':
+ [{'short-name': 'RouterVNF',
+ 'vdu':
+ [{'routing_table': [],
+ 'description': 'RouterVNF',
+ 'name': 'router-baremetal',
+ 'nd_route_tbl': [],
+ 'id': 'router-baremetal',
+ 'external-interface':
+ [{'virtual-interface':
+ {'dst_mac': '00:00:00:00:00:04',
+ 'vpci': '0000:05:00.0',
+ 'local_ip': '152.16.100.19',
+ 'type': 'PCI-PASSTHROUGH',
+ 'netmask': '255.255.255.0',
+ 'dpdk_port_num': 0,
+ 'bandwidth': '10 Gbps',
+ 'driver': "i40e",
+ 'dst_ip': '152.16.100.20',
+ 'local_iface_name': 'xe0',
+ 'local_mac': '00:00:00:00:00:02'},
+ 'vnfd-connection-point-ref': 'xe0',
+ 'name': 'xe0'},
+ {'virtual-interface':
+ {'dst_mac': '00:00:00:00:00:03',
+ 'vpci': '0000:05:00.1',
+ 'local_ip': '152.16.40.19',
+ 'type': 'PCI-PASSTHROUGH',
+ 'driver': "i40e",
+ 'netmask': '255.255.255.0',
+ 'dpdk_port_num': 1,
+ 'bandwidth': '10 Gbps',
+ 'dst_ip': '152.16.40.20',
+ 'local_iface_name': 'xe1',
+ 'local_mac': '00:00:00:00:00:01'},
+ 'vnfd-connection-point-ref': 'xe1',
+ 'name': 'xe1'}]}],
+ 'description': 'RouterVNF',
+ 'mgmt-interface':
+ {'vdu-id': 'router-baremetal',
+ 'host': '1.2.1.1',
+ 'password': 'r00t',
+ 'user': 'root',
+ 'ip': '1.2.1.1'},
+ 'benchmark':
+ {'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']},
+ 'connection-point': [{'type': 'VPORT', 'name': 'xe0'},
+ {'type': 'VPORT', 'name': 'xe1'}],
+ 'id': 'RouterVNF', 'name': 'VPEVnfSsh'}]}}
+
+ scenario_cfg = {'nodes': {'cpt__0': 'compute_0.compute_nodes',
+ 'tg__0': 'trafficgen_1.baremetal',
+ 'vnf__0': 'vnf.yardstick'},
+ 'options': {'flow': {'count': 128000,
+ 'dst_ip': ['10.0.3.26-10.0.3.105'],
+ 'dst_port': ['2001-2004'],
+ 'src_ip': ['10.0.2.26-10.0.2.105'],
+ 'src_port': ['1234-1238']},
+ 'framesize': {'downlink': {'1024B': 100},
+ 'uplink': {'1024B': 100}},
+ 'rfc2544': {'allowed_drop_rate': '0.0001 - 0.1'},
+ 'tg__0': {'queues_per_port': 7},
+ 'traffic_type': 4,
+ 'vnf__0': {'nfvi_enable': True}},
+ 'runner': {'interval': 35,
+ 'iterations': 10,
+ 'type': 'Iteration'},
+ 'topology': 'router-tg-topology.yaml',
+ 'traffic_profile': '../../traffic_profiles/ipv4_throughput.yaml',
+ 'type': 'NSPerf'}
+
+ context_cfg = {'nodes': {'tg__1':
+ {'member-vnf-index': '1',
+ 'role': 'TrafficGen',
+ 'name': 'trafficgen_1.yardstick',
+ 'vnfd-id-ref': 'tg__1',
+ 'ip': '1.2.1.1',
+ 'interfaces':
+ {'xe0': {'local_iface_name': 'ens785f0',
+ 'vld_id': RouterVNF.UPLINK,
+ 'netmask': '255.255.255.0',
+ 'local_ip': '152.16.100.20',
+ 'dst_mac': '00:00:00:00:00:02',
+ 'local_mac': '00:00:00:00:00:04',
+ 'dst_ip': '152.16.100.19',
+ 'driver': 'i40e',
+ 'vpci': '0000:05:00.0',
+ 'dpdk_port_num': 0},
+ 'xe1': {'local_iface_name': 'ens785f1',
+ 'netmask': '255.255.255.0',
+ 'local_ip': '152.16.100.21',
+ 'local_mac': '00:00:00:00:00:01',
+ 'driver': 'i40e',
+ 'vpci': '0000:05:00.1',
+ 'dpdk_port_num': 1}},
+ 'password': 'r00t',
+ 'VNF model': 'tg_rfc2544_tpl.yaml',
+ 'user': 'root'},
+ 'vnf__1':
+ {'name': 'vnf.yardstick',
+ 'vnfd-id-ref': 'vnf__1',
+ 'ip': '1.2.1.1',
+ 'interfaces':
+ {'xe0': {'local_iface_name': 'ens786f0',
+ 'vld_id': RouterVNF.UPLINK,
+ 'netmask': '255.255.255.0',
+ 'local_ip': '152.16.100.19',
+ 'dst_mac': '00:00:00:00:00:04',
+ 'local_mac': '00:00:00:00:00:02',
+ 'dst_ip': '152.16.100.20',
+ 'driver': 'i40e',
+ 'vpci': '0000:05:00.0',
+ 'dpdk_port_num': 0},
+ 'xe1': {'local_iface_name': 'ens786f1',
+ 'vld_id': RouterVNF.DOWNLINK,
+ 'netmask': '255.255.255.0',
+ 'local_ip': '152.16.40.19',
+ 'dst_mac': '00:00:00:00:00:03',
+ 'local_mac': '00:00:00:00:00:01',
+ 'dst_ip': '152.16.40.20',
+ 'driver': 'i40e',
+ 'vpci': '0000:05:00.1',
+ 'dpdk_port_num': 1}},
+ 'routing_table': [],
+ 'member-vnf-index': '2',
+ 'host': '1.2.1.1',
+ 'role': 'vnf',
+ 'user': 'root',
+ 'nd_route_tbl': [],
+ 'password': 'r00t',
+ 'VNF model': 'router_vnf.yaml'}}}
+
+ IP_SHOW_STATS_OUTPUT = """\
+2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+ link/ether d4:c9:ef:52:7c:4d brd ff:ff:ff:ff:ff:ff
+ RX: bytes packets errors dropped overrun mcast
+ 2781945429 3202213 0 0 0 30131
+ RX errors: length crc frame fifo missed
+ 0 0 0 0 0
+ TX: bytes packets errors dropped carrier collsns
+ 646221183 2145799 0 0 0 0
+ TX errors: aborted fifo window heartbeat
+ 0 0 0 0
+"""
+ STATS = {
+ 'RX:bytes': '2781945429',
+ 'RX:dropped': '0',
+ 'RX:errors': '0',
+ 'RX:mcast': '30131',
+ 'RX:overrun': '0',
+ 'RX:packets': '3202213',
+ 'RX errors:length': '0',
+ 'RX errors:crc': '0',
+ 'RX errors:frame': '0',
+ 'RX errors:fifo': '0',
+ 'RX errors:missed': '0',
+ 'TX:bytes': '646221183',
+ 'TX:carrier': '0',
+ 'TX:collsns': '0',
+ 'TX:dropped': '0',
+ 'TX:errors': '0',
+ 'TX:packets': '2145799',
+ 'TX errors:aborted': '0',
+ 'TX errors:fifo': '0',
+ 'TX errors:window': '0',
+ 'TX errors:heartbeat': '0',
+ }
+
+ def test___init__(self):
+ vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ router_vnf = RouterVNF(name, vnfd)
+ self.assertIsNone(router_vnf._vnf_process)
+
+ def test_get_stats(self):
+ stats = RouterVNF.get_stats(self.IP_SHOW_STATS_OUTPUT)
+ self.assertDictEqual(stats, self.STATS)
+
+ @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
+ @mock.patch(SSH_HELPER)
+ def test_collect_kpi(self, ssh, _):
+ m = mock_ssh(ssh)
+
+ vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ router_vnf = RouterVNF(name, vnfd)
+ router_vnf.ssh_helper = m
+ result = {'packets_dropped': 0, 'packets_fwd': 0, 'packets_in': 0, 'link_stats': {}}
+ self.assertEqual(result, router_vnf.collect_kpi())
+
+ @mock.patch(SSH_HELPER)
+ def test_run_router(self, ssh):
+ mock_ssh(ssh)
+
+ vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ router_vnf = RouterVNF(name, vnfd)
+ router_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
+ router_vnf._run()
+ router_vnf.ssh_helper.drop_connection.assert_called_once()
+
+ @mock.patch("yardstick.network_services.vnf_generic.vnf.router_vnf.Context")
+ @mock.patch(SSH_HELPER)
+ def test_instantiate(self, ssh, _):
+ mock_ssh(ssh)
+
+ vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ router_vnf = RouterVNF(name, vnfd)
+ router_vnf.WAIT_TIME = 0
+ router_vnf.INTERFACE_WAIT = 0
+ self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
+ self.assertIsNone(router_vnf.instantiate(self.scenario_cfg,
+ self.context_cfg))
+
+ @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
+ @mock.patch(SSH_HELPER)
+ def test_terminate(self, ssh, _):
+ mock_ssh(ssh)
+
+ vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ router_vnf = RouterVNF(name, vnfd)
+ router_vnf._vnf_process = mock.MagicMock()
+ router_vnf._vnf_process.terminate = mock.Mock()
+ self.assertEqual(None, router_vnf.terminate())
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
index 85b10c5a9..af941c04f 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
@@ -15,10 +15,6 @@
# limitations under the License.
#
-# Unittest for yardstick.network_services.vnf_generic.vnf.sample_vnf
-
-from __future__ import absolute_import
-
import unittest
import mock
from copy import deepcopy
@@ -26,8 +22,8 @@ from copy import deepcopy
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
from tests.unit import STL_MOCKS
from yardstick.benchmark.contexts.base import Context
+from yardstick.common import exceptions as y_exceptions
from yardstick.network_services.nfvi.resource import ResourceProfile
-from yardstick.network_services.traffic_profile.base import TrafficProfile
from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
@@ -571,7 +567,7 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.open')
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.find_relative_file')
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.MultiPortConfig')
- def test_build_config(self, mock_multi_port_config_class, mock_find, _):
+ def test_build_config(self, mock_multi_port_config_class, mock_find, *args):
mock_multi_port_config = mock_multi_port_config_class()
vnfd_helper = VnfdHelper(self.VNFD_0)
ssh_helper = mock.Mock()
@@ -610,8 +606,8 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
@mock.patch('yardstick.ssh.SSH')
- def test_setup_vnf_environment(self, _, mock_time):
- def execute(cmd, *args, **kwargs):
+ def test_setup_vnf_environment(self, *args):
+ def execute(cmd):
if cmd.startswith('which '):
return exec_failure
return exec_success
@@ -643,7 +639,7 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
@mock.patch('yardstick.ssh.SSH')
def test__setup_dpdk_short(self, _):
- def execute_side(cmd, *args, **kwargs):
+ def execute_side(cmd):
if 'joined_path' in cmd:
return 0, 'output', ''
return 1, 'bad output', 'error output'
@@ -691,7 +687,7 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
self.assertEqual(dpdk_setup_helper.socket, 1)
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
- def test__detect_and_bind_drivers(self, mock_time):
+ def test__detect_and_bind_drivers(self, *args):
vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
ssh_helper = mock.Mock()
# ssh_helper.execute = mock.Mock(return_value = (0, 'text', ''))
@@ -708,8 +704,8 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
intf_0 = vnfd_helper.vdu[0]['external-interface'][0]['virtual-interface']
intf_1 = vnfd_helper.vdu[0]['external-interface'][1]['virtual-interface']
- self.assertEquals(0, intf_0['dpdk_port_num'])
- self.assertEquals(1, intf_1['dpdk_port_num'])
+ self.assertEqual(0, intf_0['dpdk_port_num'])
+ self.assertEqual(1, intf_1['dpdk_port_num'])
def test_tear_down(self):
vnfd_helper = VnfdHelper(self.VNFD_0)
@@ -1002,7 +998,7 @@ class TestClientResourceHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLError',
new_callable=lambda: MockError)
- def test_get_stats_not_connected(self, mock_state_error, mock_logger):
+ def test_get_stats_not_connected(self, mock_state_error, *args):
vnfd_helper = VnfdHelper(self.VNFD_0)
ssh_helper = mock.Mock()
scenario_helper = mock.Mock()
@@ -1221,7 +1217,7 @@ class TestClientResourceHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.LOG')
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.STLError',
new_callable=lambda: MockError)
- def test__connect_with_failures(self, mock_error, mock_logger, mock_time):
+ def test__connect_with_failures(self, mock_error, *args):
vnfd_helper = VnfdHelper(self.VNFD_0)
ssh_helper = mock.Mock()
scenario_helper = mock.Mock()
@@ -1393,7 +1389,7 @@ class TestSampleVNFDeployHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
@mock.patch('subprocess.check_output')
- def test_deploy_vnfs_disabled(self, mock_check_output, mock_time):
+ def test_deploy_vnfs_disabled(self, *args):
vnfd_helper = mock.Mock()
ssh_helper = mock.Mock()
ssh_helper.join_bin_path.return_value = 'joined_path'
@@ -1408,7 +1404,7 @@ class TestSampleVNFDeployHelper(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
@mock.patch('subprocess.check_output')
- def test_deploy_vnfs(self, mock_check_output, mock_time):
+ def test_deploy_vnfs(self, *args):
vnfd_helper = mock.Mock()
ssh_helper = mock.Mock()
ssh_helper.join_bin_path.return_value = 'joined_path'
@@ -1422,7 +1418,7 @@ class TestSampleVNFDeployHelper(unittest.TestCase):
self.assertEqual(ssh_helper.put.call_count, 1)
@mock.patch('subprocess.check_output')
- def test_deploy_vnfs_early_success(self, mock_check_output):
+ def test_deploy_vnfs_early_success(self, *args):
vnfd_helper = mock.Mock()
ssh_helper = mock.Mock()
ssh_helper.join_bin_path.return_value = 'joined_path'
@@ -1700,7 +1696,7 @@ class TestSampleVnf(unittest.TestCase):
self.assertEqual(result, expected)
@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.Process')
- def test__start_vnf(self, mock_process_type):
+ def test__start_vnf(self, *args):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
sample_vnf = SampleVNF('vnf1', vnfd)
sample_vnf._run = mock.Mock()
@@ -1754,7 +1750,7 @@ class TestSampleVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch("yardstick.ssh.SSH")
- def test_wait_for_instantiate_empty_queue(self, ssh, mock_time):
+ def test_wait_for_instantiate_empty_queue(self, ssh, *args):
mock_ssh(ssh, exec_result=(1, "", ""))
queue_size_list = [
@@ -1798,7 +1794,7 @@ class TestSampleVnf(unittest.TestCase):
self.assertIsNotNone(sample_vnf.my_ports)
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
- def test_vnf_execute_with_queue_data(self, mock_time):
+ def test_vnf_execute_with_queue_data(self, *args):
queue_size_list = [
1,
1,
@@ -1843,7 +1839,7 @@ class TestSampleVnf(unittest.TestCase):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
sample_vnf = SampleVNF('vnf1', vnfd)
sample_vnf.APP_NAME = 'sample1'
- sample_vnf.COLLECT_KPI = '\s(\d+)\D*(\d+)\D*(\d+)'
+ sample_vnf.COLLECT_KPI = r'\s(\d+)\D*(\d+)\D*(\d+)'
sample_vnf.COLLECT_MAP = {
'k1': 3,
'k2': 1,
@@ -1866,7 +1862,7 @@ class TestSampleVnf(unittest.TestCase):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
sample_vnf = SampleVNF('vnf1', vnfd)
sample_vnf.APP_NAME = 'sample1'
- sample_vnf.COLLECT_KPI = '\s(\d+)\D*(\d+)\D*(\d+)'
+ sample_vnf.COLLECT_KPI = r'\s(\d+)\D*(\d+)\D*(\d+)'
sample_vnf.get_stats = mock.Mock(return_value='')
expected = {
@@ -1877,6 +1873,29 @@ class TestSampleVnf(unittest.TestCase):
result = sample_vnf.collect_kpi()
self.assertDictEqual(result, expected)
+ def test_scale(self):
+ vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ sample_vnf = SampleVNF('vnf1', vnfd)
+ self.assertRaises(y_exceptions.FunctionNotImplemented,
+ sample_vnf.scale)
+
+ def test__run(self):
+ test_cmd = 'test cmd'
+ run_kwargs = {'arg1': 'val1', 'arg2': 'val2'}
+ vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+ sample_vnf = SampleVNF('vnf1', vnfd)
+ sample_vnf.ssh_helper = mock.Mock()
+ sample_vnf.setup_helper = mock.Mock()
+ with mock.patch.object(sample_vnf, '_build_config',
+ return_value=test_cmd), \
+ mock.patch.object(sample_vnf, '_build_run_kwargs'):
+ sample_vnf.run_kwargs = run_kwargs
+ sample_vnf._run()
+ sample_vnf.ssh_helper.drop_connection.assert_called_once()
+ sample_vnf.ssh_helper.run.assert_called_once_with(test_cmd,
+ **run_kwargs)
+ sample_vnf.setup_helper.kill_vnf.assert_called_once()
+
class TestSampleVNFTrafficGen(unittest.TestCase):
@@ -2051,3 +2070,8 @@ class TestSampleVNFTrafficGen(unittest.TestCase):
self.assertEqual(sample_vnf_tg._wait_for_process(), 234)
mock_proc.is_alive.assert_has_calls([mock.call(), mock.call()])
mock_status.assert_has_calls([mock.call(), mock.call()])
+
+ def test_scale(self):
+ sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
+ self.assertRaises(y_exceptions.FunctionNotImplemented,
+ sample_vnf_tg.scale)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
index c1b2d27eb..fb26f20b5 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
@@ -80,7 +80,7 @@ class TestPingParser(unittest.TestCase):
ping_parser = PingParser(q_out)
ping_parser.write(sample_out)
ping_parser.clear()
- self.assertEqual(True, q_out.empty())
+ self.assertTrue(q_out.empty())
def test_close(self):
q_out = Queue()
@@ -228,7 +228,7 @@ class TestPingTrafficGen(unittest.TestCase):
CMD_KWARGS = {
'target_ip': u'152.16.100.20',
'local_ip': u'152.16.100.19',
- 'local_if_name': u'xe0',
+ 'local_if_name': u'xe0_fake',
}
@mock.patch("yardstick.ssh.SSH")
@@ -238,7 +238,7 @@ class TestPingTrafficGen(unittest.TestCase):
self.assertIsInstance(ping_traffic_gen.setup_helper, PingSetupEnvHelper)
self.assertIsInstance(ping_traffic_gen.resource_helper, PingResourceHelper)
- self.assertEquals(ping_traffic_gen._result, {})
+ self.assertEqual(ping_traffic_gen._result, {})
@mock.patch("yardstick.ssh.SSH")
def test__bind_device_kernel_with_failure(self, ssh):
@@ -270,7 +270,7 @@ class TestPingTrafficGen(unittest.TestCase):
mock_ssh(ssh, spec=VnfSshHelper, exec_result=(0, "success", ""))
ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
ping_traffic_gen.setup_helper.ssh_helper = mock.MagicMock(
- **{"execute.return_value": (0, "success", "")})
+ **{"execute.return_value": (0, "xe0_fake", "")})
self.assertIsInstance(ping_traffic_gen.ssh_helper, mock.Mock)
self.assertEqual(ping_traffic_gen._result, {})
@@ -278,24 +278,15 @@ class TestPingTrafficGen(unittest.TestCase):
self.assertEqual(
ping_traffic_gen.vnfd_helper.interfaces[0]['virtual-interface']['local_iface_name'],
- 'success')
+ 'xe0_fake')
self.assertEqual(self.CMD_KWARGS, ping_traffic_gen.resource_helper.cmd_kwargs)
self.assertIsNotNone(ping_traffic_gen._result)
- @mock.patch("yardstick.ssh.SSH")
- def test_listen_traffic(self, ssh):
+ def test_listen_traffic(self):
ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
self.assertIsNone(ping_traffic_gen.listen_traffic({}))
@mock.patch("yardstick.ssh.SSH")
- def test_scale_negative(self, ssh):
- ssh.from_node.return_value.execute.return_value = 0, "success", ""
- ssh.from_node.return_value.run.return_value = 0, "success", ""
-
- ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
- ping_traffic_gen.scale()
-
- @mock.patch("yardstick.ssh.SSH")
def test_terminate(self, ssh):
ssh.from_node.return_value.execute.return_value = 0, "success", ""
ssh.from_node.return_value.run.return_value = 0, "success", ""
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
index 23d448c5e..0104e7f63 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
@@ -13,14 +13,13 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
import unittest
import mock
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
from tests.unit import STL_MOCKS
+
SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
NAME = 'vnf__1'
@@ -319,26 +318,28 @@ class TestProxTrafficGen(unittest.TestCase):
'upper_bound': 100.0}}
@mock.patch(SSH_HELPER)
- def test___init__(self, ssh, mock_time):
+ def test___init__(self, ssh, *args):
mock_ssh(ssh)
prox_traffic_gen = ProxTrafficGen(NAME, self.VNFD0)
self.assertIsNone(prox_traffic_gen._tg_process)
self.assertIsNone(prox_traffic_gen._traffic_process)
@mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, mock_time):
+ def test_collect_kpi(self, ssh, *args):
mock_ssh(ssh)
prox_traffic_gen = ProxTrafficGen(NAME, self.VNFD0)
prox_traffic_gen._vnf_wrapper.resource_helper.resource = mock.MagicMock(
- **{"check_if_sa_running.return_value": [False]})
+ **{"self.check_if_system_agent_running.return_value": [False]})
prox_traffic_gen._vnf_wrapper.vnf_execute = mock.Mock(return_value="")
self.assertEqual({}, prox_traffic_gen.collect_kpi())
- @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
+
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
+ @mock.patch(
+ 'yardstick.network_services.vnf_generic.vnf.sample_vnf.CpuSysCores')
@mock.patch(SSH_HELPER)
- def bad_test_instantiate(self, ssh, mock_find, mock_cpu_sys_cores, mock_time):
+ def bad_test_instantiate(self, ssh, mock_cpu_sys_cores, *args):
mock_ssh(ssh)
mock_cpu_sys_cores.get_core_socket.return_value = {'0': '01234'}
@@ -381,7 +382,7 @@ class TestProxTrafficGen(unittest.TestCase):
prox_traffic_gen.instantiate(scenario_cfg, {})
@mock.patch(SSH_HELPER)
- def test__traffic_runner(self, ssh, mock_time):
+ def test__traffic_runner(self, ssh, *args):
mock_ssh(ssh)
mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
@@ -399,17 +400,9 @@ class TestProxTrafficGen(unittest.TestCase):
sut._connect_client.get_stats = mock.Mock(return_value="0")
sut._traffic_runner(mock_traffic_profile)
- @mock.patch(SSH_HELPER)
- def test_scale(self, ssh, mock_time):
- mock_ssh(ssh, exec_result=(1, "", ""))
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
- with self.assertRaises(NotImplementedError):
- prox_traffic_gen.scale('')
-
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
@mock.patch(SSH_HELPER)
- def test_listen_traffic(self, ssh, mock_socket, mock_time):
+ def test_listen_traffic(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
@@ -417,7 +410,7 @@ class TestProxTrafficGen(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
@mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, mock_socket, mock_time):
+ def test_terminate(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
index f62a0fb3b..e9f718cb7 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
@@ -15,8 +15,6 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
import os
import unittest
import mock
@@ -40,14 +38,14 @@ NAME = "tg__1"
@mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.IxNextgen")
class TestIxiaResourceHelper(unittest.TestCase):
- def test___init___with_custom_rfc_helper(self, mock_ix_nextgen):
+ def test___init___with_custom_rfc_helper(self, *args):
class MyRfcHelper(IxiaRfc2544Helper):
pass
ixia_resource_helper = IxiaResourceHelper(mock.Mock(), MyRfcHelper)
self.assertIsInstance(ixia_resource_helper.rfc_helper, MyRfcHelper)
- def test_stop_collect_with_client(self, mock_ix_nextgen):
+ def test_stop_collect_with_client(self, *args):
mock_client = mock.Mock()
ixia_resource_helper = IxiaResourceHelper(mock.Mock())
@@ -154,16 +152,17 @@ class TestIXIATrafficGen(unittest.TestCase):
'file': '/etc/yardstick/nodes/pod.yaml'},
'schema': 'yardstick:task:0.1'}
- def test___init__(self, mock_ixnextgen):
+ def test___init__(self, *args):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
mock.Mock(return_value=(0, "", ""))
ssh.from_node.return_value = ssh_mock
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
+ # NOTE(ralonsoh): check the object returned.
+ IxiaTrafficGen(NAME, vnfd)
- def test_listen_traffic(self, mock_ixnextgen):
+ def test_listen_traffic(self, *args):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -173,7 +172,7 @@ class TestIXIATrafficGen(unittest.TestCase):
ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
self.assertEqual(None, ixnet_traffic_gen.listen_traffic({}))
- def test_instantiate(self, mock_ixnextgen):
+ def test_instantiate(self, *args):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -203,7 +202,7 @@ class TestIXIATrafficGen(unittest.TestCase):
IOError,
ixnet_traffic_gen.instantiate(scenario_cfg, {}))
- def test_collect_kpi(self, mock_ixnextgen):
+ def test_collect_kpi(self, *args):
with mock.patch("yardstick.ssh.SSH") as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
ssh_mock.execute = \
@@ -215,7 +214,7 @@ class TestIXIATrafficGen(unittest.TestCase):
restult = ixnet_traffic_gen.collect_kpi()
self.assertEqual({}, restult)
- def test_terminate(self, mock_ixnextgen):
+ def test_terminate(self, *args):
with mock.patch("yardstick.ssh.SSH") as ssh:
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
ssh_mock = mock.Mock(autospec=ssh.SSH)
@@ -236,19 +235,14 @@ class TestIXIATrafficGen(unittest.TestCase):
file_path = os.path.join(curr_path, filename)
return file_path
- def test_scale(self, mock_ix_nextgen):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sut = IxiaTrafficGen('vnf1', vnfd)
- sut.scale()
-
- def test__check_status(self, mock_ix_nextgen):
+ def test__check_status(self, *args):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
sut = IxiaTrafficGen('vnf1', vnfd)
sut._check_status()
@mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.time")
@mock.patch("yardstick.ssh.SSH")
- def test_traffic_runner(self, mock_ixnextgen, mock_ssh, mock_time):
+ def test_traffic_runner(self, mock_ssh, *args):
mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
mock_traffic_profile.get_traffic_definition.return_value = "64"
mock_traffic_profile.params = self.TRAFFIC_PROFILE
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
index 637706fb4..7342cfcdc 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
@@ -331,15 +331,6 @@ class TestTrexTrafficGenRFC(unittest.TestCase):
trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
self.assertIsNone(trex_traffic_gen.resource_helper.generate_cfg())
- def test_scale(self):
- with mock.patch(SSH_HELPER) as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "", ""))
- ssh_mock.run = mock.Mock(return_value=(0, "", ""))
- ssh.from_node.return_value = ssh_mock
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- trex_traffic_gen.scale('')
-
def test_terminate(self):
with mock.patch(SSH_HELPER) as ssh:
ssh_mock = mock.Mock(autospec=ssh.SSH)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
index a2a5058fc..618071507 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
@@ -15,18 +15,16 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
-import unittest
-
import copy
import mock
-SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+import unittest
from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
from tests.unit import STL_MOCKS
+
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
NAME = 'vnf_1'
STLClient = mock.MagicMock()
@@ -469,13 +467,6 @@ class TestTrexTrafficGen(unittest.TestCase):
self.assertIsNotNone(result)
@mock.patch(SSH_HELPER)
- def test_scale(self, ssh):
- mock_ssh(ssh, exec_result=(1, "", ""))
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen.scale('')
-
- @mock.patch(SSH_HELPER)
def test_terminate(self, ssh):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py b/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
index d4d3439f3..cda3852fe 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
@@ -15,26 +15,24 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
import unittest
import mock
import os
from tests.unit import STL_MOCKS
-SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+
STLClient = mock.MagicMock()
stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
stl_patch.start()
if stl_patch:
from yardstick.network_services.vnf_generic.vnf.udp_replay import UdpReplayApproxVnf
- from yardstick.network_services.nfvi.resource import ResourceProfile
from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper
-from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
TEST_FILE_YAML = 'nsb_test_case.yaml'
@@ -329,13 +327,13 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
}
}
- def test___init__(self, _):
+ def test___init__(self, *args):
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
self.assertIsNone(udp_replay_approx_vnf._vnf_process)
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, mock_time, _):
+ def test_collect_kpi(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD_0
@@ -354,7 +352,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
self.assertEqual(result, udp_replay_approx_vnf.collect_kpi())
@mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, _):
+ def test_get_stats(self, ssh, *args):
mock_ssh(ssh)
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -376,7 +374,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
@mock.patch(SSH_HELPER)
- def test__build_config(self, ssh, mock_context, *_):
+ def test__build_config(self, ssh, mock_context, *args):
mock_ssh(ssh)
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -397,7 +395,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
@mock.patch('yardstick.network_services.vnf_generic.vnf.udp_replay.open')
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
@mock.patch(SSH_HELPER)
- def test__build_pipeline_kwargs(self, ssh, mock_context, *_):
+ def test__build_pipeline_kwargs(self, ssh, mock_context, *args):
mock_ssh(ssh)
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
udp_replay_approx_vnf.nfvi_context = mock_context
@@ -420,7 +418,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
})
@mock.patch(SSH_HELPER)
- def test_run_udp_replay(self, ssh, _):
+ def test_run_udp_replay(self, ssh, *args):
mock_ssh(ssh)
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -434,11 +432,9 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
@mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh, *_):
+ def test_instantiate(self, ssh, *args):
mock_ssh(ssh)
- resource = mock.Mock(autospec=ResourceProfile)
-
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
udp_replay_approx_vnf.q_out.put("Replay>")
udp_replay_approx_vnf.WAIT_TIME = 0
@@ -451,12 +447,12 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
udp_replay_approx_vnf._vnf_process.is_alive = mock.Mock(return_value=1)
udp_replay_approx_vnf._vnf_process.exitcode = 0
- self.assertEquals(udp_replay_approx_vnf.wait_for_instantiate(), 0)
+ self.assertEqual(udp_replay_approx_vnf.wait_for_instantiate(), 0)
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
@mock.patch('yardstick.ssh.SSH')
@mock.patch(SSH_HELPER)
- def test_instantiate_panic(self, ssh, resource_ssh, *_):
+ def test_instantiate_panic(self, *args):
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
udp_replay_approx_vnf.WAIT_TIME = 0
udp_replay_approx_vnf.q_out.put("some text PANIC some text")
@@ -467,15 +463,9 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
with self.assertRaises(RuntimeError):
udp_replay_approx_vnf.wait_for_instantiate()
- def test_scale(self, _):
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
- flavor = ""
-
- self.assertRaises(NotImplementedError, udp_replay_approx_vnf.scale, flavor)
-
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, mock_time, _):
+ def test_terminate(self, ssh, *args):
mock_ssh(ssh)
udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
@@ -484,6 +474,3 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
udp_replay_approx_vnf.used_drivers = {"01:01.0": "i40e", "01:01.1": "i40e"}
udp_replay_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
self.assertEqual(None, udp_replay_approx_vnf.terminate())
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
index 958099a03..d128db0b4 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
@@ -15,8 +15,6 @@
# limitations under the License.
#
-from __future__ import absolute_import
-
import unittest
import mock
import os
@@ -32,10 +30,10 @@ if stl_patch:
from yardstick.network_services.vnf_generic.vnf.vfw_vnf import FWApproxVnf
from yardstick.network_services.nfvi.resource import ResourceProfile
+
TEST_FILE_YAML = 'nsb_test_case.yaml'
SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
-
name = 'vnf__1'
@@ -239,7 +237,7 @@ class TestFWApproxVnf(unittest.TestCase):
'password': 'r00t',
'VNF model': 'vfw_vnf.yaml'}}}
- def test___init__(self, mock_process):
+ def test___init__(self, *args):
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
vfw_approx_vnf = FWApproxVnf(name, vnfd)
self.assertIsNone(vfw_approx_vnf._vnf_process)
@@ -260,7 +258,7 @@ pipeline>
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, mock_time, mock_process):
+ def test_collect_kpi(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -282,7 +280,7 @@ pipeline>
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_vnf_execute_command(self, ssh, mock_time, mock_process):
+ def test_vnf_execute_command(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -294,7 +292,7 @@ pipeline>
self.assertEqual(vfw_approx_vnf.vnf_execute(cmd), "")
@mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, mock_process):
+ def test_get_stats(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -314,7 +312,7 @@ pipeline>
@mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.eval")
@mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.open")
@mock.patch(SSH_HELPER)
- def test_run_vfw(self, ssh, mock_open, mock_eval, mock_hex, mock_process):
+ def test_run_vfw(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -337,7 +335,7 @@ pipeline>
@mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.YangModel")
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
@mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh, mock_context, mock_yang, mock_find, mock_process):
+ def test_instantiate(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -351,16 +349,9 @@ pipeline>
self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
self.assertIsNone(vfw_approx_vnf.instantiate(self.scenario_cfg, self.context_cfg))
- def test_scale(self, mock_process):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vfw_approx_vnf = FWApproxVnf(name, vnfd)
- flavor = ""
- with self.assertRaises(NotImplementedError):
- vfw_approx_vnf.scale(flavor)
-
@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
@mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, mock_time, mock_process):
+ def test_terminate(self, ssh, *args):
mock_ssh(ssh)
vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
@@ -372,6 +363,3 @@ pipeline>
vfw_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
vfw_approx_vnf._resource_collect_stop = mock.Mock()
self.assertIsNone(vfw_approx_vnf.terminate())
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
index 4103d7825..1abc53688 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
@@ -15,15 +15,17 @@
# limitations under the License.
#
-from __future__ import absolute_import
-import six.moves.configparser as configparser
-
+from multiprocessing import Process, Queue
import os
-import unittest
+import time
+
import mock
-from multiprocessing import Process, Queue
+import six.moves.configparser as configparser
+import unittest
from tests.unit import STL_MOCKS
+from tests.unit.network_services.vnf_generic.vnf.test_base import FileAbsPath
+from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
from yardstick.network_services.vnf_generic.vnf.base import QueueFileWrapper
from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
@@ -40,9 +42,6 @@ if stl_patch:
from yardstick.network_services.vnf_generic.vnf.vpe_vnf import \
VpeApproxVnf, VpeApproxSetupEnvHelper
-from tests.unit.network_services.vnf_generic.vnf.test_base import FileAbsPath
-from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
-
TEST_FILE_YAML = 'nsb_test_case.yaml'
@@ -227,28 +226,6 @@ class TestConfigCreate(unittest.TestCase):
self.assertNotEqual(result, '')
def test_create_vpe_config(self):
- uplink_ports = [
- {
- 'index': 0,
- 'dpdk_port_num': 1,
- 'peer_intf': {
- 'dpdk_port_num': 2,
- 'index': 3,
- },
- },
- ]
-
- downlink_ports = [
- {
- 'index': 2,
- 'dpdk_port_num': 3,
- 'peer_intf': {
- 'dpdk_port_num': 0,
- 'index': 1,
- },
- },
- ]
-
vnfd_helper = VnfdHelper(self.VNFD_0)
config_create = ConfigCreate(vnfd_helper, 23)
config_create.downlink_ports = ['xe1']
@@ -260,7 +237,6 @@ class TestConfigCreate(unittest.TestCase):
os.system("git checkout -- %s" % vnf_cfg)
-@mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
class TestVpeApproxVnf(unittest.TestCase):
VNFD_0 = {
@@ -556,18 +532,21 @@ class TestVpeApproxVnf(unittest.TestCase):
},
}
- def test___init__(self, _):
+ def setUp(self):
+ self.mock_sleep = mock.patch.object(time, 'sleep').start()
+
+ def test___init__(self):
vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
self.assertIsNone(vpe_approx_vnf._vnf_process)
@mock.patch(SSH_HELPER)
- def test_collect_kpi_sa_not_running(self, ssh, _):
+ def test_collect_kpi_sa_not_running(self, ssh):
mock_ssh(ssh)
resource = mock.Mock(autospec=ResourceProfile)
- resource.check_if_sa_running.return_value = 1, ''
+ resource.check_if_system_agent_running.return_value = 1, ''
resource.amqp_collect_nfvi_kpi.return_value = {'foo': 234}
- resource.check_if_sa_running.return_value = (1, None)
+ resource.check_if_system_agent_running.return_value = (1, None)
vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
vpe_approx_vnf.q_in = mock.MagicMock()
@@ -585,11 +564,11 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertEqual(vpe_approx_vnf.collect_kpi(), expected)
@mock.patch(SSH_HELPER)
- def test_collect_kpi_sa_running(self, ssh, _):
+ def test_collect_kpi_sa_running(self, ssh):
mock_ssh(ssh)
resource = mock.Mock(autospec=ResourceProfile)
- resource.check_if_sa_running.return_value = 0, '1234'
+ resource.check_if_system_agent_running.return_value = 0, '1234'
resource.amqp_collect_nfvi_kpi.return_value = {'foo': 234}
vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
@@ -608,7 +587,7 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertEqual(vpe_approx_vnf.collect_kpi(), expected)
@mock.patch(SSH_HELPER)
- def test_vnf_execute(self, ssh, _):
+ def test_vnf_execute(self, ssh):
mock_ssh(ssh)
vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
vpe_approx_vnf.q_in = mock.MagicMock()
@@ -617,7 +596,7 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertEqual(vpe_approx_vnf.vnf_execute("quit", 0), '')
@mock.patch(SSH_HELPER)
- def test_run_vpe(self, ssh, _):
+ def test_run_vpe(self, ssh):
mock_ssh(ssh)
vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
@@ -651,7 +630,7 @@ class TestVpeApproxVnf(unittest.TestCase):
@mock.patch("yardstick.network_services.vnf_generic.vnf.vpe_vnf.ConfigCreate")
@mock.patch("yardstick.network_services.vnf_generic.vnf.vpe_vnf.open")
@mock.patch(SSH_HELPER)
- def test_build_config(self, mock_mul, mock_context, mock_config, mock_open, ssh, _):
+ def test_build_config(self, ssh, *args):
mock_ssh(ssh)
vpe_approx_vnf = VpeApproxSetupEnvHelper(mock.MagicMock(),
mock.MagicMock, mock.MagicMock)
@@ -684,7 +663,7 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertIsNotNone(vpe_approx_vnf.build_config())
@mock.patch(SSH_HELPER)
- def test_wait_for_instantiate(self, ssh, _):
+ def test_wait_for_instantiate(self, ssh):
mock_ssh(ssh)
mock_process = mock.Mock(autospec=Process)
@@ -707,7 +686,7 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertEqual(vpe_approx_vnf.wait_for_instantiate(), 432)
@mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_fragmented(self, ssh, _):
+ def test_wait_for_instantiate_fragmented(self, ssh):
mock_ssh(ssh)
mock_process = mock.Mock(autospec=Process)
@@ -730,7 +709,7 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertEqual(vpe_approx_vnf.wait_for_instantiate(), 432)
@mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_crash(self, ssh, _):
+ def test_wait_for_instantiate_crash(self, ssh):
mock_ssh(ssh, exec_result=(1, "", ""))
mock_process = mock.Mock(autospec=Process)
@@ -749,7 +728,7 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertIn('VNF process died', str(raised.exception))
@mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_panic(self, ssh, _):
+ def test_wait_for_instantiate_panic(self, ssh):
mock_ssh(ssh, exec_result=(1, "", ""))
mock_process = mock.Mock(autospec=Process)
@@ -769,7 +748,7 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertIn('Error starting', str(raised.exception))
@mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_panic_fragmented(self, ssh, _):
+ def test_wait_for_instantiate_panic_fragmented(self, ssh):
mock_ssh(ssh, exec_result=(1, "", ""))
mock_process = mock.Mock(autospec=Process)
@@ -793,13 +772,8 @@ class TestVpeApproxVnf(unittest.TestCase):
self.assertIn('Error starting', str(raised.exception))
- def test_scale(self, _):
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- with self.assertRaises(NotImplementedError):
- vpe_approx_vnf.scale('')
-
@mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, _):
+ def test_terminate(self, ssh):
mock_ssh(ssh)
vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
@@ -808,7 +782,3 @@ class TestVpeApproxVnf(unittest.TestCase):
vpe_approx_vnf.resource_helper = mock.MagicMock()
self.assertIsNone(vpe_approx_vnf.terminate())
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/orchestrator/__init__.py b/tests/unit/orchestrator/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/orchestrator/__init__.py
+++ /dev/null
diff --git a/tests/unit/orchestrator/test_heat.py b/tests/unit/orchestrator/test_heat.py
deleted file mode 100644
index c34ea53fc..000000000
--- a/tests/unit/orchestrator/test_heat.py
+++ /dev/null
@@ -1,339 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2017 Intel Corporation
-#
-# 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.orchestrator.heat
-from contextlib import contextmanager
-from itertools import count
-from tempfile import NamedTemporaryFile
-import unittest
-import uuid
-import time
-import mock
-
-from yardstick.benchmark.contexts import node
-from yardstick.orchestrator import heat
-
-
-TARGET_MODULE = 'yardstick.orchestrator.heat'
-
-
-def mock_patch_target_module(inner_import):
- return mock.patch('.'.join([TARGET_MODULE, inner_import]))
-
-
-@contextmanager
-def timer():
- start = time.time()
- data = {'start': start}
- try:
- yield data
- finally:
- data['end'] = end = time.time()
- data['delta'] = end - start
-
-
-def index_value_iter(index, index_value, base_value=None):
- for current_index in count():
- if current_index == index:
- yield index_value
- else:
- yield base_value
-
-
-def get_error_message(error):
- try:
- # py2
- return error.message
- except AttributeError:
- # py3
- return next((arg for arg in error.args if isinstance(arg, str)), None)
-
-
-class HeatContextTestCase(unittest.TestCase):
-
- def test_get_short_key_uuid(self):
- u = uuid.uuid4()
- k = heat.get_short_key_uuid(u)
- self.assertEqual(heat.HEAT_KEY_UUID_LENGTH, len(k))
- self.assertIn(k, str(u))
-
-class HeatTemplateTestCase(unittest.TestCase):
-
- def setUp(self):
- self.template = heat.HeatTemplate('test')
-
- def test_add_tenant_network(self):
- self.template.add_network('some-network')
-
- self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::Net')
-
- def test_add_provider_network(self):
- self.template.add_network('some-network', 'physnet2', 'sriov')
-
- self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::ProviderNet')
- self.assertEqual(self.template.resources['some-network']['properties']['physical_network'], 'physnet2')
-
- def test_add_subnet(self):
- netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
- self.template.add_subnet('some-subnet', "some-network", netattrs['cidr'])
-
- self.assertEqual(self.template.resources['some-subnet']['type'], 'OS::Neutron::Subnet')
- self.assertEqual(self.template.resources['some-subnet']['properties']['cidr'], '10.0.0.0/24')
-
- def test_add_router(self):
- self.template.add_router('some-router', 'ext-net', 'some-subnet')
-
- self.assertEqual(self.template.resources['some-router']['type'], 'OS::Neutron::Router')
- self.assertIn('some-subnet', self.template.resources['some-router']['depends_on'])
-
- def test_add_router_interface(self):
- self.template.add_router_interface('some-router-if', 'some-router', 'some-subnet')
-
- self.assertEqual(self.template.resources['some-router-if']['type'], 'OS::Neutron::RouterInterface')
- self.assertIn('some-subnet', self.template.resources['some-router-if']['depends_on'])
-
- def test_add_servergroup(self):
- self.template.add_servergroup('some-server-group', 'anti-affinity')
-
- self.assertEqual(self.template.resources['some-server-group']['type'], 'OS::Nova::ServerGroup')
- self.assertEqual(self.template.resources['some-server-group']['properties']['policies'], ['anti-affinity'])
-
- def test__add_resources_to_template_raw(self):
- test_context = node.NodeContext()
- test_context.name = 'foo'
- test_context.template_file = '/tmp/some-heat-file'
- test_context.heat_parameters = {'image': 'cirros'}
- test_context.key_filename = "/tmp/1234"
- test_context.keypair_name = "foo-key"
- test_context.secgroup_name = "foo-secgroup"
- test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
- heat_object = heat.HeatObject()
-
- heat_stack = heat.HeatStack("tmpStack")
- self.assertTrue(heat_stack.stacks_exist())
-
- test_context.tmpfile = NamedTemporaryFile(delete=True, mode='w+t')
- test_context.tmpfile.write("heat_template_version: 2015-04-30")
- test_context.tmpfile.flush()
- test_context.tmpfile.seek(0)
- heat_template = heat.HeatTemplate(heat_object)
- heat_template.resources = {}
-
- heat_template.add_network("network1")
- heat_template.add_network("network2")
- heat_template.add_security_group("sec_group1")
- heat_template.add_security_group("sec_group2")
- heat_template.add_subnet("subnet1", "network1", "cidr1")
- heat_template.add_subnet("subnet2", "network2", "cidr2")
- heat_template.add_router("router1", "gw1", "subnet1")
- heat_template.add_router_interface("router_if1", "router1", "subnet1")
- heat_template.add_port("port1", "network1", "subnet1", "normal")
- heat_template.add_port("port2", "network2", "subnet2", "normal", sec_group_id="sec_group1",provider="not-sriov")
- heat_template.add_port("port3", "network2", "subnet2", "normal", sec_group_id="sec_group1",provider="sriov")
- heat_template.add_floating_ip("floating_ip1", "network1", "port1", "router_if1")
- heat_template.add_floating_ip("floating_ip2", "network2", "port2", "router_if2", "foo-secgroup")
- heat_template.add_floating_ip_association("floating_ip1_association", "floating_ip1", "port1")
- heat_template.add_servergroup("server_grp2", "affinity")
- heat_template.add_servergroup("server_grp3", "anti-affinity")
- heat_template.add_security_group("security_group")
- heat_template.add_server(name="server1", image="image1", flavor="flavor1", flavors=[])
- heat_template.add_server_group(name="servergroup", policies=["policy1","policy2"])
- heat_template.add_server_group(name="servergroup", policies="policy1")
- heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=[], ports=["port1", "port2"],
- networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
- key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
- additional_properties={"prop1": 1, "prop2": 2})
- heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor1", "flavor2"],
- ports=["port1", "port2"],
- networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
- key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
- additional_properties={"prop1": 1, "prop2": 2} )
- heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor3", "flavor4"],
- ports=["port1", "port2"],
- networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
- key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
- additional_properties={"prop1": 1, "prop2": 2})
- heat_template.add_flavor(name="flavor1", vcpus=1, ram=2048, disk=1,extra_specs={"cat": 1, "dog": 2})
- heat_template.add_flavor(name=None, vcpus=1, ram=2048)
- heat_template.add_server(name="server1",
- image="image1",
- flavor="flavor1",
- flavors=[],
- ports=["port1", "port2"],
- networks=["network1", "network2"],
- scheduler_hints="hints1",
- user="user1",
- key_name="foo-key",
- user_data="user",
- metadata={"cat": 1, "doc": 2},
- additional_properties= {"prop1": 1, "prop2": 2} )
- heat_template.add_network("network1")
-
- heat_template.add_flavor("test")
- self.assertEqual(heat_template.resources['test']['type'], 'OS::Nova::Flavor')
-
- @mock_patch_target_module('op_utils')
- @mock_patch_target_module('heatclient')
- def test_create_negative(self, mock_heat_client_class, mock_op_utils):
- self.template.HEAT_WAIT_LOOP_INTERVAL = 0
- mock_heat_client = mock_heat_client_class() # get the constructed mock
-
- # populate attributes of the constructed mock
- mock_heat_client.stacks.get().stack_status_reason = 'the reason'
-
- expected_status_calls = 0
- expected_constructor_calls = 1 # above, to get the instance
- expected_create_calls = 0
- expected_op_utils_usage = 0
-
- with mock.patch.object(self.template, 'status', return_value=None) as mock_status:
- # block with timeout hit
- timeout = 0
- with self.assertRaises(RuntimeError) as raised, timer() as time_data:
- self.template.create(block=True, timeout=timeout)
-
- # ensure op_utils was used
- expected_op_utils_usage += 1
- self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
-
- # ensure the constructor and instance were used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure that the status was used
- self.assertGreater(mock_status.call_count, expected_status_calls)
- expected_status_calls = mock_status.call_count # synchronize the value
-
- # ensure the expected exception was raised
- error_message = get_error_message(raised.exception)
- self.assertIn('timeout', error_message)
- self.assertNotIn('the reason', error_message)
-
- # block with create failed
- timeout = 10
- mock_status.side_effect = iter([None, None, u'CREATE_FAILED'])
- with self.assertRaises(RuntimeError) as raised, timer() as time_data:
- self.template.create(block=True, timeout=timeout)
-
- # ensure the existing heat_client was used and op_utils was used again
- self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
-
- # ensure the constructor was not used but the instance was used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure that the status was used three times
- expected_status_calls += 3
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
- @mock_patch_target_module('op_utils')
- @mock_patch_target_module('heatclient')
- def test_create(self, mock_heat_client_class, mock_op_utils):
- self.template.HEAT_WAIT_LOOP_INTERVAL = 0.2
- mock_heat_client = mock_heat_client_class()
-
- # populate attributes of the constructed mock
- mock_heat_client.stacks.get().outputs = [
- {'output_key': 'key1', 'output_value': 'value1'},
- {'output_key': 'key2', 'output_value': 'value2'},
- {'output_key': 'key3', 'output_value': 'value3'},
- ]
- expected_outputs = {
- 'key1': 'value1',
- 'key2': 'value2',
- 'key3': 'value3',
- }
-
- expected_status_calls = 0
- expected_constructor_calls = 1 # above, to get the instance
- expected_create_calls = 0
- expected_op_utils_usage = 0
-
- with mock.patch.object(self.template, 'status') as mock_status:
- self.template.name = 'no block test'
- mock_status.return_value = None
-
- # no block
- self.assertIsInstance(self.template.create(block=False, timeout=2), heat.HeatStack)
-
- # ensure op_utils was used
- expected_op_utils_usage += 1
- self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
-
- # ensure the constructor and instance were used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure that the status was not used
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
- # ensure no outputs because this requires blocking
- self.assertEqual(self.template.outputs, {})
-
- # block with immediate complete
- self.template.name = 'block, immediate complete test'
-
- mock_status.return_value = self.template.HEAT_CREATE_COMPLETE_STATUS
- self.assertIsInstance(self.template.create(block=True, timeout=2), heat.HeatStack)
-
- # ensure existing instance was re-used and op_utils was not used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure status was checked once
- expected_status_calls += 1
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
- # reset template outputs
- self.template.outputs = None
-
- # block with delayed complete
- self.template.name = 'block, delayed complete test'
-
- success_index = 2
- mock_status.side_effect = index_value_iter(success_index,
- self.template.HEAT_CREATE_COMPLETE_STATUS)
- self.assertIsInstance(self.template.create(block=True, timeout=2), heat.HeatStack)
-
- # ensure existing instance was re-used and op_utils was not used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure status was checked three more times
- expected_status_calls += 1 + success_index
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
-
-class HeatStackTestCase(unittest.TestCase):
-
- def test_delete_calls__delete_multiple_times(self):
- stack = heat.HeatStack('test')
- stack.uuid = 1
- with mock.patch.object(stack, "_delete") as delete_mock:
- stack.delete()
- # call once and then call again if uuid is not none
- self.assertGreater(delete_mock.call_count, 1)
-
- @mock.patch('yardstick.orchestrator.heat.op_utils')
- def test_delete_all_calls_delete(self, mock_op):
- # we must patch the object before we create an instance
- # so we can override delete() in all the instances
- with mock.patch.object(heat.HeatStack, "delete") as delete_mock:
- stack = heat.HeatStack('test')
- stack.uuid = 1
- stack.delete_all()
- self.assertGreater(delete_mock.call_count, 0)
diff --git a/tests/unit/orchestrator/test_kubernetes.py b/tests/unit/orchestrator/test_kubernetes.py
deleted file mode 100644
index 1a3291c89..000000000
--- a/tests/unit/orchestrator/test_kubernetes.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2017 Intel Corporation
-#
-# 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.orchestrator.heat
-import unittest
-import mock
-
-from yardstick.orchestrator.kubernetes import KubernetesObject
-from yardstick.orchestrator.kubernetes import KubernetesTemplate
-
-
-class GetTemplateTestCase(unittest.TestCase):
-
- def test_get_template(self):
- output_t = {
- "apiVersion": "v1",
- "kind": "ReplicationController",
- "metadata": {
- "name": "host-k8s-86096c30"
- },
- "spec": {
- "replicas": 1,
- "template": {
- "metadata": {
- "labels": {
- "app": "host-k8s-86096c30"
- }
- },
- "spec": {
- "containers": [
- {
- "args": [
- "-c",
- "chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done"
- ],
- "command": [
- "/bin/bash"
- ],
- "image": "openretriever/yardstick",
- "name": "host-k8s-86096c30-container",
- "volumeMounts": [
- {
- "mountPath": "/root/.ssh/",
- "name": "k8s-86096c30-key"
- }
- ]
- }
- ],
- "volumes": [
- {
- "configMap": {
- "name": "k8s-86096c30-key"
- },
- "name": "k8s-86096c30-key"
- }
- ],
- "nodeSelector": {
- "kubernetes.io/hostname": "node-01"
- }
- }
- }
- }
- }
- input_s = {
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done'],
- 'ssh_key': 'k8s-86096c30-key',
- 'nodeSelector': { 'kubernetes.io/hostname': 'node-01'}
- }
- name = 'host-k8s-86096c30'
- output_r = KubernetesObject(name, **input_s).get_template()
- self.assertEqual(output_r, output_t)
-
-
-class GetRcPodsTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.orchestrator.kubernetes.k8s_utils.get_pod_list')
- def test_get_rc_pods(self, mock_get_pod_list):
- servers = {
- 'host': {
- 'image': 'openretriever/yardstick',
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done']
- },
- 'target': {
- 'image': 'openretriever/yardstick',
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done']
- }
- }
- k8s_template = KubernetesTemplate('k8s-86096c30', servers)
- mock_get_pod_list.return_value.items = []
- pods = k8s_template.get_rc_pods()
- self.assertEqual(pods, [])
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/test_ssh.py b/tests/unit/test_ssh.py
deleted file mode 100644
index b298c745b..000000000
--- a/tests/unit/test_ssh.py
+++ /dev/null
@@ -1,563 +0,0 @@
-# Copyright 2013: Mirantis Inc.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-# yardstick comment: this file is a modified copy of
-# rally/tests/unit/common/test_sshutils.py
-
-from __future__ import absolute_import
-import os
-import socket
-import unittest
-from io import StringIO
-
-import mock
-from oslo_utils import encodeutils
-
-from yardstick import ssh
-from yardstick.ssh import SSHError
-from yardstick.ssh import SSH
-from yardstick.ssh import AutoConnectSSH
-
-
-class FakeParamikoException(Exception):
- pass
-
-
-class SSHTestCase(unittest.TestCase):
- """Test all small SSH methods."""
-
- def setUp(self):
- super(SSHTestCase, self).setUp()
- self.test_client = ssh.SSH("root", "example.net")
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- def test_construct(self, mock_ssh__get_pkey):
- mock_ssh__get_pkey.return_value = "pkey"
- test_ssh = ssh.SSH("root", "example.net", port=33, pkey="key",
- key_filename="kf", password="secret")
- mock_ssh__get_pkey.assert_called_once_with("key")
- self.assertEqual("root", test_ssh.user)
- self.assertEqual("example.net", test_ssh.host)
- self.assertEqual(33, test_ssh.port)
- self.assertEqual("pkey", test_ssh.pkey)
- self.assertEqual("kf", test_ssh.key_filename)
- self.assertEqual("secret", test_ssh.password)
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- def test_ssh_from_node(self, mock_ssh__get_pkey):
- mock_ssh__get_pkey.return_value = "pkey"
- node = {
- "user": "root", "ip": "example.net", "ssh_port": 33,
- "key_filename": "kf", "password": "secret"
- }
- test_ssh = ssh.SSH.from_node(node)
- self.assertEqual("root", test_ssh.user)
- self.assertEqual("example.net", test_ssh.host)
- self.assertEqual(33, test_ssh.port)
- self.assertEqual("kf", test_ssh.key_filename)
- self.assertEqual("secret", test_ssh.password)
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- def test_ssh_from_node_password_default(self, mock_ssh__get_pkey):
- mock_ssh__get_pkey.return_value = "pkey"
- node = {
- "user": "root", "ip": "example.net", "ssh_port": 33,
- "key_filename": "kf"
- }
- test_ssh = ssh.SSH.from_node(node)
- self.assertEqual("root", test_ssh.user)
- self.assertEqual("example.net", test_ssh.host)
- self.assertEqual(33, test_ssh.port)
- self.assertEqual("kf", test_ssh.key_filename)
- self.assertIsNone(test_ssh.password)
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- def test_ssh_from_node_ssh_port_default(self, mock_ssh__get_pkey):
- mock_ssh__get_pkey.return_value = "pkey"
- node = {
- "user": "root", "ip": "example.net",
- "key_filename": "kf", "password": "secret"
- }
- test_ssh = ssh.SSH.from_node(node)
- self.assertEqual("root", test_ssh.user)
- self.assertEqual("example.net", test_ssh.host)
- self.assertEqual(ssh.SSH.SSH_PORT, test_ssh.port)
- self.assertEqual("kf", test_ssh.key_filename)
- self.assertEqual("secret", test_ssh.password)
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- def test_ssh_from_node_key_filename_default(self, mock_ssh__get_pkey):
- mock_ssh__get_pkey.return_value = "pkey"
- node = {
- "user": "root", "ip": "example.net", "ssh_port": 33,
- "password": "secret"
- }
- test_ssh = ssh.SSH.from_node(node)
- self.assertEqual("root", test_ssh.user)
- self.assertEqual("example.net", test_ssh.host)
- self.assertEqual(33, test_ssh.port)
- self.assertIsNone(test_ssh.key_filename)
- self.assertEqual("secret", test_ssh.password)
-
- def test_construct_default(self):
- self.assertEqual("root", self.test_client.user)
- self.assertEqual("example.net", self.test_client.host)
- self.assertEqual(22, self.test_client.port)
- self.assertIsNone(self.test_client.pkey)
- self.assertIsNone(self.test_client.key_filename)
- self.assertIsNone(self.test_client.password)
-
- @mock.patch("yardstick.ssh.paramiko")
- def test__get_pkey_invalid(self, mock_paramiko):
- mock_paramiko.SSHException = FakeParamikoException
- rsa = mock_paramiko.rsakey.RSAKey
- dss = mock_paramiko.dsskey.DSSKey
- rsa.from_private_key.side_effect = mock_paramiko.SSHException
- dss.from_private_key.side_effect = mock_paramiko.SSHException
- self.assertRaises(ssh.SSHError, self.test_client._get_pkey, "key")
-
- @mock.patch("yardstick.ssh.six.moves.StringIO")
- @mock.patch("yardstick.ssh.paramiko")
- def test__get_pkey_dss(self, mock_paramiko, mock_string_io):
- mock_paramiko.SSHException = FakeParamikoException
- mock_string_io.return_value = "string_key"
- mock_paramiko.dsskey.DSSKey.from_private_key.return_value = "dss_key"
- rsa = mock_paramiko.rsakey.RSAKey
- rsa.from_private_key.side_effect = mock_paramiko.SSHException
- key = self.test_client._get_pkey("key")
- dss_calls = mock_paramiko.dsskey.DSSKey.from_private_key.mock_calls
- self.assertEqual([mock.call("string_key")], dss_calls)
- self.assertEqual(key, "dss_key")
- mock_string_io.assert_called_once_with("key")
-
- @mock.patch("yardstick.ssh.six.moves.StringIO")
- @mock.patch("yardstick.ssh.paramiko")
- def test__get_pkey_rsa(self, mock_paramiko, mock_string_io):
- mock_paramiko.SSHException = FakeParamikoException
- mock_string_io.return_value = "string_key"
- mock_paramiko.rsakey.RSAKey.from_private_key.return_value = "rsa_key"
- dss = mock_paramiko.dsskey.DSSKey
- dss.from_private_key.side_effect = mock_paramiko.SSHException
- key = self.test_client._get_pkey("key")
- rsa_calls = mock_paramiko.rsakey.RSAKey.from_private_key.mock_calls
- self.assertEqual([mock.call("string_key")], rsa_calls)
- self.assertEqual(key, "rsa_key")
- mock_string_io.assert_called_once_with("key")
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- @mock.patch("yardstick.ssh.paramiko")
- def test__get_client(self, mock_paramiko, mock_ssh__get_pkey):
- mock_ssh__get_pkey.return_value = "key"
- fake_client = mock.Mock()
- mock_paramiko.SSHClient.return_value = fake_client
- mock_paramiko.AutoAddPolicy.return_value = "autoadd"
-
- test_ssh = ssh.SSH("admin", "example.net", pkey="key")
- client = test_ssh._get_client()
-
- self.assertEqual(fake_client, client)
- client_calls = [
- mock.call.set_missing_host_key_policy("autoadd"),
- mock.call.connect("example.net", username="admin",
- port=22, pkey="key", key_filename=None,
- password=None,
- allow_agent=False, look_for_keys=False,
- timeout=1),
- ]
- self.assertEqual(client_calls, client.mock_calls)
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- @mock.patch("yardstick.ssh.paramiko")
- def test__get_client_with_exception(self, mock_paramiko, mock_ssh__get_pkey):
- class MyError(Exception):
- pass
-
- mock_ssh__get_pkey.return_value = "pkey"
- fake_client = mock.Mock()
- fake_client.connect.side_effect = MyError
- fake_client.set_missing_host_key_policy.return_value = None
- mock_paramiko.SSHClient.return_value = fake_client
- mock_paramiko.AutoAddPolicy.return_value = "autoadd"
-
- test_ssh = ssh.SSH("admin", "example.net", pkey="key")
-
- with self.assertRaises(SSHError) as raised:
- test_ssh._get_client()
-
- self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
- self.assertEqual(mock_paramiko.AutoAddPolicy.call_count, 1)
- self.assertEqual(fake_client.set_missing_host_key_policy.call_count, 1)
- self.assertEqual(fake_client.connect.call_count, 1)
- exc_str = str(raised.exception)
- self.assertIn('raised during connect', exc_str)
- self.assertIn('MyError', exc_str)
-
- @mock.patch("yardstick.ssh.SSH._get_pkey")
- @mock.patch("yardstick.ssh.paramiko")
- def test_copy(self, mock_paramiko, mock_ssh__get_pkey):
- mock_ssh__get_pkey.return_value = "pkey"
- fake_client = mock.Mock()
- fake_client.connect.side_effect = IOError
- mock_paramiko.SSHClient.return_value = fake_client
- mock_paramiko.AutoAddPolicy.return_value = "autoadd"
-
- test_ssh = ssh.SSH("admin", "example.net", pkey="key")
- result = test_ssh.copy()
- self.assertIsNot(test_ssh, result)
-
- def test_close(self):
- with mock.patch.object(self.test_client, "_client") as m_client:
- self.test_client.close()
- m_client.close.assert_called_once_with()
- self.assertFalse(self.test_client._client)
-
- @mock.patch("yardstick.ssh.six.moves.StringIO")
- def test_execute(self, mock_string_io):
- mock_string_io.side_effect = stdio = [mock.Mock(), mock.Mock()]
- stdio[0].read.return_value = "stdout fake data"
- stdio[1].read.return_value = "stderr fake data"
- with mock.patch.object(self.test_client, "run", return_value=0)\
- as mock_run:
- status, stdout, stderr = self.test_client.execute(
- "cmd",
- stdin="fake_stdin",
- timeout=43)
- mock_run.assert_called_once_with(
- "cmd", stdin="fake_stdin", stdout=stdio[0],
- stderr=stdio[1], timeout=43, raise_on_error=False)
- self.assertEqual(0, status)
- self.assertEqual("stdout fake data", stdout)
- self.assertEqual("stderr fake data", stderr)
-
- @mock.patch("yardstick.ssh.time")
- def test_wait_timeout(self, mock_time):
- mock_time.time.side_effect = [1, 50, 150]
- self.test_client.execute = mock.Mock(side_effect=[ssh.SSHError,
- ssh.SSHError,
- 0])
- self.assertRaises(ssh.SSHTimeout, self.test_client.wait)
- self.assertEqual([mock.call("uname")] * 2,
- self.test_client.execute.mock_calls)
-
- @mock.patch("yardstick.ssh.time")
- def test_wait(self, mock_time):
- mock_time.time.side_effect = [1, 50, 100]
- self.test_client.execute = mock.Mock(side_effect=[ssh.SSHError,
- ssh.SSHError,
- 0])
- self.test_client.wait()
- self.assertEqual([mock.call("uname")] * 3,
- self.test_client.execute.mock_calls)
-
- @mock.patch("yardstick.ssh.paramiko")
- def test_send_command(self, mock_paramiko):
- paramiko_sshclient = self.test_client._get_client()
- with mock.patch.object(paramiko_sshclient, "exec_command") \
- as mock_paramiko_exec_command:
- self.test_client.send_command('cmd')
- mock_paramiko_exec_command.assert_called_once_with('cmd',
- get_pty=True)
-
-
-class SSHRunTestCase(unittest.TestCase):
- """Test SSH.run method in different aspects.
-
- Also tested method "execute".
- """
-
- def setUp(self):
- super(SSHRunTestCase, self).setUp()
-
- self.fake_client = mock.Mock()
- self.fake_session = mock.Mock()
- self.fake_transport = mock.Mock()
-
- self.fake_transport.open_session.return_value = self.fake_session
- self.fake_client.get_transport.return_value = self.fake_transport
-
- self.fake_session.recv_ready.return_value = False
- self.fake_session.recv_stderr_ready.return_value = False
- self.fake_session.send_ready.return_value = False
- self.fake_session.exit_status_ready.return_value = True
- self.fake_session.recv_exit_status.return_value = 0
-
- self.test_client = ssh.SSH("admin", "example.net")
- self.test_client._get_client = mock.Mock(return_value=self.fake_client)
-
- @mock.patch("yardstick.ssh.select")
- def test_execute(self, mock_select):
- mock_select.select.return_value = ([], [], [])
- self.fake_session.recv_ready.side_effect = [1, 0, 0]
- self.fake_session.recv_stderr_ready.side_effect = [1, 0]
- self.fake_session.recv.return_value = "ok"
- self.fake_session.recv_stderr.return_value = "error"
- self.fake_session.exit_status_ready.return_value = 1
- self.fake_session.recv_exit_status.return_value = 127
- self.assertEqual((127, "ok", "error"), self.test_client.execute("cmd"))
- self.fake_session.exec_command.assert_called_once_with("cmd")
-
- @mock.patch("yardstick.ssh.select")
- def test_execute_args(self, mock_select):
- mock_select.select.return_value = ([], [], [])
- self.fake_session.recv_ready.side_effect = [1, 0, 0]
- self.fake_session.recv_stderr_ready.side_effect = [1, 0]
- self.fake_session.recv.return_value = "ok"
- self.fake_session.recv_stderr.return_value = "error"
- self.fake_session.exit_status_ready.return_value = 1
- self.fake_session.recv_exit_status.return_value = 127
-
- result = self.test_client.execute("cmd arg1 'arg2 with space'")
- self.assertEqual((127, "ok", "error"), result)
- self.fake_session.exec_command.assert_called_once_with(
- "cmd arg1 'arg2 with space'")
-
- @mock.patch("yardstick.ssh.select")
- def test_run(self, mock_select):
- mock_select.select.return_value = ([], [], [])
- self.assertEqual(0, self.test_client.run("cmd"))
-
- @mock.patch("yardstick.ssh.select")
- def test_run_nonzero_status(self, mock_select):
- mock_select.select.return_value = ([], [], [])
- self.fake_session.recv_exit_status.return_value = 1
- self.assertRaises(ssh.SSHError, self.test_client.run, "cmd")
- self.assertEqual(1, self.test_client.run("cmd", raise_on_error=False))
-
- @mock.patch("yardstick.ssh.select")
- def test_run_stdout(self, mock_select):
- mock_select.select.return_value = ([], [], [])
- self.fake_session.recv_ready.side_effect = [True, True, False]
- self.fake_session.recv.side_effect = ["ok1", "ok2"]
- stdout = mock.Mock()
- self.test_client.run("cmd", stdout=stdout)
- self.assertEqual([mock.call("ok1"), mock.call("ok2")],
- stdout.write.mock_calls)
-
- @mock.patch("yardstick.ssh.select")
- def test_run_stderr(self, mock_select):
- mock_select.select.return_value = ([], [], [])
- self.fake_session.recv_stderr_ready.side_effect = [True, False]
- self.fake_session.recv_stderr.return_value = "error"
- stderr = mock.Mock()
- self.test_client.run("cmd", stderr=stderr)
- stderr.write.assert_called_once_with("error")
-
- @mock.patch("yardstick.ssh.select")
- def test_run_stdin(self, mock_select):
- """Test run method with stdin.
-
- Third send call was called with "e2" because only 3 bytes was sent
- by second call. So remainig 2 bytes of "line2" was sent by third call.
- """
- mock_select.select.return_value = ([], [], [])
- self.fake_session.exit_status_ready.side_effect = [0, 0, 0, True]
- self.fake_session.send_ready.return_value = True
- self.fake_session.send.side_effect = [5, 3, 2]
- fake_stdin = mock.Mock()
- fake_stdin.read.side_effect = ["line1", "line2", ""]
- fake_stdin.closed = False
-
- def close():
- fake_stdin.closed = True
- fake_stdin.close = mock.Mock(side_effect=close)
- self.test_client.run("cmd", stdin=fake_stdin)
- call = mock.call
- send_calls = [call(encodeutils.safe_encode("line1", "utf-8")),
- call(encodeutils.safe_encode("line2", "utf-8")),
- call(encodeutils.safe_encode("e2", "utf-8"))]
- self.assertEqual(send_calls, self.fake_session.send.mock_calls)
-
- @mock.patch("yardstick.ssh.select")
- def test_run_stdin_keep_open(self, mock_select):
- """Test run method with stdin.
-
- Third send call was called with "e2" because only 3 bytes was sent
- by second call. So remainig 2 bytes of "line2" was sent by third call.
- """
- mock_select.select.return_value = ([], [], [])
- self.fake_session.exit_status_ready.side_effect = [0, 0, 0, True]
- self.fake_session.send_ready.return_value = True
- self.fake_session.send.side_effect = len
- fake_stdin = StringIO(u"line1\nline2\n")
- self.test_client.run("cmd", stdin=fake_stdin, keep_stdin_open=True)
- call = mock.call
- send_calls = [call(encodeutils.safe_encode("line1\nline2\n", "utf-8"))]
- self.assertEqual(send_calls, self.fake_session.send.mock_calls)
-
- @mock.patch("yardstick.ssh.select")
- def test_run_select_error(self, mock_select):
- self.fake_session.exit_status_ready.return_value = False
- mock_select.select.return_value = ([], [], [True])
- self.assertRaises(ssh.SSHError, self.test_client.run, "cmd")
-
- @mock.patch("yardstick.ssh.time")
- @mock.patch("yardstick.ssh.select")
- def test_run_timemout(self, mock_select, mock_time):
- mock_time.time.side_effect = [1, 3700]
- mock_select.select.return_value = ([], [], [])
- self.fake_session.exit_status_ready.return_value = False
- self.assertRaises(ssh.SSHTimeout, self.test_client.run, "cmd")
-
- @mock.patch("yardstick.ssh.open", create=True)
- def test__put_file_shell(self, mock_open):
- with mock.patch.object(self.test_client, "run") as run_mock:
- self.test_client._put_file_shell("localfile", "remotefile", 0o42)
- run_mock.assert_called_once_with(
- 'cat > "remotefile"&& chmod -- 042 "remotefile"',
- stdin=mock_open.return_value.__enter__.return_value)
-
- @mock.patch("yardstick.ssh.open", create=True)
- def test__put_file_shell_space(self, mock_open):
- with mock.patch.object(self.test_client, "run") as run_mock:
- self.test_client._put_file_shell("localfile",
- "filename with space", 0o42)
- run_mock.assert_called_once_with(
- 'cat > "filename with space"&& chmod -- 042 "filename with '
- 'space"',
- stdin=mock_open.return_value.__enter__.return_value)
-
- @mock.patch("yardstick.ssh.open", create=True)
- def test__put_file_shell_tilde(self, mock_open):
- with mock.patch.object(self.test_client, "run") as run_mock:
- self.test_client._put_file_shell("localfile", "~/remotefile", 0o42)
- run_mock.assert_called_once_with(
- 'cat > ~/"remotefile"&& chmod -- 042 ~/"remotefile"',
- stdin=mock_open.return_value.__enter__.return_value)
-
- @mock.patch("yardstick.ssh.open", create=True)
- def test__put_file_shell_tilde_spaces(self, mock_open):
- with mock.patch.object(self.test_client, "run") as run_mock:
- self.test_client._put_file_shell("localfile", "~/file with space",
- 0o42)
- run_mock.assert_called_once_with(
- 'cat > ~/"file with space"&& chmod -- 042 ~/"file with space"',
- stdin=mock_open.return_value.__enter__.return_value)
-
- @mock.patch("yardstick.ssh.os.stat")
- def test__put_file_sftp(self, mock_stat):
- sftp = self.fake_client.open_sftp.return_value = mock.MagicMock()
- sftp.__enter__.return_value = sftp
-
- mock_stat.return_value = os.stat_result([0o753] + [0] * 9)
-
- self.test_client._put_file_sftp("localfile", "remotefile")
-
- sftp.put.assert_called_once_with("localfile", "remotefile")
- mock_stat.assert_any_call("localfile")
- sftp.chmod.assert_any_call("remotefile", 0o753)
- sftp.__exit__.assert_called_once_with(None, None, None)
-
- def test__put_file_sftp_mode(self):
- sftp = self.fake_client.open_sftp.return_value = mock.MagicMock()
- sftp.__enter__.return_value = sftp
-
- self.test_client._put_file_sftp("localfile", "remotefile", mode=0o753)
-
- sftp.put.assert_called_once_with("localfile", "remotefile")
- sftp.chmod.assert_called_once_with("remotefile", 0o753)
- sftp.__exit__.assert_called_once_with(None, None, None)
-
- def test_put_file_SSHException(self):
- exc = ssh.paramiko.SSHException
- self.test_client._put_file_sftp = mock.Mock(side_effect=exc())
- self.test_client._put_file_shell = mock.Mock()
-
- self.test_client.put_file("foo", "bar", 42)
- self.test_client._put_file_sftp.assert_called_once_with("foo", "bar",
- mode=42)
- self.test_client._put_file_shell.assert_called_once_with("foo", "bar",
- mode=42)
-
- def test_put_file_socket_error(self):
- exc = socket.error
- self.test_client._put_file_sftp = mock.Mock(side_effect=exc())
- self.test_client._put_file_shell = mock.Mock()
-
- self.test_client.put_file("foo", "bar", 42)
- self.test_client._put_file_sftp.assert_called_once_with("foo", "bar",
- mode=42)
- self.test_client._put_file_shell.assert_called_once_with("foo", "bar",
- mode=42)
-
- @mock.patch("yardstick.ssh.os.stat")
- def test_put_file_obj_with_mode(self, mock_stat):
- sftp = self.fake_client.open_sftp.return_value = mock.MagicMock()
- sftp.__enter__.return_value = sftp
-
- mock_stat.return_value = os.stat_result([0o753] + [0] * 9)
-
- self.test_client.put_file_obj("localfile", "remotefile", 'my_mode')
-
- sftp.__enter__.assert_called_once()
- sftp.putfo.assert_called_once_with("localfile", "remotefile")
- sftp.chmod.assert_called_once_with("remotefile", 'my_mode')
- sftp.__exit__.assert_called_once_with(None, None, None)
-
-
-class TestAutoConnectSSH(unittest.TestCase):
-
- def test__connect_with_wait(self):
- auto_connect_ssh = AutoConnectSSH('user1', 'host1', wait=True)
- auto_connect_ssh._get_client = mock.Mock()
- auto_connect_ssh.wait = mock_wait = mock.Mock()
-
- auto_connect_ssh._connect()
- self.assertEqual(mock_wait.call_count, 1)
-
- def test__make_dict(self):
- auto_connect_ssh = AutoConnectSSH('user1', 'host1')
-
- expected = {
- 'user': 'user1',
- 'host': 'host1',
- 'port': SSH.SSH_PORT,
- 'pkey': None,
- 'key_filename': None,
- 'password': None,
- 'name': None,
- 'wait': True,
- }
- result = auto_connect_ssh._make_dict()
- self.assertDictEqual(result, expected)
-
- def test_get_class(self):
- auto_connect_ssh = AutoConnectSSH('user1', 'host1')
-
- self.assertEqual(auto_connect_ssh.get_class(), AutoConnectSSH)
-
- @mock.patch('yardstick.ssh.SCPClient')
- def test_put(self, mock_scp_client_type):
- auto_connect_ssh = AutoConnectSSH('user1', 'host1')
- auto_connect_ssh._client = mock.Mock()
-
- auto_connect_ssh.put('a', 'z')
- with mock_scp_client_type() as mock_scp_client:
- self.assertEqual(mock_scp_client.put.call_count, 1)
-
- def test_put_file(self):
- auto_connect_ssh = AutoConnectSSH('user1', 'host1')
- auto_connect_ssh._client = mock.Mock()
- auto_connect_ssh._put_file_sftp = mock_put_sftp = mock.Mock()
-
- auto_connect_ssh.put_file('a', 'b')
- self.assertEqual(mock_put_sftp.call_count, 1)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()