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/test_env_action.py44
-rw-r--r--tests/unit/apiserver/utils/test_influx.py62
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_model.py27
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_util.py36
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py84
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_volume.py83
-rw-r--r--tests/unit/cmd/commands/__init__.py0
-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.py248
-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/nfvi/test_resource.py26
-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.py64
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py16
-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.py37
-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_cmd/__init__.py (renamed from tests/unit/apiserver/resources/__init__.py)0
-rw-r--r--tests/unit/test_cmd/commands/__init__.py (renamed from tests/unit/cmd/__init__.py)0
-rw-r--r--tests/unit/test_cmd/commands/test_env.py (renamed from tests/unit/cmd/commands/test_env.py)6
-rw-r--r--tests/unit/test_cmd/commands/test_testcase.py (renamed from tests/unit/cmd/commands/test_testcase.py)0
-rw-r--r--tests/unit/test_cmd/test_NSBperf.py (renamed from tests/unit/cmd/test_NSBperf.py)3
-rw-r--r--tests/unit/test_ssh.py563
45 files changed, 827 insertions, 3435 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/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 4159e5ae8..021c18860 100644
--- a/tests/unit/benchmark/contexts/standalone/test_model.py
+++ b/tests/unit/benchmark/contexts/standalone/test_model.py
@@ -131,9 +131,9 @@ class ModelLibvirtTestCase(unittest.TestCase):
as mock_parse:
xml = copy.deepcopy(self.xml)
mock_parse.return_value = xml
- vf_pci = '0001:05:04.2'
+ vm_pci = '0001:05:04.2'
model.Libvirt.add_sriov_interfaces(
- self.pci_address_str, vf_pci, self.mac, xml_input)
+ 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')
@@ -142,8 +142,29 @@ class ModelLibvirtTestCase(unittest.TestCase):
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.assertIsNotNone(interface.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"
diff --git a/tests/unit/benchmark/scenarios/availability/test_util.py b/tests/unit/benchmark/scenarios/availability/test_util.py
index 0974f385a..03dc70e2a 100644
--- a/tests/unit/benchmark/scenarios/availability/test_util.py
+++ b/tests/unit/benchmark/scenarios/availability/test_util.py
@@ -16,36 +16,42 @@ 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'}
- def test_util_build_command_shell(self,mock_subprocess):
+ 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):
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.assertEquals('1', result)
- def test_buildshellparams(self,mock_subprocess):
- result = util.buildshellparams(self.cmd_config,True)
+ def test_buildshellparams(self):
+ result = util.buildshellparams(self.cmd_config, True)
self.assertEquals('/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_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/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/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/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 1ef8eee5f..000000000
--- a/tests/unit/common/test_ansible_common.py
+++ /dev/null
@@ -1,248 +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 six.moves import StringIO
-
-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):
- ansible_common.FileNameGenerator._handle_existing_file("/dev/null")
-
- def test_get_generator_from_file(self):
- ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "", "")
-
- def test_get_generator_from_file_middle(self):
- ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "",
- "null")
-
- def test_get_generator_from_file_prefix(self):
- ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "null",
- "middle")
-
-
-class AnsibleNodeTestCase(unittest.TestCase):
- def test_ansible_node(self):
- 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
- 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(""), [])
-
- def test_gen_inventory_lines(self):
- n = ansible_common.AnsibleNode
- a = ansible_common.AnsibleNodeDict(n, [{
- "name": "name", "user": "user", "password": "PASS",
- "role": "role",
- }])
- self.assertEqual(a.gen_all_inventory_lines(),
- ["name ansible_ssh_pass=PASS ansible_user=user"])
-
-
-class AnsibleCommonTestCase(unittest.TestCase):
- def test_get_timeouts(self):
- self.assertAlmostEquals(ansible_common.AnsibleCommon.get_timeout(-100), 1200.0)
-
- def test__init__(self):
- 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):
- nodes = [{
- "name": "name", "user": "user", "password": "PASS",
- "role": "role",
- }]
- a = ansible_common.AnsibleCommon(nodes)
- a.gen_inventory_ini_dict()
- self.assertEqual(a.inventory_dict, {
- 'nodes': ['name ansible_ssh_pass=PASS ansible_user=user'],
- 'role': ['name']
- })
-
- 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_inventory_file(self, mock_open, mock_tmp):
- nodes = [{
- "name": "name", "user": "user", "password": "PASS",
- "role": "role",
- }]
- d = tempfile.mkdtemp()
- try:
- a = ansible_common.AnsibleCommon(nodes)
- a.gen_inventory_ini_dict()
- inv_context = a._gen_ansible_inventory_file(d)
- with inv_context:
- c = StringIO()
- inv_context.write_func(c)
- self.assertIn("ansible_ssh_pass=PASS", c.getvalue())
- 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/nfvi/test_resource.py b/tests/unit/network_services/nfvi/test_resource.py
index 5c2f890e8..4584b093d 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
@@ -105,14 +104,16 @@ class TestResourceProfile(unittest.TestCase):
def test___init__(self):
self.assertEqual(True, 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"]
@@ -139,8 +140,7 @@ class TestResourceProfile(unittest.TestCase):
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, *args):
loadplugin = range(5)
port_names = range(5)
kwargs = {
@@ -152,13 +152,13 @@ class TestResourceProfile(unittest.TestCase):
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, *args):
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, *args):
self.resource_profile._start_collectd = mock.Mock(side_effect=RuntimeError)
with self.assertRaises(RuntimeError):
self.resource_profile.initiate_systemagent("/opt/nsb_bin")
@@ -267,8 +267,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/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..beb4f8f9f 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', ''))
@@ -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..63b2ac4ab 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
@@ -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")
@@ -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,16 @@ 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, *args):
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..635ce2735 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
@@ -456,7 +452,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
@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/apiserver/resources/__init__.py b/tests/unit/test_cmd/__init__.py
index e69de29bb..e69de29bb 100644
--- a/tests/unit/apiserver/resources/__init__.py
+++ b/tests/unit/test_cmd/__init__.py
diff --git a/tests/unit/cmd/__init__.py b/tests/unit/test_cmd/commands/__init__.py
index e69de29bb..e69de29bb 100644
--- a/tests/unit/cmd/__init__.py
+++ b/tests/unit/test_cmd/commands/__init__.py
diff --git a/tests/unit/cmd/commands/test_env.py b/tests/unit/test_cmd/commands/test_env.py
index 73cd5af47..13c3ed44a 100644
--- a/tests/unit/cmd/commands/test_env.py
+++ b/tests/unit/test_cmd/commands/test_env.py
@@ -49,6 +49,9 @@ class EnvCommandTestCase(unittest.TestCase):
@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):
+ # pylint: disable=unused-argument
+ # NOTE(ralonsoh): the pylint exception must be removed. The mocked
+ # command call must be tested.
task_id = str(uuid.uuid4())
get_mock.return_value = {'status': 2, 'result': 'error'}
status = EnvCommand()._check_status(task_id, 'hello world')
@@ -57,7 +60,8 @@ class EnvCommandTestCase(unittest.TestCase):
def test_print_status(self):
try:
EnvCommand()._print_status('hello', 'word')
- except Exception as e:
+ except Exception as e: # pylint: disable=broad-except
+ # NOTE(ralonsoh): try to reduce the scope of this exception.
self.assertIsInstance(e, IndexError)
diff --git a/tests/unit/cmd/commands/test_testcase.py b/tests/unit/test_cmd/commands/test_testcase.py
index 7ef157c19..7ef157c19 100644
--- a/tests/unit/cmd/commands/test_testcase.py
+++ b/tests/unit/test_cmd/commands/test_testcase.py
diff --git a/tests/unit/cmd/test_NSBperf.py b/tests/unit/test_cmd/test_NSBperf.py
index e1b4da7fc..19eb0afa0 100644
--- a/tests/unit/cmd/test_NSBperf.py
+++ b/tests/unit/test_cmd/test_NSBperf.py
@@ -27,7 +27,8 @@ from yardstick.cmd import NSBperf
@mock.patch('six.moves.input', return_value='0')
class TestHandler(unittest.TestCase):
- def test_handler(self, test):
+
+ def test_handler(self, *args):
subprocess.call = mock.Mock(return_value=0)
self.assertRaises(SystemExit, NSBperf.sigint_handler)
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()