aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/__init__.py76
-rw-r--r--tests/unit/apiserver/__init__.py47
-rw-r--r--tests/unit/apiserver/resources/__init__.py0
-rw-r--r--tests/unit/apiserver/resources/test_env_action.py44
-rw-r--r--tests/unit/apiserver/utils/test_influx.py62
-rw-r--r--tests/unit/benchmark/__init__.py0
-rw-r--r--tests/unit/benchmark/contexts/__init__.py0
-rw-r--r--tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml21
-rw-r--r--tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml32
-rw-r--r--tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml63
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample.yaml33
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_new.yaml96
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml82
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_ovs.yaml104
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml104
-rw-r--r--tests/unit/benchmark/contexts/standalone/__init__.py0
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml37
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml40
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_sample.yaml33
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml40
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_model.py414
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py377
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_sriov.py318
-rw-r--r--tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml135
-rw-r--r--tests/unit/benchmark/contexts/standalone_sample.yaml112
-rw-r--r--tests/unit/benchmark/contexts/test_dummy.py32
-rw-r--r--tests/unit/benchmark/contexts/test_heat.py503
-rw-r--r--tests/unit/benchmark/contexts/test_kubernetes.py205
-rw-r--r--tests/unit/benchmark/contexts/test_model.py589
-rw-r--r--tests/unit/benchmark/contexts/test_node.py398
-rw-r--r--tests/unit/benchmark/core/__init__.py0
-rw-r--r--tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml21
-rw-r--r--tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml23
-rw-r--r--tests/unit/benchmark/core/test_plugin.py102
-rw-r--r--tests/unit/benchmark/core/test_report.py72
-rw-r--r--tests/unit/benchmark/core/test_task.py314
-rw-r--r--tests/unit/benchmark/core/test_testcase.py45
-rw-r--r--tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml24
-rw-r--r--tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml26
-rw-r--r--tests/unit/benchmark/runner/__init__.py0
-rw-r--r--tests/unit/benchmark/runner/test_base.py95
-rw-r--r--tests/unit/benchmark/runner/test_search.py204
-rw-r--r--tests/unit/benchmark/scenarios/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/availability/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py84
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_attacker_general.py58
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_attacker_process.py55
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_basemonitor.py125
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_baseoperation.py87
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py93
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_director.py104
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_command.py95
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_general.py80
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_multi.py61
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_monitor_process.py59
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_operation_general.py72
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_result_checker_general.py116
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_scenario_general.py71
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_serviceha.py77
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_util.py51
-rw-r--r--tests/unit/benchmark/scenarios/compute/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt5
-rw-r--r--tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt9
-rw-r--r--tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt2
-rw-r--r--tests/unit/benchmark/scenarios/compute/memload_sample_output.txt3
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_cachestat.py97
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_computecapacity.py66
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_cpuload.py264
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_cyclictest.py175
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_lmbench.py198
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_memload.py119
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_plugintest.py62
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_qemumigrate.py166
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_ramspeed.py244
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_spec_cpu.py86
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py84
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_unixbench.py171
-rw-r--r--tests/unit/benchmark/scenarios/dummy/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/dummy/test_dummy.py34
-rw-r--r--tests/unit/benchmark/scenarios/lib/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_add_memory_load.py65
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_attach_volume.py33
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_check_connectivity.py84
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_check_numa_info.py84
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_check_value.py46
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_flavor.py37
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py34
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_image.py41
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_keypair.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_network.py39
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_port.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_router.py39
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_sec_group.py39
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_server.py42
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_subnet.py41
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_create_volume.py40
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_flavor.py35
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_image.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_keypair.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_network.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_port.py34
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_router.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py37
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_server.py35
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_delete_volume.py36
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_detach_volume.py35
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_get_flavor.py33
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py51
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_get_numa_info.py106
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_get_server.py50
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_get_server_ip.py41
-rw-r--r--tests/unit/benchmark/scenarios/networking/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/networking/imix_voice.yaml41
-rw-r--r--tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json1
-rw-r--r--tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json1
-rw-r--r--tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml18
-rw-r--r--tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml101
-rwxr-xr-xtests/unit/benchmark/scenarios/networking/netperf_sample_output.json1
-rw-r--r--tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt9
-rw-r--r--tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt13
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_iperf3.py202
-rwxr-xr-xtests/unit/benchmark/scenarios/networking/test_netperf.py130
-rwxr-xr-xtests/unit/benchmark/scenarios/networking/test_netperf_node.py130
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_netutilization.py227
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_networkcapacity.py61
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_nstat.py118
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_ping.py101
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_ping6.py125
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen.py746
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py181
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py187
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_sfc.py77
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vnf_generic.py787
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vsperf.py136
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py237
-rw-r--r--tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml75
-rw-r--r--tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml50
-rw-r--r--tests/unit/benchmark/scenarios/parser/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/parser/test_parser.py62
-rw-r--r--tests/unit/benchmark/scenarios/storage/__init__.py0
-rw-r--r--tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json1
-rw-r--r--tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json1
-rw-r--r--tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json1
-rw-r--r--tests/unit/benchmark/scenarios/storage/test_bonnie.py74
-rw-r--r--tests/unit/benchmark/scenarios/storage/test_fio.py273
-rw-r--r--tests/unit/benchmark/scenarios/storage/test_storagecapacity.py108
-rw-r--r--tests/unit/benchmark/scenarios/storage/test_storperf.py238
-rw-r--r--tests/unit/benchmark/scenarios/test_base.py53
-rw-r--r--tests/unit/cmd/__init__.py0
-rw-r--r--tests/unit/cmd/commands/__init__.py0
-rw-r--r--tests/unit/cmd/commands/test_env.py69
-rw-r--r--tests/unit/cmd/commands/test_testcase.py29
-rw-r--r--tests/unit/cmd/test_NSBperf.py119
-rw-r--r--tests/unit/common/__init__.py0
-rw-r--r--tests/unit/common/config_sample.yaml10
-rw-r--r--tests/unit/common/test_ansible_common.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.py150
-rw-r--r--tests/unit/common/test_template_format.py51
-rw-r--r--tests/unit/common/test_utils.py1085
-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/__init__.py0
-rw-r--r--tests/unit/network_services/collector/__init__.py0
-rw-r--r--tests/unit/network_services/collector/test_publisher.py41
-rw-r--r--tests/unit/network_services/collector/test_subscriber.py98
-rw-r--r--tests/unit/network_services/helpers/__init__.py0
-rw-r--r--tests/unit/network_services/helpers/acl_vnf_topology_ixia.yaml50
-rw-r--r--tests/unit/network_services/helpers/test_cpu.py119
-rw-r--r--tests/unit/network_services/helpers/test_dpdkbindnic_helper.py260
-rw-r--r--tests/unit/network_services/helpers/test_iniparser.py225
-rw-r--r--tests/unit/network_services/helpers/test_samplevnf_helper.py1170
-rw-r--r--tests/unit/network_services/libs/__init__.py0
-rw-r--r--tests/unit/network_services/libs/ixia_libs/__init__.py0
-rw-r--r--tests/unit/network_services/libs/ixia_libs/test_IxNet.py876
-rw-r--r--tests/unit/network_services/nfvi/__init__.py0
-rw-r--r--tests/unit/network_services/nfvi/test_collectd.py157
-rw-r--r--tests/unit/network_services/nfvi/test_resource.py275
-rw-r--r--tests/unit/network_services/test_utils.py143
-rw-r--r--tests/unit/network_services/test_yang_model.py135
-rw-r--r--tests/unit/network_services/traffic_profile/__init__.py0
-rw-r--r--tests/unit/network_services/traffic_profile/test_base.py62
-rw-r--r--tests/unit/network_services/traffic_profile/test_fixed.py122
-rw-r--r--tests/unit/network_services/traffic_profile/test_http.py45
-rw-r--r--tests/unit/network_services/traffic_profile/test_http_ixload.py272
-rw-r--r--tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py646
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_acl.py78
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_binsearch.py99
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_profile.py117
-rw-r--r--tests/unit/network_services/traffic_profile/test_prox_ramp.py97
-rw-r--r--tests/unit/network_services/traffic_profile/test_rfc2544.py290
-rw-r--r--tests/unit/network_services/traffic_profile/test_traffic_profile.py246
-rw-r--r--tests/unit/network_services/vnf_generic/__init__.py0
-rw-r--r--tests/unit/network_services/vnf_generic/test_vnfdgen.py281
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/__init__.py0
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/acl_1rule.yaml47
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml41
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py348
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_base.py238
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py437
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py2312
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py432
-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.py2077
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py320
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py296
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py426
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py352
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py341
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py489
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py476
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py365
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py783
-rw-r--r--tests/unit/orchestrator/__init__.py0
-rw-r--r--tests/unit/orchestrator/test_heat.py339
-rw-r--r--tests/unit/orchestrator/test_kubernetes.py114
-rw-r--r--tests/unit/test_ssh.py572
222 files changed, 0 insertions, 33048 deletions
diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py
deleted file mode 100644
index a468b272b..000000000
--- a/tests/unit/__init__.py
+++ /dev/null
@@ -1,76 +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.
-
-from __future__ import absolute_import
-import mock
-
-
-STL_MOCKS = {
- 'trex_stl_lib': mock.MagicMock(),
- 'trex_stl_lib.base64': mock.MagicMock(),
- 'trex_stl_lib.binascii': mock.MagicMock(),
- 'trex_stl_lib.collections': mock.MagicMock(),
- 'trex_stl_lib.copy': mock.MagicMock(),
- 'trex_stl_lib.datetime': mock.MagicMock(),
- 'trex_stl_lib.functools': mock.MagicMock(),
- 'trex_stl_lib.imp': mock.MagicMock(),
- 'trex_stl_lib.inspect': mock.MagicMock(),
- 'trex_stl_lib.json': mock.MagicMock(),
- 'trex_stl_lib.linecache': mock.MagicMock(),
- 'trex_stl_lib.math': mock.MagicMock(),
- 'trex_stl_lib.os': mock.MagicMock(),
- 'trex_stl_lib.platform': mock.MagicMock(),
- 'trex_stl_lib.pprint': mock.MagicMock(),
- 'trex_stl_lib.random': mock.MagicMock(),
- 'trex_stl_lib.re': mock.MagicMock(),
- 'trex_stl_lib.scapy': mock.MagicMock(),
- 'trex_stl_lib.socket': mock.MagicMock(),
- 'trex_stl_lib.string': mock.MagicMock(),
- 'trex_stl_lib.struct': mock.MagicMock(),
- 'trex_stl_lib.sys': mock.MagicMock(),
- 'trex_stl_lib.threading': mock.MagicMock(),
- 'trex_stl_lib.time': mock.MagicMock(),
- 'trex_stl_lib.traceback': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_client': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_ext': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_port': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_stats': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_streams': mock.MagicMock(),
- 'trex_stl_lib.trex_stl_types': mock.MagicMock(),
- 'trex_stl_lib.types': mock.MagicMock(),
- 'trex_stl_lib.utils': mock.MagicMock(),
- 'trex_stl_lib.utils.argparse': mock.MagicMock(),
- 'trex_stl_lib.utils.collections': mock.MagicMock(),
- 'trex_stl_lib.utils.common': mock.MagicMock(),
- 'trex_stl_lib.utils.json': mock.MagicMock(),
- 'trex_stl_lib.utils.os': mock.MagicMock(),
- 'trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
- 'trex_stl_lib.utils.pwd': mock.MagicMock(),
- 'trex_stl_lib.utils.random': mock.MagicMock(),
- 'trex_stl_lib.utils.re': mock.MagicMock(),
- 'trex_stl_lib.utils.string': mock.MagicMock(),
- 'trex_stl_lib.utils.sys': mock.MagicMock(),
- 'trex_stl_lib.utils.text_opts': mock.MagicMock(),
- 'trex_stl_lib.utils.text_tables': mock.MagicMock(),
- 'trex_stl_lib.utils.texttable': mock.MagicMock(),
- 'trex_stl_lib.warnings': mock.MagicMock(),
- 'trex_stl_lib.yaml': mock.MagicMock(),
- 'trex_stl_lib.zlib': mock.MagicMock(),
- 'trex_stl_lib.zmq': mock.MagicMock(),
-}
diff --git a/tests/unit/apiserver/__init__.py b/tests/unit/apiserver/__init__.py
deleted file mode 100644
index 5e1ed2ea1..000000000
--- a/tests/unit/apiserver/__init__.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from __future__ import absolute_import
-
-import mock
-import os
-import socket
-import unittest
-import tempfile
-
-from oslo_serialization import jsonutils
-
-from yardstick.common import constants as consts
-
-
-class APITestCase(unittest.TestCase):
-
- def setUp(self):
- self.db_fd, self.db_path = tempfile.mkstemp()
- consts.SQLITE = 'sqlite:///{}'.format(self.db_path)
-
- # server calls gethostbyname which takes 4 seconds, and we should mock it anyway
- self.socket_mock = mock.patch.dict("sys.modules", {"socket": mock.MagicMock(
- **{"gethostbyname.return_value": "127.0.0.1", "gethostname.return_value": "localhost"})})
- self.socket_mock.start()
- try:
- from api import server
- except socket.gaierror:
- self.app = None
- return
-
- server.app.config['TESTING'] = True
- self.app = server.app.test_client()
-
- server.init_db()
-
- def tearDown(self):
- os.close(self.db_fd)
- os.unlink(self.db_path)
- self.socket_mock.stop()
-
- def _post(self, url, data):
- headers = {'Content-Type': 'application/json'}
- resp = self.app.post(url, data=jsonutils.dumps(data), headers=headers)
- return jsonutils.loads(resp.data)
-
- def _get(self, url):
- resp = self.app.get(url)
- return jsonutils.loads(resp.data)
diff --git a/tests/unit/apiserver/resources/__init__.py b/tests/unit/apiserver/resources/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/apiserver/resources/__init__.py
+++ /dev/null
diff --git a/tests/unit/apiserver/resources/test_env_action.py b/tests/unit/apiserver/resources/test_env_action.py
deleted file mode 100644
index 5417ad953..000000000
--- a/tests/unit/apiserver/resources/test_env_action.py
+++ /dev/null
@@ -1,44 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-from __future__ import absolute_import
-
-import time
-import unittest
-
-from tests.unit.apiserver import APITestCase
-
-
-class EnvTestCase(APITestCase):
-
- def test_create_grafana(self):
- if self.app is None:
- unittest.skip('host config error')
- return
-
- url = 'yardstick/env/action'
- data = {'action': 'create_grafana'}
- resp = self._post(url, data)
-
- time.sleep(0)
-
- task_id = resp['result']['task_id']
- url = '/yardstick/asynctask?task_id={}'.format(task_id)
- resp = self._get(url)
-
- time.sleep(0)
-
- self.assertTrue(u'status' in resp)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/apiserver/utils/test_influx.py b/tests/unit/apiserver/utils/test_influx.py
deleted file mode 100644
index aff0cab5c..000000000
--- a/tests/unit/apiserver/utils/test_influx.py
+++ /dev/null
@@ -1,62 +0,0 @@
-##############################################################################
-# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-from __future__ import absolute_import
-import unittest
-import mock
-
-from api.utils import influx
-
-import six.moves.configparser as ConfigParser
-
-
-class GetDataDbClientTestCase(unittest.TestCase):
-
- @mock.patch('api.utils.influx.ConfigParser')
- def test_get_data_db_client_dispatcher_not_influxdb(self, mock_parser):
- mock_parser.ConfigParser().get.return_value = 'file'
- # reset exception to avoid
- # TypeError: catching classes that do not inherit from BaseException
- mock_parser.NoOptionError = ConfigParser.NoOptionError
- try:
- influx.get_data_db_client()
- except Exception as e:
- self.assertIsInstance(e, RuntimeError)
-
-
-class GetIpTestCase(unittest.TestCase):
-
- def test_get_url(self):
- url = 'http://localhost:8086/hello'
- output = influx._get_ip(url)
-
- result = 'localhost'
- self.assertEqual(result, output)
-
-
-class QueryTestCase(unittest.TestCase):
-
- @mock.patch('api.utils.influx.ConfigParser')
- def test_query_dispatcher_not_influxdb(self, mock_parser):
- mock_parser.ConfigParser().get.return_value = 'file'
- # reset exception to avoid
- # TypeError: catching classes that do not inherit from BaseException
- mock_parser.NoOptionError = ConfigParser.NoOptionError
- try:
- sql = 'select * form tasklist'
- influx.query(sql)
- except Exception as e:
- self.assertIsInstance(e, RuntimeError)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/__init__.py b/tests/unit/benchmark/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/contexts/__init__.py b/tests/unit/benchmark/contexts/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/contexts/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml b/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml
deleted file mode 100644
index dbdd3700d..000000000
--- a/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml
+++ /dev/null
@@ -1,21 +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
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node1
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml b/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml
deleted file mode 100644
index 306915ca1..000000000
--- a/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-nodes:
--
- name: sriov
- role: Sriov1
- ip: 10.123.123.122
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
--
- name: sriov
- role: Sriov1
- ip: 10.123.123.111
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml b/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml
deleted file mode 100644
index 65449c91c..000000000
--- a/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) 2016 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.
-nodes:
--
- name: ovs
- role: test
- ip: 10.223.197.222
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
--
- name: ovs
- role: test
- ip: 10.223.197.112
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
diff --git a/tests/unit/benchmark/contexts/nodes_sample.yaml b/tests/unit/benchmark/contexts/nodes_sample.yaml
deleted file mode 100644
index 8d50c3aea..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample.yaml
+++ /dev/null
@@ -1,33 +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
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/nodes_sample_new.yaml b/tests/unit/benchmark/contexts/nodes_sample_new.yaml
deleted file mode 100644
index a400bec03..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_new.yaml
+++ /dev/null
@@ -1,96 +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.
-
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.123.123.123
- user: root
- auth_type: password
- password: password
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
--
- name: sriov
- role: Sriov
- ip: 10.123.123.122
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.123.123.121
- user: root
- auth_type: password
- password: password
- host: 10.123.123.121 #BM host == ip, SRIOV & ovs-dpdk host == compute node.
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- 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"
- 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"
-
diff --git a/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml b/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml
deleted file mode 100644
index 55ff2e778..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml
+++ /dev/null
@@ -1,82 +0,0 @@
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.123.123.123
- user: root
- auth_type: password
- password: password
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
--
- name: sriov
- role: Sriov1
- ip: 10.123.123.122
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.123.123.121
- user: root
- auth_type: password
- password: password
- host: 10.123.123.121 #BM host == ip, SRIOV & ovs-dpdk host == compute node.
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- 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"
- 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"
-
diff --git a/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml b/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml
deleted file mode 100644
index b1da1ea9f..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml
+++ /dev/null
@@ -1,104 +0,0 @@
-# Copyright (c) 2016 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.
-
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.223.197.182
- user: root
- auth_type: password
- password: intel123
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:68"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:69"
--
- name: ovs
- role: Ovsdpdk
- ip: 10.223.197.222
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.223.197.155
- user: root
- auth_type: password
- password: intel123
- host: 10.223.197.140
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:03"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:04"
- 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"
- 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"
diff --git a/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml b/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml
deleted file mode 100644
index c02849a05..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml
+++ /dev/null
@@ -1,104 +0,0 @@
-# Copyright (c) 2016 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.
-
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.223.197.182
- user: root
- auth_type: password
- password: intel123
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:68"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:69"
--
- name: ovs
- role: Ovsdpdk1
- ip: 10.223.197.222
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.223.197.155
- user: root
- auth_type: password
- password: intel123
- host: 10.223.197.140
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:03"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:04"
- 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"
- 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"
diff --git a/tests/unit/benchmark/contexts/standalone/__init__.py b/tests/unit/benchmark/contexts/standalone/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/contexts/standalone/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml
deleted file mode 100644
index 2e501a6af..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml
+++ /dev/null
@@ -1,37 +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
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node1
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
-
--
- name: node5
- role: Sriov
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
-
--
- name: node5
- role: OvsDpdk
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml
deleted file mode 100644
index 0f51dbe63..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml
+++ /dev/null
@@ -1,40 +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
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
--
- name: node5
- role: OvsDpdk
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml
deleted file mode 100644
index 8d50c3aea..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml
+++ /dev/null
@@ -1,33 +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
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml
deleted file mode 100644
index 1c43b8725..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml
+++ /dev/null
@@ -1,40 +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
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
--
- name: node5
- role: Sriov
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/test_model.py b/tests/unit/benchmark/contexts/standalone/test_model.py
deleted file mode 100644
index 31ec2b7d1..000000000
--- a/tests/unit/benchmark/contexts/standalone/test_model.py
+++ /dev/null
@@ -1,414 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Unittest for yardstick.benchmark.contexts.standalone.model
-
-from __future__ import absolute_import
-import copy
-import os
-import unittest
-import mock
-
-from xml.etree import ElementTree
-
-from yardstick.benchmark.contexts.standalone import model
-from yardstick.network_services import utils
-from yardstick.network_services.helpers import cpu
-
-
-XML_SAMPLE = """<?xml version="1.0"?>
-<domain type="kvm">
- <devices>
- </devices>
-</domain>
-"""
-
-XML_SAMPLE_INTERFACE = """<?xml version="1.0"?>
-<domain type="kvm">
- <devices>
- <interface>
- </interface>
- </devices>
-</domain>
-"""
-
-class ModelLibvirtTestCase(unittest.TestCase):
-
- def setUp(self):
- self.xml = ElementTree.ElementTree(
- element=ElementTree.fromstring(XML_SAMPLE))
- self.pci_address_str = '0001:04:03.2'
- self.pci_address = utils.PciAddress(self.pci_address_str)
- self.mac = '00:00:00:00:00:01'
- self._mock_write_xml = mock.patch.object(ElementTree.ElementTree,
- 'write')
- self.mock_write_xml = self._mock_write_xml.start()
-
- self.addCleanup(self._cleanup)
-
- def _cleanup(self):
- self._mock_write_xml.stop()
-
- def test_check_if_vm_exists_and_delete(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution.
- model.Libvirt.check_if_vm_exists_and_delete("vm_0", ssh_mock)
-
- def test_virsh_create_vm(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution.
- model.Libvirt.virsh_create_vm(ssh_mock, "vm_0")
-
- def test_virsh_destroy_vm(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution.
- model.Libvirt.virsh_destroy_vm("vm_0", ssh_mock)
-
- def test_add_interface_address(self):
- xml = ElementTree.ElementTree(
- element=ElementTree.fromstring(XML_SAMPLE_INTERFACE))
- interface = xml.find('devices').find('interface')
- result = model.Libvirt._add_interface_address(interface, self.pci_address)
- self.assertEqual('pci', result.get('type'))
- self.assertEqual('0x{}'.format(self.pci_address.domain),
- result.get('domain'))
- self.assertEqual('0x{}'.format(self.pci_address.bus),
- result.get('bus'))
- self.assertEqual('0x{}'.format(self.pci_address.slot),
- result.get('slot'))
- self.assertEqual('0x{}'.format(self.pci_address.function),
- result.get('function'))
-
- def test_add_ovs_interfaces(self):
- xml_input = mock.Mock()
- with mock.patch.object(ElementTree, 'parse', return_value=self.xml) \
- as mock_parse:
- xml = copy.deepcopy(self.xml)
- mock_parse.return_value = xml
- model.Libvirt.add_ovs_interface(
- '/usr/local', 0, self.pci_address_str, self.mac, xml_input)
- mock_parse.assert_called_once_with(xml_input)
- self.mock_write_xml.assert_called_once_with(xml_input)
- interface = xml.find('devices').find('interface')
- self.assertEqual('vhostuser', interface.get('type'))
- mac = interface.find('mac')
- self.assertEqual(self.mac, mac.get('address'))
- source = interface.find('source')
- self.assertEqual('unix', source.get('type'))
- self.assertEqual('/usr/local/var/run/openvswitch/dpdkvhostuser0',
- source.get('path'))
- self.assertEqual('client', source.get('mode'))
- _model = interface.find('model')
- self.assertEqual('virtio', _model.get('type'))
- driver = interface.find('driver')
- self.assertEqual('4', driver.get('queues'))
- host = driver.find('host')
- self.assertEqual('off', host.get('mrg_rxbuf'))
- self.assertIsNotNone(interface.find('address'))
-
- def test_add_sriov_interfaces(self):
- xml_input = mock.Mock()
- with mock.patch.object(ElementTree, 'parse', return_value=self.xml) \
- as mock_parse:
- xml = copy.deepcopy(self.xml)
- mock_parse.return_value = xml
- vf_pci = '0001:05:04.2'
- model.Libvirt.add_sriov_interfaces(
- self.pci_address_str, vf_pci, self.mac, xml_input)
- mock_parse.assert_called_once_with(xml_input)
- self.mock_write_xml.assert_called_once_with(xml_input)
- interface = xml.find('devices').find('interface')
- self.assertEqual('yes', interface.get('managed'))
- self.assertEqual('hostdev', interface.get('type'))
- mac = interface.find('mac')
- self.assertEqual(self.mac, mac.get('address'))
- source = interface.find('source')
- self.assertIsNotNone(source.find('address'))
- self.assertIsNotNone(interface.find('address'))
-
- def test_create_snapshot_qemu(self):
- result = "/var/lib/libvirt/images/0.qcow2"
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- image = model.Libvirt.create_snapshot_qemu(ssh_mock, "0", "ubuntu.img")
- self.assertEqual(image, result)
-
- @mock.patch.object(model.Libvirt, 'pin_vcpu_for_perf')
- @mock.patch.object(model.Libvirt, 'create_snapshot_qemu')
- def test_build_vm_xml(self, mock_create_snapshot_qemu,
- *args):
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- result = [4]
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- mock_create_snapshot_qemu.return_value = "0.img"
-
- status = model.Libvirt.build_vm_xml(ssh_mock, {}, "test", "vm_0", 0)
- self.assertEqual(status[0], result[0])
-
- def test_update_interrupts_hugepages_perf(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.Libvirt.update_interrupts_hugepages_perf(ssh_mock)
-
- @mock.patch.object(cpu.CpuSysCores, 'get_core_socket')
- def test_pin_vcpu_for_perf(self, mock_get_core_socket):
- mock_get_core_socket.return_value = {
- 'cores_per_socket': 1,
- 'thread_per_core': 1,
- '0': [1, 2]
- }
- # NOTE(ralonsoh): this test doesn't cover function execution. This
- # function needs more tests.
- model.Libvirt.pin_vcpu_for_perf(mock.Mock())
-
-
-class StandaloneContextHelperTestCase(unittest.TestCase):
-
- NODE_SAMPLE = "nodes_sample.yaml"
- NODE_SRIOV_SAMPLE = "nodes_sriov_sample.yaml"
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'cidr': '152.16.100.10/24',
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'cidr': '152.16.40.10/24',
- 'gateway_ip': '152.16.100.20'}
- }
-
- def setUp(self):
- self.helper = model.StandaloneContextHelper()
-
- def test___init__(self):
- self.assertIsNone(self.helper.file_path)
-
- def test_install_req_libs(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.install_req_libs(ssh_mock)
-
- def test_get_kernel_module(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "i40e", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.get_kernel_module(
- ssh_mock, "05:00.0", None)
-
- @mock.patch.object(model.StandaloneContextHelper, 'get_kernel_module')
- def test_get_nic_details(self, mock_get_kernel_module):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "i40e ixgbe", ""))
- ssh.return_value = ssh_mock
- mock_get_kernel_module.return_value = "i40e"
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.get_nic_details(
- ssh_mock, self.NETWORKS, 'dpdk-devbind.py')
-
- def test_get_virtual_devices(self):
- pattern = "PCI_SLOT_NAME=0000:05:00.0"
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, pattern, ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.get_virtual_devices(
- ssh_mock, '0000:00:05.0')
-
- def _get_file_abspath(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- file_path = os.path.join(curr_path, filename)
- return file_path
-
- def test_read_config_file(self):
- self.helper.file_path = self._get_file_abspath(self.NODE_SAMPLE)
- status = self.helper.read_config_file()
- self.assertIsNotNone(status)
-
- def test_parse_pod_file(self):
- self.helper.file_path = self._get_file_abspath("dummy")
- self.assertRaises(IOError, self.helper.parse_pod_file,
- self.helper.file_path)
-
- self.helper.file_path = self._get_file_abspath(self.NODE_SAMPLE)
- self.assertRaises(TypeError, self.helper.parse_pod_file,
- self.helper.file_path)
-
- self.helper.file_path = self._get_file_abspath(self.NODE_SRIOV_SAMPLE)
- self.assertIsNotNone(self.helper.parse_pod_file(self.helper.file_path))
-
- def test_get_mac_address(self):
- status = model.StandaloneContextHelper.get_mac_address()
- self.assertIsNotNone(status)
-
- @mock.patch('yardstick.ssh.SSH')
- def test_get_mgmt_ip(self, *args):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(
- return_value=(1, "1.2.3.4 00:00:00:00:00:01", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- status = model.StandaloneContextHelper.get_mgmt_ip(
- ssh_mock, "00:00:00:00:00:01", "1.1.1.1/24", {})
- self.assertIsNotNone(status)
-
- @mock.patch('yardstick.ssh.SSH')
- def test_get_mgmt_ip_no(self, *args):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.WAIT_FOR_BOOT = 0
- status = model.StandaloneContextHelper.get_mgmt_ip(
- ssh_mock, "99", "1.1.1.1/24", {})
- self.assertIsNone(status)
-
-
-class ServerTestCase(unittest.TestCase):
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.100.10/24',
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.40.10/24',
- 'gateway_ip': '152.16.100.20'}
- }
-
- def setUp(self):
- self.server = model.Server()
-
- def test___init__(self):
- self.assertIsNotNone(self.server)
-
- def test_build_vnf_interfaces(self):
- vnf = {
- "network_ports": {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0'],
- }
- }
- status = model.Server.build_vnf_interfaces(vnf, self.NETWORKS)
- self.assertIsNotNone(status)
-
- def test_generate_vnf_instance(self):
- vnf = {
- "network_ports": {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0'],
- }
- }
- status = self.server.generate_vnf_instance(
- {}, self.NETWORKS, '1.1.1.1/24', 'vm_0', vnf, '00:00:00:00:00:01')
- self.assertIsNotNone(status)
-
-class OvsDeployTestCase(unittest.TestCase):
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.100.10/24',
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.40.10/24',
- 'gateway_ip': '152.16.100.20'}
- }
- @mock.patch('yardstick.ssh.SSH')
- def setUp(self, mock_ssh):
- self.ovs_deploy = model.OvsDeploy(mock_ssh, '/tmp/dpdk-devbind.py', {})
-
- def test___init__(self):
- self.assertIsNotNone(self.ovs_deploy.connection)
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.os')
- def test_prerequisite(self, *args):
- # NOTE(ralonsoh): this test should check mocked function calls.
- self.ovs_deploy.helper = mock.Mock()
- self.assertIsNone(self.ovs_deploy.prerequisite())
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.os')
- def test_prerequisite_2(self, *args):
- # NOTE(ralonsoh): this test should check mocked function calls. Rename
- # this test properly.
- self.ovs_deploy.helper = mock.Mock()
- self.ovs_deploy.connection.execute = mock.Mock(
- return_value=(1, '1.2.3.4 00:00:00:00:00:01', ''))
- self.ovs_deploy.prerequisite = mock.Mock()
- self.assertIsNone(self.ovs_deploy.ovs_deploy())
diff --git a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py b/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
deleted file mode 100644
index 5d1b0421c..000000000
--- a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
+++ /dev/null
@@ -1,377 +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.
-
-# Unittest for yardstick.benchmark.contexts.standalone.standaloneovs
-
-from __future__ import absolute_import
-import os
-import unittest
-import errno
-import mock
-
-from yardstick.common import constants as consts
-from yardstick.benchmark.contexts.standalone import ovs_dpdk
-from yardstick.network_services.utils import PciAddress
-
-
-class OvsDpdkContextTestCase(unittest.TestCase):
-
- NODES_SAMPLE = "nodes_sample.yaml"
- NODES_ovs_dpdk_SAMPLE = "nodes_ovs_dpdk_sample.yaml"
- NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample.yaml"
-
- ATTRS = {
- 'name': 'StandaloneOvsDpdk',
- 'file': 'pod',
- 'flavor': {},
- 'servers': {},
- 'networks': {},
- }
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'cidr': '152.16.100.10/24',
- 'interface': 'if0',
- 'mac': "00:00:00:00:00:01",
- 'vf_pci': {'vf_pci': 0},
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'cidr': '152.16.40.10/24',
- 'interface': 'if0',
- 'vf_pci': {'vf_pci': 0},
- 'mac': "00:00:00:00:00:01",
- 'gateway_ip': '152.16.100.20'},
- }
-
- def setUp(self):
- self.ovs_dpdk = ovs_dpdk.OvsDpdkContext()
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper')
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
- def test___init__(self, mock_helper, mock_server):
- self.ovs_dpdk.helper = mock_helper
- self.ovs_dpdk.vnf_node = mock_server
- self.assertIsNone(self.ovs_dpdk.file_path)
- self.assertEqual(self.ovs_dpdk.first_run, True)
-
- def test_init(self):
- self.ovs_dpdk.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
- self.assertIsNone(self.ovs_dpdk.init(self.ATTRS))
-
- def test_setup_ovs(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.ovs_properties = {}
- self.assertIsNone(self.ovs_dpdk.setup_ovs())
-
- def test_start_ovs_serverswitch(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.ovs_properties = {}
- self.ovs_dpdk.wait_for_vswitchd = 0
- self.assertIsNone(self.ovs_dpdk.start_ovs_serverswitch())
-
- def test_setup_ovs_bridge_add_flows(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.ovs_properties = {
- 'version': {'ovs': '2.7.0'}
- }
- self.ovs_dpdk.wait_for_vswitchd = 0
- self.assertIsNone(self.ovs_dpdk.setup_ovs_bridge_add_flows())
-
- def test_cleanup_ovs_dpdk_env(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.ovs_properties = {
- 'version': {'ovs': '2.7.0'}
- }
- self.ovs_dpdk.wait_for_vswitchd = 0
- self.assertIsNone(self.ovs_dpdk.cleanup_ovs_dpdk_env())
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.OvsDeploy')
- def test_check_ovs_dpdk_env(self, mock_ovs):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.ovs_properties = {
- 'version': {'ovs': '2.7.0', 'dpdk': '16.11.1'}
- }
- self.ovs_dpdk.wait_for_vswitchd = 0
- self.ovs_dpdk.cleanup_ovs_dpdk_env = mock.Mock()
- self.assertIsNone(self.ovs_dpdk.check_ovs_dpdk_env())
- self.ovs_dpdk.ovs_properties = {
- 'version': {'ovs': '2.0.0'}
- }
- self.ovs_dpdk.wait_for_vswitchd = 0
- self.cleanup_ovs_dpdk_env = mock.Mock()
- mock_ovs.deploy = mock.Mock()
- self.assertRaises(Exception, self.ovs_dpdk.check_ovs_dpdk_env)
-
- @mock.patch('yardstick.ssh.SSH')
- def test_deploy(self, mock_ssh):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.vm_deploy = False
- self.assertIsNone(self.ovs_dpdk.deploy())
-
- self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.host_mgmt = {}
- self.ovs_dpdk.install_req_libs = mock.Mock()
- self.ovs_dpdk.helper.get_nic_details = mock.Mock(return_value={})
- self.ovs_dpdk.check_ovs_dpdk_env = mock.Mock(return_value={})
- self.ovs_dpdk.setup_ovs = mock.Mock(return_value={})
- self.ovs_dpdk.start_ovs_serverswitch = mock.Mock(return_value={})
- self.ovs_dpdk.setup_ovs_bridge_add_flows = mock.Mock(return_value={})
- self.ovs_dpdk.setup_ovs_dpdk_context = mock.Mock(return_value={})
- self.ovs_dpdk.wait_for_vnfs_to_start = mock.Mock(return_value={})
- self.assertIsNone(self.ovs_dpdk.deploy())
-
- @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
- @mock.patch('yardstick.ssh.SSH')
- def test_undeploy(self, mock_ssh, mock_libvirt):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.vm_deploy = False
- self.assertIsNone(self.ovs_dpdk.undeploy())
-
- self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.vm_names = ['vm_0', 'vm_1']
- self.ovs_dpdk.drivers = ['vm_0', 'vm_1']
- self.ovs_dpdk.cleanup_ovs_dpdk_env = mock.Mock()
- self.ovs_dpdk.networks = self.NETWORKS
- self.assertIsNone(self.ovs_dpdk.undeploy())
-
- 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
-
- def test__get_server_with_dic_attr_name(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_ovs_dpdk_SAMPLE)
- }
-
- self.ovs_dpdk.init(attrs)
-
- attr_name = {'name': 'foo.bar'}
- result = self.ovs_dpdk._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_not_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_ovs_dpdk_SAMPLE)
- }
-
- self.ovs_dpdk.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
- self.ovs_dpdk.init(attrs)
-
- attr_name = 'bar.foo'
- result = self.ovs_dpdk._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_mismatch(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_ovs_dpdk_SAMPLE)
- }
-
- self.ovs_dpdk.init(attrs)
-
- attr_name = 'bar.foo1'
- result = self.ovs_dpdk._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_duplicate(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE)
- }
-
- self.ovs_dpdk.init(attrs)
-
- attr_name = 'node1.foo'
- with self.assertRaises(ValueError):
- self.ovs_dpdk._get_server(attr_name)
-
- def test__get_server_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_ovs_dpdk_SAMPLE)
- }
-
- self.ovs_dpdk.init(attrs)
-
- attr_name = 'node1.foo'
- result = self.ovs_dpdk._get_server(attr_name)
-
- self.assertEqual(result['ip'], '10.229.47.137')
- self.assertEqual(result['name'], 'node1.foo')
- self.assertEqual(result['user'], 'root')
- self.assertEqual(result['key_filename'], '/root/.yardstick_key')
-
- def test__get_network(self):
- network1 = {
- 'name': 'net_1',
- 'vld_id': 'vld111',
- 'segmentation_id': 'seg54',
- 'network_type': 'type_a',
- 'physical_network': 'phys',
- }
- network2 = {
- 'name': 'net_2',
- 'vld_id': 'vld999',
- }
- self.ovs_dpdk.networks = {
- 'a': network1,
- 'b': network2,
- }
-
- attr_name = {}
- self.assertIsNone(self.ovs_dpdk._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld777'}
- self.assertIsNone(self.ovs_dpdk._get_network(attr_name))
-
- self.assertIsNone(self.ovs_dpdk._get_network(None))
-
- attr_name = 'vld777'
- self.assertIsNone(self.ovs_dpdk._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld999'}
- expected = {
- "name": 'net_2',
- "vld_id": 'vld999',
- "segmentation_id": None,
- "network_type": None,
- "physical_network": None,
- }
- result = self.ovs_dpdk._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- attr_name = 'a'
- expected = network1
- result = self.ovs_dpdk._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- def test_configure_nics_for_ovs_dpdk(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.vm_names = ['vm_0', 'vm_1']
- self.ovs_dpdk.drivers = []
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.helper.get_mac_address = mock.Mock(return_value="")
- self.ovs_dpdk.get_vf_datas = mock.Mock(return_value="")
- self.assertIsNone(self.ovs_dpdk.configure_nics_for_ovs_dpdk())
-
- @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
- def test__enable_interfaces(self, mock_add_ovs_interface):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.vm_names = ['vm_0', 'vm_1']
- self.ovs_dpdk.drivers = []
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.get_vf_datas = mock.Mock(return_value="")
- self.assertIsNone(self.ovs_dpdk._enable_interfaces(0, ["private_0"], 'test'))
-
- @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
- def test_setup_ovs_dpdk_context(self, mock_server, mock_libvirt):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.vm_names = ['vm_0', 'vm_1']
- self.ovs_dpdk.drivers = []
- self.ovs_dpdk.servers = {
- 'vnf_0': {
- 'network_ports': {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0']
- }
- }
- }
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.host_mgmt = {}
- self.ovs_dpdk.flavor = {}
- self.ovs_dpdk.configure_nics_for_ovs_dpdk = mock.Mock(return_value="")
- mock_libvirt.check_if_vm_exists_and_delete = mock.Mock(return_value="")
- mock_libvirt.build_vm_xml = mock.Mock(return_value=[6, "00:00:00:00:00:01"])
- self.ovs_dpdk._enable_interfaces = mock.Mock(return_value="")
- mock_libvirt.virsh_create_vm = mock.Mock(return_value="")
- mock_libvirt.pin_vcpu_for_perf= mock.Mock(return_value="")
- self.ovs_dpdk.vnf_node.generate_vnf_instance = mock.Mock(return_value={})
- self.assertIsNotNone(self.ovs_dpdk.setup_ovs_dpdk_context())
diff --git a/tests/unit/benchmark/contexts/standalone/test_sriov.py b/tests/unit/benchmark/contexts/standalone/test_sriov.py
deleted file mode 100644
index 3ea673abc..000000000
--- a/tests/unit/benchmark/contexts/standalone/test_sriov.py
+++ /dev/null
@@ -1,318 +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.
-
-# Unittest for yardstick.benchmark.contexts.standalone.standalonesriov
-
-from __future__ import absolute_import
-import os
-import unittest
-import mock
-
-from yardstick import ssh
-from yardstick.benchmark.contexts.standalone import sriov
-
-
-class SriovContextTestCase(unittest.TestCase):
-
- NODES_SAMPLE = "nodes_sample.yaml"
- NODES_SRIOV_SAMPLE = "nodes_sriov_sample.yaml"
- NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample.yaml"
-
- ATTRS = {
- 'name': 'StandaloneSriov',
- 'file': 'pod',
- 'flavor': {},
- 'servers': {},
- 'networks': {},
- }
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'cidr': '152.16.100.10/24',
- 'interface': 'if0',
- 'mac': "00:00:00:00:00:01",
- 'vf_pci': {'vf_pci': 0},
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'cidr': '152.16.40.10/24',
- 'interface': 'if0',
- 'vf_pci': {'vf_pci': 0},
- 'mac': "00:00:00:00:00:01",
- 'gateway_ip': '152.16.100.20'},
- }
-
- def setUp(self):
- self.sriov = sriov.SriovContext()
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper')
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
- def test___init__(self, mock_helper, mock_libvirt, mock_server):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): this test doesn't cover function execution.
- # The pylint exception should be removed.
- self.sriov.helper = mock_helper
- self.sriov.vnf_node = mock_server
- self.assertIsNone(self.sriov.file_path)
- self.assertEqual(self.sriov.first_run, True)
-
- def test_init(self):
- self.sriov.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
- self.assertIsNone(self.sriov.init(self.ATTRS))
-
- @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
- def test_deploy(self, mock_ssh):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): this test doesn't cover function execution.
- # The pylint exception should be removed.
- self.sriov.vm_deploy = False
- self.assertIsNone(self.sriov.deploy())
-
- self.sriov.vm_deploy = True
- self.sriov.host_mgmt = {}
- self.sriov.install_req_libs = mock.Mock()
- self.sriov.get_nic_details = mock.Mock(return_value={})
- self.sriov.setup_sriov_context = mock.Mock(return_value={})
- self.sriov.wait_for_vnfs_to_start = mock.Mock(return_value={})
- self.assertIsNone(self.sriov.deploy())
-
- @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- def test_undeploy(self, mock_libvirt, mock_ssh):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): the pylint exception should be removed.
- self.sriov.vm_deploy = False
- self.assertIsNone(self.sriov.undeploy())
-
- self.sriov.vm_deploy = True
- self.sriov.connection = mock_ssh
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = ['vm_0', 'vm_1']
- self.assertIsNone(self.sriov.undeploy())
-
- 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
-
- def test__get_server_with_dic_attr_name(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = {'name': 'foo.bar'}
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_not_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
- self.sriov.init(attrs)
-
- attr_name = 'bar.foo'
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_mismatch(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = 'bar.foo1'
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_duplicate(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = 'node1.foo'
- with self.assertRaises(ValueError):
- self.sriov._get_server(attr_name)
-
- def test__get_server_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = 'node1.foo'
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result['ip'], '10.229.47.137')
- self.assertEqual(result['name'], 'node1.foo')
- self.assertEqual(result['user'], 'root')
- self.assertEqual(result['key_filename'], '/root/.yardstick_key')
-
- def test__get_network(self):
- network1 = {
- 'name': 'net_1',
- 'vld_id': 'vld111',
- 'segmentation_id': 'seg54',
- 'network_type': 'type_a',
- 'physical_network': 'phys',
- }
- network2 = {
- 'name': 'net_2',
- 'vld_id': 'vld999',
- }
- self.sriov.networks = {
- 'a': network1,
- 'b': network2,
- }
-
- attr_name = {}
- self.assertIsNone(self.sriov._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld777'}
- self.assertIsNone(self.sriov._get_network(attr_name))
-
- self.assertIsNone(self.sriov._get_network(None))
-
- attr_name = 'vld777'
- self.assertIsNone(self.sriov._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld999'}
- expected = {
- "name": 'net_2',
- "vld_id": 'vld999',
- "segmentation_id": None,
- "network_type": None,
- "physical_network": None,
- }
- result = self.sriov._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- attr_name = 'a'
- expected = network1
- result = self.sriov._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- def test_configure_nics_for_sriov(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.networks = self.NETWORKS
- self.sriov.helper.get_mac_address = mock.Mock(return_value="")
- self.sriov._get_vf_data = mock.Mock(return_value="")
- self.assertIsNone(self.sriov.configure_nics_for_sriov())
-
- @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- def test__enable_interfaces(self, mock_libvirt, mock_ssh):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): the pylint exception should be removed.
- self.sriov.vm_deploy = True
- self.sriov.connection = mock_ssh
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.networks = self.NETWORKS
- self.sriov._get_vf_data = mock.Mock(return_value="")
- self.assertIsNone(self.sriov._enable_interfaces(0, 0, ["private_0"], 'test'))
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- def test_setup_sriov_context(self, mock_libvirt, mock_server):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): the pylint exception should be removed.
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.servers = {
- 'vnf_0': {
- 'network_ports': {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0']
- }
- }
- }
- self.sriov.networks = self.NETWORKS
- self.sriov.host_mgmt = {}
- self.sriov.flavor = {}
- self.sriov.configure_nics_for_sriov = mock.Mock(return_value="")
- mock_libvirt.build_vm_xml = mock.Mock(return_value=[6, "00:00:00:00:00:01"])
- self.sriov._enable_interfaces = mock.Mock(return_value="")
- self.sriov.vnf_node.generate_vnf_instance = mock.Mock(return_value={})
- self.assertIsNotNone(self.sriov.setup_sriov_context())
-
- def test__get_vf_data(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.servers = {
- 'vnf_0': {
- 'network_ports': {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0']
- }
- }
- }
- self.sriov.networks = self.NETWORKS
- self.sriov.helper.get_virtual_devices = mock.Mock(
- return_value={'0000:00:01.0': ''})
- self.assertIsNotNone(self.sriov._get_vf_data(
- '0000:00:01.0', '00:00:00:00:00:01', 'if0'))
diff --git a/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml b/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml
deleted file mode 100644
index e468d0465..000000000
--- a/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml
+++ /dev/null
@@ -1,135 +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.
-#
----
-# Sample config file about the POD information, including the
-# name/IP/user/ssh key of Bare Metal and Controllers/Computes
-#
-# The options of this config file include:
-# name: the name of this node
-# role: node's role, support role: Master/Controller/Comupte/BareMetal
-# ip: the node's IP address
-# user: the username for login
-# key_filename:the path of the private key file for login
-
-nodes:
--
- name: node1
- role: TrafficGen
- ip: 1.1.1.1
- user: root
- password: r00t
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:01"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:02"
--
- name: node2
- role: nfvi_node
- class: OvsDpdk
- ip: 1.1.1.2
- user: root
- password: r00t
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure sriov
- - "0000:05:00.0"
- - "0000:05:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu.qcow2"
--
- name: node2
- role: nfvi_node
- class: OvsDpdk
- ip: 1.1.1.5
- user: root
- password: r00t
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure sriov
- - "0000:05:00.0"
- - "0000:05:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu.qcow2"
-
--
- name: node3
- role: vnf
- ip: 1.1.1.3
- user: root
- password: r00t
- host: 1.1.1.1
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:05"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:06"
- 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"
- 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"
diff --git a/tests/unit/benchmark/contexts/standalone_sample.yaml b/tests/unit/benchmark/contexts/standalone_sample.yaml
deleted file mode 100644
index 95e12d62f..000000000
--- a/tests/unit/benchmark/contexts/standalone_sample.yaml
+++ /dev/null
@@ -1,112 +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.
-#
----
-# Sample config file about the POD information, including the
-# name/IP/user/ssh key of Bare Metal and Controllers/Computes
-#
-# The options of this config file include:
-# name: the name of this node
-# role: node's role, support role: Master/Controller/Comupte/BareMetal
-# ip: the node's IP address
-# user: the username for login
-# key_filename:the path of the private key file for login
-
-nodes:
--
- name: node1
- role: TrafficGen
- ip: 1.1.1.1
- user: root
- password: r00t
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:01"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:02"
--
- name: node2
- role: nfvi_node
- class: OvsDpdk
- ip: 1.1.1.2
- user: root
- password: r00t
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure sriov
- - "0000:05:00.0"
- - "0000:05:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu.qcow2"
-
--
- name: node3
- role: vnf
- ip: 1.1.1.3
- user: root
- password: r00t
- host: 1.1.1.1
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:05"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:06"
- 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"
- 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"
diff --git a/tests/unit/benchmark/contexts/test_dummy.py b/tests/unit/benchmark/contexts/test_dummy.py
deleted file mode 100644
index 1a54035df..000000000
--- a/tests/unit/benchmark/contexts/test_dummy.py
+++ /dev/null
@@ -1,32 +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.benchmark.contexts.dummy
-
-from __future__ import absolute_import
-import unittest
-
-from yardstick.benchmark.contexts import dummy
-
-
-class DummyContextTestCase(unittest.TestCase):
-
- def setUp(self):
- self.test_context = dummy.DummyContext()
-
- def test__get_server(self):
- self.test_context.init(None)
- self.test_context.deploy()
-
- result = self.test_context._get_server(None)
- self.assertEqual(result, None)
-
- self.test_context.undeploy()
diff --git a/tests/unit/benchmark/contexts/test_heat.py b/tests/unit/benchmark/contexts/test_heat.py
deleted file mode 100644
index f2e725df2..000000000
--- a/tests/unit/benchmark/contexts/test_heat.py
+++ /dev/null
@@ -1,503 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.contexts.heat
-
-from __future__ import absolute_import
-
-import logging
-import os
-import unittest
-import uuid
-from collections import OrderedDict
-
-import mock
-
-from itertools import count
-from yardstick.benchmark.contexts import heat
-from yardstick.benchmark.contexts import model
-
-LOG = logging.getLogger(__name__)
-
-
-class HeatContextTestCase(unittest.TestCase):
-
- def __init__(self, *args, **kwargs):
- super(HeatContextTestCase, self).__init__(*args, **kwargs)
- self.name_iter = ('vnf{:03}'.format(x) for x in count(0, step=3))
-
- def setUp(self):
- self.test_context = heat.HeatContext()
- self.mock_context = mock.Mock(spec=heat.HeatContext())
-
- def test___init__(self):
- self.assertIsNone(self.test_context.name)
- self.assertIsNone(self.test_context.stack)
- self.assertEqual(self.test_context.networks, OrderedDict())
- self.assertEqual(self.test_context.servers, [])
- self.assertEqual(self.test_context.placement_groups, [])
- self.assertEqual(self.test_context.server_groups, [])
- self.assertIsNone(self.test_context.keypair_name)
- self.assertIsNone(self.test_context.secgroup_name)
- self.assertEqual(self.test_context._server_map, {})
- self.assertIsNone(self.test_context._image)
- self.assertIsNone(self.test_context._flavor)
- self.assertIsNone(self.test_context._user)
- self.assertIsNone(self.test_context.template_file)
- self.assertIsNone(self.test_context.heat_parameters)
- self.assertIsNotNone(self.test_context.key_uuid)
- self.assertIsNotNone(self.test_context.key_filename)
-
- @mock.patch('yardstick.benchmark.contexts.heat.PlacementGroup')
- @mock.patch('yardstick.benchmark.contexts.heat.ServerGroup')
- @mock.patch('yardstick.benchmark.contexts.heat.Network')
- @mock.patch('yardstick.benchmark.contexts.heat.Server')
- def test_init(self, mock_server, mock_network, mock_sg, mock_pg):
-
- pgs = {'pgrp1': {'policy': 'availability'}}
- sgs = {'servergroup1': {'policy': 'affinity'}}
- networks = {'bar': {'cidr': '10.0.1.0/24'}}
- servers = {'baz': {'floating_ip': True, 'placement': 'pgrp1'}}
- attrs = {'name': 'foo',
- 'placement_groups': pgs,
- 'server_groups': sgs,
- 'networks': networks,
- 'servers': servers}
-
- self.test_context.init(attrs)
-
- self.assertEqual(self.test_context.name, "foo")
- self.assertEqual(self.test_context.keypair_name, "foo-key")
- self.assertEqual(self.test_context.secgroup_name, "foo-secgroup")
-
- mock_pg.assert_called_with('pgrp1', self.test_context,
- pgs['pgrp1']['policy'])
- mock_sg.assert_called_with('servergroup1', self.test_context,
- sgs['servergroup1']['policy'])
- self.assertTrue(len(self.test_context.placement_groups) == 1)
- self.assertTrue(len(self.test_context.server_groups) == 1)
-
- mock_network.assert_called_with(
- 'bar', self.test_context, networks['bar'])
- self.assertTrue(len(self.test_context.networks) == 1)
-
- mock_server.assert_called_with('baz', self.test_context,
- servers['baz'])
- self.assertTrue(len(self.test_context.servers) == 1)
-
- if os.path.exists(self.test_context.key_filename):
- try:
- os.remove(self.test_context.key_filename)
- os.remove(self.test_context.key_filename + ".pub")
- except OSError:
- LOG.exception("key_filename: %s",
- self.test_context.key_filename)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_resources_to_template_no_servers(self, mock_template):
-
- self.test_context.keypair_name = "foo-key"
- self.test_context.secgroup_name = "foo-secgroup"
- self.test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
- netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
- self.mock_context.name = 'bar'
- self.test_context.networks = OrderedDict(
- {"fool-network": model.Network("fool-network", self.mock_context,
- netattrs)})
-
- self.test_context._add_resources_to_template(mock_template)
- mock_template.add_keypair.assert_called_with(
- "foo-key",
- "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b")
- mock_template.add_security_group.assert_called_with("foo-secgroup")
-# mock_template.add_network.assert_called_with("bar-fool-network", 'physnet1', None)
- mock_template.add_router.assert_called_with("bar-fool-network-router",
- netattrs["external_network"],
- "bar-fool-network-subnet")
- mock_template.add_router_interface.assert_called_with("bar-fool-network-router-if0",
- "bar-fool-network-router",
- "bar-fool-network-subnet")
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_attrs_get(self, mock_template):
- image, flavor, user = expected_tuple = 'foo1', 'foo2', 'foo3'
- self.assertNotEqual(self.test_context.image, image)
- self.assertNotEqual(self.test_context.flavor, flavor)
- self.assertNotEqual(self.test_context.user, user)
- self.test_context._image = image
- self.test_context._flavor = flavor
- self.test_context._user = user
- attr_tuple = self.test_context.image, self.test_context.flavor, self.test_context.user
- self.assertEqual(attr_tuple, expected_tuple)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_attrs_set_negative(self, mock_template):
- with self.assertRaises(AttributeError):
- self.test_context.image = 'foo'
-
- with self.assertRaises(AttributeError):
- self.test_context.flavor = 'foo'
-
- with self.assertRaises(AttributeError):
- self.test_context.user = 'foo'
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_deploy(self, mock_template):
- self.test_context.name = 'foo'
- self.test_context.template_file = '/bar/baz/some-heat-file'
- self.test_context.heat_parameters = {'image': 'cirros'}
- self.test_context.get_neutron_info = mock.MagicMock()
- self.test_context.deploy()
-
- mock_template.assert_called_with('foo',
- '/bar/baz/some-heat-file',
- {'image': 'cirros'})
- self.assertIsNotNone(self.test_context.stack)
-
- def test_add_server_port(self):
- network1 = mock.MagicMock()
- network2 = mock.MagicMock()
- self.test_context.name = 'foo'
- self.test_context.stack = mock.MagicMock()
- self.test_context.networks = {
- 'a': network1,
- 'c': network2,
- }
- self.test_context.stack.outputs = {
- u'b': u'10.20.30.45',
- u'b-subnet_id': 1,
- u'foo-a-subnet-cidr': u'10.20.0.0/15',
- u'foo-a-subnet-gateway_ip': u'10.20.30.1',
- u'b-mac_address': u'00:01',
- u'b-device_id': u'dev21',
- u'b-network_id': u'net789',
- u'd': u'40.30.20.15',
- u'd-subnet_id': 2,
- u'foo-c-subnet-cidr': u'40.30.0.0/18',
- u'foo-c-subnet-gateway_ip': u'40.30.20.254',
- u'd-mac_address': u'00:10',
- u'd-device_id': u'dev43',
- u'd-network_id': u'net987',
- u'e': u'40.30.20.15',
- u'e-subnet_id': 2,
- u'e-mac_address': u'00:10',
- u'e-device_id': u'dev43',
- u'e-network_id': u'net987',
- }
- server = mock.MagicMock()
- server.ports = OrderedDict([
- ('a', [{'stack_name': 'b', 'port': 'port_a'}]),
- ('c', [{'stack_name': 'd', 'port': 'port_c'},
- {'stack_name': 'e', 'port': 'port_f'}]),
- ])
-
- expected = {
- "private_ip": '10.20.30.45',
- "subnet_id": 1,
- "subnet_cidr": '10.20.0.0/15',
- "network": '10.20.0.0',
- "netmask": '255.254.0.0',
- "name": "port_a",
- "gateway_ip": '10.20.30.1',
- "mac_address": '00:01',
- "device_id": 'dev21',
- "network_id": 'net789',
- "network_name": 'a',
- "local_mac": '00:01',
- "local_ip": '10.20.30.45',
- }
- self.test_context.add_server_port(server)
- self.assertEqual(server.private_ip, '10.20.30.45')
- self.assertEqual(len(server.interfaces), 3)
- self.assertDictEqual(server.interfaces['port_a'], expected)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_undeploy(self, mock_template):
- self.test_context.stack = mock_template
- self.test_context.undeploy()
- self.assertTrue(mock_template.delete.called)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- @mock.patch('yardstick.benchmark.contexts.heat.os')
- def test_undeploy_key_filename(self, mock_template, mock_os):
- self.test_context.stack = mock_template
- mock_os.path.exists.return_value = True
- self.assertIsNone(self.test_context.undeploy())
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_found_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to get a server that matches
- based on a dictionary input.
- """
- foo2_server = mock.Mock()
- foo2_server.key_filename = None
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.key_filename = None
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = '127.0.0.3'
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar'
- self.test_context._user = 'bot'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = {
- 'name': 'foo.bar',
- 'private_ip_attr': 'private_ip',
- 'public_ip_attr': 'public_ip',
- }
- result = self.test_context._get_server(attr_name)
- self.assertEqual(result['user'], 'bot')
- self.assertEqual(result['ip'], '127.0.0.1')
- self.assertEqual(result['private_ip'], '10.0.0.1')
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_found_dict_no_attrs(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to get a server that matches
- based on a dictionary input.
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = '127.0.0.3'
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar'
- self.test_context._user = 'bot'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = {
- 'name': 'foo.bar',
- }
- result = self.test_context._get_server(attr_name)
- self.assertEqual(result['user'], 'bot')
- # no private ip attr mapping in the map results in None value in the result
- self.assertIsNone(result['private_ip'])
- # no public ip attr mapping in the map results in no value in the result
- self.assertNotIn('ip', result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_found_not_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to get a server that matches
- based on a non-dictionary input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context.generate_routing_table = mock.MagicMock(return_value=[])
-
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = 'baz3'
- result = self.test_context._get_server(attr_name)
- self.assertEqual(result['user'], 'zab')
- self.assertEqual(result['private_ip'], '10.0.0.3')
- # no public_ip on the server results in no value in the result
- self.assertNotIn('public_ip', result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_none_found_not_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to not get a server due to
- None value associated with the match to a non-dictionary
- input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- 'wow4': None,
- }
-
- attr_name = 'wow4'
- result = self.test_context._get_server(attr_name)
- self.assertIsNone(result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_not_found_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to not get a server for lack
- of a match to a dictionary input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = {
- 'name': 'foo.wow4',
- 'private_ip_attr': 'private_ip',
- 'public_ip_attr': 'public_ip',
- }
- result = self.test_context._get_server(attr_name)
- self.assertIsNone(result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_not_found_not_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to not get a server for lack
- of a match to a non-dictionary input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.mock_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.mock_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.mock_context.key_uuid = uuid.uuid4()
- self.mock_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = 'foo.wow4'
- result = self.test_context._get_server(attr_name)
- self.assertIsNone(result)
-
- def test__get_network(self):
- network1 = mock.MagicMock()
- network1.name = 'net_1'
- network1.vld_id = 'vld111'
- network1.segmentation_id = 'seg54'
- network1.network_type = 'type_a'
- network1.physical_network = 'phys'
-
- network2 = mock.MagicMock()
- network2.name = 'net_2'
- network2.segmentation_id = 'seg45'
- network2.network_type = 'type_b'
- network2.physical_network = 'virt'
-
- self.test_context.networks = {
- 'a': network1,
- 'b': network2,
- }
-
- attr_name = None
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'network_type': 'nosuch'}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = 'vld777'
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'segmentation_id': 'seg45'}
- expected = {
- "name": 'net_2',
- "segmentation_id": 'seg45',
- "network_type": 'type_b',
- "physical_network": 'virt',
- }
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- attr_name = 'a'
- expected = {
- "name": 'net_1',
- "segmentation_id": 'seg54',
- "network_type": 'type_a',
- "physical_network": 'phys',
- }
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
diff --git a/tests/unit/benchmark/contexts/test_kubernetes.py b/tests/unit/benchmark/contexts/test_kubernetes.py
deleted file mode 100644
index 3a926f85c..000000000
--- a/tests/unit/benchmark/contexts/test_kubernetes.py
+++ /dev/null
@@ -1,205 +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.benchmark.contexts.kubernetes
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.benchmark.contexts.base import Context
-from yardstick.benchmark.contexts.kubernetes import KubernetesContext
-
-
-context_cfg = {
- 'type': 'Kubernetes',
- 'name': 'k8s',
- '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']
- }
- }
-}
-
-prefix = 'yardstick.benchmark.contexts.kubernetes'
-
-
-class KubernetesTestCase(unittest.TestCase):
-
- def tearDown(self):
- # clear kubernetes contexts from global list so we don't break other tests
- Context.list = []
-
- @mock.patch('{}.KubernetesContext._delete_services'.format(prefix))
- @mock.patch('{}.KubernetesContext._delete_ssh_key'.format(prefix))
- @mock.patch('{}.KubernetesContext._delete_rcs'.format(prefix))
- @mock.patch('{}.KubernetesContext._delete_pods'.format(prefix))
- def test_undeploy(self,
- mock_delete_pods,
- mock_delete_rcs,
- mock_delete_ssh,
- mock_delete_services):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context.undeploy()
- self.assertTrue(mock_delete_ssh.called)
- self.assertTrue(mock_delete_rcs.called)
- self.assertTrue(mock_delete_pods.called)
- self.assertTrue(mock_delete_services.called)
-
- @mock.patch('{}.KubernetesContext._create_services'.format(prefix))
- @mock.patch('{}.KubernetesContext._wait_until_running'.format(prefix))
- @mock.patch('{}.KubernetesTemplate.get_rc_pods'.format(prefix))
- @mock.patch('{}.KubernetesContext._create_rcs'.format(prefix))
- @mock.patch('{}.KubernetesContext._set_ssh_key'.format(prefix))
- def test_deploy(self,
- mock_set_ssh_key,
- mock_create_rcs,
- mock_get_rc_pods,
- mock_wait_until_running,
- mock_create_services):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
- k8s_context.deploy()
- self.assertTrue(mock_set_ssh_key.called)
- self.assertTrue(mock_create_rcs.called)
- self.assertTrue(mock_create_services.called)
- self.assertTrue(mock_get_rc_pods.called)
- self.assertTrue(mock_wait_until_running.called)
-
- @mock.patch('{}.paramiko'.format(prefix), **{"resource_filename.return_value": ""})
- @mock.patch('{}.pkg_resources'.format(prefix), **{"resource_filename.return_value": ""})
- @mock.patch('{}.utils'.format(prefix))
- @mock.patch('{}.open'.format(prefix), create=True)
- @mock.patch('{}.k8s_utils.delete_config_map'.format(prefix))
- @mock.patch('{}.k8s_utils.create_config_map'.format(prefix))
- def test_ssh_key(self, mock_create, mock_delete, mock_open, mock_utils, mock_resources,
- mock_paramiko):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._set_ssh_key()
- k8s_context._delete_ssh_key()
- self.assertTrue(mock_create.called)
- self.assertTrue(mock_delete.called)
-
- @mock.patch('{}.k8s_utils.read_pod_status'.format(prefix))
- def test_wait_until_running(self, mock_read_pod_status):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context.template.pods = ['server']
- mock_read_pod_status.return_value = 'Running'
- k8s_context._wait_until_running()
-
- @mock.patch('{}.k8s_utils.get_pod_by_name'.format(prefix))
- @mock.patch('{}.KubernetesContext._get_node_ip'.format(prefix))
- @mock.patch('{}.k8s_utils.get_service_by_name'.format(prefix))
- def test_get_server(self,
- mock_get_service_by_name,
- mock_get_node_ip,
- mock_get_pod_by_name):
- class Service(object):
- def __init__(self):
- self.name = 'yardstick'
- self.node_port = 30000
-
- class Services(object):
- def __init__(self):
- self.ports = [Service()]
-
- class Status(object):
- def __init__(self):
- self.pod_ip = '172.16.10.131'
-
- class Pod(object):
- def __init__(self):
- self.status = Status()
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
-
- mock_get_service_by_name.return_value = Services()
- mock_get_pod_by_name.return_value = Pod()
- mock_get_node_ip.return_value = '172.16.10.131'
-
- server = k8s_context._get_server('server')
- self.assertIsNotNone(server)
-
- @mock.patch('{}.KubernetesContext._create_rc'.format(prefix))
- def test_create_rcs(self, mock_create_rc):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._create_rcs()
- self.assertTrue(mock_create_rc.called)
-
- @mock.patch('{}.k8s_utils.create_replication_controller'.format(prefix))
- def test_create_rc(self, mock_create_replication_controller):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._create_rc({})
- self.assertTrue(mock_create_replication_controller.called)
-
- @mock.patch('{}.KubernetesContext._delete_rc'.format(prefix))
- def test_delete_rcs(self, mock_delete_rc):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._delete_rcs()
- self.assertTrue(mock_delete_rc.called)
-
- @mock.patch('{}.k8s_utils.delete_replication_controller'.format(prefix))
- def test_delete_rc(self, mock_delete_replication_controller):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._delete_rc({})
- self.assertTrue(mock_delete_replication_controller.called)
-
- @mock.patch('{}.k8s_utils.get_node_list'.format(prefix))
- def test_get_node_ip(self, mock_get_node_list):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._get_node_ip()
- self.assertTrue(mock_get_node_list.called)
-
- @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create')
- def test_create_services(self, mock_create):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._create_services()
- self.assertTrue(mock_create.called)
-
- @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete')
- def test_delete_services(self, mock_delete):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._delete_services()
- self.assertTrue(mock_delete.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/contexts/test_model.py b/tests/unit/benchmark/contexts/test_model.py
deleted file mode 100644
index 53b035b82..000000000
--- a/tests/unit/benchmark/contexts/test_model.py
+++ /dev/null
@@ -1,589 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.contexts.model
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.benchmark.contexts import model
-
-
-class ObjectTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
-
- def test_construct(self):
-
- test_object = model.Object('foo', self.mock_context)
-
- self.assertEqual(test_object.name, 'foo')
- self.assertEqual(test_object._context, self.mock_context)
- self.assertIsNone(test_object.stack_name)
- self.assertIsNone(test_object.stack_id)
-
- def test_dn(self):
-
- self.mock_context.name = 'bar'
- test_object = model.Object('foo', self.mock_context)
-
- self.assertEqual('foo.bar', test_object.dn)
-
-
-class PlacementGroupTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
- self.mock_context.name = 'bar'
-
- def tearDown(self):
- model.PlacementGroup.map = {}
-
- def test_sucessful_construct(self):
-
- test_pg = model.PlacementGroup('foo', self.mock_context, 'affinity')
-
- self.assertEqual(test_pg.name, 'foo')
- self.assertEqual(test_pg.members, set())
- self.assertEqual(test_pg.stack_name, 'bar-foo')
- self.assertEqual(test_pg.policy, 'affinity')
-
- test_map = {'foo': test_pg}
- self.assertEqual(model.PlacementGroup.map, test_map)
-
- def test_wrong_policy_in_construct(self):
-
- self.assertRaises(ValueError, model.PlacementGroup, 'foo',
- self.mock_context, 'baz')
-
- def test_add_member(self):
-
- test_pg = model.PlacementGroup('foo', self.mock_context, 'affinity')
- test_pg.add_member('foo')
-
- self.assertEqual(test_pg.members, set(['foo']))
-
- def test_get_name_successful(self):
-
- model.PlacementGroup.map = {'foo': True}
- self.assertTrue(model.PlacementGroup.get('foo'))
-
- def test_get_name_unsuccessful(self):
-
- self.assertIsNone(model.PlacementGroup.get('foo'))
-
-
-class RouterTestCase(unittest.TestCase):
-
- def test_construct(self):
-
- mock_context = mock.Mock()
- mock_context.name = 'baz'
- test_router = model.Router('foo', 'bar', mock_context, 'qux')
-
- self.assertEqual(test_router.stack_name, 'baz-bar-foo')
- self.assertEqual(test_router.stack_if_name, 'baz-bar-foo-if0')
- self.assertEqual(test_router.external_gateway_info, 'qux')
-
-
-class NetworkTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
- self.mock_context.name = 'bar'
-
- def tearDown(self):
- model.Network.list = []
-
- def test_construct_no_external_network(self):
-
- attrs = {'cidr': '10.0.0.0/24'}
- test_network = model.Network('foo', self.mock_context, attrs)
-
- self.assertEqual(test_network.stack_name, 'bar-foo')
- self.assertEqual(test_network.subnet_stack_name, 'bar-foo-subnet')
- self.assertEqual(test_network.subnet_cidr, attrs['cidr'])
- self.assertIsNone(test_network.router)
- self.assertIn(test_network, model.Network.list)
-
- def test_construct_has_external_network(self):
-
- attrs = {'external_network': 'ext_net'}
- test_network = model.Network('foo', self.mock_context, attrs)
- exp_router = model.Router('router', 'foo', self.mock_context,
- 'ext_net')
-
- self.assertEqual(test_network.router.stack_name, exp_router.stack_name)
- self.assertEqual(test_network.router.stack_if_name,
- exp_router.stack_if_name)
- self.assertEqual(test_network.router.external_gateway_info,
- exp_router.external_gateway_info)
-
- def test_has_route_to(self):
-
- attrs = {'external_network': 'ext_net'}
- test_network = model.Network('foo', self.mock_context, attrs)
-
- self.assertTrue(test_network.has_route_to('ext_net'))
-
- def test_has_no_route_to(self):
-
- attrs = {}
- test_network = model.Network('foo', self.mock_context, attrs)
-
- self.assertFalse(test_network.has_route_to('ext_net'))
-
- @mock.patch('yardstick.benchmark.contexts.model.Network.has_route_to')
- def test_find_by_route_to(self, mock_has_route_to):
-
- mock_network = mock.Mock()
- model.Network.list = [mock_network]
- mock_has_route_to.return_value = True
-
- self.assertIs(mock_network, model.Network.find_by_route_to('foo'))
-
- def test_find_external_network(self):
-
- mock_network = mock.Mock()
- mock_network.router = mock.Mock()
- mock_network.router.external_gateway_info = 'ext_net'
- model.Network.list = [mock_network]
-
- self.assertEqual(model.Network.find_external_network(), 'ext_net')
-
- def test_construct_gateway_ip_is_null(self):
-
- attrs = {'gateway_ip': 'null'}
- test_network = model.Network('foo', self.mock_context, attrs)
- self.assertEqual(test_network.gateway_ip, 'null')
-
- def test_construct_gateway_ip_is_none(self):
-
- attrs = {'gateway_ip': None}
- test_network = model.Network('foo', self.mock_context, attrs)
- self.assertEqual(test_network.gateway_ip, 'null')
-
- def test_construct_gateway_ip_is_absent(self):
-
- attrs = {}
- test_network = model.Network('foo', self.mock_context, attrs)
- self.assertIsNone(test_network.gateway_ip)
-
-
-class ServerTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
- self.mock_context.name = 'bar'
- self.mock_context.keypair_name = 'some-keys'
- self.mock_context.secgroup_name = 'some-secgroup'
- self.mock_context.user = "some-user"
- netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
- self.mock_context.networks = [model.Network("some-network", self.mock_context, netattrs)]
-
- def test_construct_defaults(self):
-
- attrs = None
- test_server = model.Server('foo', self.mock_context, attrs)
-
- self.assertEqual(test_server.stack_name, 'foo.bar')
- self.assertEqual(test_server.keypair_name, 'some-keys')
- self.assertEqual(test_server.secgroup_name, 'some-secgroup')
- self.assertEqual(test_server.placement_groups, [])
- self.assertIsNone(test_server.server_group)
- self.assertEqual(test_server.instances, 1)
- self.assertIsNone(test_server.floating_ip)
- self.assertIsNone(test_server._image)
- self.assertIsNone(test_server._flavor)
- self.assertIn(test_server, model.Server.list)
-
- @mock.patch('yardstick.benchmark.contexts.model.PlacementGroup')
- def test_construct_get_wrong_placement_group(self, mock_pg):
-
- attrs = {'placement': 'baz'}
- mock_pg.get.return_value = None
-
- self.assertRaises(ValueError, model.Server, 'foo',
- self.mock_context, attrs)
-
- @mock.patch('yardstick.benchmark.contexts.model.PlacementGroup')
- def test_construct_get_wrong_server_group(self, mock_sg):
-
- attrs = {'server_group': 'baz'}
- mock_sg.get.return_value = None
-
- self.assertRaises(ValueError, model.Server, 'foo',
- self.mock_context, attrs)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance(self, mock_template):
- attrs = {'image': 'some-image', 'flavor': 'some-flavor', 'floating_ip': '192.168.1.10',
- 'floating_ip_assoc': 'some-vm',
- 'availability_zone': 'zone'}
- test_server = model.Server('foo', self.mock_context, attrs)
-
- self.mock_context.flavors = ['flavor1', 'flavor2', 'some-flavor']
-
- mock_network = mock.Mock()
- mock_network.name = 'some-network'
- mock_network.stack_name = 'some-network-stack'
- mock_network.allowed_address_pairs = ["1", "2"]
- mock_network.vnic_type = 'normal'
- mock_network.subnet_stack_name = 'some-network-stack-subnet'
- mock_network.provider = 'sriov'
- mock_network.external_network = 'ext_net'
- mock_network.router = model.Router('some-router', 'some-network', self.mock_context,
- 'ext_net')
-
- test_server._add_instance(mock_template, 'some-server',
- [mock_network], 'hints')
-
- mock_template.add_port.assert_called_with(
- 'some-server-some-network-port',
- mock_network.stack_name,
- mock_network.subnet_stack_name,
- mock_network.vnic_type,
- sec_group_id=self.mock_context.secgroup_name,
- provider=mock_network.provider,
- allowed_address_pairs=mock_network.allowed_address_pairs)
-
- mock_template.add_floating_ip.assert_called_with(
- 'some-server-fip',
- mock_network.external_network,
- 'some-server-some-network-port',
- 'bar-some-network-some-router-if0',
- 'some-secgroup'
- )
-
- mock_template.add_floating_ip_association.assert_called_with(
- 'some-server-fip-assoc',
- 'some-server-fip',
- 'some-server-some-network-port'
- )
-
- mock_template.add_server.assert_called_with(
- 'some-server', 'some-image',
- flavor='some-flavor',
- flavors=['flavor1', 'flavor2', 'some-flavor'],
- ports=['some-server-some-network-port'],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data='',
- scheduler_hints='hints',
- availability_zone='zone')
-
- def test_override_ip(self):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.interfaces = {
- "xe0": {
- "local_ip": "1.2.3.4",
- "netmask": "255.255.255.0",
- },
- "xe1": {
- "local_ip": "1.2.3.5",
- "netmask": "255.255.255.0"
- }
- }
- test_server.network_ports = network_ports
-
- test_server.override_ip("uplink_0", {"port": "xe0"})
- self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][0]["xe0"])
-
- def test_override_ip_multiple(self):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.interfaces = {
- "xe0": {
- "local_ip": "1.2.3.4",
- "netmask": "255.255.255.0",
- },
- "xe1": {
- "local_ip": "1.2.3.5",
- "netmask": "255.255.255.0"
- }
- }
- test_server.network_ports = network_ports
- test_server.override_ip("uplink_0", {"port": "xe0"})
- self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][0]["xe0"])
-
- def test_override_ip_mixed(self):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- 'xe0',
- {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.interfaces = {
- "xe0": {
- "local_ip": "1.2.3.4",
- "netmask": "255.255.255.0",
- },
- "xe1": {
- "local_ip": "1.2.3.5",
- "netmask": "255.255.255.0"
- }
- }
- test_server.network_ports = network_ports
- test_server.override_ip("uplink_0", {"port": "xe0"})
- self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][1]["xe0"])
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_ip_override_invalid_syntax(self, mock_template):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': 'xe0',
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.network_ports = network_ports
- context = type("Context", (object,), {})
- # can't use Mock because Mock.name is reserved
- context.name = "context"
- networks = [model.Network(n, context, {}) for n in network_ports]
-
- with self.assertRaises(SyntaxError):
- test_server._add_instance(mock_template, 'some-server',
- networks, 'hints')
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_ip_override(self, mock_template):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.network_ports = network_ports
- context = type("Context", (object,), {})
- # can't use Mock because Mock.name is reserved
- context.name = "context"
- networks = [model.Network(n, context, {}) for n in network_ports]
-
- test_server._add_instance(mock_template, 'some-server',
- networks, 'hints')
- self.assertEqual(test_server.ports, {
- 'downlink_0': [{'port': 'xe1', 'stack_name': 'some-server-xe1-port'}],
- 'mgmt': [{'port': 'mgmt', 'stack_name': 'some-server-mgmt-port'}],
- 'uplink_0': [{'port': 'xe0', 'stack_name': 'some-server-xe0-port'}]
- })
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_multiple_ip_override(self, mock_template):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.network_ports = network_ports
- context = type("Context", (object,), {})
- # can't use Mock because Mock.name is reserved
- context.name = "context"
- networks = [model.Network(n, context, {}) for n in network_ports]
-
- test_server._add_instance(mock_template, 'some-server',
- networks, 'hints')
- self.assertEqual(test_server.ports, {
- 'downlink_0': [{'port': 'xe1', 'stack_name': 'some-server-xe1-port'}],
- 'mgmt': [{'port': 'mgmt', 'stack_name': 'some-server-mgmt-port'}],
- 'uplink_0': [{'port': 'xe0', 'stack_name': 'some-server-xe0-port'},
- # this is not an error, we can produce this, it is left to Heat
- # to detect duplicate ports and error
- {'port': 'xe0', 'stack_name': 'some-server-xe0-port'}]
- })
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_user_data(self, mock_template):
- user_data = "USER_DATA"
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- 'user_data': user_data,
- }
- test_server = model.Server('foo', self.mock_context, attrs)
-
- test_server._add_instance(mock_template, 'some-server',
- [], 'hints')
-
- mock_template.add_server.assert_called_with(
- 'some-server', 'some-image',
- flavor='some-flavor',
- flavors=self.mock_context.flavors,
- ports=[],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data=user_data,
- scheduler_hints='hints',
- availability_zone=None)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_availablity_zone(self, mock_template):
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- 'availability_zone': 'zone',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
-
- test_server._add_instance(mock_template, 'some-server',
- [], 'hints')
-
- mock_template.add_server.assert_called_with(
- 'some-server', 'some-image',
- flavor='some-flavor',
- flavors=self.mock_context.flavors,
- ports=[],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data='',
- scheduler_hints='hints',
- availability_zone='zone')
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_plus_flavor(self, mock_template):
-
- user_data = ''
- attrs = {
- 'image': 'some-image', 'flavor': 'flavor1',
- 'flavors': ['flavor2'], 'user_data': user_data
- }
- test_server = model.Server('ServerFlavor-2', self.mock_context, attrs)
-
- self.mock_context.flavors = ['flavor2']
- mock_network = mock.Mock()
- mock_network.allowed_address_pairs = ["1", "2"]
- mock_network.vnic_type = 'normal'
- mock_network.configure_mock(name='some-network', stack_name='some-network-stack',
- subnet_stack_name='some-network-stack-subnet',
- provider='some-provider')
-
- test_server._add_instance(mock_template, 'ServerFlavor-2',
- [mock_network], 'hints')
-
- mock_template.add_port.assert_called_with(
- 'ServerFlavor-2-some-network-port',
- mock_network.stack_name,
- mock_network.subnet_stack_name,
- mock_network.vnic_type,
- provider=mock_network.provider,
- sec_group_id=self.mock_context.secgroup_name,
- allowed_address_pairs=mock_network.allowed_address_pairs)
-
- mock_template.add_server.assert_called_with(
- 'ServerFlavor-2', 'some-image',
- flavor='flavor1',
- flavors=['flavor2'],
- ports=['ServerFlavor-2-some-network-port'],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data=user_data,
- scheduler_hints='hints',
- availability_zone=None)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_misc(self, mock_template):
-
- user_data = ''
- attrs = {
- 'image': 'some-image', 'flavor': 'flavor1',
- 'flavors': ['flavor2'], 'user_data': user_data
- }
- test_server = model.Server('ServerFlavor-3', self.mock_context, attrs)
-
- self.mock_context.flavors = ['flavor2']
- self.mock_context.flavor = {'vcpus': 4}
- mock_network = mock.Mock()
- mock_network.name = 'some-network'
- mock_network.stack_name = 'some-network-stack'
- mock_network.subnet_stack_name = 'some-network-stack-subnet'
-
- test_server._add_instance(mock_template, 'ServerFlavor-3',
- [mock_network], 'hints')
-
- mock_template.add_port(
- 'ServerFlavor-3-some-network-port',
- mock_network.stack_name,
- mock_network.subnet_stack_name,
- sec_group_id=self.mock_context.secgroup_name)
-
- mock_template.add_flavor(
- vcpus=4,
- ram=2048,
- disk=1)
-
- mock_template.add_flavor(
- vcpus=4,
- ram=2048,
- disk=1,
- extra_specs={'cat': 1, 'dog': 2, 'dragon': 1000})
-
- mock_template.add_server.assert_called_with(
- 'ServerFlavor-3', 'some-image',
- flavor='flavor1',
- flavors=['flavor2'],
- ports=['ServerFlavor-3-some-network-port'],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data=user_data,
- scheduler_hints='hints',
- availability_zone=None)
diff --git a/tests/unit/benchmark/contexts/test_node.py b/tests/unit/benchmark/contexts/test_node.py
deleted file mode 100644
index a2e2f7b9a..000000000
--- a/tests/unit/benchmark/contexts/test_node.py
+++ /dev/null
@@ -1,398 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015-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.contexts.node
-
-from __future__ import absolute_import
-import os
-import unittest
-import errno
-import mock
-
-from yardstick.common import constants as consts
-from yardstick.benchmark.contexts import node
-
-
-class NodeContextTestCase(unittest.TestCase):
-
- PREFIX = 'yardstick.benchmark.contexts.node'
-
- NODES_SAMPLE = "nodes_sample.yaml"
- NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample.yaml"
-
- def setUp(self):
- self.test_context = node.NodeContext()
- self.os_path_join = os.path.join
-
- def _get_file_abspath(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- file_path = self.os_path_join(curr_path, filename)
- return file_path
-
- def test___init__(self):
- self.assertIsNone(self.test_context.name)
- self.assertIsNone(self.test_context.file_path)
- self.assertEqual(self.test_context.nodes, [])
- self.assertEqual(self.test_context.controllers, [])
- self.assertEqual(self.test_context.computes, [])
- self.assertEqual(self.test_context.baremetals, [])
- self.assertEqual(self.test_context.env, {})
- self.assertEqual(self.test_context.attrs, {})
-
- @mock.patch('{}.os.path.join'.format(PREFIX))
- def test_init_negative(self, mock_path_join):
- special_path = '/foo/bar/error_file'
- error_path = self._get_file_abspath("error_file")
-
- def path_join(*args):
- if args == (consts.YARDSTICK_ROOT_PATH, error_path):
- return special_path
- return self.os_path_join(*args)
-
- # we can't count mock_path_join calls because
- # it can catch join calls for .pyc files.
- mock_path_join.side_effect = path_join
- self.test_context.read_config_file = read_mock = mock.Mock()
- read_calls = 0
-
- with self.assertRaises(KeyError):
- self.test_context.init({})
-
- self.assertEqual(read_mock.call_count, read_calls)
-
- attrs = {
- 'name': 'foo',
- 'file': error_path,
- }
- read_mock.side_effect = IOError(errno.EBUSY, 'busy')
- with self.assertRaises(IOError) as raised:
- self.test_context.init(attrs)
-
- read_calls += 1
- self.assertEqual(read_mock.called, read_calls)
- self.assertIn(attrs['file'], self.test_context.file_path)
- self.assertEqual(raised.exception.errno, errno.EBUSY)
- self.assertEqual(str(raised.exception), str(read_mock.side_effect))
-
- read_mock.side_effect = IOError(errno.ENOENT, 'not found')
- with self.assertRaises(IOError) as raised:
- self.test_context.init(attrs)
-
- read_calls += 2
- self.assertEqual(read_mock.call_count, read_calls)
- self.assertEqual(self.test_context.file_path, special_path)
- self.assertEqual(raised.exception.errno, errno.ENOENT)
- self.assertEqual(str(raised.exception), str(read_mock.side_effect))
-
- def test_read_config_file(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.assertIsNotNone(self.test_context.read_config_file())
-
- def test__dispatch_script(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.test_context.env = {'bash': [{'script': 'dummy'}]}
- self.test_context._execute_script = mock.Mock()
- self.assertEqual(self.test_context._dispatch_script('bash'), None)
-
- def test__dispatch_ansible(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.test_context.env = {'ansible': [{'script': 'dummy'}]}
- self.test_context._do_ansible_job = mock.Mock()
- self.assertEqual(self.test_context._dispatch_ansible('ansible'), None)
- self.test_context.env = {}
- self.assertEqual(self.test_context._dispatch_ansible('ansible'), None)
-
- @mock.patch("{}.AnsibleCommon".format(PREFIX))
- def test__do_ansible_job(self, mock_ansible):
- self.assertEqual(None, self.test_context._do_ansible_job('dummy'))
-
- def test_successful_init(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.assertEqual(self.test_context.name, "foo")
- self.assertEqual(len(self.test_context.nodes), 4)
- self.assertEqual(len(self.test_context.controllers), 2)
- self.assertEqual(len(self.test_context.computes), 1)
- self.assertEqual(self.test_context.computes[0]["name"], "node3")
- self.assertEqual(len(self.test_context.baremetals), 1)
- self.assertEqual(self.test_context.baremetals[0]["name"], "node4")
-
- def test__get_server_with_dic_attr_name(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = {'name': 'foo.bar'}
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_not_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'bar.foo'
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_mismatch(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'bar.foo1'
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_duplicate(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'node1.foo'
- with self.assertRaises(ValueError):
- self.test_context._get_server(attr_name)
-
- def test__get_server_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'node1.foo'
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result['ip'], '10.229.47.137')
- self.assertEqual(result['name'], 'node1.foo')
- self.assertEqual(result['user'], 'root')
- self.assertEqual(result['key_filename'], '/root/.yardstick_key')
-
- @mock.patch('{}.NodeContext._dispatch_script'.format(PREFIX))
- def test_deploy(self, dispatch_script_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'script'
- }
- obj.deploy()
- self.assertTrue(dispatch_script_mock.called)
-
- @mock.patch('{}.NodeContext._dispatch_ansible'.format(PREFIX))
- def test_deploy_anisible(self, dispatch_ansible_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'ansible'
- }
- obj.deploy()
- self.assertTrue(dispatch_ansible_mock.called)
-
- @mock.patch('{}.NodeContext._dispatch_script'.format(PREFIX))
- def test_undeploy(self, dispatch_script_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'script'
- }
- obj.undeploy()
- self.assertTrue(dispatch_script_mock.called)
-
- @mock.patch('{}.NodeContext._dispatch_ansible'.format(PREFIX))
- def test_undeploy_anisble(self, dispatch_ansible_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'ansible'
- }
- obj.undeploy()
- self.assertTrue(dispatch_ansible_mock.called)
-
- @mock.patch('{}.ssh.SSH._put_file_shell'.format(PREFIX))
- @mock.patch('{}.ssh.SSH.execute'.format(PREFIX))
- def test_execute_remote_script(self, execute_mock, put_file_mock):
- obj = node.NodeContext()
- obj.env = {'prefix': 'yardstick.benchmark.scenarios.compute'}
- node_name_args = 'node5'
- obj.nodes = [{
- 'name': node_name_args,
- 'user': 'ubuntu',
- 'ip': '10.10.10.10',
- 'pwd': 'ubuntu',
- }]
-
- info = {'script': 'computecapacity.bash'}
- execute_mock.return_value = (0, '', '')
- obj._execute_remote_script('node5', info)
-
- self.assertTrue(put_file_mock.called)
- self.assertTrue(execute_mock.called)
-
- @mock.patch('{}.NodeContext._execute_local_script'.format(PREFIX))
- def test_execute_script_local(self, local_execute_mock):
- node_name = 'local'
- info = {}
- node.NodeContext()._execute_script(node_name, info)
- self.assertTrue(local_execute_mock.called)
-
- @mock.patch('{}.NodeContext._execute_remote_script'.format(PREFIX))
- def test_execute_script_remote(self, remote_execute_mock):
- node_name = 'node5'
- info = {}
- node.NodeContext()._execute_script(node_name, info)
- self.assertTrue(remote_execute_mock.called)
-
- def test_get_script(self):
- script_args = 'hello.bash'
- info_args = {
- 'script': script_args
- }
- script, options = node.NodeContext()._get_script(info_args)
- self.assertEqual(script_args, script)
- self.assertEqual('', options)
-
- def test_node_info(self):
- node_name_args = 'node5'
- obj = node.NodeContext()
- obj.nodes = [{'name': node_name_args, 'check': node_name_args}]
- node_info = obj._get_node_info(node_name_args)
- self.assertEqual(node_info.get('check'), node_name_args)
-
- @mock.patch('{}.ssh.SSH.wait'.format(PREFIX))
- def test_get_client(self, wait_mock):
- node_name_args = 'node5'
- obj = node.NodeContext()
- obj.nodes = [{
- 'name': node_name_args,
- 'user': 'ubuntu',
- 'ip': '10.10.10.10',
- 'pwd': 'ubuntu',
- }]
- obj._get_client(node_name_args)
- self.assertTrue(wait_mock.called)
-
- def test_get_server(self):
- self.test_context.name = 'vnf1'
- self.test_context.nodes = [{'name': 'my', 'value': 100}]
-
- with self.assertRaises(ValueError):
- self.test_context.get_server('my.vnf2')
-
- expected = {'name': 'my.vnf1', 'value': 100, 'interfaces': {}}
- result = self.test_context.get_server('my.vnf1')
- self.assertDictEqual(result, expected)
-
- def test_get_context_from_server(self):
- self.test_context.name = 'vnf1'
- self.test_context.nodes = [{'name': 'my', 'value': 100}]
- self.test_context.attrs = {'attr1': 200}
-
- with self.assertRaises(ValueError):
- self.test_context.get_context_from_server('my.vnf2')
-
- result = self.test_context.get_context_from_server('my.vnf1')
- self.assertIs(result, self.test_context)
-
- def test__get_network(self):
- network1 = {
- 'name': 'net_1',
- 'vld_id': 'vld111',
- 'segmentation_id': 'seg54',
- 'network_type': 'type_a',
- 'physical_network': 'phys',
- }
- network2 = {
- 'name': 'net_2',
- 'vld_id': 'vld999',
- }
- self.test_context.networks = {
- 'a': network1,
- 'b': network2,
- }
-
- attr_name = {}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld777'}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- self.assertIsNone(self.test_context._get_network(None))
-
- attr_name = 'vld777'
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld999'}
- expected = {
- "name": 'net_2',
- "vld_id": 'vld999',
- "segmentation_id": None,
- "network_type": None,
- "physical_network": None,
- }
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- attr_name = 'a'
- expected = network1
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/core/__init__.py b/tests/unit/benchmark/core/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/core/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml b/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml
deleted file mode 100644
index 44c4a31ff..000000000
--- a/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml
+++ /dev/null
@@ -1,21 +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
-##############################################################################
----
-# Huawei US bare daily task suite
-
-schema: "yardstick:suite:0.1"
-
-name: "os-nosdn-nofeature-ha"
-test_cases_dir: "tests/opnfv/test_cases/"
-test_cases:
--
- file_name: opnfv_yardstick_tc037.yaml
--
- file_name: opnfv_yardstick_tc043.yaml
-
diff --git a/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml b/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml
deleted file mode 100644
index ced13f19e..000000000
--- a/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml
+++ /dev/null
@@ -1,23 +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
-##############################################################################
----
-# Huawei US bare daily task suite
-
-schema: "yardstick:suite:0.1"
-
-name: "os-nosdn-nofeature-ha"
-test_cases_dir: "tests/opnfv/test_cases/"
-test_cases:
--
- file_name: opnfv_yardstick_tc037.yaml
--
- file_name: opnfv_yardstick_tc043.yaml
- task_args:
- huawei-pod1: '{"host": "node1.LF","target": "node2.LF"}'
-
diff --git a/tests/unit/benchmark/core/test_plugin.py b/tests/unit/benchmark/core/test_plugin.py
deleted file mode 100644
index f9c076159..000000000
--- a/tests/unit/benchmark/core/test_plugin.py
+++ /dev/null
@@ -1,102 +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.benchmark.core.plugin
-from __future__ import absolute_import
-import os
-from os.path import dirname as dirname
-
-try:
- from unittest import mock
-except ImportError:
- import mock
-import unittest
-
-from yardstick.benchmark.core import plugin
-
-
-class Arg(object):
-
- def __init__(self):
- # self.input_file = ('plugin/sample_config.yaml',)
- self.input_file = [
- os.path.join(os.path.abspath(
- dirname(dirname(dirname(dirname(dirname(__file__)))))),
- 'plugin/sample_config.yaml')]
-
-
-@mock.patch('yardstick.benchmark.core.plugin.ssh')
-class pluginTestCase(unittest.TestCase):
-
- def setUp(self):
- self.result = {}
-
- def test_install(self, mock_ssh):
- p = plugin.Plugin()
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- input_file = Arg()
- p.install(input_file)
- expected_result = {}
- self.assertEqual(self.result, expected_result)
-
- def test_remove(self, mock_ssh):
- p = plugin.Plugin()
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- input_file = Arg()
- p.remove(input_file)
- expected_result = {}
- self.assertEqual(self.result, expected_result)
-
- def test_install_setup_run(self, mock_ssh):
- p = plugin.Plugin()
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- plugins = {
- "name": "sample"
- }
- deployment = {
- "ip": "10.1.0.50",
- "user": "root",
- "password": "root"
- }
- plugin_name = plugins.get("name")
- p._install_setup(plugin_name, deployment)
- self.assertIsNotNone(p.client)
-
- p._run(plugin_name)
- expected_result = {}
- self.assertEqual(self.result, expected_result)
-
- def test_remove_setup_run(self, mock_ssh):
- p = plugin.Plugin()
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- plugins = {
- "name": "sample"
- }
- deployment = {
- "ip": "10.1.0.50",
- "user": "root",
- "password": "root"
- }
- plugin_name = plugins.get("name")
- p._remove_setup(plugin_name, deployment)
- self.assertIsNotNone(p.client)
-
- p._run(plugin_name)
- expected_result = {}
- self.assertEqual(self.result, expected_result)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/core/test_report.py b/tests/unit/benchmark/core/test_report.py
deleted file mode 100644
index 69546928c..000000000
--- a/tests/unit/benchmark/core/test_report.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2017 Rajesh Kudaka.
-#
-# 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.core.report
-
-from __future__ import print_function
-
-from __future__ import absolute_import
-
-import unittest
-import uuid
-
-try:
- from unittest import mock
-except ImportError:
- import mock
-
-from yardstick.benchmark.core import report
-from yardstick.cmd.commands import change_osloobj_to_paras
-
-FAKE_YAML_NAME = 'fake_name'
-FAKE_TASK_ID = str(uuid.uuid4())
-FAKE_DB_FIELDKEYS = [{'fieldKey': 'fake_key'}]
-FAKE_TIME = '0000-00-00T00:00:00.000000Z'
-FAKE_DB_TASK = [{'fake_key': 0.000, 'time': FAKE_TIME}]
-FAKE_TIMESTAMP = ['fake_time']
-DUMMY_TASK_ID = 'aaaaaa-aaaaaaaa-aaaaaaaaaa-aaaaaa'
-
-
-class ReportTestCase(unittest.TestCase):
-
- def setUp(self):
- super(ReportTestCase, self).setUp()
- self.param = change_osloobj_to_paras({})
- self.param.yaml_name = [FAKE_YAML_NAME]
- self.param.task_id = [FAKE_TASK_ID]
- self.rep = report.Report()
-
- @mock.patch('yardstick.benchmark.core.report.Report._get_tasks')
- @mock.patch('yardstick.benchmark.core.report.Report._get_fieldkeys')
- @mock.patch('yardstick.benchmark.core.report.Report._validate')
- def test_generate_success(self, mock_valid, mock_keys, mock_tasks):
- mock_tasks.return_value = FAKE_DB_TASK
- mock_keys.return_value = FAKE_DB_FIELDKEYS
- self.rep.generate(self.param)
- mock_valid.assert_called_once_with(FAKE_YAML_NAME, FAKE_TASK_ID)
- self.assertEqual(1, mock_tasks.call_count)
- self.assertEqual(1, mock_keys.call_count)
-
- def test_invalid_yaml_name(self):
- self.assertRaisesRegexp(ValueError, "yaml*", self.rep._validate,
- 'F@KE_NAME', FAKE_TASK_ID)
-
- def test_invalid_task_id(self):
- self.assertRaisesRegexp(ValueError, "task*", self.rep._validate,
- FAKE_YAML_NAME, DUMMY_TASK_ID)
-
- @mock.patch('api.utils.influx.query')
- def test_task_not_found(self, mock_query):
- mock_query.return_value = []
- self.rep.yaml_name = FAKE_YAML_NAME
- self.rep.task_id = FAKE_TASK_ID
- self.assertRaisesRegexp(KeyError, "Task ID", self.rep._get_fieldkeys)
- self.assertRaisesRegexp(KeyError, "Task ID", self.rep._get_tasks)
diff --git a/tests/unit/benchmark/core/test_task.py b/tests/unit/benchmark/core/test_task.py
deleted file mode 100644
index bed0bb6d8..000000000
--- a/tests/unit/benchmark/core/test_task.py
+++ /dev/null
@@ -1,314 +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.benchmark.core.task
-
-from __future__ import print_function
-
-from __future__ import absolute_import
-import os
-import unittest
-
-try:
- from unittest import mock
-except ImportError:
- import mock
-
-
-from yardstick.benchmark.core import task
-from yardstick.common import constants as consts
-
-
-class TaskTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.benchmark.core.task.Context')
- def test_parse_nodes_host_target_same_context(self, mock_context):
- nodes = {
- "host": "node1.LF",
- "target": "node2.LF"
- }
- scenario_cfg = {"nodes": nodes}
- server_info = {
- "ip": "10.20.0.3",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- mock_context.get_server.return_value = server_info
- context_cfg = task.parse_nodes_with_context(scenario_cfg)
-
- self.assertEqual(context_cfg["host"], server_info)
- self.assertEqual(context_cfg["target"], server_info)
-
- def test_set_dispatchers(self):
- t = task.Task()
- output_config = {"DEFAULT": {"dispatcher": "file, http"}}
- t._set_dispatchers(output_config)
- self.assertEqual(output_config, output_config)
-
- @mock.patch('yardstick.benchmark.core.task.DispatcherBase')
- def test__do_output(self, mock_dispatcher):
- t = task.Task()
- output_config = {"DEFAULT": {"dispatcher": "file, http"}}
- mock_dispatcher.get = mock.MagicMock(return_value=[mock.MagicMock(),
- mock.MagicMock()])
- self.assertEqual(None, t._do_output(output_config, {}))
-
- @mock.patch('yardstick.benchmark.core.task.Context')
- def test_parse_networks_from_nodes(self, mock_context):
- nodes = {
- 'node1': {
- 'interfaces': {
- 'mgmt': {
- 'network_name': 'mgmt',
- },
- 'xe0': {
- 'network_name': 'uplink_0',
- },
- 'xe1': {
- 'network_name': 'downlink_0',
- },
- },
- },
- 'node2': {
- 'interfaces': {
- 'mgmt': {
- 'network_name': 'mgmt',
- },
- 'uplink_0': {
- 'network_name': 'uplink_0',
- },
- 'downlink_0': {
- 'network_name': 'downlink_0',
- },
- },
- },
- }
-
- mock_context.get_network.side_effect = iter([
- None,
- {
- 'name': 'mgmt',
- 'network_type': 'flat',
- },
- {},
- {
- 'name': 'uplink_0',
- 'subnet_cidr': '10.20.0.0/16',
- },
- {
- 'name': 'downlink_0',
- 'segmentation_id': '1001',
- },
- {
- 'name': 'uplink_1',
- },
- ])
-
- # one for each interface
- expected_get_network_calls = 6
- expected = {
- 'mgmt': {'name': 'mgmt', 'network_type': 'flat'},
- 'uplink_0': {'name': 'uplink_0', 'subnet_cidr': '10.20.0.0/16'},
- 'uplink_1': {'name': 'uplink_1'},
- 'downlink_0': {'name': 'downlink_0', 'segmentation_id': '1001'},
- }
-
- networks = task.get_networks_from_nodes(nodes)
- self.assertEqual(mock_context.get_network.call_count, expected_get_network_calls)
- self.assertDictEqual(networks, expected)
-
- @mock.patch('yardstick.benchmark.core.task.Context')
- @mock.patch('yardstick.benchmark.core.task.base_runner')
- def test_run(self, mock_base_runner, mock_ctx):
- scenario = {
- 'host': 'athena.demo',
- 'target': 'ares.demo',
- 'runner': {
- 'duration': 60,
- 'interval': 1,
- 'type': 'Duration'
- },
- 'type': 'Ping'
- }
-
- t = task.Task()
- runner = mock.Mock()
- runner.join.return_value = 0
- runner.get_output.return_value = {}
- runner.get_result.return_value = []
- mock_base_runner.Runner.get.return_value = runner
- t._run([scenario], False, "yardstick.out")
- self.assertTrue(runner.run.called)
-
- @mock.patch('yardstick.benchmark.core.task.os')
- def test_check_precondition(self, mock_os):
- cfg = {
- 'precondition': {
- 'installer_type': 'compass',
- 'deploy_scenarios': 'os-nosdn',
- 'pod_name': 'huawei-pod1'
- }
- }
-
- t = task.TaskParser('/opt')
- mock_os.environ.get.side_effect = ['compass',
- 'os-nosdn',
- 'huawei-pod1']
- result = t._check_precondition(cfg)
- self.assertTrue(result)
-
- def test_parse_suite_no_constraint_no_args(self):
- SAMPLE_SCENARIO_PATH = "no_constraint_no_args_scenario_sample.yaml"
- t = task.TaskParser(self._get_file_abspath(SAMPLE_SCENARIO_PATH))
- with mock.patch('yardstick.benchmark.core.task.os.environ',
- new={'NODE_NAME': 'huawei-pod1', 'INSTALLER_TYPE': 'compass'}):
- task_files, task_args, task_args_fnames = t.parse_suite()
- print("files=%s, args=%s, fnames=%s" % (task_files, task_args,
- task_args_fnames))
- self.assertEqual(task_files[0], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc037.yaml'))
- self.assertEqual(task_files[1], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc043.yaml'))
- self.assertEqual(task_args[0], None)
- self.assertEqual(task_args[1], None)
- self.assertEqual(task_args_fnames[0], None)
- self.assertEqual(task_args_fnames[1], None)
-
- @mock.patch('yardstick.benchmark.core.task.os.environ')
- def test_parse_suite_no_constraint_with_args(self, mock_environ):
- SAMPLE_SCENARIO_PATH = "no_constraint_with_args_scenario_sample.yaml"
- t = task.TaskParser(self._get_file_abspath(SAMPLE_SCENARIO_PATH))
- with mock.patch('yardstick.benchmark.core.task.os.environ',
- new={'NODE_NAME': 'huawei-pod1', 'INSTALLER_TYPE': 'compass'}):
- task_files, task_args, task_args_fnames = t.parse_suite()
- print("files=%s, args=%s, fnames=%s" % (task_files, task_args,
- task_args_fnames))
- self.assertEqual(task_files[0], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc037.yaml'))
- self.assertEqual(task_files[1], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc043.yaml'))
- self.assertEqual(task_args[0], None)
- self.assertEqual(task_args[1],
- '{"host": "node1.LF","target": "node2.LF"}')
- self.assertEqual(task_args_fnames[0], None)
- self.assertEqual(task_args_fnames[1], None)
-
- @mock.patch('yardstick.benchmark.core.task.os.environ')
- def test_parse_suite_with_constraint_no_args(self, mock_environ):
- SAMPLE_SCENARIO_PATH = "with_constraint_no_args_scenario_sample.yaml"
- t = task.TaskParser(self._get_file_abspath(SAMPLE_SCENARIO_PATH))
- with mock.patch('yardstick.benchmark.core.task.os.environ',
- new={'NODE_NAME': 'huawei-pod1', 'INSTALLER_TYPE': 'compass'}):
- task_files, task_args, task_args_fnames = t.parse_suite()
- print("files=%s, args=%s, fnames=%s" % (task_files, task_args,
- task_args_fnames))
- self.assertEqual(task_files[0], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc037.yaml'))
- self.assertEqual(task_files[1], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc043.yaml'))
- self.assertEqual(task_args[0], None)
- self.assertEqual(task_args[1], None)
- self.assertEqual(task_args_fnames[0], None)
- self.assertEqual(task_args_fnames[1], None)
-
- @mock.patch('yardstick.benchmark.core.task.os.environ')
- def test_parse_suite_with_constraint_with_args(self, mock_environ):
- SAMPLE_SCENARIO_PATH = "with_constraint_with_args_scenario_sample.yaml"
- t = task.TaskParser(self._get_file_abspath(SAMPLE_SCENARIO_PATH))
- with mock.patch('yardstick.benchmark.core.task.os.environ',
- new={'NODE_NAME': 'huawei-pod1', 'INSTALLER_TYPE': 'compass'}):
- task_files, task_args, task_args_fnames = t.parse_suite()
- print("files=%s, args=%s, fnames=%s" % (task_files, task_args,
- task_args_fnames))
- self.assertEqual(task_files[0], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc037.yaml'))
- self.assertEqual(task_files[1], self.change_to_abspath(
- 'tests/opnfv/test_cases/opnfv_yardstick_tc043.yaml'))
- self.assertEqual(task_args[0], None)
- self.assertEqual(task_args[1],
- '{"host": "node1.LF","target": "node2.LF"}')
- self.assertEqual(task_args_fnames[0], None)
- self.assertEqual(task_args_fnames[1], None)
-
- def test_parse_options(self):
- options = {
- 'openstack': {
- 'EXTERNAL_NETWORK': '$network'
- },
- 'ndoes': ['node1', '$node'],
- 'host': '$host'
- }
-
- t = task.Task()
- t.outputs = {
- 'network': 'ext-net',
- 'node': 'node2',
- 'host': 'server.yardstick'
- }
-
- idle_result = {
- 'openstack': {
- 'EXTERNAL_NETWORK': 'ext-net'
- },
- 'ndoes': ['node1', 'node2'],
- 'host': 'server.yardstick'
- }
-
- actual_result = t._parse_options(options)
- self.assertEqual(idle_result, actual_result)
-
- def test_change_server_name_host_str(self):
- scenario = {'host': 'demo'}
- suffix = '-8'
- task.change_server_name(scenario, suffix)
- self.assertTrue(scenario['host'], 'demo-8')
-
- def test_change_server_name_host_dict(self):
- scenario = {'host': {'name': 'demo'}}
- suffix = '-8'
- task.change_server_name(scenario, suffix)
- self.assertTrue(scenario['host']['name'], 'demo-8')
-
- def test_change_server_name_target_str(self):
- scenario = {'target': 'demo'}
- suffix = '-8'
- task.change_server_name(scenario, suffix)
- self.assertTrue(scenario['target'], 'demo-8')
-
- def test_change_server_name_target_dict(self):
- scenario = {'target': {'name': 'demo'}}
- suffix = '-8'
- task.change_server_name(scenario, suffix)
- self.assertTrue(scenario['target']['name'], 'demo-8')
-
- @mock.patch('yardstick.benchmark.core.task.utils')
- @mock.patch('yardstick.benchmark.core.task.logging')
- def test_set_log(self, mock_logging, mock_utils):
- task_obj = task.Task()
- task_obj.task_id = 'task_id'
- task_obj._set_log()
- self.assertTrue(mock_logging.root.addHandler.called)
-
- 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
-
- def change_to_abspath(self, filepath):
- return os.path.join(consts.YARDSTICK_ROOT_PATH, filepath)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/core/test_testcase.py b/tests/unit/benchmark/core/test_testcase.py
deleted file mode 100644
index 1f5aad75e..000000000
--- a/tests/unit/benchmark/core/test_testcase.py
+++ /dev/null
@@ -1,45 +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.cmd.commands.testcase
-
-from __future__ import absolute_import
-import unittest
-
-from yardstick.benchmark.core import testcase
-
-
-class Arg(object):
-
- def __init__(self):
- self.casename = ('opnfv_yardstick_tc001',)
-
-
-class TestcaseUT(unittest.TestCase):
-
- def test_list_all(self):
- t = testcase.Testcase()
- result = t.list_all("")
- self.assertIsInstance(result, list)
-
- def test_show(self):
- t = testcase.Testcase()
- casename = Arg()
- result = t.show(casename)
- self.assertTrue(result)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml b/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml
deleted file mode 100644
index 168d4b01a..000000000
--- a/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml
+++ /dev/null
@@ -1,24 +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
-##############################################################################
----
-# Huawei US bare daily task suite
-
-schema: "yardstick:suite:0.1"
-
-name: "os-nosdn-nofeature-ha"
-test_cases_dir: "tests/opnfv/test_cases/"
-test_cases:
--
- file_name: opnfv_yardstick_tc037.yaml
--
- file_name: opnfv_yardstick_tc043.yaml
- constraint:
- installer: compass
- pod: huawei-pod1
-
diff --git a/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml b/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml
deleted file mode 100644
index 299e5de56..000000000
--- a/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml
+++ /dev/null
@@ -1,26 +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
-##############################################################################
----
-# Huawei US bare daily task suite
-
-schema: "yardstick:suite:0.1"
-
-name: "os-nosdn-nofeature-ha"
-test_cases_dir: "tests/opnfv/test_cases/"
-test_cases:
--
- file_name: opnfv_yardstick_tc037.yaml
--
- file_name: opnfv_yardstick_tc043.yaml
- constraint:
- installer: compass
- pod: huawei-pod1
- task_args:
- huawei-pod1: '{"host": "node1.LF","target": "node2.LF"}'
-
diff --git a/tests/unit/benchmark/runner/__init__.py b/tests/unit/benchmark/runner/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/runner/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/runner/test_base.py b/tests/unit/benchmark/runner/test_base.py
deleted file mode 100644
index f47b88e95..000000000
--- a/tests/unit/benchmark/runner/test_base.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/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
-##############################################################################
-
-from __future__ import print_function
-from __future__ import absolute_import
-
-import unittest
-import time
-
-from mock import mock
-
-from yardstick.benchmark.runners import base
-from yardstick.benchmark.runners.iteration import IterationRunner
-
-
-class ActionTestCase(unittest.TestCase):
-
- @mock.patch("yardstick.benchmark.runners.base.subprocess")
- def test__execute_shell_command(self, mock_subprocess):
- mock_subprocess.check_output.side_effect = Exception()
-
- self.assertEqual(base._execute_shell_command("")[0], -1)
-
- @mock.patch("yardstick.benchmark.runners.base.subprocess")
- def test__single_action(self, mock_subprocess):
- mock_subprocess.check_output.side_effect = Exception()
-
- base._single_action(0, "echo", mock.MagicMock())
-
- @mock.patch("yardstick.benchmark.runners.base.subprocess")
- def test__periodic_action(self, mock_subprocess):
- mock_subprocess.check_output.side_effect = Exception()
-
- base._periodic_action(0, "echo", mock.MagicMock())
-
-
-class RunnerTestCase(unittest.TestCase):
-
- @mock.patch("yardstick.benchmark.runners.iteration.multiprocessing")
- def test_get_output(self, mock_process):
- runner = IterationRunner({})
- runner.output_queue.put({'case': 'opnfv_yardstick_tc002'})
- runner.output_queue.put({'criteria': 'PASS'})
-
- idle_result = {
- 'case': 'opnfv_yardstick_tc002',
- 'criteria': 'PASS'
- }
-
- for retries in range(1000):
- time.sleep(0.01)
- if not runner.output_queue.empty():
- break
- actual_result = runner.get_output()
- self.assertEqual(idle_result, actual_result)
-
- @mock.patch("yardstick.benchmark.runners.iteration.multiprocessing")
- def test_get_result(self, mock_process):
- runner = IterationRunner({})
- runner.result_queue.put({'case': 'opnfv_yardstick_tc002'})
- runner.result_queue.put({'criteria': 'PASS'})
-
- idle_result = [
- {'case': 'opnfv_yardstick_tc002'},
- {'criteria': 'PASS'}
- ]
-
- for retries in range(1000):
- time.sleep(0.01)
- if not runner.result_queue.empty():
- break
- actual_result = runner.get_result()
- self.assertEqual(idle_result, actual_result)
-
- def test__run_benchmark(self):
- runner = base.Runner(mock.Mock())
-
- with self.assertRaises(NotImplementedError):
- runner._run_benchmark(mock.Mock(), mock.Mock(), mock.Mock(), mock.Mock())
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/runner/test_search.py b/tests/unit/benchmark/runner/test_search.py
deleted file mode 100644
index 8fab5a71f..000000000
--- a/tests/unit/benchmark/runner/test_search.py
+++ /dev/null
@@ -1,204 +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.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.benchmark.runners.search import SearchRunner
- from yardstick.benchmark.runners.search import SearchRunnerHelper
-
-
-class TestSearchRunnerHelper(unittest.TestCase):
-
- def test___call__(self):
- cls = mock.MagicMock()
- aborted = mock.MagicMock()
- scenario_cfg = {
- 'runner': {},
- }
-
- benchmark = cls()
- method = getattr(benchmark, 'my_method')
- helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted)
-
- with helper.get_benchmark_instance():
- helper()
-
- self.assertEqual(method.call_count, 1)
-
- def test___call___error(self):
- cls = mock.MagicMock()
- aborted = mock.MagicMock()
- scenario_cfg = {
- 'runner': {},
- }
-
- helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted)
-
- with self.assertRaises(RuntimeError):
- helper()
-
- @mock.patch('yardstick.benchmark.runners.search.time')
- def test_is_not_done(self, mock_time):
- cls = mock.MagicMock()
- aborted = mock.MagicMock()
- scenario_cfg = {
- 'runner': {},
- }
-
- mock_time.time.side_effect = range(1000)
-
- helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted)
-
- index = -1
- for index in helper.is_not_done():
- if index >= 10:
- break
-
- self.assertGreaterEqual(index, 10)
-
- @mock.patch('yardstick.benchmark.runners.search.time')
- def test_is_not_done_immediate_stop(self, mock_time):
- cls = mock.MagicMock()
- aborted = mock.MagicMock()
- scenario_cfg = {
- 'runner': {
- 'run_step': '',
- },
- }
-
- helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted)
-
- index = -1
- for index in helper.is_not_done():
- if index >= 10:
- break
-
- self.assertEqual(index, -1)
-
-class TestSearchRunner(unittest.TestCase):
-
- def test__worker_run_once(self):
- def update(*args):
- args[-1].update(data)
-
- data = {
- 'key1': {
- 'inner1': 'value1',
- 'done': 0,
- },
- 'key2': {
- 'done': None,
- },
- }
-
- runner = SearchRunner({})
- runner.worker_helper = mock.MagicMock(side_effect=update)
-
- self.assertFalse(runner._worker_run_once('sequence 1'))
-
- def test__worker_run_once_done(self):
- def update(*args):
- args[-1].update(data)
-
- data = {
- 'key1': {
- 'inner1': 'value1',
- 'done': 0,
- },
- 'key2': {
- 'done': None,
- },
- 'key3': {
- 'done': True,
- },
- 'key4': [],
- 'key5': 'value5',
- }
-
- runner = SearchRunner({})
- runner.worker_helper = mock.MagicMock(side_effect=update)
-
- self.assertTrue(runner._worker_run_once('sequence 1'))
-
- def test__worker_run_once_assertion_error_assert(self):
- runner = SearchRunner({})
- runner.sla_action = 'assert'
- runner.worker_helper = mock.MagicMock(side_effect=AssertionError)
-
- with self.assertRaises(AssertionError):
- runner._worker_run_once('sequence 1')
-
- def test__worker_run_once_assertion_error_monitor(self):
- runner = SearchRunner({})
- runner.sla_action = 'monitor'
- runner.worker_helper = mock.MagicMock(side_effect=AssertionError)
-
- self.assertFalse(runner._worker_run_once('sequence 1'))
-
- def test__worker_run_once_non_assertion_error_none(self):
- runner = SearchRunner({})
- runner.worker_helper = mock.MagicMock(side_effect=RuntimeError)
-
- self.assertTrue(runner._worker_run_once('sequence 1'))
-
- def test__worker_run_once_non_assertion_error(self):
- runner = SearchRunner({})
- runner.sla_action = 'monitor'
- runner.worker_helper = mock.MagicMock(side_effect=RuntimeError)
-
- self.assertFalse(runner._worker_run_once('sequence 1'))
-
- def test__worker_run(self):
- cls = mock.MagicMock()
- scenario_cfg = {
- 'runner': {'interval': 0, 'timeout': 1},
- }
-
- runner = SearchRunner({})
- runner._worker_run_once = mock.MagicMock(side_effect=[0, 0, 1])
-
- runner._worker_run(cls, 'my_method', scenario_cfg, {})
-
- def test__worker_run_immediate_stop(self):
- cls = mock.MagicMock()
- scenario_cfg = {
- 'runner': {
- 'run_step': '',
- },
- }
-
- runner = SearchRunner({})
- runner._worker_run(cls, 'my_method', scenario_cfg, {})
-
- @mock.patch('yardstick.benchmark.runners.search.multiprocessing')
- def test__run_benchmark(self, mock_multi_process):
- cls = mock.MagicMock()
- scenario_cfg = {
- 'runner': {},
- }
-
- runner = SearchRunner({})
- runner._run_benchmark(cls, 'my_method', scenario_cfg, {})
- self.assertEqual(mock_multi_process.Process.call_count, 1)
diff --git a/tests/unit/benchmark/scenarios/__init__.py b/tests/unit/benchmark/scenarios/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/availability/__init__.py b/tests/unit/benchmark/scenarios/availability/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/availability/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py b/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py
deleted file mode 100644
index cc179602e..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py
+++ /dev/null
@@ -1,84 +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.benchmark.scenarios.availability.attacker.attacker_baremetal
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.attacker import \
- attacker_baremetal
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.subprocess')
-class ExecuteShellTestCase(unittest.TestCase):
-
- def test__fun_execute_shell_command_successful(self, mock_subprocess):
- cmd = "env"
- mock_subprocess.check_output.return_value = (0, 'unittest')
- exitcode, output = attacker_baremetal._execute_shell_command(cmd)
- self.assertEqual(exitcode, 0)
-
- @mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.LOG')
- def test__fun_execute_shell_command_fail_cmd_exception(self, mock_log, mock_subprocess):
- cmd = "env"
- mock_subprocess.check_output.side_effect = RuntimeError
- exitcode, output = attacker_baremetal._execute_shell_command(cmd)
- self.assertEqual(exitcode, -1)
- mock_log.error.assert_called_once()
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.subprocess')
-@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.ssh')
-class AttackerBaremetalTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ipmi_ip": "10.20.0.5",
- "ipmi_user": "root",
- "ipmi_pwd": "123456",
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.attacker_cfg = {
- 'fault_type': 'bear-metal-down',
- 'host': 'node1',
- }
-
- def test__attacker_baremetal_all_successful(self, mock_ssh, mock_subprocess):
- mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
- ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
- self.context)
-
- ins.setup()
- ins.inject_fault()
- ins.recover()
-
- def test__attacker_baremetal_check_failuer(self, mock_ssh, mock_subprocess):
- mock_ssh.SSH.from_node().execute.return_value = (0, "error check", '')
- ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
- self.context)
- ins.setup()
-
- def test__attacker_baremetal_recover_successful(self, mock_ssh, mock_subprocess):
-
- self.attacker_cfg["jump_host"] = 'node1'
- self.context["node1"]["pwd"] = "123456"
- mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
- ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
- self.context)
-
- ins.setup()
- ins.recover()
diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_general.py b/tests/unit/benchmark/scenarios/availability/test_attacker_general.py
deleted file mode 100644
index 612b5a662..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_attacker_general.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Juan Qiu and others
-# juan_ qiu@tongji.edu.cn
-# 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.availability.attacker
-# .attacker_general
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.attacker import baseattacker
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.attacker.'
- 'attacker_general.ssh')
-class GeneralAttackerServiceTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.attacker_cfg = {
- 'fault_type': 'general-attacker',
- 'action_parameter': {'process_name': 'nova_api'},
- 'rollback_parameter': {'process_name': 'nova_api'},
- 'key': 'stop-service',
- 'attack_key': 'stop-service',
- 'host': 'node1',
- }
-
- def test__attacker_service_all_successful(self, mock_ssh):
-
- cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
- ins = cls(self.attacker_cfg, self.context)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
- ins.setup()
- ins.inject_fault()
- ins.recover()
-
- def test__attacker_service_check_failuer(self, mock_ssh):
-
- cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
- ins = cls(self.attacker_cfg, self.context)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, "error check", '')
- ins.setup()
diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_process.py b/tests/unit/benchmark/scenarios/availability/test_attacker_process.py
deleted file mode 100644
index 0a8e8322a..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_attacker_process.py
+++ /dev/null
@@ -1,55 +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.benchmark.scenarios.availability.attacker.attacker_process
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.attacker import baseattacker
-
-
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.attacker.attacker_process.ssh')
-class AttackerServiceTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.attacker_cfg = {
- 'fault_type': 'kill-process',
- 'process_name': 'nova-api',
- 'host': 'node1',
- }
-
- def test__attacker_service_all_successful(self, mock_ssh):
-
- cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
- ins = cls(self.attacker_cfg, self.context)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, "10", '')
- ins.setup()
- ins.inject_fault()
- ins.recover()
-
- def test__attacker_service_check_failuer(self, mock_ssh):
-
- cls = baseattacker.BaseAttacker.get_attacker_cls(self.attacker_cfg)
- ins = cls(self.attacker_cfg, self.context)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, None, '')
- ins.setup()
diff --git a/tests/unit/benchmark/scenarios/availability/test_basemonitor.py b/tests/unit/benchmark/scenarios/availability/test_basemonitor.py
deleted file mode 100644
index 92ae8aa88..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_basemonitor.py
+++ /dev/null
@@ -1,125 +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.benchmark.scenarios.availability.monitor.monitor_command
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.monitor import basemonitor
-
-
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.basemonitor'
- '.BaseMonitor')
-class MonitorMgrTestCase(unittest.TestCase):
-
- def setUp(self):
- self.monitor_configs = [
- {
- "monitor_type": "openstack-cmd",
- "command_name": "openstack router list",
- "monitor_time": 10,
- "monitor_number": 3,
- "sla": {
- "max_outage_time": 5
- }
- },
- {
- "monitor_type": "process",
- "process_name": "neutron-server",
- "host": "node1",
- "monitor_time": 20,
- "monitor_number": 3,
- "sla": {
- "max_recover_time": 20
- }
- }
- ]
- self.MonitorMgr = basemonitor.MonitorMgr([])
- self.MonitorMgr.init_monitors(self.monitor_configs, None)
- self.monitor_list = self.MonitorMgr._monitor_list
- for mo in self.monitor_list:
- mo._result = {"outage_time": 10}
-
- def test__MonitorMgr_setup_successful(self, mock_monitor):
- instance = basemonitor.MonitorMgr({"nova-api": 10})
- instance.init_monitors(self.monitor_configs, None)
- instance.start_monitors()
- instance.wait_monitors()
-
- ret = instance.verify_SLA()
-
- def test_MonitorMgr_getitem(self, mock_monitor):
- monitorMgr = basemonitor.MonitorMgr({"nova-api": 10})
- monitorMgr.init_monitors(self.monitor_configs, None)
-
- def test_store_result(self, mock_monitor):
- expect = {'process_neutron-server_outage_time': 10,
- 'openstack-router-list_outage_time': 10}
- result = {}
- self.MonitorMgr.store_result(result)
- self.assertDictEqual(result, expect)
-
-
-class BaseMonitorTestCase(unittest.TestCase):
-
- class MonitorSimple(basemonitor.BaseMonitor):
- __monitor_type__ = "MonitorForTest"
-
- def setup(self):
- self.monitor_result = False
-
- def monitor_func(self):
- return self.monitor_result
-
- def setUp(self):
- self.monitor_cfg = {
- 'monitor_type': 'MonitorForTest',
- 'command_name': 'nova image-list',
- 'monitor_time': 0.01,
- 'sla': {'max_outage_time': 5}
- }
-
- def test__basemonitor_start_wait_successful(self):
- ins = basemonitor.BaseMonitor(self.monitor_cfg, None, {"nova-api": 10})
- ins.start_monitor()
- ins.wait_monitor()
-
- def test__basemonitor_all_successful(self):
- ins = self.MonitorSimple(self.monitor_cfg, None, {"nova-api": 10})
- ins.setup()
- ins.run()
- ins.verify_SLA()
-
- @mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.basemonitor'
- '.multiprocessing')
- def test__basemonitor_func_false(self, mock_multiprocess):
- ins = self.MonitorSimple(self.monitor_cfg, None, {"nova-api": 10})
- ins.setup()
- mock_multiprocess.Event().is_set.return_value = False
- ins.run()
- ins.verify_SLA()
-
- def test__basemonitor_getmonitorcls_successfule(self):
- cls = None
- try:
- cls = basemonitor.BaseMonitor.get_monitor_cls(self.monitor_cfg)
- except Exception:
- pass
- self.assertIsNone(cls)
-
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/tests/unit/benchmark/scenarios/availability/test_baseoperation.py b/tests/unit/benchmark/scenarios/availability/test_baseoperation.py
deleted file mode 100644
index 03ec1492b..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_baseoperation.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.operation.baseoperation
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.operation import baseoperation
-
-
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.operation.baseoperation'
- '.BaseOperation')
-class OperationMgrTestCase(unittest.TestCase):
-
- def setUp(self):
- config = {
- 'operation_type': 'general-operation',
- 'key': 'service-status'
- }
-
- self.operation_configs = []
- self.operation_configs.append(config)
-
- def test_all_successful(self, mock_operation):
- mgr_ins = baseoperation.OperationMgr()
- mgr_ins.init_operations(self.operation_configs, None)
- operation_ins = mgr_ins["service-status"]
- mgr_ins.rollback()
-
- def test_getitem_fail(self, mock_operation):
- mgr_ins = baseoperation.OperationMgr()
- mgr_ins.init_operations(self.operation_configs, None)
- with self.assertRaises(KeyError):
- operation_ins = mgr_ins["operation-not-exist"]
-
-
-class TestOperation(baseoperation.BaseOperation):
- __operation__type__ = "test-operation"
-
- def setup(self):
- pass
-
- def run(self):
- pass
-
- def rollback(self):
- pass
-
-
-class BaseOperationTestCase(unittest.TestCase):
-
- def setUp(self):
- self.config = {
- 'operation_type': 'general-operation',
- 'key': 'service-status'
- }
-
- def test_all_successful(self):
- base_ins = baseoperation.BaseOperation(self.config, None)
- base_ins.setup()
- base_ins.run()
- base_ins.rollback()
-
- def test_get_script_fullpath(self):
- base_ins = baseoperation.BaseOperation(self.config, None)
- base_ins.get_script_fullpath("ha_tools/test.bash")
-
- def test_get_operation_cls_successful(self):
- base_ins = baseoperation.BaseOperation(self.config, None)
- operation_ins = base_ins.get_operation_cls("test-operation")
-
- def test_get_operation_cls_fail(self):
- base_ins = baseoperation.BaseOperation(self.config, None)
- with self.assertRaises(RuntimeError):
- operation_ins = base_ins.get_operation_cls("operation-not-exist")
diff --git a/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py b/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py
deleted file mode 100644
index 36ce900fb..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.result_checker
-# .baseresultchecker
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.result_checker import \
- baseresultchecker
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.result_checker'
- '.baseresultchecker.BaseResultChecker')
-class ResultCheckerMgrTestCase(unittest.TestCase):
-
- def setUp(self):
- config = {
- 'checker_type': 'general-result-checker',
- 'key': 'process-checker'
- }
-
- self.checker_configs = []
- self.checker_configs.append(config)
-
- def test_ResultCheckerMgr_setup_successful(self, mock_basechacer):
- mgr_ins = baseresultchecker.ResultCheckerMgr()
- mgr_ins.init_ResultChecker(self.checker_configs, None)
- mgr_ins.verify()
-
- def test_getitem_succeessful(self, mock_basechacer):
- mgr_ins = baseresultchecker.ResultCheckerMgr()
- mgr_ins.init_ResultChecker(self.checker_configs, None)
- checker_ins = mgr_ins["process-checker"]
-
- def test_getitem_fail(self, mock_basechacer):
- mgr_ins = baseresultchecker.ResultCheckerMgr()
- mgr_ins.init_ResultChecker(self.checker_configs, None)
- with self.assertRaises(KeyError):
- checker_ins = mgr_ins["checker-not-exist"]
-
-
-class BaseResultCheckerTestCase(unittest.TestCase):
-
- class ResultCheckeSimple(baseresultchecker.BaseResultChecker):
- __result_checker__type__ = "ResultCheckeForTest"
-
- def setup(self):
- self.success = False
-
- def verify(self):
- return self.success
-
- def setUp(self):
- self.checker_cfg = {
- 'checker_type': 'general-result-checker',
- 'key': 'process-checker'
- }
-
- def test_baseresultchecker_setup_verify_successful(self):
- ins = baseresultchecker.BaseResultChecker(self.checker_cfg, None)
- ins.setup()
- ins.verify()
-
- def test_baseresultchecker_verfiy_pass(self):
- ins = baseresultchecker.BaseResultChecker(self.checker_cfg, None)
- ins.setup()
- ins.actualResult = True
- ins.expectedResult = True
- ins.verify()
-
- def test_get_script_fullpath(self):
- ins = baseresultchecker.BaseResultChecker(self.checker_cfg, None)
- path = ins.get_script_fullpath("test.bash")
-
- def test_get_resultchecker_cls_successful(self):
- baseresultchecker.BaseResultChecker.get_resultchecker_cls(
- "ResultCheckeForTest")
-
- def test_get_resultchecker_cls_fail(self):
- with self.assertRaises(RuntimeError):
- baseresultchecker.BaseResultChecker.get_resultchecker_cls(
- "ResultCheckeNotExist")
diff --git a/tests/unit/benchmark/scenarios/availability/test_director.py b/tests/unit/benchmark/scenarios/availability/test_director.py
deleted file mode 100644
index d01a60e2d..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_director.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.director
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.director import Director
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.director.basemonitor')
-@mock.patch('yardstick.benchmark.scenarios.availability.director.baseattacker')
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.director.baseoperation')
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.director.baseresultchecker')
-class DirectorTestCase(unittest.TestCase):
-
- def setUp(self):
- self.scenario_cfg = {
- 'type': "general_scenario",
- 'options': {
- 'attackers': [{
- 'fault_type': "general-attacker",
- 'key': "kill-process"}],
- 'monitors': [{
- 'monitor_type': "general-monitor",
- 'key': "service-status"}],
- 'operations': [{
- 'operation_type': 'general-operation',
- 'key': 'service-status'}],
- 'resultCheckers': [{
- 'checker_type': 'general-result-checker',
- 'key': 'process-checker', }],
- 'steps': [
- {
- 'actionKey': "service-status",
- 'actionType': "operation",
- 'index': 1},
- {
- 'actionKey': "kill-process",
- 'actionType': "attacker",
- 'index': 2},
- {
- 'actionKey': "process-checker",
- 'actionType': "resultchecker",
- 'index': 3},
- {
- 'actionKey': "service-status",
- 'actionType': "monitor",
- 'index': 4},
- ]
- }
- }
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.ctx = {"nodes": {"node1": host}}
-
- def test_director_all_successful(self, mock_checer, mock_opertion,
- mock_attacker, mock_monitor):
- ins = Director(self.scenario_cfg, self.ctx)
- opertion_action = ins.createActionPlayer("operation", "service-status")
- attacker_action = ins.createActionPlayer("attacker", "kill-process")
- checker_action = ins.createActionPlayer("resultchecker",
- "process-checker")
- monitor_action = ins.createActionPlayer("monitor", "service-status")
-
- opertion_rollback = ins.createActionRollbacker("operation",
- "service-status")
- attacker_rollback = ins.createActionRollbacker("attacker",
- "kill-process")
- ins.executionSteps.append(opertion_rollback)
- ins.executionSteps.append(attacker_rollback)
-
- opertion_action.action()
- attacker_action.action()
- checker_action.action()
- monitor_action.action()
-
- attacker_rollback.rollback()
- opertion_rollback.rollback()
-
- ins.stopMonitors()
- ins.verify()
- ins.knockoff()
-
- def test_director_get_wrong_item(self, mock_checer, mock_opertion,
- mock_attacker, mock_monitor):
- ins = Director(self.scenario_cfg, self.ctx)
- ins.createActionPlayer("wrong_type", "wrong_key")
- ins.createActionRollbacker("wrong_type", "wrong_key")
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py b/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
deleted file mode 100644
index 6a9b3b157..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py
+++ /dev/null
@@ -1,95 +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.benchmark.scenarios.availability.monitor.monitor_command
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.monitor import monitor_command
-
-
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
- '.subprocess')
-class ExecuteShellTestCase(unittest.TestCase):
-
- def test__fun_execute_shell_command_successful(self, mock_subprocess):
- cmd = "env"
- mock_subprocess.check_output.return_value = (0, 'unittest')
- exitcode, output = monitor_command._execute_shell_command(cmd)
- self.assertEqual(exitcode, 0)
-
- @mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.LOG')
- def test__fun_execute_shell_command_fail_cmd_exception(self, mock_log,
- mock_subprocess):
- cmd = "env"
- mock_subprocess.check_output.side_effect = RuntimeError
- exitcode, output = monitor_command._execute_shell_command(cmd)
- self.assertEqual(exitcode, -1)
- mock_log.error.assert_called_once()
-
-
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
- '.subprocess')
-class MonitorOpenstackCmdTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.config = {
- 'monitor_type': 'openstack-api',
- 'command_name': 'nova image-list',
- 'monitor_time': 1,
- 'sla': {'max_outage_time': 5}
- }
-
- def test__monitor_command_monitor_func_successful(self, mock_subprocess):
-
- instance = monitor_command.MonitorOpenstackCmd(self.config, None, {"nova-api": 10})
- instance.setup()
- mock_subprocess.check_output.return_value = (0, 'unittest')
- ret = instance.monitor_func()
- self.assertEqual(ret, True)
- instance._result = {"outage_time": 0}
- instance.verify_SLA()
-
- @mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.LOG')
- def test__monitor_command_monitor_func_failure(self, mock_log, mock_subprocess):
- mock_subprocess.check_output.return_value = (1, 'unittest')
- instance = monitor_command.MonitorOpenstackCmd(self.config, None, {"nova-api": 10})
- instance.setup()
- mock_subprocess.check_output.side_effect = RuntimeError
- ret = instance.monitor_func()
- self.assertEqual(ret, False)
- mock_log.error.assert_called_once()
- instance._result = {"outage_time": 10}
- instance.verify_SLA()
-
- @mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
- '.ssh')
- def test__monitor_command_ssh_monitor_successful(self, mock_ssh,
- mock_subprocess):
-
- self.config["host"] = "node1"
- instance = monitor_command.MonitorOpenstackCmd(
- self.config, self.context, {"nova-api": 10})
- instance.setup()
- mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
- ret = instance.monitor_func()
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_general.py b/tests/unit/benchmark/scenarios/availability/test_monitor_general.py
deleted file mode 100644
index c14f073ec..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_general.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.monitor
-# .monitor_general
-
-from __future__ import absolute_import
-import mock
-import unittest
-from yardstick.benchmark.scenarios.availability.monitor import monitor_general
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.monitor.'
- 'monitor_general.ssh')
-@mock.patch('yardstick.benchmark.scenarios.availability.monitor.'
- 'monitor_general.open')
-class GeneralMonitorServiceTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.monitor_cfg = {
- 'monitor_type': 'general-monitor',
- 'key': 'service-status',
- 'monitor_key': 'service-status',
- 'host': 'node1',
- 'monitor_time': 3,
- 'parameter': {'serviceName': 'haproxy'},
- 'sla': {'max_outage_time': 1}
- }
- self.monitor_cfg_noparam = {
- 'monitor_type': 'general-monitor',
- 'key': 'service-status',
- 'monitor_key': 'service-status',
- 'host': 'node1',
- 'monitor_time': 3,
- 'sla': {'max_outage_time': 1}
- }
-
- def test__monitor_general_all_successful(self, mock_open, mock_ssh):
- ins = monitor_general.GeneralMonitor(self.monitor_cfg, self.context, {"nova-api": 10})
-
- ins.setup()
- mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
- ins.monitor_func()
- ins._result = {'outage_time': 0}
- ins.verify_SLA()
-
- def test__monitor_general_all_successful_noparam(self, mock_open,
- mock_ssh):
- ins = monitor_general.GeneralMonitor(
- self.monitor_cfg_noparam, self.context, {"nova-api": 10})
-
- ins.setup()
- mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
- ins.monitor_func()
- ins._result = {'outage_time': 0}
- ins.verify_SLA()
-
- def test__monitor_general_failure(self, mock_open, mock_ssh):
- ins = monitor_general.GeneralMonitor(
- self.monitor_cfg_noparam, self.context, {"nova-api": 10})
-
- ins.setup()
- mock_ssh.SSH.from_node().execute.return_value = (1, "error", 'error')
- ins.monitor_func()
- ins._result = {'outage_time': 2}
- ins.verify_SLA()
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py b/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py
deleted file mode 100644
index b59ec6cf1..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.monitor
-# .monitor_multi
-
-from __future__ import absolute_import
-import mock
-import unittest
-from yardstick.benchmark.scenarios.availability.monitor import monitor_multi
-
-@mock.patch('yardstick.benchmark.scenarios.availability.monitor.'
- 'monitor_general.ssh')
-@mock.patch('yardstick.benchmark.scenarios.availability.monitor.'
- 'monitor_general.open')
-class MultiMonitorServiceTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.monitor_cfg = {
- 'monitor_type': 'general-monitor',
- 'monitor_number': 3,
- 'key': 'service-status',
- 'monitor_key': 'service-status',
- 'host': 'node1',
- 'monitor_time': 0.1,
- 'parameter': {'serviceName': 'haproxy'},
- 'sla': {'max_outage_time': 1}
- }
-
- def test__monitor_multi_all_successful(self, mock_open, mock_ssh):
- ins = monitor_multi.MultiMonitor(self.monitor_cfg, self.context, {"nova-api": 10})
-
- mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
-
- ins.start_monitor()
- ins.wait_monitor()
- ins.verify_SLA()
-
- def test__monitor_multi_all_fail(self, mock_open, mock_ssh):
- ins = monitor_multi.MultiMonitor(self.monitor_cfg, self.context, {"nova-api": 10})
-
- mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
-
- ins.start_monitor()
- ins.wait_monitor()
- ins.verify_SLA()
-
diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py b/tests/unit/benchmark/scenarios/availability/test_monitor_process.py
deleted file mode 100644
index 41ce5445e..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py
+++ /dev/null
@@ -1,59 +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.benchmark.scenarios.availability.monitor.monitor_process
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.monitor import monitor_process
-
-
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.monitor.monitor_process.ssh')
-class MonitorProcessTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.monitor_cfg = {
- 'monitor_type': 'process',
- 'process_name': 'nova-api',
- 'host': "node1",
- 'monitor_time': 1,
- 'sla': {'max_recover_time': 5}
- }
-
- def test__monitor_process_all_successful(self, mock_ssh):
-
- ins = monitor_process.MonitorProcess(self.monitor_cfg, self.context, {"nova-api": 10})
-
- mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
- ins.setup()
- ins.monitor_func()
- ins._result = {"outage_time": 0}
- ins.verify_SLA()
-
- def test__monitor_process_down_failuer(self, mock_ssh):
-
- ins = monitor_process.MonitorProcess(self.monitor_cfg, self.context, {"nova-api": 10})
-
- mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
- ins.setup()
- ins.monitor_func()
- ins._result = {"outage_time": 10}
- ins.verify_SLA()
diff --git a/tests/unit/benchmark/scenarios/availability/test_operation_general.py b/tests/unit/benchmark/scenarios/availability/test_operation_general.py
deleted file mode 100644
index fb8ccb122..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_operation_general.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.operation
-# .operation_general
-
-from __future__ import absolute_import
-import mock
-import unittest
-from yardstick.benchmark.scenarios.availability.operation import \
- operation_general
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.operation.'
- 'operation_general.ssh')
-@mock.patch('yardstick.benchmark.scenarios.availability.operation.'
- 'operation_general.open')
-class GeneralOperaionTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.operation_cfg = {
- 'operation_type': 'general-operation',
- 'action_parameter': {'ins_cup': 2},
- 'rollback_parameter': {'ins_id': 'id123456'},
- 'key': 'nova-create-instance',
- 'operation_key': 'nova-create-instance',
- 'host': 'node1',
- }
- self.operation_cfg_noparam = {
- 'operation_type': 'general-operation',
- 'key': 'nova-create-instance',
- 'operation_key': 'nova-create-instance',
- 'host': 'node1',
- }
-
- def test__operation_successful(self, mock_open, mock_ssh):
- ins = operation_general.GeneralOperaion(self.operation_cfg,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "success", '')
- ins.setup()
- ins.run()
- ins.rollback()
-
- def test__operation_successful_noparam(self, mock_open, mock_ssh):
- ins = operation_general.GeneralOperaion(self.operation_cfg_noparam,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "success", '')
- ins.setup()
- ins.run()
- ins.rollback()
-
- def test__operation_fail(self, mock_open, mock_ssh):
- ins = operation_general.GeneralOperaion(self.operation_cfg,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (1, "failed", '')
- ins.setup()
- ins.run()
- ins.rollback()
diff --git a/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py b/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py
deleted file mode 100644
index d036bb0da..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.result_checker
-# .result_checker_general
-
-from __future__ import absolute_import
-import mock
-import unittest
-import copy
-
-from yardstick.benchmark.scenarios.availability.result_checker import \
- result_checker_general
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.result_checker.'
- 'result_checker_general.ssh')
-@mock.patch('yardstick.benchmark.scenarios.availability.result_checker.'
- 'result_checker_general.open')
-class GeneralResultCheckerTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.context = {"node1": host}
- self.checker_cfg = {
- 'parameter': {'processname': 'process'},
- 'checker_type': 'general-result-checker',
- 'condition': 'eq',
- 'expectedValue': 1,
- 'key': 'process-checker',
- 'checker_key': 'process-checker',
- 'host': 'node1'
- }
-
- def test__result_checker_eq(self, mock_open, mock_ssh):
- ins = result_checker_general.GeneralResultChecker(self.checker_cfg,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
- ins.setup()
- self.assertTrue(ins.verify())
-
- def test__result_checker_gt(self, mock_open, mock_ssh):
- config = copy.deepcopy(self.checker_cfg)
- config['condition'] = 'gt'
- ins = result_checker_general.GeneralResultChecker(config,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "2", '')
- ins.setup()
- self.assertTrue(ins.verify())
-
- def test__result_checker_gt_eq(self, mock_open, mock_ssh):
- config = copy.deepcopy(self.checker_cfg)
- config['condition'] = 'gt_eq'
- ins = result_checker_general.GeneralResultChecker(config,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
- ins.setup()
- self.assertTrue(ins.verify())
-
- def test__result_checker_lt(self, mock_open, mock_ssh):
- config = copy.deepcopy(self.checker_cfg)
- config['condition'] = 'lt'
- ins = result_checker_general.GeneralResultChecker(config,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
- ins.setup()
- self.assertTrue(ins.verify())
-
- def test__result_checker_lt_eq(self, mock_open, mock_ssh):
- config = copy.deepcopy(self.checker_cfg)
- config['condition'] = 'lt_eq'
- ins = result_checker_general.GeneralResultChecker(config,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
- ins.setup()
- self.assertTrue(ins.verify())
-
- def test__result_checker_in(self, mock_open, mock_ssh):
- config = copy.deepcopy(self.checker_cfg)
- config['condition'] = 'in'
- config['expectedValue'] = "value"
- ins = result_checker_general.GeneralResultChecker(config,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "value return", '')
- ins.setup()
- self.assertTrue(ins.verify())
-
- def test__result_checker_wrong(self, mock_open, mock_ssh):
- config = copy.deepcopy(self.checker_cfg)
- config['condition'] = 'wrong'
- ins = result_checker_general.GeneralResultChecker(config,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (0, "1", '')
- ins.setup()
- self.assertFalse(ins.verify())
-
- def test__result_checker_fail(self, mock_open, mock_ssh):
- config = copy.deepcopy(self.checker_cfg)
- config.pop('parameter')
- ins = result_checker_general.GeneralResultChecker(config,
- self.context)
- mock_ssh.SSH.from_node().execute.return_value = (1, "fail", '')
- ins.setup()
- ins.verify()
diff --git a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py b/tests/unit/benchmark/scenarios/availability/test_scenario_general.py
deleted file mode 100644
index 244a5e798..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huan Li and others
-# lihuansse@tongji.edu.cn
-# 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.availability.scenario_general
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability.scenario_general import \
- ScenarioGeneral
-
-
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.scenario_general.Director')
-class ScenarioGeneralTestCase(unittest.TestCase):
-
- def setUp(self):
- self.scenario_cfg = {
- 'type': "general_scenario",
- 'options': {
- 'attackers': [{
- 'fault_type': "general-attacker",
- 'key': "kill-process"}],
- 'monitors': [{
- 'monitor_type': "general-monitor",
- 'key': "service-status"}],
- 'steps': [
- {
- 'actionKey': "kill-process",
- 'actionType': "attacker",
- 'index': 1},
- {
- 'actionKey': "service-status",
- 'actionType': "monitor",
- 'index': 2}]
- }
- }
-
- def test_scenario_general_all_successful(self, mock_director):
- ins = ScenarioGeneral(self.scenario_cfg, None)
- ins.setup()
- ins.run({})
- ins.teardown()
-
- def test_scenario_general_exception(self, mock_director):
- ins = ScenarioGeneral(self.scenario_cfg, None)
- mock_obj = mock.Mock()
- mock_obj.createActionPlayer.side_effect = KeyError('Wrong')
- ins.director = mock_obj
- ins.director.data = {}
- ins.run({})
- ins.teardown()
-
- def test_scenario_general_case_fail(self, mock_director):
- ins = ScenarioGeneral(self.scenario_cfg, None)
- mock_obj = mock.Mock()
- mock_obj.verify.return_value = False
- ins.director = mock_obj
- ins.director.data = {}
- ins.run({})
- ins.pass_flag = True
- ins.teardown()
diff --git a/tests/unit/benchmark/scenarios/availability/test_serviceha.py b/tests/unit/benchmark/scenarios/availability/test_serviceha.py
deleted file mode 100644
index 4ae508958..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_serviceha.py
+++ /dev/null
@@ -1,77 +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.benchmark.scenarios.availability.serviceha
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.availability import serviceha
-
-
-@mock.patch('yardstick.benchmark.scenarios.availability.serviceha.basemonitor')
-@mock.patch(
- 'yardstick.benchmark.scenarios.availability.serviceha.baseattacker')
-class ServicehaTestCase(unittest.TestCase):
-
- def setUp(self):
- host = {
- "ip": "10.20.0.5",
- "user": "root",
- "key_filename": "/root/.ssh/id_rsa"
- }
- self.ctx = {"nodes": {"node1": host}}
- attacker_cfg = {
- "fault_type": "kill-process",
- "process_name": "nova-api",
- "host": "node1"
- }
- attacker_cfgs = []
- attacker_cfgs.append(attacker_cfg)
- monitor_cfg = {
- "monitor_cmd": "nova image-list",
- "monitor_time": 0.1
- }
- monitor_cfgs = []
- monitor_cfgs.append(monitor_cfg)
-
- options = {
- "attackers": attacker_cfgs,
- "monitors": monitor_cfgs
- }
- sla = {"outage_time": 5}
- self.args = {"options": options, "sla": sla}
-
- def test__serviceha_setup_run_successful(self, mock_attacker,
- mock_monitor):
- p = serviceha.ServiceHA(self.args, self.ctx)
-
- p.setup()
- self.assertEqual(p.setup_done, True)
- mock_monitor.MonitorMgr().verify_SLA.return_value = True
- ret = {}
- p.run(ret)
- p.teardown()
-"""
- def test__serviceha_run_sla_error(self, mock_attacker, mock_monitor):
- p = serviceha.ServiceHA(self.args, self.ctx)
-
- p.setup()
- self.assertEqual(p.setup_done, True)
-
- result = {}
- result["outage_time"] = 10
- mock_monitor.Monitor().get_result.return_value = result
-
- ret = {}
- self.assertRaises(AssertionError, p.run, ret)
-"""
diff --git a/tests/unit/benchmark/scenarios/availability/test_util.py b/tests/unit/benchmark/scenarios/availability/test_util.py
deleted file mode 100644
index 0974f385a..000000000
--- a/tests/unit/benchmark/scenarios/availability/test_util.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Kanglin Yin and others
-# 14_ykl@tongji.edu.cn
-# 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.availability.utils
-
-import mock
-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'}
-
- def test_util_build_command_shell(self,mock_subprocess):
- result = util.build_shell_command(self.param_config, True,
- self.intermediate_variables)
- self.assertEqual("nova-api" in result, True)
-
- def test_read_stdout_item(self,mock_subprocess):
- 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)
- self.assertEquals('/bin/bash -s {0} {1}', result)
-
- def test__fun_execute_shell_command_successful(self, mock_subprocess):
- cmd = "env"
- mock_subprocess.check_output.return_value = (0, 'unittest')
- exitcode, output = util.execute_shell_command(cmd)
- self.assertEqual(exitcode, 0)
-
- def test__fun_execute_shell_command_fail_cmd_exception(self, mock_subprocess):
- cmd = "env"
- mock_subprocess.check_output.side_effect = RuntimeError
- exitcode, output = util.execute_shell_command(cmd)
- self.assertEqual(exitcode, -1)
diff --git a/tests/unit/benchmark/scenarios/compute/__init__.py b/tests/unit/benchmark/scenarios/compute/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/compute/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt b/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt
deleted file mode 100644
index e2c79a9b1..000000000
--- a/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Counting cache functions... Output every 1 seconds.
- HITS MISSES DIRTIES RATIO BUFFERS_MB CACHE_MB
- 6462 0 29 100.0% 1157 66782
-
-Ending tracing...
diff --git a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt b/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt
deleted file mode 100644
index 723e64bcb..000000000
--- a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Linux 3.13.0-68-generic (elxg482ls42) 11/30/2015 _x86_64_ (1 CPU)
-
-04:34:26 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
-04:34:26 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
-04:34:26 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
-
-Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
-Average: all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
-Average: 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
diff --git a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt b/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt
deleted file mode 100644
index c66520a27..000000000
--- a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-cpu 245813227 366650 17338727 1195600354 2652765 178 177114 0 80439531 0
-cpu0 32334587 35782 1659040 87008833 401178 60 73571 0 8030817 0
diff --git a/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt b/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt
deleted file mode 100644
index 1793e2f10..000000000
--- a/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt
+++ /dev/null
@@ -1,3 +0,0 @@
- total used free shared buff/cache available
-Mem: 263753976 76737332 187016644 2844 853528 67252400
-Swap: 268029948 0 268029948
diff --git a/tests/unit/benchmark/scenarios/compute/test_cachestat.py b/tests/unit/benchmark/scenarios/compute/test_cachestat.py
deleted file mode 100644
index b0ddfc6b4..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_cachestat.py
+++ /dev/null
@@ -1,97 +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.benchmark.scenarios.compute.cachestat.CACHEstat
-
-from __future__ import absolute_import
-import mock
-import unittest
-import os
-
-from yardstick.benchmark.scenarios.compute import cachestat
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.cachestat.ssh')
-class CACHEstatTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- def test_cachestat_successful_setup(self, mock_ssh):
- c = cachestat.CACHEstat({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- c.setup()
- self.assertIsNotNone(c.client)
- self.assertTrue(c.setup_done)
-
- def test_execute_command_success(self, mock_ssh):
- c = cachestat.CACHEstat({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- expected_result = 'abcdefg'
- mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
- result = c._execute_command("foo")
- self.assertEqual(result, expected_result)
-
- def test_execute_command_failed(self, mock_ssh):
- c = cachestat.CACHEstat({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (127, '', 'Failed executing \
- command')
- self.assertRaises(RuntimeError, c._execute_command,
- "cat /proc/meminfo")
-
- def test_get_cache_usage_successful(self, mock_ssh):
- options = {
- "interval": 1,
- }
- args = {"options": options}
- c = cachestat.CACHEstat(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- output = self._read_file("cachestat_sample_output.txt")
- mock_ssh.SSH.from_node().execute.return_value = (0, output, '')
- result = c._get_cache_usage()
- expected_result = {"cachestat": {"cache0": {"HITS": "6462",
- "DIRTIES": "29",
- "RATIO": "100.0%",
- "MISSES": "0",
- "BUFFERS_MB": "1157",
- "CACHE_MB": "66782"}},
- "average": {"HITS": 6462, "DIRTIES": 29,
- "RATIO": "100.0%",
- "MISSES": 0, "BUFFERS_MB": 1157,
- "CACHE_MB": 66782},
- "max": {"HITS": 6462,
- "DIRTIES": 29, "RATIO": 100.0, "MISSES": 0,
- "BUFFERS_MB": 1157, "CACHE_MB": 66782}}
-
- self.assertEqual(result, expected_result)
-
- def _read_file(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, filename)
- with open(output) as f:
- sample_output = f.read()
- return sample_output
diff --git a/tests/unit/benchmark/scenarios/compute/test_computecapacity.py b/tests/unit/benchmark/scenarios/compute/test_computecapacity.py
deleted file mode 100644
index 7b9a5ad4a..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_computecapacity.py
+++ /dev/null
@@ -1,66 +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.benchmark.scenarios.compute.computecapacity.ComputeCapacity
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.compute import computecapacity
-
-SAMPLE_OUTPUT = '{"Cpu_number": "2", "Core_number": "24",\
- "Memory_size": "263753976 kB", "Thread_number": "48",\
- "Cache_size": "30720 KB", "HT_Open": "0"}'
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.computecapacity.ssh')
-class ComputeCapacityTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'nodes': {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': "mykey.key",
- 'password': "root"
- },
- }
- }
-
- self.result = {}
-
- def test_capacity_successful_setup(self, mock_ssh):
- c = computecapacity.ComputeCapacity({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- c.setup()
- self.assertIsNotNone(c.client)
- self.assertTrue(c.setup_done)
-
- def test_capacity_successful(self, mock_ssh):
- c = computecapacity.ComputeCapacity({}, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, SAMPLE_OUTPUT, '')
- c.run(self.result)
- expected_result = jsonutils.loads(SAMPLE_OUTPUT)
- self.assertEqual(self.result, expected_result)
-
- def test_capacity_unsuccessful_script_error(self, mock_ssh):
- c = computecapacity.ComputeCapacity({}, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, c.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_cpuload.py b/tests/unit/benchmark/scenarios/compute/test_cpuload.py
deleted file mode 100644
index 840ac7885..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_cpuload.py
+++ /dev/null
@@ -1,264 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.compute.lmbench.Lmbench
-
-from __future__ import absolute_import
-import mock
-import unittest
-import os
-
-from yardstick.benchmark.scenarios.compute import cpuload
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.cpuload.ssh')
-class CPULoadTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- def test_setup_mpstat_installed(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- l.setup()
- self.assertIsNotNone(l.client)
- self.assertTrue(l.setup_done)
- self.assertTrue(l.has_mpstat)
-
- def test_setup_mpstat_not_installed(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (127, '', '')
-
- l.setup()
- self.assertIsNotNone(l.client)
- self.assertTrue(l.setup_done)
- self.assertFalse(l.has_mpstat)
-
- def test_execute_command_success(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- l.setup()
-
- expected_result = 'abcdefg'
- mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
- result = l._execute_command("foo")
- self.assertEqual(result, expected_result)
-
- def test_execute_command_failed(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- l.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (127, '', 'abcdefg')
- self.assertRaises(RuntimeError, l._execute_command,
- "cat /proc/loadavg")
-
- def test_get_loadavg(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- l.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = \
- (0, '1.50 1.45 1.51 3/813 14322', '')
- result = l._get_loadavg()
- expected_result = \
- {'loadavg': ['1.50', '1.45', '1.51', '3/813', '14322']}
- self.assertEqual(result, expected_result)
-
- def test_get_cpu_usage_mpstat(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- l.setup()
-
- l.interval = 1
- l.count = 1
- mpstat_output = self._read_file("cpuload_sample_output1.txt")
- mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
- result = l._get_cpu_usage_mpstat()
-
- expected_result = \
- {"mpstat_minimum":
- {"cpu": {"%steal": "0.00", "%usr": "0.00", "%gnice": "0.00",
- "%idle": "100.00", "%guest": "0.00",
- "%iowait": "0.00", "%sys": "0.00", "%soft": "0.00",
- "%irq": "0.00", "%nice": "0.00"},
- "cpu0": {"%steal": "0.00", "%usr": "0.00", "%gnice": "0.00",
- "%idle": "100.00", "%guest": "0.00",
- "%iowait": "0.00", "%sys": "0.00", "%soft": "0.00",
- "%irq": "0.00", "%nice": "0.00"}},
- "mpstat_average":
- {"cpu": {"%steal": "0.00", "%usr": "0.00", "%gnice": "0.00",
- "%idle": "100.00", "%guest": "0.00",
- "%iowait": "0.00", "%sys": "0.00", "%soft": "0.00",
- "%irq": "0.00", "%nice": "0.00"},
- "cpu0": {"%steal": "0.00", "%usr": "0.00", "%gnice": "0.00",
- "%idle": "100.00", "%guest": "0.00",
- "%iowait": "0.00", "%sys": "0.00", "%soft": "0.00",
- "%irq": "0.00", "%nice": "0.00"}},
- "mpstat_maximun":
- {"cpu": {"%steal": "0.00", "%usr": "0.00", "%gnice": "0.00",
- "%idle": "100.00", "%guest": "0.00",
- "%iowait": "0.00", "%sys": "0.00", "%soft": "0.00",
- "%irq": "0.00", "%nice": "0.00"},
- "cpu0": {"%steal": "0.00", "%usr": "0.00", "%gnice": "0.00",
- "%idle": "100.00", "%guest": "0.00",
- "%iowait": "0.00", "%sys": "0.00", "%soft": "0.00",
- "%irq": "0.00", "%nice": "0.00"}}}
-
- self.assertDictEqual(result, expected_result)
-
- def test_get_cpu_usage(self, mock_ssh):
- options = {
- "interval": 0,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- l.setup()
-
- l.interval = 0
- output = self._read_file("cpuload_sample_output2.txt")
- mock_ssh.SSH.from_node().execute.return_value = (0, output, '')
- result = l._get_cpu_usage()
-
- expected_result = \
- {'mpstat':
- {'cpu':
- {'%steal': '0.00',
- '%usr': '11.31',
- '%gnice': '0.00',
- '%idle': '81.78',
- '%iowait': '0.18',
- '%guest': '5.50',
- '%sys': '1.19',
- '%soft': '0.01',
- '%irq': '0.00',
- '%nice': '0.03'},
- 'cpu0':
- {'%steal': '0.00',
- '%usr': '20.00',
- '%gnice': '0.00',
- '%idle': '71.60',
- '%iowait': '0.33',
- '%guest': '6.61',
- '%sys': '1.37',
- '%soft': '0.06',
- '%irq': '0.00',
- '%nice': '0.03'}}}
-
- self.assertDictEqual(result, expected_result)
-
- def test_run_proc_stat(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
-
- args = {'options': options}
-
- l = cpuload.CPULoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
- l.setup()
-
- l.interval = 0
- stat_output = self._read_file("cpuload_sample_output2.txt")
- mock_ssh.SSH.from_node().execute.side_effect = \
- [(0, '1.50 1.45 1.51 3/813 14322', ''), (0, stat_output, '')]
-
- l.run(self.result)
- expected_result = {
- 'loadavg': ['1.50', '1.45', '1.51', '3/813', '14322'],
- 'mpstat':
- {'cpu':
- {'%steal': '0.00',
- '%usr': '11.31',
- '%gnice': '0.00',
- '%idle': '81.78',
- '%iowait': '0.18',
- '%guest': '5.50',
- '%sys': '1.19',
- '%soft': '0.01',
- '%irq': '0.00',
- '%nice': '0.03'},
- 'cpu0':
- {'%steal': '0.00',
- '%usr': '20.00',
- '%gnice': '0.00',
- '%idle': '71.60',
- '%iowait': '0.33',
- '%guest': '6.61',
- '%sys': '1.37',
- '%soft': '0.06',
- '%irq': '0.00',
- '%nice': '0.03'}}}
-
- self.assertDictEqual(self.result, expected_result)
-
- def _read_file(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, filename)
- with open(output) as f:
- sample_output = f.read()
- return sample_output
diff --git a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py b/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
deleted file mode 100644
index dc52a80c7..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and other.
-#
-# 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.cyclictest.Cyclictest
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.compute import cyclictest
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.cyclictest.ssh')
-class CyclictestTestCase(unittest.TestCase):
-
- def setUp(self):
- self.scenario_cfg = {
- "host": "kvm.LF",
- "setup_options": {
- "rpm_dir": "/opt/rpm",
- "host_setup_seqs": [
- "host-setup0.sh",
- "host-setup1.sh",
- "host-run-qemu.sh"
- ],
- "script_dir": "/opt/scripts",
- "image_dir": "/opt/image",
- "guest_setup_seqs": [
- "guest-setup0.sh",
- "guest-setup1.sh"
- ]
- },
- "sla": {
- "action": "monitor",
- "max_min_latency": 50,
- "max_avg_latency": 100,
- "max_max_latency": 1000
- },
- "options": {
- "priority": 99,
- "threads": 1,
- "loops": 1000,
- "affinity": 1,
- "interval": 1000,
- "histogram": 90
- }
- }
- self.context_cfg = {
- "host": {
- "ip": "10.229.43.154",
- "key_filename": "/yardstick/resources/files/yardstick_key",
- "role": "BareMetal",
- "name": "kvm.LF",
- "user": "root"
- }
- }
-
- def test_cyclictest_successful_setup(self, mock_ssh):
-
- c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- c.setup()
- self.assertIsNotNone(c.guest)
- self.assertIsNotNone(c.host)
- self.assertEqual(c.setup_done, True)
-
- def test_cyclictest_successful_no_sla(self, mock_ssh):
- result = {}
- self.scenario_cfg.pop("sla", None)
- c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- c.guest = mock_ssh.SSH.from_node()
- sample_output = '{"min": 100, "avg": 500, "max": 1000}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- c.run(result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(result, expected_result)
-
- def test_cyclictest_successful_sla(self, mock_ssh):
- result = {}
- self.scenario_cfg.update({"sla": {
- "action": "monitor",
- "max_min_latency": 100,
- "max_avg_latency": 500,
- "max_max_latency": 1000
- }
- })
- c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- c.guest = mock_ssh.SSH.from_node()
- sample_output = '{"min": 100, "avg": 500, "max": 1000}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- c.run(result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(result, expected_result)
-
- def test_cyclictest_unsuccessful_sla_min_latency(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_min_latency": 10}})
- c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- c.guest = mock_ssh.SSH.from_node()
- sample_output = '{"min": 100, "avg": 500, "max": 1000}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, c.run, result)
-
- def test_cyclictest_unsuccessful_sla_avg_latency(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_avg_latency": 10}})
- c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- c.guest = mock_ssh.SSH.from_node()
- sample_output = '{"min": 100, "avg": 500, "max": 1000}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, c.run, result)
-
- def test_cyclictest_unsuccessful_sla_max_latency(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_max_latency": 10}})
- c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- c.guest = mock_ssh.SSH.from_node()
- sample_output = '{"min": 100, "avg": 500, "max": 1000}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, c.run, result)
-
- def test_cyclictest_unsuccessful_script_error(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_max_latency": 10}})
- c = cyclictest.Cyclictest(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
-
- c.guest = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, c.run, result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_lmbench.py b/tests/unit/benchmark/scenarios/compute/test_lmbench.py
deleted file mode 100644
index 65939c6ba..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_lmbench.py
+++ /dev/null
@@ -1,198 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.compute.lmbench.Lmbench
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.compute import lmbench
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.lmbench.ssh')
-class LmbenchTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- def test_successful_setup(self, mock_ssh):
-
- l = lmbench.Lmbench({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- l.setup()
- self.assertIsNotNone(l.client)
- self.assertTrue(l.setup_done)
-
- def test_unsuccessful_unknown_type_run(self, mock_ssh):
-
- options = {
- "test_type": "foo"
- }
- args = {'options': options}
-
- l = lmbench.Lmbench(args, self.ctx)
-
- self.assertRaises(RuntimeError, l.run, self.result)
-
- def test_successful_latency_run_no_sla(self, mock_ssh):
-
- options = {
- "test_type": "latency",
- "stride": 64,
- "stop_size": 16
- }
- args = {'options': options}
- l = lmbench.Lmbench(args, self.ctx)
-
- sample_output = '[{"latency": 4.944, "size": 0.00049}]'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- l.run(self.result)
- expected_result = {"latencies0.latency": 4.944, "latencies0.size": 0.00049}
- self.assertEqual(self.result, expected_result)
-
- def test_successful_bandwidth_run_no_sla(self, mock_ssh):
-
- options = {
- "test_type": "bandwidth",
- "size": 500,
- "benchmark": "rd",
- "warmup": 0
- }
- args = {"options": options}
- l = lmbench.Lmbench(args, self.ctx)
-
- sample_output = '{"size(MB)": 0.262144, "bandwidth(MBps)": 11025.5}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- l.run(self.result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(self.result, expected_result)
-
- def test_successful_latency_run_sla(self, mock_ssh):
-
- options = {
- "test_type": "latency",
- "stride": 64,
- "stop_size": 16
- }
- args = {
- "options": options,
- "sla": {"max_latency": 35}
- }
- l = lmbench.Lmbench(args, self.ctx)
-
- sample_output = '[{"latency": 4.944, "size": 0.00049}]'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- l.run(self.result)
- expected_result = {"latencies0.latency": 4.944, "latencies0.size": 0.00049}
- self.assertEqual(self.result, expected_result)
-
- def test_successful_bandwidth_run_sla(self, mock_ssh):
-
- options = {
- "test_type": "bandwidth",
- "size": 500,
- "benchmark": "rd",
- "warmup": 0
- }
- args = {
- "options": options,
- "sla": {"min_bandwidth": 10000}
- }
- l = lmbench.Lmbench(args, self.ctx)
-
- sample_output = '{"size(MB)": 0.262144, "bandwidth(MBps)": 11025.5}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- l.run(self.result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(self.result, expected_result)
-
- def test_unsuccessful_latency_run_sla(self, mock_ssh):
-
- options = {
- "test_type": "latency",
- "stride": 64,
- "stop_size": 16
- }
- args = {
- "options": options,
- "sla": {"max_latency": 35}
- }
- l = lmbench.Lmbench(args, self.ctx)
-
- sample_output = '[{"latency": 37.5, "size": 0.00049}]'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, l.run, self.result)
-
- def test_unsuccessful_bandwidth_run_sla(self, mock_ssh):
-
- options = {
- "test_type": "bandwidth",
- "size": 500,
- "benchmark": "rd",
- "warmup": 0
- }
- args = {
- "options": options,
- "sla": {"min_bandwidth": 10000}
- }
- l = lmbench.Lmbench(args, self.ctx)
-
- sample_output = '{"size(MB)": 0.262144, "bandwidth(MBps)": 9925.5}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, l.run, self.result)
-
- def test_successful_latency_for_cache_run_sla(self, mock_ssh):
-
- options = {
- "test_type": "latency_for_cache",
- "repetition": 1,
- "warmup": 0
- }
- args = {
- "options": options,
- "sla": {"max_latency": 35}
- }
- l = lmbench.Lmbench(args, self.ctx)
-
- sample_output = "{\"L1cache\": 1.6}"
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- l.run(self.result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(self.result, expected_result)
-
- def test_unsuccessful_script_error(self, mock_ssh):
-
- options = {"test_type": "bandwidth"}
- args = {"options": options}
- l = lmbench.Lmbench(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, l.run, self.result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_memload.py b/tests/unit/benchmark/scenarios/compute/test_memload.py
deleted file mode 100644
index ebae9993d..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_memload.py
+++ /dev/null
@@ -1,119 +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.benchmark.scenarios.compute.memload.MEMLoad
-
-from __future__ import absolute_import
-import mock
-import unittest
-import os
-
-from yardstick.benchmark.scenarios.compute import memload
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.memload.ssh')
-class MEMLoadTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- def test_memload_successful_setup(self, mock_ssh):
- m = memload.MEMLoad({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- m.setup()
- self.assertIsNotNone(m.client)
- self.assertTrue(m.setup_done)
-
- def test_execute_command_success(self, mock_ssh):
- m = memload.MEMLoad({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- m.setup()
-
- expected_result = 'abcdefg'
- mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
- result = m._execute_command("foo")
- self.assertEqual(result, expected_result)
-
- def test_execute_command_failed(self, mock_ssh):
- m = memload.MEMLoad({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- m.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (127, '', 'Failed executing \
- command')
- self.assertRaises(RuntimeError, m._execute_command,
- "cat /proc/meminfo")
-
- def test_get_mem_usage_successful(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
- args = {"options": options}
- m = memload.MEMLoad(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- m.setup()
-
- output = self._read_file("memload_sample_output.txt")
- mock_ssh.SSH.from_node().execute.return_value = (0, output, '')
- result = m._get_mem_usage()
- expected_result = {
- "max": {
- 'shared': 2844,
- 'buff/cache': 853528,
- 'total': 263753976,
- 'free': 187016644,
- 'used': 76737332
- },
- "average": {
- 'shared': 2844,
- 'buff/cache': 853528,
- 'total': 263753976,
- 'free': 187016644,
- 'used': 76737332
- },
- "free": {
- "memory0": {
- "used": "76737332",
- "buff/cache": "853528",
- "free": "187016644",
- "shared": "2844",
- "total": "263753976",
- "available": "67252400"
- }
- }
- }
-
- self.assertEqual(result, expected_result)
-
- def _read_file(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, filename)
- with open(output) as f:
- sample_output = f.read()
- return sample_output
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_plugintest.py b/tests/unit/benchmark/scenarios/compute/test_plugintest.py
deleted file mode 100644
index 680f6ad65..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_plugintest.py
+++ /dev/null
@@ -1,62 +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.benchmark.scenarios.compute.plugintest.PluginTest
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.compute import plugintest
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.plugintest.ssh')
-class PluginTestTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'nodes': {
- 'host1': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': "mykey.key",
- 'password': "root"
- },
- }
- }
-
- self.result = {}
-
- def test_sample_successful_setup(self, mock_ssh):
- s = plugintest.PluginTest({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- s.setup()
- self.assertIsNotNone(s.client)
- self.assertTrue(s.setup_done)
-
- def test_sample_successful(self, mock_ssh):
- s = plugintest.PluginTest({}, self.ctx)
-
- sample_output = '{"Test Output": "Hello world!"}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- s.run(self.result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(self.result, expected_result)
-
- def test_sample_unsuccessful_script_error(self, mock_ssh):
- s = plugintest.PluginTest({}, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, s.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py b/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py
deleted file mode 100644
index 1f0ff3c29..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and other.
-#
-# 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.qemu_migrate.QemuMigrate
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.compute import qemu_migrate
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.qemu_migrate.ssh')
-class QemuMigrateTestCase(unittest.TestCase):
-
- def setUp(self):
- self.scenario_cfg = {
- "host": "kvm.LF",
- "setup_options": {
- "rpm_dir": "/opt/rpm",
- "script_dir": "/opt/scripts",
- "image_dir": "/opt/image",
- "host_setup_seqs": [
- "host-setup0.sh",
- "host-setup1.sh",
- "setup-ovsdpdk.sh",
- "host-install-qemu.sh",
- "host-run-qemu4lm.sh"
- ]
- },
- "sla": {
- "action": "monitor",
- "max_totaltime": 10,
- "max_downtime": 0.10,
- "max_setuptime": 0.50
- },
- "options": {
- "smp": 99,
- "migrate_to_port": 4444,
- "incoming_ip": 0,
- "qmp_src_path": "/tmp/qmp-sock-src",
- "qmp_dst_path": "/tmp/qmp-sock-dst",
- "max_down_time": "0.10"
- }
- }
- self.context_cfg = {
- "host": {
- "ip": "10.229.43.154",
- "key_filename": "/yardstick/resources/files/yardstick_key",
- "role": "BareMetal",
- "name": "kvm.LF",
- "user": "root"
- }
- }
-
- def test_qemu_migrate_successful_setup(self, mock_ssh):
-
- q = qemu_migrate.QemuMigrate(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- q.setup()
- self.assertIsNotNone(q.host)
- self.assertEqual(q.setup_done, True)
-
- def test_qemu_migrate_successful_no_sla(self, mock_ssh):
- result = {}
- self.scenario_cfg.pop("sla", None)
- q = qemu_migrate.QemuMigrate(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- q.setup()
-
- sample_output = '{"totaltime": 15, "downtime": 2, "setuptime": 1}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- q.run(result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(result, expected_result)
-
- def test_qemu_migrate_successful_sla(self, mock_ssh):
- result = {}
- self.scenario_cfg.update({"sla": {
- "action": "monitor",
- "max_totaltime": 15,
- "max_downtime": 2,
- "max_setuptime": 1
- }
- })
- q = qemu_migrate.QemuMigrate(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- q.setup()
-
- sample_output = '{"totaltime": 15, "downtime": 2, "setuptime": 1}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- q.run(result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(result, expected_result)
-
- def test_qemu_migrate_unsuccessful_sla_totaltime(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_totaltime": 10}})
- q = qemu_migrate.QemuMigrate(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- q.setup()
-
- sample_output = '{"totaltime": 15, "downtime": 2, "setuptime": 1}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, q.run, result)
-
- def test_qemu_migrate_unsuccessful_sla_downtime(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_downtime": 0.10}})
- q = qemu_migrate.QemuMigrate(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- q.setup()
-
- sample_output = '{"totaltime": 15, "downtime": 2, "setuptime": 1}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, q.run, result)
-
- def test_qemu_migrate_unsuccessful_sla_setuptime(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_setuptime": 0.50}})
- q = qemu_migrate.QemuMigrate(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- q.setup()
-
- sample_output = '{"totaltime": 15, "downtime": 2, "setuptime": 1}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, q.run, result)
-
- def test_qemu_migrate_unsuccessful_script_error(self, mock_ssh):
-
- result = {}
- self.scenario_cfg.update({"sla": {"max_totaltime": 10}})
- q = qemu_migrate.QemuMigrate(self.scenario_cfg, self.context_cfg)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- q.setup()
-
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, q.run, result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_ramspeed.py b/tests/unit/benchmark/scenarios/compute/test_ramspeed.py
deleted file mode 100644
index 4f71fbb36..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_ramspeed.py
+++ /dev/null
@@ -1,244 +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.benchmark.scenarios.compute.ramspeed.Ramspeed
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.common import utils
-from yardstick.benchmark.scenarios.compute import ramspeed
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.ramspeed.ssh')
-class RamspeedTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- def test_ramspeed_successful_setup(self, mock_ssh):
-
- r = ramspeed.Ramspeed({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- r.setup()
- self.assertIsNotNone(r.client)
- self.assertTrue(r.setup_done, True)
-
- def test_ramspeed_successful__run_no_sla(self, mock_ssh):
-
- options = {
- "test_id": 1,
- "load": 16,
- "block_size": 32
- }
- args = {"options": options}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- sample_output = '{"Result": [{"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 1, "Bandwidth(MBps)": 19909.18}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 2, "Bandwidth(MBps)": 19873.89},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 4, "Bandwidth(MBps)":\
- 19907.56}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 8,\
- "Bandwidth(MBps)": 19906.94}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 16, "Bandwidth(MBps)": 19881.74}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 32, "Bandwidth(MBps)": 19395.65},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 64, "Bandwidth(MBps)":\
- 17623.14}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 128,\
- "Bandwidth(MBps)": 17677.36}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 256, "Bandwidth(MBps)": 16113.49}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 512, "Bandwidth(MBps)": 14659.19},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 1024, "Bandwidth(MBps)":\
- 14680.75}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 2048,\
- "Bandwidth(MBps)": 14756.45}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 4096, "Bandwidth(MBps)": 14604.44}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 8192, "Bandwidth(MBps)": 14159.86},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 16384,\
- "Bandwidth(MBps)": 14128.94}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- r.run(self.result)
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- self.assertEqual(self.result, expected_result)
-
- def test_ramspeed_successful_run_sla(self, mock_ssh):
-
- options = {
- "test_id": 1,
- "load": 16,
- "block_size": 32
- }
- args = {"options": options, "sla": {"min_bandwidth": 6000}}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- sample_output = '{"Result": [{"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 1, "Bandwidth(MBps)": 19909.18}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 2, "Bandwidth(MBps)": 19873.89},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 4, "Bandwidth(MBps)":\
- 19907.56}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 8,\
- "Bandwidth(MBps)": 19906.94}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 16, "Bandwidth(MBps)": 19881.74}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 32, "Bandwidth(MBps)": 19395.65},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 64, "Bandwidth(MBps)":\
- 17623.14}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 128,\
- "Bandwidth(MBps)": 17677.36}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 256, "Bandwidth(MBps)": 16113.49}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 512, "Bandwidth(MBps)": 14659.19},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 1024, "Bandwidth(MBps)":\
- 14680.75}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 2048,\
- "Bandwidth(MBps)": 14756.45}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 4096, "Bandwidth(MBps)": 14604.44}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 8192, "Bandwidth(MBps)": 14159.86},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 16384,\
- "Bandwidth(MBps)": 14128.94}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- r.run(self.result)
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- self.assertEqual(self.result, expected_result)
-
- def test_ramspeed_unsuccessful_run_sla(self, mock_ssh):
- options = {
- "test_id": 1,
- "load": 8,
- "block_size": 64
- }
- args = {"options": options, "sla": {"min_bandwidth": 100000}}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- sample_output = '{"Result": [{"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 1, "Bandwidth(MBps)": 5000.18}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 2, "Bandwidth(MBps)": 5000.89},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 4,\
- "Bandwidth(MBps)": 5000.56}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 8, "Bandwidth(MBps)": 19906.94}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 16, "Bandwidth(MBps)": 19881.74},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 32,\
- "Bandwidth(MBps)": 19395.65}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 64, "Bandwidth(MBps)": 17623.14}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 128, "Bandwidth(MBps)": 17677.36},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 256, "Bandwidth(MBps)":\
- 16113.49}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 512,\
- "Bandwidth(MBps)": 14659.19}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 1024, "Bandwidth(MBps)": 14680.75}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 2048, "Bandwidth(MBps)": 14756.45},\
- {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 4096, "Bandwidth(MBps)":\
- 14604.44}, {"Test_type": "INTEGER & WRITING", "Block_size(kb)": 8192,\
- "Bandwidth(MBps)": 14159.86}, {"Test_type": "INTEGER & WRITING",\
- "Block_size(kb)": 16384, "Bandwidth(MBps)": 14128.94}, {"Test_type":\
- "INTEGER & WRITING", "Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, r.run, self.result)
-
- def test_ramspeed_unsuccessful_script_error(self, mock_ssh):
- options = {
- "test_id": 1,
- "load": 16,
- "block_size": 32
- }
- args = {"options": options}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, r.run, self.result)
-
- def test_ramspeed_mem_successful_run_no_sla(self, mock_ssh):
- options = {
- "test_id": 3,
- "load": 16,
- "block_size": 32,
- "iteration": 1
- }
- args = {"options": options}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- sample_output = '{"Result": [{"Test_type": "INTEGER Copy:",\
- "Bandwidth(MBps)": 8353.97}, {"Test_type": "INTEGER Scale:",\
- "Bandwidth(MBps)": 9078.59}, {"Test_type": "INTEGER Add:",\
- "Bandwidth(MBps)": 10057.48}, {"Test_type": "INTEGER Triad:",\
- "Bandwidth(MBps)": 10116.27}, {"Test_type": "INTEGER AVERAGE:",\
- "Bandwidth(MBps)": 9401.58}]}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- r.run(self.result)
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- self.assertEqual(self.result, expected_result)
-
- def test_ramspeed_mem_successful_run_sla(self, mock_ssh):
- options = {
- "test_id": 3,
- "load": 16,
- "block_size": 32,
- "iteration": 1
- }
- args = {"options": options, "sla": {"min_bandwidth": 6000}}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- sample_output = '{"Result": [{"Test_type": "INTEGER Copy:",\
- "Bandwidth(MBps)": 8353.97}, {"Test_type": "INTEGER Scale:",\
- "Bandwidth(MBps)": 9078.59}, {"Test_type": "INTEGER Add:",\
- "Bandwidth(MBps)": 10057.48}, {"Test_type": "INTEGER Triad:",\
- "Bandwidth(MBps)": 10116.27}, {"Test_type": "INTEGER AVERAGE:",\
- "Bandwidth(MBps)": 9401.58}]}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- r.run(self.result)
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- self.assertEqual(self.result, expected_result)
-
- def test_ramspeed_mem_unsuccessful_run_sla(self, mock_ssh):
- options = {
- "test_id": 3,
- "load": 16,
- "block_size": 32,
- "iteration": 1
- }
- args = {"options": options, "sla": {"min_bandwidth": 86000}}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- sample_output = '{"Result": [{"Test_type": "INTEGER Copy:",\
- "Bandwidth(MBps)": 4000.97}, {"Test_type": "INTEGER Scale:",\
- "Bandwidth(MBps)": 4400.59}, {"Test_type": "INTEGER Add:",\
- "Bandwidth(MBps)": 4300.48}, {"Test_type": "INTEGER Triad:",\
- "Bandwidth(MBps)": 1300.27}, {"Test_type": "INTEGER AVERAGE:",\
- "Bandwidth(MBps)": 2401.58}]}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, r.run, self.result)
-
- def test_ramspeed_unsuccessful_unknown_type_run(self, mock_ssh):
- options = {
- "test_id": 30,
- "load": 16,
- "block_size": 32
- }
- args = {'options': options}
- r = ramspeed.Ramspeed(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'No such type_id: 30 for \
- Ramspeed scenario')
- self.assertRaises(RuntimeError, r.run, self.result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py b/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py
deleted file mode 100644
index 40423b9da..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/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.SpecCPU
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-
-from yardstick.common import utils
-from yardstick.benchmark.scenarios.compute import spec_cpu
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.spec_cpu.ssh')
-class SpecCPUTestCase(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_tune": "base",
- "runspec_size": "test"
- }
- args = {"options": options}
- s = spec_cpu.SpecCPU(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.SpecCPU(args, self.ctx)
-
- sample_output = ''
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- s.run(self.result)
- expected_result = {}
- self.assertEqual(self.result, expected_result)
-
- def test_ramspeed_unsuccessful_script_error(self, mock_ssh):
- options = {
- "benchmark_subset": "int"
- }
- args = {"options": options}
- s = spec_cpu.SpecCPU(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, s.run, self.result)
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py b/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py
deleted file mode 100644
index c428e1fb8..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.scenarios.compute.spec_cpu_for_vm.SpecCPUforVM
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-
-from yardstick.benchmark.scenarios.compute import spec_cpu_for_vm
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.spec_cpu_for_vm.ssh')
-class SpecCPUforVMTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- def test_spec_cpu_successful_setup(self, mock_ssh):
-
- options = {
- "SPECint_benchmark": "perlbench",
- "runspec_tune": "all",
- "output_format": "all",
- "runspec_iterations": "1",
- "runspec_size": "test"
- }
- args = {"options": options}
- s = spec_cpu_for_vm.SpecCPUforVM(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- s.setup()
- self.assertIsNotNone(s.client)
- self.assertTrue(s.setup_done, True)
-
- def test_spec_cpu_successful__run_no_sla(self, mock_ssh):
-
- options = {
- "SPECint_benchmark": "perlbench",
- "runspec_tune": "all",
- "output_format": "all"
- }
- args = {"options": options}
- s = spec_cpu_for_vm.SpecCPUforVM(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_ssh.SSH.from_node().get.return_value = (0, '', '')
- s.run(self.result)
- expected_result = {'SPEC_CPU_result': ''}
- self.assertEqual(self.result, expected_result)
-
- def test_spec_cpu_unsuccessful_script_error(self, mock_ssh):
- options = {
- "benchmark_subset": "int"
- }
- args = {"options": options}
- s = spec_cpu_for_vm.SpecCPUforVM(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, s.run, self.result)
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/compute/test_unixbench.py b/tests/unit/benchmark/scenarios/compute/test_unixbench.py
deleted file mode 100644
index 7d071e91c..000000000
--- a/tests/unit/benchmark/scenarios/compute/test_unixbench.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and other.
-#
-# 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.unixbench.Unixbench
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.compute import unixbench
-
-
-@mock.patch('yardstick.benchmark.scenarios.compute.unixbench.ssh')
-class UnixbenchTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- "host": {
- "ip": "192.168.50.28",
- "user": "root",
- "key_filename": "mykey.key"
- }
- }
-
- def test_unixbench_successful_setup(self, mock_ssh):
-
- u = unixbench.Unixbench({}, self.ctx)
- u.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- self.assertIsNotNone(u.client)
- self.assertEqual(u.setup_done, True)
-
- def test_unixbench_successful_no_sla(self, mock_ssh):
-
- options = {
- "test_type": 'dhry2reg',
- "run_mode": 'verbose'
- }
- args = {
- "options": options,
- }
- u = unixbench.Unixbench(args, self.ctx)
- result = {}
-
- u.server = mock_ssh.SSH.from_node()
-
- sample_output = '{"Score":"4425.4"}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- u.run(result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(result, expected_result)
-
- def test_unixbench_successful_in_quiet_mode(self, mock_ssh):
-
- options = {
- "test_type": 'dhry2reg',
- "run_mode": 'quiet',
- "copies": 1
- }
- args = {
- "options": options,
- }
- u = unixbench.Unixbench(args, self.ctx)
- result = {}
-
- u.server = mock_ssh.SSH.from_node()
-
- sample_output = '{"Score":"4425.4"}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- u.run(result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(result, expected_result)
-
- def test_unixbench_successful_sla(self, mock_ssh):
-
- options = {
- "test_type": 'dhry2reg',
- "run_mode": 'verbose'
- }
- sla = {
- "single_score": '100',
- "parallel_score": '500'
- }
- args = {
- "options": options,
- "sla": sla
- }
- u = unixbench.Unixbench(args, self.ctx)
- result = {}
-
- u.server = mock_ssh.SSH.from_node()
-
- sample_output = '{"signle_score":"2251.7","parallel_score":"4395.9"}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- u.run(result)
- expected_result = jsonutils.loads(sample_output)
- self.assertEqual(result, expected_result)
-
- def test_unixbench_unsuccessful_sla_single_score(self, mock_ssh):
-
- args = {
- "options": {},
- "sla": {"single_score": "500"}
- }
- u = unixbench.Unixbench(args, self.ctx)
- result = {}
-
- u.server = mock_ssh.SSH.from_node()
- sample_output = '{"single_score":"200.7","parallel_score":"4395.9"}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, u.run, result)
-
- def test_unixbench_unsuccessful_sla_parallel_score(self, mock_ssh):
-
- args = {
- "options": {},
- "sla": {"parallel_score": "4000"}
- }
- u = unixbench.Unixbench(args, self.ctx)
- result = {}
-
- u.server = mock_ssh.SSH.from_node()
- sample_output = '{"signle_score":"2251.7","parallel_score":"3395.9"}'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, u.run, result)
-
- def test_unixbench_unsuccessful_script_error(self, mock_ssh):
-
- options = {
- "test_type": 'dhry2reg',
- "run_mode": 'verbose'
- }
- sla = {
- "single_score": '100',
- "parallel_score": '500'
- }
- args = {
- "options": options,
- "sla": sla
- }
- u = unixbench.Unixbench(args, self.ctx)
- result = {}
-
- u.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, u.run, result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/dummy/__init__.py b/tests/unit/benchmark/scenarios/dummy/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/dummy/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/dummy/test_dummy.py b/tests/unit/benchmark/scenarios/dummy/test_dummy.py
deleted file mode 100644
index 560675d09..000000000
--- a/tests/unit/benchmark/scenarios/dummy/test_dummy.py
+++ /dev/null
@@ -1,34 +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.benchmark.scenarios.dummy.dummy
-
-from __future__ import absolute_import
-import unittest
-
-from yardstick.benchmark.scenarios.dummy import dummy
-
-
-class DummyTestCase(unittest.TestCase):
-
- def setUp(self):
- self.test_context = dummy.Dummy(None, None)
-
- self.assertIsNone(self.test_context.scenario_cfg)
- self.assertIsNone(self.test_context.context_cfg)
- self.assertEqual(self.test_context.setup_done, False)
-
- def test_run(self):
- result = {}
- self.test_context.run(result)
-
- self.assertEqual(result["hello"], "yardstick")
- self.assertEqual(self.test_context.setup_done, True)
diff --git a/tests/unit/benchmark/scenarios/lib/__init__.py b/tests/unit/benchmark/scenarios/lib/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/lib/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py b/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py
deleted file mode 100644
index bda07f723..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py
+++ /dev/null
@@ -1,65 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.add_memory_load import AddMemoryLoad
-
-
-class AddMemoryLoadTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.ssh.SSH.from_node')
- def test_add_memory_load_with_load(self, mock_from_node):
- scenario_cfg = {
- 'options': {
- 'memory_load': 0.5
- }
- }
- context_cfg = {
- 'host': {}
- }
- mock_from_node().execute.return_value = (0, '0 2048 512', '')
- obj = AddMemoryLoad(scenario_cfg, context_cfg)
- obj.run({})
- self.assertTrue(mock_from_node.called)
-
- @mock.patch('yardstick.ssh.SSH.from_node')
- def test_add_memory_load_without_load(self, mock_from_node):
- scenario_cfg = {
- 'options': {
- 'memory_load': 0
- }
- }
- context_cfg = {
- 'host': {}
- }
- obj = AddMemoryLoad(scenario_cfg, context_cfg)
- obj.run({})
- self.assertTrue(mock_from_node.called)
-
- @mock.patch('yardstick.ssh.SSH.from_node')
- def test_add_memory_load_without_args(self, mock_from_node):
- scenario_cfg = {
- 'options': {
- }
- }
- context_cfg = {
- 'host': {}
- }
- obj = AddMemoryLoad(scenario_cfg, context_cfg)
- obj.run({})
- self.assertTrue(mock_from_node.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_attach_volume.py b/tests/unit/benchmark/scenarios/lib/test_attach_volume.py
deleted file mode 100644
index e69924072..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_attach_volume.py
+++ /dev/null
@@ -1,33 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.attach_volume import AttachVolume
-
-
-class AttachVolumeTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.attach_server_volume')
- def test_attach_volume(self, mock_attach_server_volume):
- options = {
- 'volume_id': '123-456-000',
- 'server_id': '000-123-456'
- }
- args = {"options": options}
- obj = AttachVolume(args, {})
- obj.run({})
- self.assertTrue(mock_attach_server_volume.called)
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py b/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py
deleted file mode 100644
index 1fb2f89ca..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py
+++ /dev/null
@@ -1,84 +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.benchmark.scenarios.lib.check_connectivity.CheckConnectivity
-
-from __future__ import absolute_import
-
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.lib import check_connectivity
-
-
-class CheckConnectivityTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': 'mykey.key',
- 'ssh_port': '22'
- },
- 'target': {
- 'ipaddr': '172.16.0.138'
- }
- }
-
- @mock.patch('yardstick.benchmark.scenarios.lib.check_connectivity.ssh')
- def test_check_connectivity(self, mock_ssh):
-
- args = {
- 'options': {'src_ip_addr': '192.168.23.2',
- 'dest_ip_addr': '192.168.23.10',
- 'ssh_user': 'root',
- 'ssh_passwd': 'root',
- 'ssh_port': '22',
- 'ssh_timeout': 600,
- 'ping_parameter': "-s 2048"
- },
- 'sla': {'status': 'True',
- 'action': 'assert'}
- }
-
- result = {}
-
- obj = check_connectivity.CheckConnectivity(args, {})
- obj.setup()
- mock_ssh.SSH.execute.return_value = (0, '100', '')
-
-
- @mock.patch('yardstick.benchmark.scenarios.lib.check_connectivity.ssh')
- def test_check_connectivity_key(self, mock_ssh):
-
- args = {
- 'options': {'ssh_user': 'root',
- 'ssh_key': '/root/.ssh/id_rsa',
- 'ssh_port': '22',
- 'ssh_timeout': 600,
- 'ping_parameter': "-s 2048"
- },
- 'sla': {'status': 'True',
- 'action': 'assert'}
- }
-
- result = {}
-
- obj = check_connectivity.CheckConnectivity(args, self.ctx)
- obj.setup()
-
- mock_ssh.SSH.execute.return_value = (0, '100', '')
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py b/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py
deleted file mode 100644
index bdf1e66e5..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py
+++ /dev/null
@@ -1,84 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.check_numa_info import CheckNumaInfo
-
-
-class CheckNumaInfoTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.benchmark.scenarios.lib.check_numa_info.CheckNumaInfo._check_vm2_status')
- def test_check_numa_info(self, mock_check_vm2):
- scenario_cfg = {'info1': {}, 'info2': {}}
- obj = CheckNumaInfo(scenario_cfg, {})
- obj.run({})
- self.assertTrue(mock_check_vm2.called)
-
- def test_check_vm2_status_length_eq_1(self):
- info1 = {
- 'pinning': [0],
- 'vcpupin': [{
- 'cpuset': '1,2'
- }]
- }
- info2 = {
- 'pinning': [0],
- 'vcpupin': [{
- 'cpuset': '1,2'
- }]
- }
- scenario_cfg = {'info1': info1, 'info2': info2}
- obj = CheckNumaInfo(scenario_cfg, {})
- status = obj._check_vm2_status(info1, info2)
- self.assertEqual(status, True)
-
- def test_check_vm2_status_length_gt_1(self):
- info1 = {
- 'pinning': [0, 1],
- 'vcpupin': [{
- 'cpuset': '1,2'
- }]
- }
- info2 = {
- 'pinning': [0, 1],
- 'vcpupin': [{
- 'cpuset': '1,2'
- }]
- }
- scenario_cfg = {'info1': info1, 'info2': info2}
- obj = CheckNumaInfo(scenario_cfg, {})
- status = obj._check_vm2_status(info1, info2)
- self.assertEqual(status, False)
-
- def test_check_vm2_status_length_not_in_set(self):
- info1 = {
- 'pinning': [0],
- 'vcpupin': [{
- 'cpuset': '1,7'
- }]
- }
- info2 = {
- 'pinning': [0],
- 'vcpupin': [{
- 'cpuset': '1,7'
- }]
- }
- scenario_cfg = {'info1': info1, 'info2': info2}
- obj = CheckNumaInfo(scenario_cfg, {})
- status = obj._check_vm2_status(info1, info2)
- self.assertEqual(status, False)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_check_value.py b/tests/unit/benchmark/scenarios/lib/test_check_value.py
deleted file mode 100644
index 21e83f830..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_check_value.py
+++ /dev/null
@@ -1,46 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-
-from yardstick.benchmark.scenarios.lib.check_value import CheckValue
-
-
-class CheckValueTestCase(unittest.TestCase):
-
- def test_check_value_eq(self):
- scenario_cfg = {'options': {'operator': 'eq', 'value1': 1, 'value2': 2}}
- obj = CheckValue(scenario_cfg, {})
- try:
- obj.run({})
- except Exception as e:
- self.assertIsInstance(e, AssertionError)
-
- def test_check_value_eq_pass(self):
- scenario_cfg = {'options': {'operator': 'eq', 'value1': 1, 'value2': 1}}
- obj = CheckValue(scenario_cfg, {})
- try:
- obj.run({})
- except Exception as e:
- self.assertIsInstance(e, AssertionError)
-
- def test_check_value_ne(self):
- scenario_cfg = {'options': {'operator': 'ne', 'value1': 1, 'value2': 1}}
- obj = CheckValue(scenario_cfg, {})
- try:
- obj.run({})
- except Exception as e:
- self.assertIsInstance(e, AssertionError)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_flavor.py b/tests/unit/benchmark/scenarios/lib/test_create_flavor.py
deleted file mode 100644
index 036ae952d..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_flavor.py
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.create_flavor import CreateFlavor
-
-
-class CreateFlavorTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.create_flavor')
- def test_create_flavor(self, mock_create_flavor):
- options = {
- 'flavor_name': 'yardstick_test_flavor',
- 'vcpus': '2',
- 'ram': '1024',
- 'disk': '100',
- 'is_public': 'True'
- }
- args = {"options": options}
- obj = CreateFlavor(args, {})
- obj.run({})
- self.assertTrue(mock_create_flavor.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py b/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py
deleted file mode 100644
index 72dbcd7cd..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py
+++ /dev/null
@@ -1,34 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.create_floating_ip import CreateFloatingIp
-
-
-class CreateFloatingIpTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.create_floating_ip')
- @mock.patch('yardstick.common.openstack_utils.get_network_id')
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- def test_create_floating_ip(self, mock_create_floating_ip, mock_get_network_id, mock_get_neutron_client):
- options = {}
- args = {"options": options}
- obj = CreateFloatingIp(args, {})
- obj.run({})
- self.assertTrue(mock_create_floating_ip.called)
- self.assertTrue(mock_get_network_id.called)
- self.assertTrue(mock_get_neutron_client.called)
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_image.py b/tests/unit/benchmark/scenarios/lib/test_create_image.py
deleted file mode 100644
index c213ceba0..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_image.py
+++ /dev/null
@@ -1,41 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.create_image import CreateImage
-
-
-class CreateImageTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.create_image')
- @mock.patch('yardstick.common.openstack_utils.get_glance_client')
- def test_create_image(self, mock_get_glance_client, mock_create_image):
- options = {
- 'image_name': 'yardstick_test_image_01',
- 'disk_format': 'qcow2',
- 'container_format': 'bare',
- 'min_disk': '1',
- 'min_ram': '512',
- 'protected': 'False',
- 'tags': '["yardstick automatic test image"]',
- 'file_path': '/home/opnfv/images/cirros-0.3.5-x86_64-disk.img'
- }
- args = {"options": options}
- obj = CreateImage(args, {})
- obj.run({})
- self.assertTrue(mock_create_image.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_keypair.py b/tests/unit/benchmark/scenarios/lib/test_create_keypair.py
deleted file mode 100644
index 4b9b72013..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_keypair.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.create_keypair import CreateKeypair
-
-PREFIX = "yardstick.benchmark.scenarios.lib.create_keypair"
-
-
-class CreateKeypairTestCase(unittest.TestCase):
- @mock.patch('{}.paramiko'.format(PREFIX))
- @mock.patch('{}.op_utils'.format(PREFIX))
- def test_create_keypair(self, mock_op_utils, mock_paramiko):
- options = {
- 'key_name': 'yardstick_key',
- 'key_path': '/tmp/yardstick_key'
- }
- args = {"options": options}
- obj = CreateKeypair(args, {})
- obj.run({})
- self.assertTrue(mock_op_utils.create_keypair.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_network.py b/tests/unit/benchmark/scenarios/lib/test_create_network.py
deleted file mode 100644
index 8e7d8b5a1..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_network.py
+++ /dev/null
@@ -1,39 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.create_network import CreateNetwork
-
-
-class CreateNetworkTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.create_neutron_net')
- def test_create_network(self, mock_get_neutron_client, mock_create_neutron_net):
- options = {
- 'openstack_paras': {
- 'name': 'yardstick_net',
- 'admin_state_up': 'True'
- }
- }
- args = {"options": options}
- obj = CreateNetwork(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_create_neutron_net.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_port.py b/tests/unit/benchmark/scenarios/lib/test_create_port.py
deleted file mode 100644
index 3b2aa2247..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_port.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.create_port import CreatePort
-
-
-class CreatePortTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- def test_create_port(self, mock_get_neutron_client):
- options = {
- 'openstack_paras': {
- 'name': 'yardstick_port'
- }
- }
- args = {"options": options}
- obj = CreatePort(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_router.py b/tests/unit/benchmark/scenarios/lib/test_create_router.py
deleted file mode 100644
index b956a3634..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_router.py
+++ /dev/null
@@ -1,39 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.create_router import CreateRouter
-
-
-class CreateRouterTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.create_neutron_router')
- def test_create_router(self, mock_get_neutron_client, mock_create_neutron_router):
- options = {
- 'openstack_paras': {
- 'admin_state_up': 'True',
- 'name': 'yardstick_router'
- }
- }
- args = {"options": options}
- obj = CreateRouter(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_create_neutron_router.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py b/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py
deleted file mode 100644
index b962f7f0e..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py
+++ /dev/null
@@ -1,39 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.create_sec_group import CreateSecgroup
-
-
-class CreateSecGroupTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.create_security_group_full')
- def test_create_sec_group(self, mock_get_neutron_client, mock_create_security_group_full):
- options = {
- 'openstack_paras': {
- 'sg_name': 'yardstick_sec_group',
- 'description': 'security group for yardstick manual VM'
- }
- }
- args = {"options": options}
- obj = CreateSecgroup(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_create_security_group_full.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_server.py b/tests/unit/benchmark/scenarios/lib/test_create_server.py
deleted file mode 100644
index 7c4193132..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_server.py
+++ /dev/null
@@ -1,42 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.create_server import CreateServer
-
-
-class CreateServerTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.create_instance_and_wait_for_active')
- @mock.patch('yardstick.common.openstack_utils.get_nova_client')
- @mock.patch('yardstick.common.openstack_utils.get_glance_client')
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- def test_create_server(self, mock_get_nova_client, mock_get_neutron_client,
- mock_get_glance_client, mock_create_instance_and_wait_for_active):
- scenario_cfg = {
- 'options' : {
- 'openstack_paras': 'example'
- },
- 'output': 'server'
- }
- obj = CreateServer(scenario_cfg, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
- self.assertTrue(mock_get_glance_client.called)
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_create_instance_and_wait_for_active.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_create_subnet.py b/tests/unit/benchmark/scenarios/lib/test_create_subnet.py
deleted file mode 100644
index 0154755c4..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_subnet.py
+++ /dev/null
@@ -1,41 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.create_subnet import CreateSubnet
-
-
-class CreateSubnetTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.create_neutron_subnet')
- def test_create_subnet(self, mock_get_neutron_client, mock_create_neutron_subnet):
- options = {
- 'openstack_paras': {
- 'network_id': '123-123-123',
- 'name': 'yardstick_subnet',
- 'cidr': '10.10.10.0/24',
- 'ip_version': '4'
- }
- }
- args = {"options": options}
- obj = CreateSubnet(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_create_neutron_subnet.called)
-
-
-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
deleted file mode 100644
index fc633139e..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_create_volume.py
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.create_volume import CreateVolume
-
-
-class CreateVolumeTestCase(unittest.TestCase):
-
- @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 main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py b/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py
deleted file mode 100644
index 4a91b8939..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py
+++ /dev/null
@@ -1,35 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.delete_flavor import DeleteFlavor
-
-
-class DeleteFlavorTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.delete_flavor')
- @mock.patch('yardstick.common.openstack_utils.get_nova_client')
- def test_delete_flavor(self, mock_get_nova_client, mock_delete_flavor):
- options = {
- 'flavor_name': 'yardstick_test_flavor'
- }
- args = {"options": options}
- obj = DeleteFlavor(args, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
- self.assertTrue(mock_delete_flavor.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py b/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py
deleted file mode 100644
index 7592c8070..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_floating_ip import DeleteFloatingIp
-
-
-class DeleteFloatingIpTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_nova_client')
- @mock.patch('yardstick.common.openstack_utils.delete_floating_ip')
- def test_delete_floating_ip(self, mock_get_nova_client, mock_delete_floating_ip):
- options = {
- 'floating_ip_id': '123-123-123'
- }
- args = {"options": options}
- obj = DeleteFloatingIp(args, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
- self.assertTrue(mock_delete_floating_ip.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_image.py b/tests/unit/benchmark/scenarios/lib/test_delete_image.py
deleted file mode 100644
index 2bbf14d16..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_image.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.delete_image import DeleteImage
-
-
-class DeleteImageTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.delete_image')
- @mock.patch('yardstick.common.openstack_utils.get_image_id')
- @mock.patch('yardstick.common.openstack_utils.get_glance_client')
- def test_delete_image(self, mock_get_glance_client, mock_image_id, mock_delete_image):
- options = {
- 'image_name': 'yardstick_test_image_01'
- }
- args = {"options": options}
- obj = DeleteImage(args, {})
- obj.run({})
- self.assertTrue(mock_delete_image.called)
- self.assertTrue(mock_image_id.called)
- self.assertTrue(mock_get_glance_client.called)
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py b/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py
deleted file mode 100644
index 9663fe9fb..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_keypair import DeleteKeypair
-
-
-class DeleteKeypairTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_nova_client')
- @mock.patch('yardstick.common.openstack_utils.delete_keypair')
- def test_detach_volume(self, mock_get_nova_client, mock_delete_keypair):
- options = {
- 'key_name': 'yardstick_key'
- }
- args = {"options": options}
- obj = DeleteKeypair(args, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
- self.assertTrue(mock_delete_keypair.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_network.py b/tests/unit/benchmark/scenarios/lib/test_delete_network.py
deleted file mode 100644
index 9ccaa8232..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_network.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_network import DeleteNetwork
-
-
-class DeleteNetworkTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.delete_neutron_net')
- def test_delete_network(self, mock_get_neutron_client, mock_delete_neutron_net):
- options = {
- 'network_id': '123-123-123'
- }
- args = {"options": options}
- obj = DeleteNetwork(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_delete_neutron_net.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_port.py b/tests/unit/benchmark/scenarios/lib/test_delete_port.py
deleted file mode 100644
index 77b9c7009..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_port.py
+++ /dev/null
@@ -1,34 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_port import DeletePort
-
-
-class DeletePortTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- def test_delete_port(self, mock_get_neutron_client):
- options = {
- 'port_id': '123-123-123'
- }
- args = {"options": options}
- obj = DeletePort(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_router.py b/tests/unit/benchmark/scenarios/lib/test_delete_router.py
deleted file mode 100644
index ab1ad5d35..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_router.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_router import DeleteRouter
-
-
-class DeleteRouterTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.delete_neutron_router')
- def test_delete_router(self, mock_get_neutron_client, mock_delete_neutron_router):
- options = {
- 'router_id': '123-123-123'
- }
- args = {"options": options}
- obj = DeleteRouter(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_delete_neutron_router.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py b/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py
deleted file mode 100644
index 1150dccda..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_router_gateway import DeleteRouterGateway
-
-
-class DeleteRouterGatewayTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.remove_gateway_router')
- def test_delete_router_gateway(self, mock_get_neutron_client, mock_remove_gateway_router):
- options = {
- 'router_id': '123-123-123'
- }
- args = {"options": options}
- obj = DeleteRouterGateway(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_remove_gateway_router.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py b/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py
deleted file mode 100644
index 2cc9c9f37..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_router_interface import DeleteRouterInterface
-
-
-class DeleteRouterInterfaceTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
- @mock.patch('yardstick.common.openstack_utils.remove_interface_router')
- def test_delete_router_interface(self, mock_get_neutron_client, mock_remove_interface_router):
- options = {
- 'router_id': '123-123-123',
- 'subnet_id': '321-321-321'
- }
- args = {"options": options}
- obj = DeleteRouterInterface(args, {})
- obj.run({})
- self.assertTrue(mock_get_neutron_client.called)
- self.assertTrue(mock_remove_interface_router.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_server.py b/tests/unit/benchmark/scenarios/lib/test_delete_server.py
deleted file mode 100644
index 622ead5ac..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_server.py
+++ /dev/null
@@ -1,35 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.delete_server import DeleteServer
-
-
-class DeleteServerTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.delete_instance')
- @mock.patch('yardstick.common.openstack_utils.get_nova_client')
- def test_delete_server(self, mock_get_nova_client, mock_delete_instance):
- options = {
- 'server_id': '1234-4567-0000'
- }
- args = {"options": options}
- obj = DeleteServer(args, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
- self.assertTrue(mock_delete_instance.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_volume.py b/tests/unit/benchmark/scenarios/lib/test_delete_volume.py
deleted file mode 100644
index a11d0121b..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_delete_volume.py
+++ /dev/null
@@ -1,36 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.delete_volume import DeleteVolume
-
-
-class DeleteVolumeTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_cinder_client')
- @mock.patch('yardstick.common.openstack_utils.delete_volume')
- def test_delete_volume(self, mock_get_cinder_client, mock_delete_volume):
- options = {
- 'volume_id': '123-123-123'
- }
- args = {"options": options}
- obj = DeleteVolume(args, {})
- obj.run({})
- self.assertTrue(mock_get_cinder_client.called)
- self.assertTrue(mock_delete_volume.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_detach_volume.py b/tests/unit/benchmark/scenarios/lib/test_detach_volume.py
deleted file mode 100644
index 0cffcba15..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_detach_volume.py
+++ /dev/null
@@ -1,35 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-import paramiko
-
-from yardstick.benchmark.scenarios.lib.detach_volume import DetachVolume
-
-
-class DetachVolumeTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.detach_volume')
- def test_detach_volume(self, mock_detach_volume):
- options = {
- 'server_id': '321-321-321',
- 'volume_id': '123-123-123'
- }
- args = {"options": options}
- obj = DetachVolume(args, {})
- obj.run({})
- self.assertTrue(mock_detach_volume.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_get_flavor.py b/tests/unit/benchmark/scenarios/lib/test_get_flavor.py
deleted file mode 100644
index bf12e0a32..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_get_flavor.py
+++ /dev/null
@@ -1,33 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.get_flavor import GetFlavor
-
-
-class GetFlavorTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_flavor_by_name')
- def test_get_flavor(self, mock_get_flavor_by_name):
- options = {
- 'flavor_name': 'yardstick_test_flavor'
- }
- args = {"options": options}
- obj = GetFlavor(args, {})
- obj.run({})
- self.assertTrue(mock_get_flavor_by_name.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py b/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py
deleted file mode 100644
index f046c92ea..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py
+++ /dev/null
@@ -1,51 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.get_migrate_target_host import GetMigrateTargetHost
-
-BASE = 'yardstick.benchmark.scenarios.lib.get_migrate_target_host'
-
-
-class GetMigrateTargetHostTestCase(unittest.TestCase):
-
- @mock.patch('{}.openstack_utils.get_nova_client'.format(BASE))
- @mock.patch('{}.GetMigrateTargetHost._get_migrate_host'.format(BASE))
- @mock.patch('{}.GetMigrateTargetHost._get_current_host_name'.format(BASE))
- def test_get_migrate_target_host(self,
- mock_get_current_host_name,
- mock_get_migrate_host,
- mock_get_nova_client):
- obj = GetMigrateTargetHost({}, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
- self.assertTrue(mock_get_current_host_name.called)
- self.assertTrue(mock_get_migrate_host.called)
-
- @mock.patch('{}.openstack_utils.get_nova_client'.format(BASE))
- def test_get_migrate_host(self, mock_get_nova_client):
- class A(object):
- def __init__(self, service):
- self.service = service
- self.host = 'host4'
-
- mock_get_nova_client().hosts.list_all.return_value = [A('compute')]
- obj = GetMigrateTargetHost({}, {})
- host = obj._get_migrate_host('host5')
- self.assertTrue(mock_get_nova_client.called)
- self.assertEqual(host, 'host4')
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py b/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py
deleted file mode 100644
index 680692fdc..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py
+++ /dev/null
@@ -1,106 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.get_numa_info import GetNumaInfo
-
-BASE = 'yardstick.benchmark.scenarios.lib.get_numa_info'
-
-
-class GetNumaInfoTestCase(unittest.TestCase):
-
- @mock.patch('{}.GetNumaInfo._check_numa_node'.format(BASE))
- @mock.patch('{}.GetNumaInfo._get_current_host_name'.format(BASE))
- @mock.patch('yardstick.benchmark.scenarios.lib.get_numa_info.yaml_load')
- @mock.patch('yardstick.common.task_template.TaskTemplate.render')
- def test_get_numa_info(self,
- mock_render,
- mock_safe_load,
- mock_get_current_host_name,
- mock_check_numa_node):
- scenario_cfg = {
- 'options': {
- 'server': {
- 'id': '1'
- },
- 'file': 'yardstick/ssh.py'
- },
- 'output': 'numa_info'
- }
- mock_safe_load.return_value = {
- 'nodes': []
- }
- obj = GetNumaInfo(scenario_cfg, {})
- obj.run({})
- self.assertTrue(mock_get_current_host_name.called)
- self.assertTrue(mock_check_numa_node.called)
-
- @mock.patch('yardstick.ssh.SSH.from_node')
- @mock.patch('{}.GetNumaInfo._get_current_host_name'.format(BASE))
- @mock.patch('yardstick.benchmark.scenarios.lib.get_numa_info.yaml_load')
- @mock.patch('yardstick.common.task_template.TaskTemplate.render')
- def test_check_numa_node(self,
- mock_render,
- mock_safe_load,
- mock_get_current_host_name,
- mock_from_node):
- scenario_cfg = {
- 'options': {
- 'server': {
- 'id': '1'
- },
- 'file': 'yardstick/ssh.py'
- },
- 'output': 'numa_info'
- }
- mock_safe_load.return_value = {
- 'nodes': []
- }
- data = """
- <data>
- </data>
- """
- mock_from_node().execute.return_value = (0, data, '')
- obj = GetNumaInfo(scenario_cfg, {})
- result = obj._check_numa_node('1', 'host4')
- self.assertEqual(result, {'pinning': [], 'vcpupin': []})
-
- @mock.patch('{}.change_obj_to_dict'.format(BASE))
- @mock.patch('{}.get_nova_client'.format(BASE))
- @mock.patch('yardstick.benchmark.scenarios.lib.get_numa_info.yaml_load')
- @mock.patch('yardstick.common.task_template.TaskTemplate.render')
- def test_get_current_host_name(self,
- mock_render,
- mock_safe_load,
- mock_get_nova_client,
- mock_change_obj_to_dict):
- scenario_cfg = {
- 'options': {
- 'server': {
- 'id': '1'
- },
- 'file': 'yardstick/ssh.py'
- },
- 'output': 'numa_info'
- }
- mock_get_nova_client().servers.get.return_value = ''
- mock_change_obj_to_dict.return_value = {'OS-EXT-SRV-ATTR:host': 'host5'}
-
- obj = GetNumaInfo(scenario_cfg, {})
- result = obj._get_current_host_name('1')
- self.assertEqual(result, 'host5')
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_get_server.py b/tests/unit/benchmark/scenarios/lib/test_get_server.py
deleted file mode 100644
index aebbf5416..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_get_server.py
+++ /dev/null
@@ -1,50 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-import mock
-
-from yardstick.benchmark.scenarios.lib.get_server import GetServer
-
-
-class GetServerTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.common.openstack_utils.get_server_by_name')
- @mock.patch('yardstick.common.openstack_utils.get_nova_client')
- def test_get_server_with_name(self, mock_get_nova_client, mock_get_server_by_name):
- scenario_cfg = {
- 'options': {
- 'server_name': 'yardstick_server'
- },
- 'output': 'status server'
- }
- obj = GetServer(scenario_cfg, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
- self.assertTrue(mock_get_server_by_name.called)
-
- @mock.patch('yardstick.common.openstack_utils.get_nova_client')
- def test_get_server_with_id(self, mock_get_nova_client):
- scenario_cfg = {
- 'options': {
- 'server_id': '1'
- },
- 'output': 'status server'
- }
- mock_get_nova_client().servers.get.return_value = None
- obj = GetServer(scenario_cfg, {})
- obj.run({})
- self.assertTrue(mock_get_nova_client.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py b/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py
deleted file mode 100644
index 3d20d5439..000000000
--- a/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py
+++ /dev/null
@@ -1,41 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-
-from yardstick.benchmark.scenarios.lib.get_server_ip import GetServerIp
-
-
-class GetServerIpTestCase(unittest.TestCase):
- def test_get_server_ip(self):
- scenario_cfg = {
- 'options': {
- 'server': {
- 'addresses': {
- 'net1': [
- {
- 'OS-EXT-IPS:type': 'floating',
- 'addr': '127.0.0.1'
- }
- ]
- }
- }
- },
- 'output': 'ip'
- }
- obj = GetServerIp(scenario_cfg, {})
- result = obj.run({})
- self.assertEqual(result, {'ip': '127.0.0.1'})
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/__init__.py b/tests/unit/benchmark/scenarios/networking/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/networking/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/networking/imix_voice.yaml b/tests/unit/benchmark/scenarios/networking/imix_voice.yaml
deleted file mode 100644
index b8f8e5358..000000000
--- a/tests/unit/benchmark/scenarios/networking/imix_voice.yaml
+++ /dev/null
@@ -1,41 +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.
-
-#imix definition for voice traffic
-#
-# it is a typical case for testing the synthetic VNF performance.
-#
-#percentage of the packets can be less than 100%
-#the traffic in downstream and upstream direction could be different
-
-schema: "nsb:imix:0.1"
-
-imix:
- private:
- imix_small: 100 #ipv4 case - 72B should be 0 ipv6 case - 84B
- imix_128B: 0
- imix_256B: 0
- imix_373B: 0
- imix_570B: 0
- imix_1400B: 0
- imix_1500B: 0
-
- public:
- imix_small: 100 #ipv4 case - 72B ipv6 - 84B
- imix_128B: 0
- imix_256B: 0
- imix_373B: 0
- imix_570B: 0
- imix_1400B: 0
- imix_1500B: 0
diff --git a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json b/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json
deleted file mode 100644
index b56009ba1..000000000
--- a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json
+++ /dev/null
@@ -1 +0,0 @@
-{"start": {"connecting_to": {"host": "172.16.0.252", "port": 5201}, "timestamp": {"timesecs": 1436254758, "time": "Tue, 07 Jul 2015 07:39:18 GMT"}, "test_start": {"protocol": "TCP", "num_streams": 1, "omit": 0, "bytes": 0, "blksize": 131072, "duration": 10, "blocks": 0, "reverse": 0}, "system_info": "Linux client 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux\n", "version": "iperf 3.0.7", "connected": [{"local_host": "10.0.1.2", "local_port": 37633, "remote_host": "172.16.0.252", "socket": 4, "remote_port": 5201}], "cookie": "client.1436254758.606879.1fb328dc230", "tcp_mss_default": 1448}, "intervals": [{"sum": {"end": 1.00068, "seconds": 1.00068, "bytes": 16996624, "bits_per_second": 135881000.0, "start": 0, "retransmits": 0, "omitted": false}, "streams": [{"end": 1.00068, "socket": 4, "seconds": 1.00068, "bytes": 16996624, "bits_per_second": 135881000.0, "start": 0, "retransmits": 0, "omitted": false, "snd_cwnd": 451776}]}, {"sum": {"end": 2.00048, "seconds": 0.999804, "bytes": 20010192, "bits_per_second": 160113000.0, "start": 1.00068, "retransmits": 0, "omitted": false}, "streams": [{"end": 2.00048, "socket": 4, "seconds": 0.999804, "bytes": 20010192, "bits_per_second": 160113000.0, "start": 1.00068, "retransmits": 0, "omitted": false, "snd_cwnd": 713864}]}, {"sum": {"end": 3.00083, "seconds": 1.00035, "bytes": 18330464, "bits_per_second": 146592000.0, "start": 2.00048, "retransmits": 0, "omitted": false}, "streams": [{"end": 3.00083, "socket": 4, "seconds": 1.00035, "bytes": 18330464, "bits_per_second": 146592000.0, "start": 2.00048, "retransmits": 0, "omitted": false, "snd_cwnd": 768888}]}, {"sum": {"end": 4.00707, "seconds": 1.00624, "bytes": 19658376, "bits_per_second": 156292000.0, "start": 3.00083, "retransmits": 0, "omitted": false}, "streams": [{"end": 4.00707, "socket": 4, "seconds": 1.00624, "bytes": 19658376, "bits_per_second": 156292000.0, "start": 3.00083, "retransmits": 0, "omitted": false, "snd_cwnd": 812328}]}, {"sum": {"end": 5.00104, "seconds": 0.993972, "bytes": 15709072, "bits_per_second": 126435000.0, "start": 4.00707, "retransmits": 0, "omitted": false}, "streams": [{"end": 5.00104, "socket": 4, "seconds": 0.993972, "bytes": 15709072, "bits_per_second": 126435000.0, "start": 4.00707, "retransmits": 0, "omitted": false, "snd_cwnd": 849976}]}, {"sum": {"end": 6.00049, "seconds": 0.999443, "bytes": 19616288, "bits_per_second": 157018000.0, "start": 5.00104, "retransmits": 53, "omitted": false}, "streams": [{"end": 6.00049, "socket": 4, "seconds": 0.999443, "bytes": 19616288, "bits_per_second": 157018000.0, "start": 5.00104, "retransmits": 53, "omitted": false, "snd_cwnd": 641464}]}, {"sum": {"end": 7.00085, "seconds": 1.00036, "bytes": 22250480, "bits_per_second": 177939000.0, "start": 6.00049, "retransmits": 0, "omitted": false}, "streams": [{"end": 7.00085, "socket": 4, "seconds": 1.00036, "bytes": 22250480, "bits_per_second": 177939000.0, "start": 6.00049, "retransmits": 0, "omitted": false, "snd_cwnd": 706624}]}, {"sum": {"end": 8.00476, "seconds": 1.00391, "bytes": 22282240, "bits_per_second": 177564000.0, "start": 7.00085, "retransmits": 0, "omitted": false}, "streams": [{"end": 8.00476, "socket": 4, "seconds": 1.00391, "bytes": 22282240, "bits_per_second": 177564000.0, "start": 7.00085, "retransmits": 0, "omitted": false, "snd_cwnd": 761648}]}, {"sum": {"end": 9.0016, "seconds": 0.996847, "bytes": 19657680, "bits_per_second": 157759000.0, "start": 8.00476, "retransmits": 28, "omitted": false}, "streams": [{"end": 9.0016, "socket": 4, "seconds": 0.996847, "bytes": 19657680, "bits_per_second": 157759000.0, "start": 8.00476, "retransmits": 28, "omitted": false, "snd_cwnd": 570512}]}, {"sum": {"end": 10.0112, "seconds": 1.00955, "bytes": 20932520, "bits_per_second": 165876000.0, "start": 9.0016, "retransmits": 0, "omitted": false}, "streams": [{"end": 10.0112, "socket": 4, "seconds": 1.00955, "bytes": 20932520, "bits_per_second": 165876000.0, "start": 9.0016, "retransmits": 0, "omitted": false, "snd_cwnd": 615400}]}], "end": {"sum_received": {"seconds": 10.0112, "start": 0, "end": 10.0112, "bytes": 193366712, "bits_per_second": 154521000.0}, "streams": [{"sender": {"end": 10.0112, "socket": 4, "seconds": 10.0112, "bytes": 195443936, "bits_per_second": 156181000.0, "start": 0, "retransmits": 81}, "receiver": {"end": 10.0112, "socket": 4, "seconds": 10.0112, "bytes": 193366712, "bits_per_second": 154521000.0, "start": 0}}], "sum_sent": {"end": 10.0112, "seconds": 10.0112, "bytes": 195443936, "bits_per_second": 156181000.0, "start": 0, "retransmits": 81}, "cpu_utilization_percent": {"remote_user": 1.10295, "remote_system": 40.0403, "host_user": 2.41785, "remote_total": 41.1438, "host_system": 5.09548, "host_total": 7.51411}}} \ No newline at end of file
diff --git a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json b/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json
deleted file mode 100644
index 8173c8f64..000000000
--- a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json
+++ /dev/null
@@ -1 +0,0 @@
-{"start":{"connected":[{"socket":4, "local_host":"10.0.1.2", "local_port":46384, "remote_host":"172.16.9.195", "remote_port":5201}], "version":"iperf 3.0.7", "system_info":"Linux zeus 3.13.0-61-generic #100-Ubuntu SMP Wed Jul 29 11:21:34 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux\n", "timestamp":{"time":"Tue, 29 Sep 2015 01:48:23 GMT", "timesecs":1443491303}, "connecting_to":{"host":"172.16.9.195", "port":5201}, "cookie":"zeus.1443491303.539703.3479129b58a5b", "test_start":{"protocol":"UDP", "num_streams":1, "blksize":8192, "omit":0, "duration":10, "bytes":0, "blocks":0, "reverse":0}}, "intervals":[{"streams":[{"socket":4, "start":0, "end":1.00022, "seconds":1.00022, "bytes":2252800, "bits_per_second":1.80184e+07, "packets":275, "omitted":false}], "sum":{"start":0, "end":1.00022, "seconds":1.00022, "bytes":2252800, "bits_per_second":1.80184e+07, "packets":275, "omitted":false}}, {"streams":[{"socket":4, "start":1.00022, "end":2.00022, "seconds":0.999993, "bytes":2498560, "bits_per_second":1.99886e+07, "packets":305, "omitted":false}], "sum":{"start":1.00022, "end":2.00022, "seconds":0.999993, "bytes":2498560, "bits_per_second":1.99886e+07, "packets":305, "omitted":false}}, {"streams":[{"socket":4, "start":2.00022, "end":3.00022, "seconds":1, "bytes":2506752, "bits_per_second":2.0054e+07, "packets":306, "omitted":false}], "sum":{"start":2.00022, "end":3.00022, "seconds":1, "bytes":2506752, "bits_per_second":2.0054e+07, "packets":306, "omitted":false}}, {"streams":[{"socket":4, "start":3.00022, "end":4.00022, "seconds":1, "bytes":2498560, "bits_per_second":19988480, "packets":305, "omitted":false}], "sum":{"start":3.00022, "end":4.00022, "seconds":1, "bytes":2498560, "bits_per_second":19988480, "packets":305, "omitted":false}}, {"streams":[{"socket":4, "start":4.00022, "end":5.0002, "seconds":0.999977, "bytes":2498560, "bits_per_second":1.99889e+07, "packets":305, "omitted":false}], "sum":{"start":4.00022, "end":5.0002, "seconds":0.999977, "bytes":2498560, "bits_per_second":1.99889e+07, "packets":305, "omitted":false}}, {"streams":[{"socket":4, "start":5.0002, "end":6.00024, "seconds":1.00004, "bytes":2498560, "bits_per_second":1.99877e+07, "packets":305, "omitted":false}], "sum":{"start":5.0002, "end":6.00024, "seconds":1.00004, "bytes":2498560, "bits_per_second":1.99877e+07, "packets":305, "omitted":false}}, {"streams":[{"socket":4, "start":6.00024, "end":7.00023, "seconds":0.999998, "bytes":2498560, "bits_per_second":1.99885e+07, "packets":305, "omitted":false}], "sum":{"start":6.00024, "end":7.00023, "seconds":0.999998, "bytes":2498560, "bits_per_second":1.99885e+07, "packets":305, "omitted":false}}, {"streams":[{"socket":4, "start":7.00023, "end":8.00023, "seconds":0.999999, "bytes":2506752, "bits_per_second":2.0054e+07, "packets":306, "omitted":false}], "sum":{"start":7.00023, "end":8.00023, "seconds":0.999999, "bytes":2506752, "bits_per_second":2.0054e+07, "packets":306, "omitted":false}}, {"streams":[{"socket":4, "start":8.00023, "end":9.00018, "seconds":0.999945, "bytes":2498560, "bits_per_second":1.99896e+07, "packets":305, "omitted":false}], "sum":{"start":8.00023, "end":9.00018, "seconds":0.999945, "bytes":2498560, "bits_per_second":1.99896e+07, "packets":305, "omitted":false}}, {"streams":[{"socket":4, "start":9.00018, "end":10.0002, "seconds":1.00004, "bytes":2498560, "bits_per_second":1.99876e+07, "packets":305, "omitted":false}], "sum":{"start":9.00018, "end":10.0002, "seconds":1.00004, "bytes":2498560, "bits_per_second":1.99876e+07, "packets":305, "omitted":false}}], "end":{"streams":[{"udp":{"socket":4, "start":0, "end":10.0002, "seconds":10.0002, "bytes":24756224, "bits_per_second":1.98045e+07, "jitter_ms":0.0113579, "lost_packets":0, "packets":3022, "lost_percent":0}}], "sum":{"start":0, "end":10.0002, "seconds":10.0002, "bytes":24756224, "bits_per_second":1.98045e+07, "jitter_ms":0.0113579, "lost_packets":0, "packets":3022, "lost_percent":0}, "cpu_utilization_percent":{"host_total":0.647561, "host_user":0.146468, "host_system":0.501083, "remote_total":0.31751, "remote_user":0, "remote_system":0.31751}}}
diff --git a/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml b/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml
deleted file mode 100644
index f3046f463..000000000
--- a/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml
+++ /dev/null
@@ -1,18 +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.
-
-flow:
- srcip4_range: '152.16.0.20'
- dstip4_range: '152.40.0.20'
- count: 1
diff --git a/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml b/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml
deleted file mode 100644
index 2123e4705..000000000
--- a/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml
+++ /dev/null
@@ -1,101 +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.
-
-# flow definition for ACL tests - 1K flows - ipv4 only
-#
-# the number of flows defines the widest range of parameters
-# for example if srcip_range=1.0.0.1-1.0.0.255 and dst_ip_range=10.0.0.1-10.0.1.255
-# and it should define only 16 flows
-#
-#there is assumption that packets generated will have a random sequences of following addresses pairs
-# in the packets
-# 1. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
-# 2. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
-# ...
-# 512. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
-#
-# not all combination should be filled
-# Any other field with random range will be added to flow definition
-#
-# the example.yaml provides all possibilities for traffic generation
-#
-# the profile defines a public and private side to make limited traffic correlation
-# between private and public side same way as it is made by IXIA solution.
-#
-schema: "isb:traffic_profile:0.1"
-
-# This file is a template, it will be filled with values from tc.yaml before passing to the traffic generator
-
-name: rfc2544
-description: Traffic profile to run RFC2544 latency
-traffic_profile:
- traffic_type : RFC2544Profile # defines traffic behavior - constant or look for highest possible throughput
- frame_rate : 100 # pc of linerate
- # that specifies a range (e.g. ipv4 address, port)
-
-
-private:
- ipv4:
- outer_l2:
- framesize:
- 64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.uplink.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.uplink.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.uplink.imix_1500B', '0') }}"
-
- QinQ:
- S-VLAN:
- id: 128
- priority: 0
- cfi: 0
- C-VLAN:
- id: 512
- priority: 0
- cfi: 0
-
- outer_l3v4:
- proto: "tcp"
- srcip4: "{{get(flow, 'flow.srcip4_range', '192.168.0.0-192.168.255.255') }}"
- dstip4: "{{get(flow, 'flow.dstip4_range', '192.16.0.0-192.16.0.31') }}"
- ttl: 32
- dscp: 32
-
- outer_l4:
- srcport: "{{get(flow, 'flow.srcport_range', '0') }}"
- dstport: "{{get(flow, 'flow.dstport_range', '0') }}"
-public:
- ipv4:
- outer_l2:
- framesize:
- 64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}"
- 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}"
- 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}"
- 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}"
- 570B: "{{get(imix, 'imix.uplink.imix_570B', '0') }}"
- 1400B: "{{get(imix, 'imix.uplink.imix_1400B', '0') }}"
- 1518B: "{{get(imix, 'imix.uplink.imix_1500B', '0') }}"
-
- outer_l3v4:
- proto: "tcp"
- srcip4: "{{get(flow, 'flow.dstip4_range', '192.16.0.0-192.16.0.31') }}"
- dstip4: "{{get(flow, 'flow.srcip4_range', '192.168.0.0-192.168.255.255') }}"
- ttl: 32
- dscp: 32
-
- outer_l4:
- srcport: "{{get(flow, 'flow.dstport_range', '0') }}"
- dstport: "{{get(flow, 'flow.srcport_range', '0') }}"
diff --git a/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json b/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json
deleted file mode 100755
index bba76cfa5..000000000
--- a/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json
+++ /dev/null
@@ -1 +0,0 @@
-{"mean_latency":"9.49","troughput":"823.77","troughput_unit":"10^6bits/s"} \ No newline at end of file
diff --git a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt b/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt
deleted file mode 100644
index f90457cb3..000000000
--- a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Linux 3.19.0-25-generic (huawei-pod4) 07/19/2016 _x86_64_ (1 CPU)
-
-02:01:50 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
-02:01:51 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-02:01:51 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-
-Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
-Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
diff --git a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt b/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt
deleted file mode 100644
index 417613ec1..000000000
--- a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Linux 3.19.0-25-generic (huawei-pod4) 07/19/2016 _x86_64_ (1 CPU)
-
-02:01:50 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
-02:01:51 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-02:01:51 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-
-02:01:52 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
-02:01:53 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-02:01:53 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-
-Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
-Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
diff --git a/tests/unit/benchmark/scenarios/networking/test_iperf3.py b/tests/unit/benchmark/scenarios/networking/test_iperf3.py
deleted file mode 100644
index 4d3745230..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_iperf3.py
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.networking.iperf3.Iperf
-
-from __future__ import absolute_import
-
-import os
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.common import utils
-from yardstick.benchmark.scenarios.networking import iperf3
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.iperf3.ssh')
-class IperfTestCase(unittest.TestCase):
- output_name_tcp = 'iperf3_sample_output.json'
- output_name_udp = 'iperf3_sample_output_udp.json'
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': 'mykey.key'
- },
- 'target': {
- 'ip': '172.16.0.138',
- 'user': 'root',
- 'key_filename': 'mykey.key',
- 'ipaddr': '172.16.0.138',
- }
- }
-
- def test_iperf_successful_setup(self, mock_ssh):
-
- p = iperf3.Iperf({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- p.setup()
- self.assertIsNotNone(p.target)
- self.assertIsNotNone(p.host)
- mock_ssh.SSH.from_node().execute.assert_called_with("iperf3 -s -D")
-
- def test_iperf_unsuccessful_setup(self, mock_ssh):
-
- p = iperf3.Iperf({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.setup)
-
- def test_iperf_successful_teardown(self, mock_ssh):
-
- p = iperf3.Iperf({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
- p.target = mock_ssh.SSH.from_node()
-
- p.teardown()
- self.assertTrue(mock_ssh.SSH.from_node().close.called)
- mock_ssh.SSH.from_node().execute.assert_called_with("pkill iperf3")
-
- def test_iperf_successful_no_sla(self, mock_ssh):
-
- options = {}
- args = {'options': options}
- result = {}
-
- p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.output_name_tcp)
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_iperf_successful_sla(self, mock_ssh):
-
- options = {}
- args = {
- 'options': options,
- 'sla': {'bytes_per_second': 15000000}
- }
- result = {}
-
- p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.output_name_tcp)
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_iperf_unsuccessful_sla(self, mock_ssh):
-
- options = {}
- args = {
- 'options': options,
- 'sla': {'bytes_per_second': 25000000}
- }
- result = {}
-
- p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.output_name_tcp)
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_iperf_successful_sla_jitter(self, mock_ssh):
- options = {"protocol": "udp", "bandwidth": "20m"}
- args = {
- 'options': options,
- 'sla': {'jitter': 10}
- }
- result = {}
-
- p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.output_name_udp)
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_iperf_unsuccessful_sla_jitter(self, mock_ssh):
- options = {"protocol": "udp", "bandwidth": "20m"}
- args = {
- 'options': options,
- 'sla': {'jitter': 0.0001}
- }
- result = {}
-
- p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.output_name_udp)
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_iperf_successful_tcp_protocal(self, mock_ssh):
- options = {"protocol": "tcp", "nodelay": "yes"}
- args = {
- 'options': options,
- 'sla': {'bytes_per_second': 15000000}
- }
- result = {}
-
- p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.output_name_tcp)
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_iperf_unsuccessful_script_error(self, mock_ssh):
-
- options = {}
- args = {'options': options}
- result = {}
-
- p = iperf3.Iperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
- def _read_sample_output(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, filename)
- with open(output) as f:
- sample_output = f.read()
- return sample_output
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf.py b/tests/unit/benchmark/scenarios/networking/test_netperf.py
deleted file mode 100755
index d0f862fb5..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_netperf.py
+++ /dev/null
@@ -1,130 +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.benchmark.scenarios.networking.netperf.Netperf
-
-from __future__ import absolute_import
-
-import os
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.networking import netperf
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.netperf.ssh')
-class NetperfTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': 'mykey.key'
- },
- 'target': {
- 'ip': '172.16.0.138',
- 'user': 'cirros',
- 'key_filename': 'mykey.key',
- 'ipaddr': '172.16.0.138'
- }
- }
-
- def test_netperf_successful_setup(self, mock_ssh):
-
- p = netperf.Netperf({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- p.setup()
- self.assertIsNotNone(p.server)
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_netperf_successful_no_sla(self, mock_ssh):
-
- options = {}
- args = {'options': options}
- result = {}
-
- p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output()
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = jsonutils.loads(sample_output)
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_netperf_successful_sla(self, mock_ssh):
-
- options = {}
- args = {
- 'options': options,
- 'sla': {'mean_latency': 100}
- }
- result = {}
-
- p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output()
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = jsonutils.loads(sample_output)
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_netperf_unsuccessful_sla(self, mock_ssh):
-
- options = {}
- args = {
- 'options': options,
- 'sla': {'mean_latency': 5}
- }
- result = {}
-
- p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output()
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_netperf_unsuccessful_script_error(self, mock_ssh):
-
- options = {}
- args = {'options': options}
- result = {}
-
- p = netperf.Netperf(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
- def _read_sample_output(self):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, 'netperf_sample_output.json')
- with open(output) as f:
- sample_output = f.read()
- return sample_output
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py b/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
deleted file mode 100755
index 62874cc44..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py
+++ /dev/null
@@ -1,130 +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.benchmark.scenarios.networking.netperf_node.NetperfNode
-
-from __future__ import absolute_import
-
-import os
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.networking import netperf_node
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.netperf_node.ssh')
-class NetperfNodeTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '192.168.10.10',
- 'user': 'root',
- 'password': 'root'
- },
- 'target': {
- 'ip': '192.168.10.11',
- 'user': 'root',
- 'password': 'root'
- }
- }
-
- def test_netperf_node_successful_setup(self, mock_ssh):
-
- p = netperf_node.NetperfNode({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- p.setup()
- self.assertIsNotNone(p.server)
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_netperf_node_successful_no_sla(self, mock_ssh):
-
- options = {}
- args = {'options': options}
- result = {}
-
- p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output()
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = jsonutils.loads(sample_output)
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_netperf_node_successful_sla(self, mock_ssh):
-
- options = {}
- args = {
- 'options': options,
- 'sla': {'mean_latency': 100}
- }
- result = {}
-
- p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output()
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = jsonutils.loads(sample_output)
- p.run(result)
- self.assertEqual(result, expected_result)
-
- def test_netperf_node_unsuccessful_sla(self, mock_ssh):
-
- options = {}
- args = {
- 'options': options,
- 'sla': {'mean_latency': 5}
- }
- result = {}
-
- p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output()
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_netperf_node_unsuccessful_script_error(self, mock_ssh):
-
- options = {}
- args = {'options': options}
- result = {}
-
- p = netperf_node.NetperfNode(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- p.host = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
- def _read_sample_output(self):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, 'netperf_sample_output.json')
- with open(output) as f:
- sample_output = f.read()
- return sample_output
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_netutilization.py b/tests/unit/benchmark/scenarios/networking/test_netutilization.py
deleted file mode 100644
index 1227e056e..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_netutilization.py
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huawei Technologies Co.,Ltd and other.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for
-# yardstick.benchmark.scenarios.networking.netutilization.NetUtilization
-
-from __future__ import absolute_import
-import mock
-import unittest
-import os
-
-from yardstick.benchmark.scenarios.networking import netutilization
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.netutilization.ssh')
-class NetUtilizationTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- def test_setup_success(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
- args = {'options': options}
-
- n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- n.setup()
- self.assertIsNotNone(n.client)
- self.assertTrue(n.setup_done)
-
- def test_execute_command_success(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
- args = {'options': options}
-
- n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- n.setup()
-
- expected_result = 'abcdefg'
- mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
- result = n._execute_command("foo")
- self.assertEqual(result, expected_result)
-
- def test_execute_command_failed(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
- args = {'options': options}
-
- n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- n.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (127, '', 'abcdefg')
- self.assertRaises(RuntimeError, n._execute_command,
- "failed")
-
- def test_get_network_utilization_success(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 1
- }
- args = {'options': options}
-
- n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- n.setup()
-
- mpstat_output = self._read_file("netutilization_sample_output1.txt")
- mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
- result = n._get_network_utilization()
-
- expected_result = \
- {"network_utilization_maximun": {
- "lo": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"},
- "eth0": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"}},
- "network_utilization_average": {
- "lo": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"},
- "eth0": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"}},
- "network_utilization_minimum": {
- "lo": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"},
- "eth0": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"}}}
-
- self.assertDictEqual(result, expected_result)
-
- def test_get_network_utilization_2_success(self, mock_ssh):
- options = {
- "interval": 1,
- "count": 2
- }
- args = {'options': options}
-
- n = netutilization.NetUtilization(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- n.setup()
-
- mpstat_output = self._read_file("netutilization_sample_output2.txt")
- mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
- result = n._get_network_utilization()
-
- expected_result = \
- {"network_utilization_maximun": {
- "lo": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"},
- "eth0": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"}},
- "network_utilization_average": {
- "lo": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"},
- "eth0": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"}},
- "network_utilization_minimum": {
- "lo": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"},
- "eth0": {"rxcmp/s": "0.00",
- "%ifutil": "0.00",
- "txcmp/s": "0.00",
- "txkB/s": "0.00",
- "rxkB/s": "0.00",
- "rxpck/s": "0.00",
- "txpck/s": "0.00",
- "rxmcst/s": "0.00"}}}
-
- self.assertDictEqual(result, expected_result)
-
- def _read_file(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, filename)
- with open(output) as f:
- sample_output = f.read()
- return sample_output
diff --git a/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py b/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py
deleted file mode 100644
index 3e7a3c5ee..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py
+++ /dev/null
@@ -1,61 +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.benchmark.scenarios.networking.networkcapacity.NetworkCapacity
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.networking import networkcapacity
-
-SAMPLE_OUTPUT = \
- '{"Number of connections":"308","Number of frames received": "166503"}'
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.networkcapacity.ssh')
-class NetworkCapacityTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'password': "root"
- },
- }
-
- self.result = {}
-
- def test_capacity_successful_setup(self, mock_ssh):
- c = networkcapacity.NetworkCapacity({}, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
- self.assertIsNotNone(c.client)
- self.assertTrue(c.setup_done)
-
- def test_capacity_successful(self, mock_ssh):
- c = networkcapacity.NetworkCapacity({}, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, SAMPLE_OUTPUT, '')
- c.run(self.result)
- expected_result = jsonutils.loads(SAMPLE_OUTPUT)
- self.assertEqual(self.result, expected_result)
-
- def test_capacity_unsuccessful_script_error(self, mock_ssh):
- c = networkcapacity.NetworkCapacity({}, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, c.run, self.result)
diff --git a/tests/unit/benchmark/scenarios/networking/test_nstat.py b/tests/unit/benchmark/scenarios/networking/test_nstat.py
deleted file mode 100644
index fe44cfdf4..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_nstat.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.scenarios.networking.nstat.Nstat
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-
-from yardstick.benchmark.scenarios.networking import nstat
-
-@mock.patch('yardstick.benchmark.scenarios.networking.nstat.ssh')
-class NstatTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- "host": {
- "ip": "192.168.50.28",
- "user": "root",
- "key_filename": "mykey.key"
- }
- }
-
- def test_nstat_successful_setup(self, mock_ssh):
-
- n = nstat.Nstat({}, self.ctx)
- n.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- self.assertIsNotNone(n.client)
- self.assertEqual(n.setup_done, True)
-
- def test_nstat_successful_no_sla(self, mock_ssh):
-
- options = {
- "duration": 0
- }
- args = {
- "options": options,
- }
- n = nstat.Nstat(args, self.ctx)
- result = {}
-
- sample_output = '#kernel\nIpInReceives 1837 0.0\nIpInHdrErrors 0 0.0\nIpInAddrErrors 2 0.0\nIcmpInMsgs 319 0.0\nIcmpInErrors 0 0.0\nTcpInSegs 36 0.0\nTcpInErrs 0 0.0\nUdpInDatagrams 1318 0.0\nUdpInErrors 0 0.0\n'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- n.run(result)
- expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
- "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
- "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
- "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
- "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
- "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
- self.assertEqual(result, expected_result)
-
- def test_nstat_successful_sla(self, mock_ssh):
-
- options = {
- "duration": 0
- }
- sla = {
- "IP_datagram_error_rate": 0.1
- }
- args = {
- "options": options,
- "sla": sla
- }
- n = nstat.Nstat(args, self.ctx)
- result = {}
-
- sample_output = '#kernel\nIpInReceives 1837 0.0\nIpInHdrErrors 0 0.0\nIpInAddrErrors 2 0.0\nIcmpInMsgs 319 0.0\nIcmpInErrors 0 0.0\nTcpInSegs 36 0.0\nTcpInErrs 0 0.0\nUdpInDatagrams 1318 0.0\nUdpInErrors 0 0.0\n'
-
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- n.run(result)
- expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
- "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
- "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
- "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
- "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
- "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
- self.assertEqual(result, expected_result)
-
- def test_nstat_unsuccessful_cmd_error(self, mock_ssh):
-
- options = {
- "duration": 0
- }
- sla = {
- "IP_datagram_error_rate": 0.1
- }
- args = {
- "options": options,
- "sla": sla
- }
- n = nstat.Nstat(args, self.ctx)
- result = {}
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, n.run, result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_ping.py b/tests/unit/benchmark/scenarios/networking/test_ping.py
deleted file mode 100644
index 06353249a..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_ping.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.networking.ping.Ping
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.networking import ping
-
-
-class PingTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': "mykey.key"
- },
- "target": {
- "ipaddr": "10.229.17.105",
- }
- }
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
- def test_ping_successful_no_sla(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 200},
- 'target': 'ares.demo'
- }
- result = {}
-
- p = ping.Ping(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
- p.run(result)
- self.assertEqual(result, {'rtt.ares': 100.0})
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
- def test_ping_successful_sla(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 200},
- 'sla': {'max_rtt': 150},
- 'target': 'ares.demo'
- }
- result = {}
-
- p = ping.Ping(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
- p.run(result)
- self.assertEqual(result, {'rtt.ares': 100.0})
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
- def test_ping_unsuccessful_sla(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 200},
- 'sla': {'max_rtt': 50},
- 'target': 'ares.demo'
- }
- result = {}
-
- p = ping.Ping(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
- self.assertRaises(AssertionError, p.run, result)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
- def test_ping_unsuccessful_script_error(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 200},
- 'sla': {'max_rtt': 50},
- 'target': 'ares.demo'
- }
- result = {}
-
- p = ping.Ping(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_ping6.py b/tests/unit/benchmark/scenarios/networking/test_ping6.py
deleted file mode 100644
index ecce7cee5..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_ping6.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.networking.ping.Ping
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.networking import ping6
-
-
-class PingTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'nodes': {
- 'host1': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'role': "Controller",
- 'key_filename': "mykey.key",
- 'password': "root"
- },
- 'host2': {
- "ip": "172.16.0.138",
- "key_filename": "/root/.ssh/id_rsa",
- "role": "Compute",
- "name": "node3.IPV6",
- "user": "root"
- },
- }
- }
-
- def test_get_controller_node(self):
- args = {
- 'options': {'host': 'host1', 'packetsize': 200, 'ping_count': 5},
- 'sla': {'max_rtt': 50}
- }
- p = ping6.Ping6(args, self.ctx)
- controller_node = p._get_controller_node(['host1', 'host2'])
- self.assertEqual(controller_node, 'host1')
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
- def test_ping_successful_setup(self, mock_ssh):
- args = {
- 'options': {'host': 'host1', 'packetsize': 200, 'ping_count': 5},
- 'sla': {'max_rtt': 50}
- }
- p = ping6.Ping6(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '0', '')
- p.setup()
-
- self.assertEqual(p.setup_done, True)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
- def test_ping_successful_no_sla(self, mock_ssh):
- args = {
- 'options': {'host': 'host1', 'packetsize': 200, 'ping_count': 5},
-
- }
- result = {}
-
- p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
- p.run(result)
- self.assertEqual(result, {'rtt': 100.0})
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
- def test_ping_successful_sla(self, mock_ssh):
- args = {
- 'options': {'host': 'host1', 'packetsize': 200, 'ping_count': 5},
- 'sla': {'max_rtt': 150}
- }
- result = {}
-
- p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
- p.run(result)
- self.assertEqual(result, {'rtt': 100.0})
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
- def test_ping_unsuccessful_sla(self, mock_ssh):
- args = {
- 'options': {'host': 'host1', 'packetsize': 200, 'ping_count': 5},
- 'sla': {'max_rtt': 50}
- }
- result = {}
-
- p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.side_effect = [(0, 'host1', ''), (0, 100, '')]
- self.assertRaises(AssertionError, p.run, result)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
- def test_ping_unsuccessful_script_error(self, mock_ssh):
-
- args = {
- 'options': {'host': 'host1', 'packetsize': 200, 'ping_count': 5},
- 'sla': {'max_rtt': 150}
- }
- result = {}
-
- p = ping6.Ping6(args, self.ctx)
- p.client = mock_ssh.SSH.from_node()
- mock_ssh.SSH.from_node().execute.side_effect = [
- (0, 'host1', ''), (1, '', 'FOOBAR')]
- self.assertRaises(RuntimeError, p.run, result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen.py b/tests/unit/benchmark/scenarios/networking/test_pktgen.py
deleted file mode 100644
index 3928aacde..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen.py
+++ /dev/null
@@ -1,746 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.networking.pktgen.Pktgen
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.networking import pktgen
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen.ssh')
-class PktgenTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': 'mykey.key'
- },
- 'target': {
- 'ip': '172.16.0.138',
- 'user': 'root',
- 'key_filename': 'mykey.key',
- 'ipaddr': '172.16.0.138'
- }
- }
-
- def test_pktgen_successful_setup(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- self.assertIsNotNone(p.server)
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_pktgen_successful_iptables_setup(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.number_of_ports = args['options']['number_of_ports']
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- p._iptables_setup()
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "sudo iptables -F; "
- "sudo iptables -A INPUT -p udp --dport 1000:%s -j DROP"
- % 1010, timeout=60)
-
- def test_pktgen_unsuccessful_iptables_setup(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- }
-
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.number_of_ports = args['options']['number_of_ports']
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p._iptables_setup)
-
- def test_pktgen_successful_iptables_get_result(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- }
-
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.number_of_ports = args['options']['number_of_ports']
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '150000', '')
- p._iptables_get_result()
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "sudo iptables -L INPUT -vnx |"
- "awk '/dpts:1000:%s/ {{printf \"%%s\", $1}}'"
- % 1010)
-
- def test_pktgen_unsuccessful_iptables_get_result(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- }
-
- p = pktgen.Pktgen(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.number_of_ports = args['options']['number_of_ports']
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p._iptables_get_result)
-
- def test_pktgen_successful_no_sla(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- }
- result = {}
-
- p = pktgen.Pktgen(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_iptables_result = mock.Mock()
- mock_iptables_result.return_value = 149300
- p._iptables_get_result = mock_iptables_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "packetsize": 60, "flows": 110, "ppm": 3179}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
- expected_result["packets_received"] = 149300
- expected_result["packetsize"] = 60
- self.assertEqual(result, expected_result)
-
- def test_pktgen_successful_sla(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- 'sla': {'max_ppm': 10000}
- }
- result = {}
-
- p = pktgen.Pktgen(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_iptables_result = mock.Mock()
- mock_iptables_result.return_value = 149300
- p._iptables_get_result = mock_iptables_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "packetsize": 60, "flows": 110, "ppm": 3179}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
- expected_result["packets_received"] = 149300
- expected_result["packetsize"] = 60
- self.assertEqual(result, expected_result)
-
- def test_pktgen_unsuccessful_sla(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- 'sla': {'max_ppm': 1000}
- }
- result = {}
-
- p = pktgen.Pktgen(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_iptables_result = mock.Mock()
- mock_iptables_result.return_value = 149300
- p._iptables_get_result = mock_iptables_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "packetsize": 60, "flows": 110}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_pktgen_unsuccessful_script_error(self, mock_ssh):
-
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- 'sla': {'max_ppm': 1000}
- }
- result = {}
-
- p = pktgen.Pktgen(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
- def test_pktgen_get_vnic_driver_name(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, 'ixgbevf', '')
-
- vnic_driver_name = p._get_vnic_driver_name()
- self.assertEqual(vnic_driver_name, 'ixgbevf')
-
- def test_pktgen_unsuccessful_get_vnic_driver_name(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._get_vnic_driver_name)
-
- def test_pktgen_get_sriov_queue_number(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '2', '')
-
- p.queue_number = p._get_sriov_queue_number()
- self.assertEqual(p.queue_number, 2)
-
- def test_pktgen_unsuccessful_get_sriov_queue_number(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._get_sriov_queue_number)
-
- def test_pktgen_get_available_queue_number(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '4', '')
-
- p._get_available_queue_number()
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "sudo ethtool -l eth0 | grep Combined | head -1 |"
- "awk '{printf $2}'")
-
- def test_pktgen_unsuccessful_get_available_queue_number(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._get_available_queue_number)
-
- def test_pktgen_get_usable_queue_number(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '1', '')
-
- p._get_usable_queue_number()
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "sudo ethtool -l eth0 | grep Combined | tail -1 |"
- "awk '{printf $2}'")
-
- def test_pktgen_unsuccessful_get_usable_queue_number(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._get_usable_queue_number)
-
- def test_pktgen_enable_ovs_multiqueue(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '4', '')
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = 1
- p._get_usable_queue_number = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = 4
- p._get_available_queue_number = mock_result2
-
- p.queue_number = p._enable_ovs_multiqueue()
- self.assertEqual(p.queue_number, 4)
-
- def test_pktgen_enable_ovs_multiqueue_1q(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '1', '')
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = 1
- p._get_usable_queue_number = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = 1
- p._get_available_queue_number = mock_result2
-
- p.queue_number = p._enable_ovs_multiqueue()
- self.assertEqual(p.queue_number, 1)
-
- def test_pktgen_unsuccessful_enable_ovs_multiqueue(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = 1
- p._get_usable_queue_number = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = 4
- p._get_available_queue_number = mock_result2
-
- self.assertRaises(RuntimeError, p._enable_ovs_multiqueue)
-
- def test_pktgen_setup_irqmapping_ovs(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '10', '')
-
- p._setup_irqmapping_ovs(4)
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "echo 8 | sudo tee /proc/irq/10/smp_affinity")
-
- def test_pktgen_setup_irqmapping_ovs_1q(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '10', '')
-
- p._setup_irqmapping_ovs(1)
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "echo 1 | sudo tee /proc/irq/10/smp_affinity")
-
- def test_pktgen_unsuccessful_setup_irqmapping_ovs(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._setup_irqmapping_ovs, 4)
-
- def test_pktgen_unsuccessful_setup_irqmapping_ovs_1q(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._setup_irqmapping_ovs, 1)
-
- def test_pktgen_setup_irqmapping_sriov(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '10', '')
-
- p._setup_irqmapping_sriov(2)
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "echo 2 | sudo tee /proc/irq/10/smp_affinity")
-
- def test_pktgen_setup_irqmapping_sriov_1q(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '10', '')
-
- p._setup_irqmapping_sriov(1)
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "echo 1 | sudo tee /proc/irq/10/smp_affinity")
-
- def test_pktgen_unsuccessful_setup_irqmapping_sriov(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._setup_irqmapping_sriov, 2)
-
- def test_pktgen_unsuccessful_setup_irqmapping_sriov_1q(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._setup_irqmapping_sriov, 1)
-
- def test_pktgen_is_irqbalance_disabled(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- p._is_irqbalance_disabled()
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "grep ENABLED /etc/default/irqbalance")
-
- def test_pktgen_unsuccessful_is_irqbalance_disabled(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._is_irqbalance_disabled)
-
- def test_pktgen_disable_irqbalance(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- p._disable_irqbalance()
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "sudo service irqbalance disable")
-
- def test_pktgen_unsuccessful_disable_irqbalance(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- self.assertRaises(RuntimeError, p._disable_irqbalance)
-
- def test_pktgen_multiqueue_setup_ovs(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'multiqueue': True},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '4', '')
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = False
- p._is_irqbalance_disabled = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = "virtio_net"
- p._get_vnic_driver_name = mock_result2
-
- mock_result3 = mock.Mock()
- mock_result3.return_value = 1
- p._get_usable_queue_number = mock_result3
-
- mock_result4 = mock.Mock()
- mock_result4.return_value = 4
- p._get_available_queue_number = mock_result4
-
- p.multiqueue_setup()
-
- self.assertEqual(p.queue_number, 4)
-
- def test_pktgen_multiqueue_setup_ovs_1q(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'multiqueue': True},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '1', '')
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = False
- p._is_irqbalance_disabled = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = "virtio_net"
- p._get_vnic_driver_name = mock_result2
-
- mock_result3 = mock.Mock()
- mock_result3.return_value = 1
- p._get_usable_queue_number = mock_result3
-
- mock_result4 = mock.Mock()
- mock_result4.return_value = 1
- p._get_available_queue_number = mock_result4
-
- p.multiqueue_setup()
-
- self.assertEqual(p.queue_number, 1)
-
- def test_pktgen_multiqueue_setup_sriov(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'multiqueue': True},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '2', '')
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = False
- p._is_irqbalance_disabled = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = "ixgbevf"
- p._get_vnic_driver_name = mock_result2
-
- p.multiqueue_setup()
-
- self.assertEqual(p.queue_number, 2)
-
- def test_pktgen_multiqueue_setup_sriov_1q(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'multiqueue': True},
- }
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '1', '')
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = False
- p._is_irqbalance_disabled = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = "ixgbevf"
- p._get_vnic_driver_name = mock_result2
-
- p.multiqueue_setup()
-
- self.assertEqual(p.queue_number, 1)
-
- def test_pktgen_run_with_setup_done(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
- 'sla': {'max_ppm': 1}
- }
- result = {}
- p = pktgen.Pktgen(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- p.setup_done = True
- p.multiqueue_setup_done = True
-
- mock_iptables_result = mock.Mock()
- mock_iptables_result.return_value = 149300
- p._iptables_get_result = mock_iptables_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149300, "flows": 110, "ppm": 0}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
- expected_result["packets_received"] = 149300
- expected_result["packetsize"] = 60
- self.assertEqual(result, expected_result)
-
- def test_pktgen_run_with_ovs_multiqueque(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
- 'sla': {'max_ppm': 1}
- }
- result = {}
-
- p = pktgen.Pktgen(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_result = mock.Mock()
- mock_result.return_value = "virtio_net"
- p._get_vnic_driver_name = mock_result
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = 1
- p._get_usable_queue_number = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = 4
- p._get_available_queue_number = mock_result2
-
- mock_result3 = mock.Mock()
- mock_result3.return_value = 4
- p._enable_ovs_multiqueue = mock_result3
-
- mock_result4 = mock.Mock()
- p._setup_irqmapping_ovs = mock_result4
-
- mock_iptables_result = mock.Mock()
- mock_iptables_result.return_value = 149300
- p._iptables_get_result = mock_iptables_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149300, "flows": 110, "ppm": 0}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
- expected_result["packets_received"] = 149300
- expected_result["packetsize"] = 60
- self.assertEqual(result, expected_result)
-
- def test_pktgen_run_with_sriov_multiqueque(self, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
- 'sla': {'max_ppm': 1}
- }
- result = {}
-
- p = pktgen.Pktgen(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- mock_result1 = mock.Mock()
- mock_result1.return_value = "ixgbevf"
- p._get_vnic_driver_name = mock_result1
-
- mock_result2 = mock.Mock()
- mock_result2.return_value = 2
- p._get_sriov_queue_number = mock_result2
-
- mock_result3 = mock.Mock()
- p._setup_irqmapping_sriov = mock_result3
-
- mock_iptables_result = mock.Mock()
- mock_iptables_result.return_value = 149300
- p._iptables_get_result = mock_iptables_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149300, "flows": 110, "ppm": 0}'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
- expected_result["packets_received"] = 149300
- expected_result["packetsize"] = 60
- self.assertEqual(result, expected_result)
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
deleted file mode 100644
index b4b87522c..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 ZTE and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.scenarios.networking.pktgen.Pktgen
-
-from __future__ import absolute_import
-import unittest
-
-import mock
-
-import yardstick.common.utils as utils
-from yardstick.benchmark.scenarios.networking import pktgen_dpdk
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk.time')
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk.ssh')
-class PktgenDPDKLatencyTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': 'mykey.key'
- },
- 'target': {
- 'ip': '172.16.0.138',
- 'user': 'root',
- 'key_filename': 'mykey.key',
- 'ipaddr': '172.16.0.138'
- }
- }
-
- def test_pktgen_dpdk_successful_setup(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- self.assertIsNotNone(p.server)
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_pktgen_dpdk_successful_get_port_ip(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- utils.get_port_ip(p.server, "eth1")
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "ifconfig eth1 |grep 'inet addr' |awk '{print $2}' |cut -d ':' -f2 ")
-
- def test_pktgen_dpdk_unsuccessful_get_port_ip(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- }
-
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, utils.get_port_ip, p.server, "eth1")
-
- def test_pktgen_dpdk_successful_get_port_mac(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- utils.get_port_mac(p.server, "eth1")
-
- mock_ssh.SSH.from_node().execute.assert_called_with(
- "ifconfig |grep HWaddr |grep eth1 |awk '{print $5}' ")
-
- def test_pktgen_dpdk_unsuccessful_get_port_mac(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- }
-
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
- p.server = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, utils.get_port_mac, p.server, "eth1")
-
- def test_pktgen_dpdk_successful_no_sla(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- }
-
- result = {}
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-
- sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- # with python 3 we get float, might be due python division changes
- # AssertionError: {'avg_latency': 132.33333333333334} != {
- # 'avg_latency': 132}
- delta = result['avg_latency'] - 132
- self.assertLessEqual(delta, 1)
-
- def test_pktgen_dpdk_successful_sla(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- 'sla': {'max_latency': 100}
- }
- result = {}
-
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-
- sample_output = '100\n100\n100\n100\n100\n100\n100\n100\n100\n100\n'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
-
- self.assertEqual(result, {"avg_latency": 100})
-
- def test_pktgen_dpdk_unsuccessful_sla(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- 'sla': {'max_latency': 100}
- }
- result = {}
-
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-
- p.server = mock_ssh.SSH.from_node()
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_pktgen_dpdk_unsuccessful_script_error(self, mock_ssh, mock_time):
-
- args = {
- 'options': {'packetsize': 60},
- 'sla': {'max_latency': 100}
- }
- result = {}
-
- p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py b/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
deleted file mode 100644
index d34097008..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
+++ /dev/null
@@ -1,187 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Nokia 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
-##############################################################################
-#!/usr/bin/env python
-
-# Unittest for yardstick.benchmark.scenarios.networking.pktgen.PktgenDPDK
-
-from __future__ import absolute_import
-import unittest
-
-from oslo_serialization import jsonutils
-import mock
-
-from yardstick.benchmark.scenarios.networking import pktgen_dpdk_throughput
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.ssh')
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.time')
-class PktgenDPDKTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': 'mykey.key'
- },
- 'target': {
- 'ip': '172.16.0.138',
- 'user': 'root',
- 'key_filename': 'mykey.key',
- }
- }
-
- def test_pktgen_dpdk_throughput_successful_setup(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
- p.setup()
-
- mock_ssh.SSH().execute.return_value = (0, '', '')
- self.assertIsNotNone(p.server)
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_pktgen_dpdk_throughput_successful_no_sla(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- }
-
- result = {}
-
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
-
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
-
- mock_dpdk_result = mock.Mock()
- mock_dpdk_result.return_value = 149300
- p._dpdk_get_result = mock_dpdk_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "flows": 110}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
- expected_result["packets_received"] = 149300
- expected_result["packetsize"] = 60
- self.assertEqual(result, expected_result)
-
- def test_pktgen_dpdk_throughput_successful_sla(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- 'sla': {'max_ppm': 10000}
- }
- result = {}
-
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
-
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
-
- mock_dpdk_result = mock.Mock()
- mock_dpdk_result.return_value = 149300
- p._dpdk_get_result = mock_dpdk_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "flows": 110}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
- expected_result["packets_received"] = 149300
- expected_result["packetsize"] = 60
- self.assertEqual(result, expected_result)
-
- def test_pktgen_dpdk_throughput_unsuccessful_sla(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- 'sla': {'max_ppm': 1000}
- }
- result = {}
-
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
-
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
-
- mock_dpdk_result = mock.Mock()
- mock_dpdk_result.return_value = 149300
- p._dpdk_get_result = mock_dpdk_result
-
- sample_output = '{"packets_per_second": 9753, "errors": 0, \
- "packets_sent": 149776, "flows": 110}'
- mock_ssh.SSH().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_pktgen_dpdk_throughput_unsuccessful_script_error(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60, 'number_of_ports': 10},
- 'sla': {'max_ppm': 1000}
- }
- result = {}
-
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
-
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
-
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
- def test_pktgen_dpdk_throughput_is_dpdk_setup(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
- p.server = mock_ssh.SSH()
-
- mock_ssh.SSH().execute.return_value = (0, '', '')
-
- p._is_dpdk_setup("server")
-
- mock_ssh.SSH().execute.assert_called_with(
- "ip a | grep eth1 2>/dev/null")
-
- def test_pktgen_dpdk_throughput_dpdk_setup(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
-
- mock_ssh.SSH().execute.return_value = (0, '', '')
-
- p.dpdk_setup()
-
- self.assertEqual(p.dpdk_setup_done, True)
-
- def test_pktgen_dpdk_throughput_dpdk_get_result(self, mock__time, mock_ssh):
- args = {
- 'options': {'packetsize': 60},
- }
- p = pktgen_dpdk_throughput.PktgenDPDK(args, self.ctx)
- p.server = mock_ssh.SSH()
- p.client = mock_ssh.SSH()
-
- mock_ssh.SSH().execute.return_value = (0, '10000', '')
-
- p._dpdk_get_result()
-
- mock_ssh.SSH().execute.assert_called_with(
- "sudo /dpdk/destdir/bin/dpdk-procinfo -- --stats-reset > /dev/null 2>&1")
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_sfc.py b/tests/unit/benchmark/scenarios/networking/test_sfc.py
deleted file mode 100644
index 78c0352dd..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_sfc.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.networking.sfc
-
-from __future__ import absolute_import
-import mock
-import unittest
-
-from yardstick.benchmark.scenarios.networking import sfc
-
-
-class SfcTestCase(unittest.TestCase):
-
- def setUp(self):
- scenario_cfg = {}
- context_cfg = {
- # Used in Sfc.setup()
- 'target': {
- 'user': 'root',
- 'password': 'opnfv',
- 'ip': '127.0.0.1',
- },
-
- # Used in Sfc.run()
- 'host': {
- 'user': 'root',
- 'password': 'opnfv',
- 'ip': None,
- }
- }
-
- self.sfc = sfc.Sfc(scenario_cfg=scenario_cfg, context_cfg=context_cfg)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.sfc.ssh')
- @mock.patch('yardstick.benchmark.scenarios.networking.sfc.sfc_openstack')
- @mock.patch('yardstick.benchmark.scenarios.networking.sfc.subprocess')
- def test_run_for_success(self, mock_subprocess, mock_openstack, mock_ssh):
- # Mock a successfull SSH in Sfc.setup() and Sfc.run()
- mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
- mock_openstack.get_an_IP.return_value = "127.0.0.1"
- mock_subprocess.call.return_value = 'mocked!'
-
- result = {}
- self.sfc.setup()
- self.sfc.run(result)
- self.sfc.teardown()
-
- @mock.patch('yardstick.benchmark.scenarios.networking.sfc.ssh')
- @mock.patch('yardstick.benchmark.scenarios.networking.sfc.sfc_openstack')
- @mock.patch('yardstick.benchmark.scenarios.networking.sfc.subprocess')
- def test2_run_for_success(self, mock_subprocess, mock_openstack, mock_ssh):
- # Mock a successfull SSH in Sfc.setup() and Sfc.run()
- mock_ssh.SSH.from_node().execute.return_value = (
- 0, 'vxlan_tool.py', 'succeeded timed out')
- mock_openstack.get_an_IP.return_value = "127.0.0.1"
- mock_subprocess.call.return_value = 'mocked!'
-
- result = {}
- self.sfc.setup()
- self.sfc.run(result)
- self.sfc.teardown()
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
deleted file mode 100644
index 016608a21..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
+++ /dev/null
@@ -1,787 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Unittest for yardstick.benchmark.scenarios.networking.test_vnf_generic
-
-from __future__ import absolute_import
-
-import os
-import errno
-import unittest
-import mock
-
-from copy import deepcopy
-
-from tests.unit import STL_MOCKS
-from yardstick.benchmark.scenarios.networking.vnf_generic import \
- SshManager, NetworkServiceTestCase, IncorrectConfig, \
- open_relative_file
-from yardstick.network_services.collector.subscriber import Collector
-from yardstick.network_services.vnf_generic.vnf.base import \
- GenericTrafficGen, GenericVNF
-
-
-COMPLETE_TREX_VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- {
- 'benchmark': {
- 'kpi': [
- 'rx_throughput_fps',
- 'tx_throughput_fps',
- 'tx_throughput_mbps',
- 'rx_throughput_mbps',
- 'tx_throughput_pc_linerate',
- 'rx_throughput_pc_linerate',
- 'min_latency',
- 'max_latency',
- 'avg_latency',
- ],
- },
- 'connection-point': [
- {
- 'name': 'xe0',
- 'type': 'VPORT',
- },
- {
- 'name': 'xe1',
- 'type': 'VPORT',
- },
- ],
- 'description': 'TRex stateless traffic generator for RFC2544',
- 'id': 'TrexTrafficGen',
- 'mgmt-interface': {
- 'ip': '1.1.1.1',
- 'password': 'berta',
- 'user': 'berta',
- 'vdu-id': 'trexgen-baremetal',
- },
- 'name': 'trexgen',
- 'short-name': 'trexgen',
- 'class-name': 'TrexTrafficGen',
- 'vdu': [
- {
- 'description': 'TRex stateless traffic generator for RFC2544',
- 'external-interface': [
- {
- 'name': 'xe0',
- 'virtual-interface': {
- 'bandwidth': '10 Gbps',
- 'dst_ip': '1.1.1.1',
- 'dst_mac': '00:01:02:03:04:05',
- 'local_ip': '1.1.1.2',
- 'local_mac': '00:01:02:03:05:05',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': "255.255.255.0",
- 'driver': 'i40',
- 'vpci': '0000:00:10.2',
- },
- 'vnfd-connection-point-ref': 'xe0',
- },
- {
- 'name': 'xe1',
- 'virtual-interface': {
- 'bandwidth': '10 Gbps',
- 'dst_ip': '2.1.1.1',
- 'dst_mac': '00:01:02:03:04:06',
- 'local_ip': '2.1.1.2',
- 'local_mac': '00:01:02:03:05:06',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': "255.255.255.0",
- 'driver': 'i40',
- 'vpci': '0000:00:10.1',
- },
- 'vnfd-connection-point-ref': 'xe1',
- },
- ],
- 'id': 'trexgen-baremetal',
- 'name': 'trexgen-baremetal',
- },
- ],
- },
- ],
- },
-}
-
-IP_ADDR_SHOW = """
-28: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP \
-group default qlen 1000
- link/ether 90:e2:ba:a7:6a:c8 brd ff:ff:ff:ff:ff:ff
- inet 1.1.1.1/8 brd 1.255.255.255 scope global eth1
- inet6 fe80::92e2:baff:fea7:6ac8/64 scope link
- valid_lft forever preferred_lft forever
-29: eth5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP \
-group default qlen 1000
- link/ether 90:e2:ba:a7:6a:c9 brd ff:ff:ff:ff:ff:ff
- inet 2.1.1.1/8 brd 2.255.255.255 scope global eth5
- inet6 fe80::92e2:baff:fea7:6ac9/64 scope link tentative
- valid_lft forever preferred_lft forever
-"""
-
-SYS_CLASS_NET = """
-lrwxrwxrwx 1 root root 0 sie 10 14:16 eth1 -> \
-../../devices/pci0000:80/0000:80:02.2/0000:84:00.1/net/eth1
-lrwxrwxrwx 1 root root 0 sie 3 10:37 eth2 -> \
-../../devices/pci0000:00/0000:00:01.1/0000:84:00.2/net/eth5
-"""
-
-TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64,
- },
-}
-
-
-class TestNetworkServiceTestCase(unittest.TestCase):
-
- def setUp(self):
- self.tg__1 = {
- 'name': 'trafficgen_1.yardstick',
- 'ip': '10.10.10.11',
- 'role': 'TrafficGen',
- 'user': 'root',
- 'password': 'r00t',
- 'interfaces': {
- 'xe0': {
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.100.20',
- 'local_mac': '00:00:00:00:00:01',
- 'driver': 'i40e',
- 'vpci': '0000:07:00.0',
- 'dpdk_port_num': 0,
- },
- 'xe1': {
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.20',
- 'local_mac': '00:00:00:00:00:02',
- 'driver': 'i40e',
- 'vpci': '0000:07:00.1',
- 'dpdk_port_num': 1,
- },
- },
- }
-
- self.vnf__1 = {
- 'name': 'vnf.yardstick',
- 'ip': '10.10.10.12',
- 'host': '10.223.197.164',
- 'role': 'vnf',
- 'user': 'root',
- 'password': 'r00t',
- 'interfaces': {
- 'xe0': {
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.100.19',
- 'local_mac': '00:00:00:00:00:03',
- 'driver': 'i40e',
- 'vpci': '0000:07:00.0',
- 'dpdk_port_num': 0,
- },
- 'xe1': {
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.19',
- 'local_mac': '00:00:00:00:00:04',
- 'driver': 'i40e',
- 'vpci': '0000:07:00.1',
- 'dpdk_port_num': 1,
- },
- },
- 'routing_table': [
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'network': '152.16.100.20',
- 'if': 'xe0',
- },
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'network': '152.16.40.20',
- 'if': 'xe1',
- },
- ],
- 'nd_route_tbl': [
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0',
- },
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1',
- },
- ],
- }
-
- self.context_cfg = {
- 'nodes': {
- 'tg__1': self.tg__1,
- 'vnf__1': self.vnf__1,
- },
- 'networks': {
- GenericVNF.UPLINK: {
- 'vld_id': GenericVNF.UPLINK,
- },
- GenericVNF.DOWNLINK: {
- 'vld_id': GenericVNF.DOWNLINK,
- },
- },
- }
-
- self.vld0 = {
- 'vnfd-connection-point-ref': [
- {
- 'vnfd-connection-point-ref': 'xe0',
- 'member-vnf-index-ref': '1',
- 'vnfd-id-ref': 'trexgen'
- },
- {
- 'vnfd-connection-point-ref': 'xe0',
- 'member-vnf-index-ref': '2',
- 'vnfd-id-ref': 'trexgen'
- }
- ],
- 'type': 'ELAN',
- 'id': GenericVNF.UPLINK,
- 'name': 'tg__1 to vnf__1 link 1'
- }
-
- self.vld1 = {
- 'vnfd-connection-point-ref': [
- {
- 'vnfd-connection-point-ref': 'xe1',
- 'member-vnf-index-ref': '1',
- 'vnfd-id-ref': 'trexgen'
- },
- {
- 'vnfd-connection-point-ref': 'xe1',
- 'member-vnf-index-ref': '2',
- 'vnfd-id-ref': 'trexgen'
- }
- ],
- 'type': 'ELAN',
- 'id': GenericVNF.DOWNLINK,
- 'name': 'vnf__1 to tg__1 link 2'
- }
-
- self.topology = {
- 'id': 'trex-tg-topology',
- 'short-name': 'trex-tg-topology',
- 'name': 'trex-tg-topology',
- 'description': 'trex-tg-topology',
- 'constituent-vnfd': [
- {
- 'member-vnf-index': '1',
- 'VNF model': 'tg_trex_tpl.yaml',
- 'vnfd-id-ref': 'tg__1',
- },
- {
- 'member-vnf-index': '2',
- 'VNF model': 'tg_trex_tpl.yaml',
- 'vnfd-id-ref': 'vnf__1',
- },
- ],
- 'vld': [self.vld0, self.vld1],
- }
-
- self.scenario_cfg = {
- 'task_path': "",
- "topology": self._get_file_abspath("vpe_vnf_topology.yaml"),
- 'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
- 'tc': 'tc_ipv4_1Mflow_64B_packetsize',
- 'traffic_profile': 'ipv4_throughput_vpe.yaml',
- 'type': 'ISB',
- 'tc_options': {
- 'rfc2544': {
- 'allowed_drop_rate': '0.8 - 1',
- },
- },
- 'options': {
- 'framesize': {'64B': 100}
- },
- 'runner': {
- 'object': 'NetworkServiceTestCase',
- 'interval': 35,
- 'output_filename': 'yardstick.out',
- 'runner_id': 74476,
- 'duration': 400,
- 'type': 'Duration',
- },
- 'traffic_options': {
- 'flow': 'ipv4_1flow_Packets_vpe.yaml',
- 'imix': 'imix_voice.yaml'
- },
- 'nodes': {
- 'tg__2': 'trafficgen_2.yardstick',
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick',
- },
- }
-
- self.s = NetworkServiceTestCase(self.scenario_cfg, self.context_cfg)
-
- 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
-
- def test_ssh_manager(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.from_node.return_value = ssh_mock
- for node, node_dict in self.context_cfg["nodes"].items():
- with SshManager(node_dict) as conn:
- self.assertIsNotNone(conn)
-
- def test___init__(self):
- assert self.topology
-
- def test__get_ip_flow_range_string(self):
- self.scenario_cfg["traffic_options"]["flow"] = \
- self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
- result = '152.16.100.2-152.16.100.254'
- self.assertEqual(result, self.s._get_ip_flow_range('152.16.100.2-152.16.100.254'))
-
- def test__get_ip_flow_range(self):
- self.scenario_cfg["traffic_options"]["flow"] = \
- self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
- result = '152.16.100.2-152.16.100.254'
- self.assertEqual(result, self.s._get_ip_flow_range({"tg__1": 'xe0'}))
-
- @mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.ipaddress')
- def test__get_ip_flow_range_no_node_data(self, mock_ipaddress):
- scenario_cfg = deepcopy(self.scenario_cfg)
- scenario_cfg["traffic_options"]["flow"] = \
- self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
-
- mock_ipaddress.ip_network.return_value = ipaddr = mock.Mock()
- ipaddr.hosts.return_value = []
-
- expected = '0.0.0.0'
- result = self.s._get_ip_flow_range({"tg__2": 'xe0'})
- self.assertEqual(result, expected)
-
- def test__get_ip_flow_range_no_nodes(self):
- expected = '0.0.0.0'
- result = self.s._get_ip_flow_range({})
- self.assertEqual(result, expected)
-
- def test___get_traffic_flow(self):
- self.scenario_cfg["traffic_options"]["flow"] = \
- self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
- self.scenario_cfg["options"] = {}
- self.scenario_cfg['options'] = {
- 'flow': {
- 'src_ip': [
- {
- 'tg__1': 'xe0',
- },
- ],
- 'dst_ip': [
- {
- 'tg__1': 'xe1',
- },
- ],
- 'public_ip': ['1.1.1.1'],
- },
- }
- result = {'flow': {'dst_ip0': '152.16.40.2-152.16.40.254',
- 'src_ip0': '152.16.100.2-152.16.100.254'}}
-
- self.assertEqual({'flow': {}}, self.s._get_traffic_flow())
-
- def test___get_traffic_flow_error(self):
- self.scenario_cfg["traffic_options"]["flow"] = \
- "ipv4_1flow_Packets_vpe.yaml1"
- self.assertEqual({'flow': {}}, self.s._get_traffic_flow())
-
- def test_get_vnf_imp(self):
- vnfd = COMPLETE_TREX_VNFD['vnfd:vnfd-catalog']['vnfd'][0]['class-name']
- with mock.patch.dict("sys.modules", STL_MOCKS):
- self.assertIsNotNone(self.s.get_vnf_impl(vnfd))
-
- with self.assertRaises(IncorrectConfig) as raised:
- self.s.get_vnf_impl('NonExistentClass')
-
- exc_str = str(raised.exception)
- print(exc_str)
- self.assertIn('No implementation', exc_str)
- self.assertIn('found in', exc_str)
-
- def test_load_vnf_models_invalid(self):
- self.context_cfg["nodes"]['tg__1']['VNF model'] = \
- self._get_file_abspath("tg_trex_tpl.yaml")
- self.context_cfg["nodes"]['vnf__1']['VNF model'] = \
- self._get_file_abspath("tg_trex_tpl.yaml")
-
- vnf = mock.Mock(autospec=GenericVNF)
- self.s.get_vnf_impl = mock.Mock(return_value=vnf)
-
- self.assertIsNotNone(
- self.s.load_vnf_models(self.scenario_cfg, self.context_cfg))
-
- def test_load_vnf_models_no_model(self):
- vnf = mock.Mock(autospec=GenericVNF)
- self.s.get_vnf_impl = mock.Mock(return_value=vnf)
-
- self.assertIsNotNone(
- self.s.load_vnf_models(self.scenario_cfg, self.context_cfg))
-
- def test_map_topology_to_infrastructure(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.from_node.return_value = ssh_mock
- self.s.map_topology_to_infrastructure()
-
- nodes = self.context_cfg["nodes"]
- self.assertEqual("../../vnf_descriptors/tg_rfc2544_tpl.yaml", nodes['tg__1']['VNF model'])
- self.assertEqual("../../vnf_descriptors/vpe_vnf.yaml", nodes['vnf__1']['VNF model'])
-
- def test_map_topology_to_infrastructure_insufficient_nodes(self):
- del self.context_cfg['nodes']['vnf__1']
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.from_node.return_value = ssh_mock
-
- with self.assertRaises(IncorrectConfig):
- self.s.map_topology_to_infrastructure()
-
- def test_map_topology_to_infrastructure_config_invalid(self):
- cfg = dict(self.context_cfg)
- del cfg['nodes']['vnf__1']['interfaces']['xe0']['local_mac']
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.from_node.return_value = ssh_mock
-
- with self.assertRaises(IncorrectConfig):
- self.s.map_topology_to_infrastructure()
-
- def test__resolve_topology_invalid_config(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.from_node.return_value = ssh_mock
-
- # purge an important key from the data structure
- for interface in self.tg__1['interfaces'].values():
- del interface['local_mac']
-
- with mock.patch(
- "yardstick.benchmark.scenarios.networking.vnf_generic.LOG") as mock_log:
- with self.assertRaises(IncorrectConfig) as raised:
- self.s._resolve_topology()
-
- self.assertIn('not found', str(raised.exception))
-
- # restore local_mac
- for index, interface in enumerate(self.tg__1['interfaces'].values()):
- interface['local_mac'] = '00:00:00:00:00:{:2x}'.format(index)
-
- # make a connection point ref with 3 points
- self.s.topology["vld"][0]['vnfd-connection-point-ref'].append(
- self.s.topology["vld"][0]['vnfd-connection-point-ref'][0])
-
- with mock.patch(
- "yardstick.benchmark.scenarios.networking.vnf_generic.LOG") as mock_log:
- with self.assertRaises(IncorrectConfig) as raised:
- self.s._resolve_topology()
-
- self.assertIn('wrong endpoint count', str(raised.exception))
-
- # make a connection point ref with 1 point
- self.s.topology["vld"][0]['vnfd-connection-point-ref'] = \
- self.s.topology["vld"][0]['vnfd-connection-point-ref'][:1]
-
- with mock.patch(
- "yardstick.benchmark.scenarios.networking.vnf_generic.LOG") as mock_log:
- with self.assertRaises(IncorrectConfig) as raised:
- self.s._resolve_topology()
-
- self.assertIn('wrong endpoint count', str(raised.exception))
-
- def test_run(self):
- tgen = mock.Mock(autospec=GenericTrafficGen)
- tgen.traffic_finished = True
- verified_dict = {"verified": True}
- tgen.verify_traffic = lambda x: verified_dict
- tgen.name = "tgen__1"
- vnf = mock.Mock(autospec=GenericVNF)
- vnf.runs_traffic = False
- self.s.vnfs = [tgen, vnf]
- self.s.traffic_profile = mock.Mock()
- self.s.collector = mock.Mock(autospec=Collector)
- self.s.collector.get_kpi = \
- mock.Mock(return_value={tgen.name: verified_dict})
- result = {}
- self.s.run(result)
- self.assertDictEqual(result, {tgen.name: verified_dict})
-
- def test_setup(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.from_node.return_value = ssh_mock
-
- tgen = mock.Mock(autospec=GenericTrafficGen)
- tgen.traffic_finished = True
- verified_dict = {"verified": True}
- tgen.verify_traffic = lambda x: verified_dict
- tgen.terminate = mock.Mock(return_value=True)
- tgen.name = "tgen__1"
- vnf = mock.Mock(autospec=GenericVNF)
- vnf.runs_traffic = False
- vnf.terminate = mock.Mock(return_value=True)
- self.s.vnfs = [tgen, vnf]
- self.s.traffic_profile = mock.Mock()
- self.s.collector = mock.Mock(autospec=Collector)
- self.s.collector.get_kpi = \
- mock.Mock(return_value={tgen.name: verified_dict})
- self.s.map_topology_to_infrastructure = mock.Mock(return_value=0)
- self.s.load_vnf_models = mock.Mock(return_value=self.s.vnfs)
- self.s._fill_traffic_profile = \
- mock.Mock(return_value=TRAFFIC_PROFILE)
- self.assertEqual(None, self.s.setup())
-
- def test_setup_exception(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, ""))
- ssh.from_node.return_value = ssh_mock
-
- tgen = mock.Mock(autospec=GenericTrafficGen)
- tgen.traffic_finished = True
- verified_dict = {"verified": True}
- tgen.verify_traffic = lambda x: verified_dict
- tgen.terminate = mock.Mock(return_value=True)
- tgen.name = "tgen__1"
- vnf = mock.Mock(autospec=GenericVNF)
- vnf.runs_traffic = False
- vnf.instantiate.side_effect = RuntimeError("error during instantiate")
- vnf.terminate = mock.Mock(return_value=True)
- self.s.vnfs = [tgen, vnf]
- self.s.traffic_profile = mock.Mock()
- self.s.collector = mock.Mock(autospec=Collector)
- self.s.collector.get_kpi = \
- mock.Mock(return_value={tgen.name: verified_dict})
- self.s.map_topology_to_infrastructure = mock.Mock(return_value=0)
- self.s.load_vnf_models = mock.Mock(return_value=self.s.vnfs)
- self.s._fill_traffic_profile = \
- mock.Mock(return_value=TRAFFIC_PROFILE)
- with self.assertRaises(RuntimeError):
- self.s.setup()
-
- def test__get_traffic_profile(self):
- self.scenario_cfg["traffic_profile"] = \
- self._get_file_abspath("ipv4_throughput_vpe.yaml")
- self.assertIsNotNone(self.s._get_traffic_profile())
-
- def test__get_traffic_profile_exception(self):
- with mock.patch.dict(self.scenario_cfg, {'traffic_profile': ''}):
- with self.assertRaises(IOError):
- self.s._get_traffic_profile()
-
- def test___get_traffic_imix_exception(self):
- with mock.patch.dict(self.scenario_cfg["traffic_options"], {'imix': ''}):
- self.assertEqual({'imix': {'64B': 100}}, self.s._get_traffic_imix())
-
- def test__fill_traffic_profile(self):
- with mock.patch.dict("sys.modules", STL_MOCKS):
- self.scenario_cfg["traffic_profile"] = \
- self._get_file_abspath("ipv4_throughput_vpe.yaml")
- self.scenario_cfg["traffic_options"]["flow"] = \
- self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
- self.scenario_cfg["traffic_options"]["imix"] = \
- self._get_file_abspath("imix_voice.yaml")
- self.assertIsNotNone(self.s._fill_traffic_profile())
-
- def test_teardown(self):
- vnf = mock.Mock(autospec=GenericVNF)
- vnf.terminate = mock.Mock(return_value=True)
- vnf.name = str(vnf)
- self.s.vnfs = [vnf]
- self.s.traffic_profile = mock.Mock()
- self.s.collector = mock.Mock(autospec=Collector)
- self.s.collector.stop = \
- mock.Mock(return_value=True)
- self.assertIsNone(self.s.teardown())
-
- def test_teardown_exception(self):
- vnf = mock.Mock(autospec=GenericVNF)
- vnf.terminate = mock.Mock(side_effect=RuntimeError("error duing terminate"))
- vnf.name = str(vnf)
- self.s.vnfs = [vnf]
- self.s.traffic_profile = mock.Mock()
- self.s.collector = mock.Mock(autospec=Collector)
- self.s.collector.stop = \
- mock.Mock(return_value=True)
- with self.assertRaises(RuntimeError):
- self.s.teardown()
-
- SAMPLE_NETDEVS = {
- 'enp11s0': {
- 'address': '0a:de:ad:be:ef:f5',
- 'device': '0x1533',
- 'driver': 'igb',
- 'ifindex': '2',
- 'interface_name': 'enp11s0',
- 'operstate': 'down',
- 'pci_bus_id': '0000:0b:00.0',
- 'subsystem_device': '0x1533',
- 'subsystem_vendor': '0x15d9',
- 'vendor': '0x8086'
- },
- 'lan': {
- 'address': '0a:de:ad:be:ef:f4',
- 'device': '0x153a',
- 'driver': 'e1000e',
- 'ifindex': '3',
- 'interface_name': 'lan',
- 'operstate': 'up',
- 'pci_bus_id': '0000:00:19.0',
- 'subsystem_device': '0x153a',
- 'subsystem_vendor': '0x15d9',
- 'vendor': '0x8086'
- }
- }
-
- SAMPLE_VM_NETDEVS = {
- 'eth1': {
- 'address': 'fa:de:ad:be:ef:5b',
- 'device': '0x0001',
- 'driver': 'virtio_net',
- 'ifindex': '3',
- 'interface_name': 'eth1',
- 'operstate': 'down',
- 'pci_bus_id': '0000:00:04.0',
- 'vendor': '0x1af4'
- }
- }
-
- def test_parse_netdev_info(self):
- output = """\
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/ifindex:2
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/address:0a:de:ad:be:ef:f5
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/operstate:down
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/vendor:0x8086
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/device:0x1533
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/subsystem_vendor:0x15d9
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/subsystem_device:0x1533
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/driver:igb
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/pci_bus_id:0000:0b:00.0
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/ifindex:3
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/address:0a:de:ad:be:ef:f4
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/operstate:up
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/vendor:0x8086
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/device:0x153a
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/subsystem_vendor:0x15d9
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/subsystem_device:0x153a
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/driver:e1000e
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/pci_bus_id:0000:00:19.0
-"""
- res = NetworkServiceTestCase.parse_netdev_info(output)
- assert res == self.SAMPLE_NETDEVS
-
- def test_parse_netdev_info_virtio(self):
- output = """\
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/ifindex:3
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/address:fa:de:ad:be:ef:5b
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/operstate:down
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/device/vendor:0x1af4
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/device/device:0x0001
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/driver:virtio_net
-"""
- res = NetworkServiceTestCase.parse_netdev_info(output)
- assert res == self.SAMPLE_VM_NETDEVS
-
- def test_probe_missing_values(self):
- netdevs = self.SAMPLE_NETDEVS.copy()
- network = {'local_mac': '0a:de:ad:be:ef:f5'}
- NetworkServiceTestCase._probe_missing_values(netdevs, network)
- assert network['vpci'] == '0000:0b:00.0'
-
- network = {'local_mac': '0a:de:ad:be:ef:f4'}
- NetworkServiceTestCase._probe_missing_values(netdevs, network)
- assert network['vpci'] == '0000:00:19.0'
-
- def test_open_relative_path(self):
- mock_open = mock.mock_open()
- mock_open_result = mock_open()
- mock_open_call_count = 1 # initial call to get result
-
- module_name = \
- 'yardstick.benchmark.scenarios.networking.vnf_generic.open'
-
- # test
- with mock.patch(module_name, mock_open, create=True):
- self.assertEqual(open_relative_file('foo', 'bar'), mock_open_result)
-
- mock_open_call_count += 1 # one more call expected
- self.assertEqual(mock_open.call_count, mock_open_call_count)
- self.assertIn('foo', mock_open.call_args_list[-1][0][0])
- self.assertNotIn('bar', mock_open.call_args_list[-1][0][0])
-
- def open_effect(*args, **kwargs):
- if kwargs.get('name', args[0]) == os.path.join('bar', 'foo'):
- return mock_open_result
- raise IOError(errno.ENOENT, 'not found')
-
- mock_open.side_effect = open_effect
- self.assertEqual(open_relative_file('foo', 'bar'), mock_open_result)
-
- mock_open_call_count += 2 # two more calls expected
- self.assertEqual(mock_open.call_count, mock_open_call_count)
- self.assertIn('foo', mock_open.call_args_list[-1][0][0])
- self.assertIn('bar', mock_open.call_args_list[-1][0][0])
-
- # test an IOError of type ENOENT
- mock_open.side_effect = IOError(errno.ENOENT, 'not found')
- with self.assertRaises(IOError):
- # the second call still raises
- open_relative_file('foo', 'bar')
-
- mock_open_call_count += 2 # two more calls expected
- self.assertEqual(mock_open.call_count, mock_open_call_count)
- self.assertIn('foo', mock_open.call_args_list[-1][0][0])
- self.assertIn('bar', mock_open.call_args_list[-1][0][0])
-
- # test an IOError other than ENOENT
- mock_open.side_effect = IOError(errno.EBUSY, 'busy')
- with self.assertRaises(IOError):
- open_relative_file('foo', 'bar')
-
- mock_open_call_count += 1 # one more call expected
- self.assertEqual(mock_open.call_count, mock_open_call_count)
diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf.py b/tests/unit/benchmark/scenarios/networking/test_vsperf.py
deleted file mode 100644
index cbbfc2b34..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_vsperf.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 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.
-
-# Unittest for yardstick.benchmark.scenarios.networking.vsperf.Vsperf
-
-from __future__ import absolute_import
-try:
- from unittest import mock
-except ImportError:
- import mock
-import unittest
-
-from yardstick.benchmark.scenarios.networking import vsperf
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.vsperf.subprocess')
-@mock.patch('yardstick.benchmark.scenarios.networking.vsperf.ssh')
-class VsperfTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- "host": {
- "ip": "10.229.47.137",
- "user": "ubuntu",
- "password": "ubuntu",
- },
- }
- self.args = {
- 'options': {
- 'testname': 'p2p_rfc2544_continuous',
- 'traffic_type': 'continuous',
- 'frame_size': '64',
- 'bidirectional': 'True',
- 'iload': 100,
- 'trafficgen_port1': 'eth1',
- 'trafficgen_port2': 'eth3',
- 'external_bridge': 'br-ex',
- 'conf_file': 'vsperf-yardstick.conf',
- 'setup_script': 'setup_yardstick.sh',
- 'test_params': 'TRAFFICGEN_DURATION=30;',
- },
- 'sla': {
- 'metrics': 'throughput_rx_fps',
- 'throughput_rx_fps': 500000,
- 'action': 'monitor',
- }
- }
-
- def test_vsperf_setup(self, mock_ssh, mock_subprocess):
- p = vsperf.Vsperf(self.args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_vsperf_teardown(self, mock_ssh, mock_subprocess):
- p = vsperf.Vsperf(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- p.teardown()
- self.assertEqual(p.setup_done, False)
-
- def test_vsperf_run_ok(self, mock_ssh, mock_subprocess):
- p = vsperf.Vsperf(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- # run() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_ssh.SSH.from_node().execute.return_value = (
- 0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
-
- result = {}
- p.run(result)
-
- self.assertEqual(result['throughput_rx_fps'], '14797660.000')
-
- def test_vsperf_run_falied_vsperf_execution(self, mock_ssh,
- mock_subprocess):
- p = vsperf.Vsperf(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- # run() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- result = {}
- self.assertRaises(RuntimeError, p.run, result)
-
- def test_vsperf_run_falied_csv_report(self, mock_ssh, mock_subprocess):
- p = vsperf.Vsperf(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- # run() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- result = {}
- self.assertRaises(RuntimeError, p.run, result)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
deleted file mode 100644
index 5759f0a90..000000000
--- a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
+++ /dev/null
@@ -1,237 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2017 Nokia
-#
-# 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.
-
-# Unittest for yardstick.benchmark.scenarios.networking.vsperf.VsperfDPDK
-
-from __future__ import absolute_import
-try:
- from unittest import mock
-except ImportError:
- import mock
-import unittest
-
-from yardstick.benchmark.scenarios.networking import vsperf_dpdk
-
-
-@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.subprocess')
-@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
-class VsperfDPDKTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- "host": {
- "ip": "10.229.47.137",
- "user": "ubuntu",
- "password": "ubuntu",
- },
- }
- self.args = {
- 'task_id': "1234-5678",
- 'options': {
- 'testname': 'pvp_tput',
- 'traffic_type': 'rfc2544_throughput',
- 'frame_size': '64',
- 'test_params': 'TRAFFICGEN_DURATION=30;',
- 'trafficgen_port1': 'ens4',
- 'trafficgen_port2': 'ens5',
- 'conf_file': 'vsperf-yardstick.conf',
- 'setup_script': 'setup_yardstick.sh',
- 'moongen_helper_file': '~/moongen.py',
- 'moongen_host_ip': '10.5.201.151',
- 'moongen_port1_mac': '8c:dc:d4:ae:7c:5c',
- 'moongen_port2_mac': '8c:dc:d4:ae:7c:5d',
- 'trafficgen_port1_nw': 'test2',
- 'trafficgen_port2_nw': 'test3',
- },
- 'sla': {
- 'metrics': 'throughput_rx_fps',
- 'throughput_rx_fps': 500000,
- 'action': 'monitor',
- }
- }
-
- def test_vsperf_dpdk_setup(self, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_vsperf_dpdk_teardown(self, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- p.teardown()
- self.assertEqual(p.setup_done, False)
-
- def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- # is_dpdk_setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
-
- result = p._is_dpdk_setup()
- self.assertEqual(result, False)
-
- def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- # is_dpdk_setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- result = p._is_dpdk_setup()
- self.assertEqual(result, True)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_dpdk_setup_first(self, mock_time, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- # is_dpdk_setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
-
- p.dpdk_setup()
- self.assertEqual(p._is_dpdk_setup(), False)
- self.assertEqual(p.dpdk_setup_done, True)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_dpdk_setup_next(self, mock_time, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- p.dpdk_setup()
- self.assertEqual(p._is_dpdk_setup(), True)
- self.assertEqual(p.dpdk_setup_done, True)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_dpdk_setup_fail(self, mock_time, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
- self.assertEqual(p.setup_done, True)
-
- self.assertRaises(RuntimeError, p.dpdk_setup)
-
- @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
- def test_vsperf_dpdk_run_ok(self, mock_time, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- # run() specific mocks
- mock_subprocess.call().execute.return_value = None
- mock_ssh.SSH.from_node().execute.return_value = (
- 0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
-
- result = {}
- p.run(result)
-
- self.assertEqual(result['throughput_rx_fps'], '14797660.000')
-
- def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_ssh,
- mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- # run() specific mocks
- mock_subprocess.call().execute.return_value = None
- mock_subprocess.call().execute.return_value = None
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- result = {}
- self.assertRaises(RuntimeError, p.run, result)
-
- def test_vsperf_dpdk_run_falied_csv_report(self, mock_ssh, mock_subprocess):
- p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
-
- # setup() specific mocks
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_subprocess.call().execute.return_value = None
-
- p.setup()
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- # run() specific mocks
- mock_subprocess.call().execute.return_value = None
- mock_subprocess.call().execute.return_value = None
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-
- result = {}
- self.assertRaises(RuntimeError, p.run, result)
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml b/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml
deleted file mode 100644
index b1641836b..000000000
--- a/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml
+++ /dev/null
@@ -1,75 +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.
-
-vnfd:vnfd-catalog:
- vnfd:
- - id: TrexTrafficGen # NSPerf class mapping
- name: trexgen
- short-name: trexgen
- description: TRex stateless traffic generator for tests
- vm-flavor:
- vcpu-count: '4'
- memory-mb: '4096'
- mgmt-interface:
- vdu-id: trexgen-baremetal
- user: '{{user}}' # Value filled by vnfdgen
- password: '{{password}}' # Value filled by vnfdgen
- ip: '{{ip}}' # Value filled by vnfdgen
- connection-point:
- - name: xe0
- type: VPORT
- - name: xe1
- type: VPORT
- vdu:
- - id: trexgen-baremetal
- name: trexgen-baremetal
- description: TRex stateless traffic generator for tests
- external-interface:
- - name: xe0
- virtual-interface:
- type: PCI-PASSTHROUGH
- # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
- vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen
- local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen
- driver: '{{ interfaces.xe0.driver}}' # Value filled by vnfdgen
- dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen
- local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen
- dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen
- vld_id: '{{ interfaces.xe0.vld_id }}' # Value filled by vnfdgen
- bandwidth: 10 Gbps
- vnfd-connection-point-ref: xe0
- - name: xe1
- virtual-interface:
- type: PCI-PASSTHROUGH
- vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen
- local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen
- driver: '{{ interfaces.xe1.driver}}' # Value filled by vnfdgen
- dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen
- local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen
- dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen
- vld_id: '{{ interfaces.xe1.vld_id }}' # Value filled by vnfdgen
- bandwidth: 10 Gbps
- vnfd-connection-point-ref: xe1
-
- benchmark:
- kpi:
- - rx_throughput_fps
- - tx_throughput_fps
- - tx_throughput_mbps
- - rx_throughput_mbps
- - tx_throughput_pc_linerate
- - rx_throughput_pc_linerate
- - min_latency
- - max_latency
- - avg_latency
diff --git a/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml b/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml
deleted file mode 100644
index 1ac6c1f89..000000000
--- a/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml
+++ /dev/null
@@ -1,50 +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.
-
-nsd:nsd-catalog:
- nsd:
- - id: VPE
- name: VPE
- short-name: VPE
- description: scenario with VPE,L3fwd and VNF
- constituent-vnfd:
- - member-vnf-index: '1'
- vnfd-id-ref: tg__1
- VNF model: ../../vnf_descriptors/tg_rfc2544_tpl.yaml #tg_vpe_upstream.yaml #VPE VNF
- - member-vnf-index: '2'
- vnfd-id-ref: vnf__1
- VNF model: ../../vnf_descriptors/vpe_vnf.yaml #tg_l3fwd.yaml #tg_trex_tpl.yaml #TREX
-
- vld:
- - id: uplink
- name: tg__1 to vnf__1 link 1
- type: ELAN
- vnfd-connection-point-ref:
- - member-vnf-index-ref: '1'
- vnfd-connection-point-ref: xe0
- vnfd-id-ref: tg__1 #TREX
- - member-vnf-index-ref: '2'
- vnfd-connection-point-ref: xe0
- vnfd-id-ref: vnf__1 #VNF
-
- - id: downlink
- name: vnf__1 to tg__1 link 2
- type: ELAN
- vnfd-connection-point-ref:
- - member-vnf-index-ref: '2'
- vnfd-connection-point-ref: xe1
- vnfd-id-ref: vnf__1 #L3fwd
- - member-vnf-index-ref: '1'
- vnfd-connection-point-ref: xe1
- vnfd-id-ref: tg__1 #VPE VNF
diff --git a/tests/unit/benchmark/scenarios/parser/__init__.py b/tests/unit/benchmark/scenarios/parser/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/parser/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/parser/test_parser.py b/tests/unit/benchmark/scenarios/parser/test_parser.py
deleted file mode 100644
index 59b98a092..000000000
--- a/tests/unit/benchmark/scenarios/parser/test_parser.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and other.
-#
-# 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.parser.Parser
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.parser import parser
-
-
-@mock.patch('yardstick.benchmark.scenarios.parser.parser.subprocess')
-class ParserTestCase(unittest.TestCase):
-
- def setUp(self):
- pass
-
- def test_parser_successful_setup(self, mock_subprocess):
-
- p = parser.Parser({}, {})
- mock_subprocess.call().return_value = 0
- p.setup()
- self.assertEqual(p.setup_done, True)
-
- def test_parser_successful(self, mock_subprocess):
- args = {
- 'options': {'yangfile': '/root/yardstick/samples/yang.yaml',
- 'toscafile': '/root/yardstick/samples/tosca.yaml'},
- }
- p = parser.Parser(args, {})
- result = {}
- mock_subprocess.call().return_value = 0
- sample_output = '{"yangtotosca": "success"}'
-
- p.run(result)
- expected_result = jsonutils.loads(sample_output)
-
- def test_parser_teardown_successful(self, mock_subprocess):
-
- p = parser.Parser({}, {})
- mock_subprocess.call().return_value = 0
- p.teardown()
- self.assertEqual(p.teardown_done, True)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/storage/__init__.py b/tests/unit/benchmark/scenarios/storage/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/scenarios/storage/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json b/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json
deleted file mode 100644
index e9f642aba..000000000
--- a/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json
+++ /dev/null
@@ -1 +0,0 @@
-{"fioversion": "fio-2.1.3","jobs": [{"jobname": "yardstick-fio","groupid": 0,"error": 0,"read": {"io_bytes": 2166860,"bw": 36113,"iops": 9028,"runtime": 60001,"slat": {"min": 7,"max": 1807,"mean": 10.49,"stddev": 3.00},"clat": {"min": 1,"max": 16902,"mean": 97.84,"stddev": 78.16,"percentile": {"1.000000": 84,"5.000000": 86,"10.000000": 87,"20.000000": 88,"30.000000": 89,"40.000000": 90,"50.000000": 91,"60.000000": 93,"70.000000": 98,"80.000000": 103,"90.000000": 111,"95.000000": 127,"99.000000": 161,"99.500000": 177,"99.900000": 215,"99.950000": 266,"99.990000": 4128,"0.00": 0,"0.00": 0,"0.00": 0}},"lat": {"min": 86,"max": 16912,"mean": 108.70,"stddev": 78.29},"bw_min": 0,"bw_max": 38128,"bw_agg": 35816.54,"bw_mean": 35816.54,"bw_dev": 3579.16},"write": {"io_bytes": 0,"bw": 0,"iops": 0,"runtime": 0,"slat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"clat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00,"percentile": {"1.000000": 0,"5.000000": 0,"10.000000": 0,"20.000000": 0,"30.000000": 0,"40.000000": 0,"50.000000": 0,"60.000000": 0,"70.000000": 0,"80.000000": 0,"90.000000": 0,"95.000000": 0,"99.000000": 0,"99.500000": 0,"99.900000": 0,"99.950000": 0,"99.990000": 0,"0.00": 0,"0.00": 0,"0.00": 0}},"lat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"bw_min": 0,"bw_max": 0,"bw_agg": 0.00,"bw_mean": 0.00,"bw_dev": 0.00},"trim": {"io_bytes": 0,"bw": 0,"iops": 0,"runtime": 0,"slat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"clat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00,"percentile": {"1.000000": 0,"5.000000": 0,"10.000000": 0,"20.000000": 0,"30.000000": 0,"40.000000": 0,"50.000000": 0,"60.000000": 0,"70.000000": 0,"80.000000": 0,"90.000000": 0,"95.000000": 0,"99.000000": 0,"99.500000": 0,"99.900000": 0,"99.950000": 0,"99.990000": 0,"0.00": 0,"0.00": 0,"0.00": 0}},"lat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"bw_min": 0,"bw_max": 0,"bw_agg": 0.00,"bw_mean": 0.00,"bw_dev": 0.00},"usr_cpu": 4.86,"sys_cpu": 19.38,"ctx": 632024,"majf": 0,"minf": 30,"iodepth_level": {"1": 116.58,"2": 0.00,"4": 0.00,"8": 0.00,"16": 0.00,"32": 0.00,">=64": 0.00},"latency_us": {"2": 0.01,"4": 0.01,"10": 0.00,"20": 0.00,"50": 0.01,"100": 72.60,"250": 27.34,"500": 0.04,"750": 0.01,"1000": 0.01},"latency_ms": {"2": 0.01,"4": 0.01,"10": 0.01,"20": 0.01,"50": 0.00,"100": 0.00,"250": 0.00,"500": 0.00,"750": 0.00,"1000": 0.00,"2000": 0.00,">=2000": 0.00}}],"disk_util": [{"name": "vda","read_ios": 631084,"write_ios": 212,"read_merges": 0,"write_merges": 232,"read_ticks": 57300,"write_ticks": 324,"in_queue": 57400,"util": 81.55}]}
diff --git a/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json b/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json
deleted file mode 100644
index 4c7501818..000000000
--- a/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json
+++ /dev/null
@@ -1 +0,0 @@
-{"jobs": [{"trim": {"io_bytes": 0, "slat": {"max": 0, "mean": 0.0, "stddev": 0.0, "min": 0}, "bw_max": 0, "bw_mean": 0.0, "iops": 0, "bw": 0, "lat": {"max": 0, "mean": 0.0, "stddev": 0.0, "min": 0}, "bw_agg": 0.0, "clat": {"max": 0, "mean": 0.0, "percentile": {"70.000000": 0, "5.000000": 0, "50.000000": 0, "99.990000": 0, "30.000000": 0, "10.000000": 0, "99.000000": 0, "0.00": 0, "90.000000": 0, "95.000000": 0, "60.000000": 0, "40.000000": 0, "20.000000": 0, "99.900000": 0, "99.950000": 0, "1.000000": 0, "99.500000": 0, "80.000000": 0}, "stddev": 0.0, "min": 0}, "runtime": 0, "bw_min": 0, "bw_dev": 0.0}, "latency_us": {"10": 0.01, "750": 0.03, "20": 0.0, "50": 0.02, "2": 0.01, "4": 0.01, "100": 0.75, "250": 88.37, "500": 10.72, "1000": 0.01}, "latency_ms": {"10": 0.01, "750": 0.0, "20": 0.01, ">=2000": 0.0, "50": 0.01, "2000": 0.0, "2": 0.07, "4": 0.01, "100": 0.0, "250": 0.01, "500": 0.0, "1000": 0.01}, "read": {"io_bytes": 839056, "slat": {"max": 1990, "mean": 18.14, "stddev": 15.4, "min": 0}, "bw_max": 10328, "bw_mean": 8721.27, "iops": 20972, "bw": 83888, "lat": {"max": 776676, "mean": 236.8, "stddev": 4668.12, "min": 45}, "bw_agg": 8721.27, "clat": {"max": 776663, "mean": 217.79, "percentile": {"70.000000": 199, "5.000000": 119, "50.000000": 175, "99.990000": 15168, "30.000000": 155, "10.000000": 131, "99.000000": 342, "0.00": 0, "90.000000": 247, "95.000000": 278, "60.000000": 185, "40.000000": 165, "20.000000": 145, "99.900000": 820, "99.950000": 1272, "1.000000": 96, "99.500000": 370, "80.000000": 217}, "stddev": 4667.79, "min": 0}, "runtime": 10002, "bw_min": 4, "bw_dev": 2178.08}, "majf": 0, "ctx": 490590, "minf": 87, "jobname": "yardstick-fio", "write": {"io_bytes": 841992, "slat": {"max": 2594, "mean": 19.78, "stddev": 16.25, "min": 0}, "bw_max": 10472, "bw_mean": 8464.0, "iops": 21045, "bw": 84182, "lat": {"max": 776709, "mean": 233.55, "stddev": 3115.46, "min": 64}, "bw_agg": 8464.0, "clat": {"max": 776685, "mean": 212.87, "percentile": {"70.000000": 211, "5.000000": 135, "50.000000": 187, "99.990000": 3536, "30.000000": 169, "10.000000": 145, "99.000000": 358, "0.00": 0, "90.000000": 258, "95.000000": 290, "60.000000": 197, "40.000000": 177, "20.000000": 159, "99.900000": 756, "99.950000": 1288, "1.000000": 114, "99.500000": 382, "80.000000": 229}, "stddev": 3115.23, "min": 0}, "runtime": 10002, "bw_min": 4, "bw_dev": 2584.23}, "iodepth_level": {"16": 0.0, "32": 0.0, "1": 111.92, "2": 0.0, "4": 0.0, ">=64": 0.0, "8": 0.0}, "usr_cp": 2.87, "error": 0, "sys_cp": 12.37, "groupid": 0}], "fio version": "fio-2.1.3", "disk_util": [{"aggr_write_ticks": 42020, "read_merges": 0, "name": "dm-0", "write_ios": 233547, "aggr_write_ios": 235129, "aggr_read_ticks": 42576, "read_ios": 233492, "util": 97.22, "read_ticks": 42096, "aggr_write_merge": 0, "write_merges": 0, "aggr_in_queue": 84524, "aggr_read_ios": 235224, "aggr_util": 96.96, "aggr_read_merges": 0, "in_queue": 83732, "write_ticks": 41468}, {"read_merges": 0, "name": "vda", "write_ios": 235129, "read_ios": 235224, "util": 96.96, "read_ticks": 42576, "write_merges": 0, "in_queue": 84524, "write_ticks": 42020}]}
diff --git a/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json b/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json
deleted file mode 100644
index 7c760e8bc..000000000
--- a/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json
+++ /dev/null
@@ -1 +0,0 @@
-{"fioversion": "fio-2.1.3","jobs": [{"jobname": "yardstick-fio","groupid": 0,"error": 0,"read": {"io_bytes": 0,"bw": 0,"iops": 0,"runtime": 0,"slat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"clat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00,"percentile": {"1.000000": 0,"5.000000": 0,"10.000000": 0,"20.000000": 0,"30.000000": 0,"40.000000": 0,"50.000000": 0,"60.000000": 0,"70.000000": 0,"80.000000": 0,"90.000000": 0,"95.000000": 0,"99.000000": 0,"99.500000": 0,"99.900000": 0,"99.950000": 0,"99.990000": 0,"0.00": 0,"0.00": 0,"0.00": 0}},"lat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"bw_min": 0,"bw_max": 0,"bw_agg": 0.00,"bw_mean": 0.00,"bw_dev": 0.00},"write": {"io_bytes": 2106508,"bw": 35107,"iops": 8776,"runtime": 60001,"slat": {"min": 8,"max": 5166,"mean": 11.83,"stddev": 7.05},"clat": {"min": 1,"max": 23472,"mean": 99.54,"stddev": 44.23,"percentile": {"1.000000": 85,"5.000000": 87,"10.000000": 88,"20.000000": 89,"30.000000": 90,"40.000000": 91,"50.000000": 93,"60.000000": 99,"70.000000": 104,"80.000000": 107,"90.000000": 113,"95.000000": 127,"99.000000": 161,"99.500000": 179,"99.900000": 231,"99.950000": 286,"99.990000": 628,"0.00": 0,"0.00": 0,"0.00": 0}},"lat": {"min": 87,"max": 23486,"mean": 111.74,"stddev": 45.61},"bw_min": 0,"bw_max": 37288,"bw_agg": 34839.53,"bw_mean": 34839.53,"bw_dev": 3387.37},"trim": {"io_bytes": 0,"bw": 0,"iops": 0,"runtime": 0,"slat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"clat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00,"percentile": {"1.000000": 0,"5.000000": 0,"10.000000": 0,"20.000000": 0,"30.000000": 0,"40.000000": 0,"50.000000": 0,"60.000000": 0,"70.000000": 0,"80.000000": 0,"90.000000": 0,"95.000000": 0,"99.000000": 0,"99.500000": 0,"99.900000": 0,"99.950000": 0,"99.990000": 0,"0.00": 0,"0.00": 0,"0.00": 0}},"lat": {"min": 0,"max": 0,"mean": 0.00,"stddev": 0.00},"bw_min": 0,"bw_max": 0,"bw_agg": 0.00,"bw_mean": 0.00,"bw_dev": 0.00},"usr_cpu": 5.25,"sys_cpu": 19.72,"ctx": 616160,"majf": 0,"minf": 27,"iodepth_level": {"1": 116.90,"2": 0.00,"4": 0.00,"8": 0.00,"16": 0.00,"32": 0.00,">=64": 0.00},"latency_us": {"2": 0.01,"4": 0.01,"10": 0.00,"20": 0.00,"50": 0.01,"100": 60.74,"250": 39.18,"500": 0.06,"750": 0.01,"1000": 0.01},"latency_ms": {"2": 0.01,"4": 0.01,"10": 0.01,"20": 0.00,"50": 0.01,"100": 0.00,"250": 0.00,"500": 0.00,"750": 0.00,"1000": 0.00,"2000": 0.00,">=2000": 0.00}}],"disk_util": [{"name": "vda","read_ios": 0,"write_ios": 615418,"read_merges": 0,"write_merges": 231,"read_ticks": 0,"write_ticks": 58284,"in_queue": 58024,"util": 82.45}]}
diff --git a/tests/unit/benchmark/scenarios/storage/test_bonnie.py b/tests/unit/benchmark/scenarios/storage/test_bonnie.py
deleted file mode 100644
index b3524e9a7..000000000
--- a/tests/unit/benchmark/scenarios/storage/test_bonnie.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/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.storage.bonnie.Bonnie
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-
-from yardstick.common import utils
-from yardstick.benchmark.scenarios.storage import bonnie
-
-
-class BonnieTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'root',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- @mock.patch('yardstick.benchmark.scenarios.storage.bonnie.ssh')
- def test_bonnie_successful_setup(self, mock_ssh):
-
- options = {
- "file_size": "1024",
- "ram_size": "512",
- "test_dir": "/tmp",
- "concurrency": "1",
- "test_user": "root"
- }
- args = {"options": options}
- b = bonnie.Bonnie(args, self.ctx)
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-
- b.setup()
- self.assertIsNotNone(b.client)
- self.assertTrue(b.setup_done, True)
-
- @mock.patch('yardstick.benchmark.scenarios.storage.bonnie.ssh')
- def test_bonnie_unsuccessful_script_error(self, mock_ssh):
- options = {
- "file_size": "1024",
- "ram_size": "512",
- "test_dir": "/tmp",
- "concurrency": "1",
- "test_user": "root"
- }
- args = {"options": options}
- b = bonnie.Bonnie(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, b.run, self.result)
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/storage/test_fio.py b/tests/unit/benchmark/scenarios/storage/test_fio.py
deleted file mode 100644
index 17594b9f4..000000000
--- a/tests/unit/benchmark/scenarios/storage/test_fio.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.benchmark.scenarios.storage.fio.Fio
-
-from __future__ import absolute_import
-
-import os
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.storage import fio
-
-
-@mock.patch('yardstick.benchmark.scenarios.storage.fio.ssh')
-class FioTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': 'mykey.key'
- }
- }
- self.sample_output = {
- 'read': 'fio_read_sample_output.json',
- 'write': 'fio_write_sample_output.json',
- 'rw': 'fio_rw_sample_output.json'
- }
-
- def test_fio_successful_setup(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'rw',
- 'ramp_time': 10
- }
- args = {'options': options}
- p = fio.Fio(args, self.ctx)
- p.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_fio_job_file_successful_setup(self, mock_ssh):
-
- options = {
- 'job_file': 'job_file.ini',
- 'directory': '/FIO_Test'
- }
- args = {'options': options}
- p = fio.Fio(args, self.ctx)
- p.setup()
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- self.assertIsNotNone(p.client)
- self.assertEqual(p.setup_done, True)
-
- def test_fio_successful_no_sla(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'rw',
- 'ramp_time': 10
- }
- args = {'options': options}
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
-
- expected_result = '{"read_bw": 83888, "read_iops": 20972,' \
- '"read_lat": 236.8, "write_bw": 84182, "write_iops": 21045,'\
- '"write_lat": 233.55}'
- expected_result = jsonutils.loads(expected_result)
- self.assertEqual(result, expected_result)
-
- def test_fio_successful_read_no_sla(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': "read",
- 'ramp_time': 10
- }
- args = {'options': options}
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.sample_output['read'])
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
-
- expected_result = '{"read_bw": 36113, "read_iops": 9028,' \
- '"read_lat": 108.7}'
- expected_result = jsonutils.loads(expected_result)
- self.assertEqual(result, expected_result)
-
- def test_fio_successful_write_no_sla(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'write',
- 'ramp_time': 10
- }
- args = {'options': options}
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.sample_output['write'])
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
-
- expected_result = '{"write_bw": 35107, "write_iops": 8776,'\
- '"write_lat": 111.74}'
- expected_result = jsonutils.loads(expected_result)
- self.assertEqual(result, expected_result)
-
- def test_fio_successful_lat_sla(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'rw',
- 'ramp_time': 10
- }
- args = {
- 'options': options,
- 'sla': {'write_lat': 300.1}
- }
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
-
- expected_result = '{"read_bw": 83888, "read_iops": 20972,' \
- '"read_lat": 236.8, "write_bw": 84182, "write_iops": 21045,'\
- '"write_lat": 233.55}'
- expected_result = jsonutils.loads(expected_result)
- self.assertEqual(result, expected_result)
-
- def test_fio_unsuccessful_lat_sla(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'rw',
- 'ramp_time': 10
- }
- args = {
- 'options': options,
- 'sla': {'write_lat': 200.1}
- }
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_fio_successful_bw_iops_sla(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'rw',
- 'ramp_time': 10
- }
- args = {
- 'options': options,
- 'sla': {'read_iops': 20000}
- }
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
-
- p.run(result)
-
- expected_result = '{"read_bw": 83888, "read_iops": 20972,' \
- '"read_lat": 236.8, "write_bw": 84182, "write_iops": 21045,'\
- '"write_lat": 233.55}'
- expected_result = jsonutils.loads(expected_result)
- self.assertEqual(result, expected_result)
-
- def test_fio_unsuccessful_bw_iops_sla(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'rw',
- 'ramp_time': 10
- }
- args = {
- 'options': options,
- 'sla': {'read_iops': 30000}
- }
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- sample_output = self._read_sample_output(self.sample_output['rw'])
- mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- self.assertRaises(AssertionError, p.run, result)
-
- def test_fio_unsuccessful_script_error(self, mock_ssh):
-
- options = {
- 'filename': '/home/ubuntu/data.raw',
- 'bs': '4k',
- 'rw': 'rw',
- 'ramp_time': 10
- }
- args = {'options': options}
- p = fio.Fio(args, self.ctx)
- result = {}
-
- p.client = mock_ssh.SSH.from_node()
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, p.run, result)
-
- def _read_sample_output(self, file_name):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- output = os.path.join(curr_path, file_name)
- with open(output) as f:
- sample_output = f.read()
- return sample_output
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py b/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py
deleted file mode 100644
index 095674f72..000000000
--- a/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py
+++ /dev/null
@@ -1,108 +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.benchmark.scenarios.storage.storagecapacity.StorageCapacity
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.storage import storagecapacity
-
-DISK_SIZE_SAMPLE_OUTPUT = \
- '{"Numberf of devides": "2", "Total disk size in bytes": "1024000000"}'
-BLOCK_SIZE_SAMPLE_OUTPUT = '{"/dev/sda": 1024, "/dev/sdb": 4096}'
-DISK_UTIL_RAW_OUTPUT = "vda 10.00\nvda 0.00"
-DISK_UTIL_SAMPLE_OUTPUT = \
- '{"vda": {"avg_util": 5.0, "max_util": 10.0, "min_util": 0.0}}'
-
-
-@mock.patch('yardstick.benchmark.scenarios.storage.storagecapacity.ssh')
-class StorageCapacityTestCase(unittest.TestCase):
-
- def setUp(self):
- self.scn = {
- "options": {
- 'test_type': 'disk_size'
- }
- }
- self.ctx = {
- "host": {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'password': "root"
- }
- }
- self.result = {}
-
- def test_capacity_successful_setup(self, mock_ssh):
- c = storagecapacity.StorageCapacity(self.scn, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
- c.setup()
- self.assertIsNotNone(c.client)
- self.assertTrue(c.setup_done)
-
- def test_capacity_disk_size_successful(self, mock_ssh):
- c = storagecapacity.StorageCapacity(self.scn, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, DISK_SIZE_SAMPLE_OUTPUT, '')
- c.run(self.result)
- expected_result = jsonutils.loads(
- DISK_SIZE_SAMPLE_OUTPUT)
- self.assertEqual(self.result, expected_result)
-
- def test_capacity_block_size_successful(self, mock_ssh):
- args = {
- "options": {
- 'test_type': 'block_size'
- }
- }
- c = storagecapacity.StorageCapacity(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, BLOCK_SIZE_SAMPLE_OUTPUT, '')
- c.run(self.result)
- expected_result = jsonutils.loads(
- BLOCK_SIZE_SAMPLE_OUTPUT)
- self.assertEqual(self.result, expected_result)
-
- def test_capacity_disk_utilization_successful(self, mock_ssh):
- args = {
- "options": {
- 'test_type': 'disk_utilization',
- 'interval': 1,
- 'count': 2
- }
- }
- c = storagecapacity.StorageCapacity(args, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (0, DISK_UTIL_RAW_OUTPUT, '')
- c.run(self.result)
- expected_result = jsonutils.loads(
- DISK_UTIL_SAMPLE_OUTPUT)
- self.assertEqual(self.result, expected_result)
-
- def test_capacity_unsuccessful_script_error(self, mock_ssh):
- c = storagecapacity.StorageCapacity(self.scn, self.ctx)
-
- mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
- self.assertRaises(RuntimeError, c.run, self.result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/storage/test_storperf.py b/tests/unit/benchmark/scenarios/storage/test_storperf.py
deleted file mode 100644
index 7b16bb37d..000000000
--- a/tests/unit/benchmark/scenarios/storage/test_storperf.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2016 Huawei Technologies Co.,Ltd.
-#
-# 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.storage.storperf.StorPerf
-
-from __future__ import absolute_import
-
-import unittest
-
-import mock
-from oslo_serialization import jsonutils
-
-from yardstick.benchmark.scenarios.storage import storperf
-
-
-def mocked_requests_config_post(*args, **kwargs):
- class MockResponseConfigPost:
-
- def __init__(self, json_data, status_code):
- self.content = json_data
- self.status_code = status_code
-
- return MockResponseConfigPost(
- '{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622",'
- '"stack_created": "false"}',
- 200)
-
-
-def mocked_requests_config_get(*args, **kwargs):
- class MockResponseConfigGet:
-
- def __init__(self, json_data, status_code):
- self.content = json_data
- self.status_code = status_code
-
- return MockResponseConfigGet(
- '{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622",'
- '"stack_created": "true"}',
- 200)
-
-
-def mocked_requests_job_get(*args, **kwargs):
- class MockResponseJobGet:
-
- def __init__(self, json_data, status_code):
- self.content = json_data
- self.status_code = status_code
-
- return MockResponseJobGet(
- '{"Status": "Completed",\
- "_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}',
- 200)
-
-
-def mocked_requests_job_post(*args, **kwargs):
- class MockResponseJobPost:
-
- def __init__(self, json_data, status_code):
- self.content = json_data
- self.status_code = status_code
-
- return MockResponseJobPost('{"job_id": \
- "d46bfb8c-36f4-4a40-813b-c4b4a437f728"}', 200)
-
-
-def mocked_requests_job_delete(*args, **kwargs):
- class MockResponseJobDelete:
-
- def __init__(self, json_data, status_code):
- self.content = json_data
- self.status_code = status_code
-
- return MockResponseJobDelete('{}', 200)
-
-
-def mocked_requests_delete(*args, **kwargs):
- class MockResponseDelete:
-
- def __init__(self, json_data, status_code):
- self.json_data = json_data
- self.status_code = status_code
-
- return MockResponseDelete('{}', 200)
-
-
-def mocked_requests_delete_failed(*args, **kwargs):
- class MockResponseDeleteFailed:
-
- def __init__(self, json_data, status_code):
- self.json_data = json_data
- self.status_code = status_code
-
- if args[0] == "http://172.16.0.137:5000/api/v1.0/configurations":
- return MockResponseDeleteFailed('{"message": "Teardown failed"}', 400)
-
- return MockResponseDeleteFailed('{}', 404)
-
-
-class StorPerfTestCase(unittest.TestCase):
-
- def setUp(self):
- self.ctx = {
- 'host': {
- 'ip': '172.16.0.137',
- 'user': 'cirros',
- 'key_filename': "mykey.key"
- }
- }
-
- self.result = {}
-
- @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post',
- side_effect=mocked_requests_config_post)
- @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get',
- side_effect=mocked_requests_config_get)
- def test_successful_setup(self, mock_post, mock_get):
- options = {
- "agent_count": 8,
- "public_network": 'ext-net',
- "volume_size": 10,
- "block_sizes": 4096,
- "queue_depths": 4,
- "workload": "rs",
- "StorPerf_ip": "192.168.23.2",
- "query_interval": 0,
- "timeout": 60
- }
-
- args = {
- "options": options
- }
-
- s = storperf.StorPerf(args, self.ctx)
-
- s.setup()
-
- self.assertTrue(s.setup_done)
-
- @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post',
- side_effect=mocked_requests_job_post)
- @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get',
- side_effect=mocked_requests_job_get)
- @mock.patch(
- 'yardstick.benchmark.scenarios.storage.storperf.requests.delete',
- side_effect=mocked_requests_job_delete)
- def test_successful_run(self, mock_post, mock_get, mock_delete):
- options = {
- "agent_count": 8,
- "public_network": 'ext-net',
- "volume_size": 10,
- "block_sizes": 4096,
- "queue_depths": 4,
- "workload": "rs",
- "StorPerf_ip": "192.168.23.2",
- "query_interval": 0,
- "timeout": 60
- }
-
- args = {
- "options": options
- }
-
- s = storperf.StorPerf(args, self.ctx)
- s.setup_done = True
-
- sample_output = '{"Status": "Completed",\
- "_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}'
-
- expected_result = jsonutils.loads(sample_output)
-
- s.run(self.result)
-
- self.assertEqual(self.result, expected_result)
-
- @mock.patch(
- 'yardstick.benchmark.scenarios.storage.storperf.requests.delete',
- side_effect=mocked_requests_delete)
- def test_successful_teardown(self, mock_delete):
- options = {
- "agent_count": 8,
- "public_network": 'ext-net',
- "volume_size": 10,
- "block_sizes": 4096,
- "queue_depths": 4,
- "workload": "rs",
- "StorPerf_ip": "192.168.23.2",
- "query_interval": 10,
- "timeout": 60
- }
-
- args = {
- "options": options
- }
-
- s = storperf.StorPerf(args, self.ctx)
-
- s.teardown()
-
- self.assertFalse(s.setup_done)
-
- @mock.patch(
- 'yardstick.benchmark.scenarios.storage.storperf.requests.delete',
- side_effect=mocked_requests_delete_failed)
- def test_failed_teardown(self, mock_delete):
- options = {
- "agent_count": 8,
- "public_network": 'ext-net',
- "volume_size": 10,
- "block_sizes": 4096,
- "queue_depths": 4,
- "workload": "rs",
- "StorPerf_ip": "192.168.23.2",
- "query_interval": 10,
- "timeout": 60
- }
-
- args = {
- "options": options
- }
-
- s = storperf.StorPerf(args, self.ctx)
-
- self.assertRaises(AssertionError, s.teardown(), self.result)
-
-
-def main():
- unittest.main()
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/scenarios/test_base.py b/tests/unit/benchmark/scenarios/test_base.py
deleted file mode 100644
index 78e342978..000000000
--- a/tests/unit/benchmark/scenarios/test_base.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2017: Intel Ltd.
-# 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.
-
-import unittest
-
-from yardstick.benchmark.scenarios import base
-
-
-class ScenarioTestCase(unittest.TestCase):
-
- def test_get_scenario_type(self):
- scenario_type = 'dummy scenario'
-
- class DummyScenario(base.Scenario):
- __scenario_type__ = scenario_type
-
- self.assertEqual(scenario_type, DummyScenario.get_scenario_type())
-
- def test_get_scenario_type_not_defined(self):
- class DummyScenario(base.Scenario):
- pass
-
- self.assertEqual(str(None), DummyScenario.get_scenario_type())
-
- def test_get_description(self):
- docstring = """First line
- Second line
- Third line
- """
-
- class DummyScenario(base.Scenario):
- __doc__ = docstring
-
- self.assertEqual(docstring.splitlines()[0],
- DummyScenario.get_description())
-
- def test_get_description_empty(self):
- class DummyScenario(base.Scenario):
- pass
-
- self.assertEqual(str(None), DummyScenario.get_description())
diff --git a/tests/unit/cmd/__init__.py b/tests/unit/cmd/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/cmd/__init__.py
+++ /dev/null
diff --git a/tests/unit/cmd/commands/__init__.py b/tests/unit/cmd/commands/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/cmd/commands/__init__.py
+++ /dev/null
diff --git a/tests/unit/cmd/commands/test_env.py b/tests/unit/cmd/commands/test_env.py
deleted file mode 100644
index 73cd5af47..000000000
--- a/tests/unit/cmd/commands/test_env.py
+++ /dev/null
@@ -1,69 +0,0 @@
-##############################################################################
-# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-from __future__ import absolute_import
-import unittest
-import mock
-import uuid
-
-from yardstick.cmd.commands.env import EnvCommand
-
-
-class EnvCommandTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._start_async_task')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._check_status')
- def test_do_influxdb(self, check_status_mock, start_async_task_mock):
- env = EnvCommand()
- env.do_influxdb({})
- self.assertTrue(start_async_task_mock.called)
- self.assertTrue(check_status_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._start_async_task')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._check_status')
- def test_do_grafana(self, check_status_mock, start_async_task_mock):
- env = EnvCommand()
- env.do_grafana({})
- self.assertTrue(start_async_task_mock.called)
- self.assertTrue(check_status_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._start_async_task')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._check_status')
- def test_do_prepare(self, check_status_mock, start_async_task_mock):
- env = EnvCommand()
- env.do_prepare({})
- self.assertTrue(start_async_task_mock.called)
- self.assertTrue(check_status_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.HttpClient.post')
- def test_start_async_task(self, post_mock):
- data = {'action': 'create_grafana'}
- EnvCommand()._start_async_task(data)
- self.assertTrue(post_mock.called)
-
- @mock.patch('yardstick.cmd.commands.env.HttpClient.get')
- @mock.patch('yardstick.cmd.commands.env.EnvCommand._print_status')
- def test_check_status(self, print_mock, get_mock):
- task_id = str(uuid.uuid4())
- get_mock.return_value = {'status': 2, 'result': 'error'}
- status = EnvCommand()._check_status(task_id, 'hello world')
- self.assertEqual(status, 2)
-
- def test_print_status(self):
- try:
- EnvCommand()._print_status('hello', 'word')
- except Exception as e:
- self.assertIsInstance(e, IndexError)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/cmd/commands/test_testcase.py b/tests/unit/cmd/commands/test_testcase.py
deleted file mode 100644
index 7ef157c19..000000000
--- a/tests/unit/cmd/commands/test_testcase.py
+++ /dev/null
@@ -1,29 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import unittest
-from mock import patch
-
-from yardstick.cmd.commands.testcase import TestcaseCommands
-
-
-class TestcaseCommandsUT(unittest.TestCase):
- @patch('yardstick.cmd.commands.testcase.TestcaseCommands._format_print')
- @patch('yardstick.cmd.commands.client')
- def test_do_list(self, mock_client, mock_print):
- mock_client.get.return_value = {'result': []}
- TestcaseCommands().do_list({})
- self.assertTrue(mock_print.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/cmd/test_NSBperf.py b/tests/unit/cmd/test_NSBperf.py
deleted file mode 100644
index e1b4da7fc..000000000
--- a/tests/unit/cmd/test_NSBperf.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-import unittest
-import mock
-import subprocess
-import os
-
-from yardstick.cmd.NSBperf import YardstickNSCli
-from yardstick.cmd import NSBperf
-
-
-@mock.patch('six.moves.input', return_value='0')
-class TestHandler(unittest.TestCase):
- def test_handler(self, test):
- subprocess.call = mock.Mock(return_value=0)
- self.assertRaises(SystemExit, NSBperf.sigint_handler)
-
-
-class TestYardstickNSCli(unittest.TestCase):
- def test___init__(self):
- yardstick_ns_cli = YardstickNSCli()
- self.assertIsNotNone(yardstick_ns_cli)
-
- def test_generate_final_report(self):
- yardstick_ns_cli = YardstickNSCli()
- test_case = "tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml"
- if os.path.isfile("/tmp/yardstick.out"):
- os.remove('/tmp/yardstick.out')
- self.assertIsNone(yardstick_ns_cli.generate_final_report(test_case))
-
- def test_generate_kpi_results(self):
- yardstick_ns_cli = YardstickNSCli()
- tkey = "cpu"
- tgen = {"cpu": {"ipc": 0}}
- self.assertIsNone(yardstick_ns_cli.generate_kpi_results(tkey, tgen))
-
- def test_generate_nfvi_results(self):
- yardstick_ns_cli = YardstickNSCli()
- nfvi = {"collect_stats": {"cpu": {"ipc": 0, "Hz": 2.6}}}
- self.assertIsNone(yardstick_ns_cli.generate_nfvi_results(nfvi))
-
- def test_handle_list_options(self):
- yardstick_ns_cli = YardstickNSCli()
- CLI_PATH = os.path.dirname(os.path.realpath(__file__))
- repo_dir = CLI_PATH + "/../../"
- test_path = os.path.join(repo_dir, "../samples/vnf_samples/nsut/")
- args = {"list_vnfs": True, "list": False}
- self.assertRaises(SystemExit, yardstick_ns_cli.handle_list_options,
- args, test_path)
- args = {"list_vnfs": False, "list": True}
- self.assertRaises(SystemExit,
- yardstick_ns_cli.handle_list_options,
- args, test_path)
-
- def test_main(self):
- yardstick_ns_cli = YardstickNSCli()
- yardstick_ns_cli.parse_arguments = mock.Mock(return_value=0)
- yardstick_ns_cli.handle_list_options = mock.Mock(return_value=0)
- yardstick_ns_cli.terminate_if_less_options = mock.Mock(return_value=0)
- yardstick_ns_cli.run_test = mock.Mock(return_value=0)
- self.assertIsNone(yardstick_ns_cli.main())
-
- def test_parse_arguments(self):
- yardstick_ns_cli = YardstickNSCli()
- self.assertRaises(SystemExit, yardstick_ns_cli.parse_arguments)
-
- def test_run_test(self):
- cur_dir = os.getcwd()
- CLI_PATH = os.path.dirname(os.path.realpath(__file__))
- YARDSTICK_REPOS_DIR = os.path.join(CLI_PATH + "/../../")
- test_path = os.path.join(YARDSTICK_REPOS_DIR,
- "../samples/vnf_samples/nsut/")
- yardstick_ns_cli = YardstickNSCli()
- subprocess.check_output = mock.Mock(return_value=0)
- args = {"vnf": "vpe",
- "test": "tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml"}
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
- args = {"vnf": "vpe1"}
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
- args = {"vnf": "vpe",
- "test": "tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml."}
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
- args = []
- self.assertEqual(None, yardstick_ns_cli.run_test(args, test_path))
- os.chdir(cur_dir)
-
- def test_terminate_if_less_options(self):
- yardstick_ns_cli = YardstickNSCli()
- args = {"vnf": False}
- self.assertRaises(SystemExit,
- yardstick_ns_cli.terminate_if_less_options, args)
-
- def test_validate_input(self):
- yardstick_ns_cli = YardstickNSCli()
- self.assertEqual(1, yardstick_ns_cli.validate_input("", 4))
- NSBperf.input = lambda _: 'yes'
- self.assertEqual(1, yardstick_ns_cli.validate_input(5, 4))
- subprocess.call = mock.Mock(return_value=0)
- self.assertEqual(0, yardstick_ns_cli.validate_input(2, 4))
- subprocess.call = mock.Mock(return_value=0)
diff --git a/tests/unit/common/__init__.py b/tests/unit/common/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/common/__init__.py
+++ /dev/null
diff --git a/tests/unit/common/config_sample.yaml b/tests/unit/common/config_sample.yaml
deleted file mode 100644
index 09218cc79..000000000
--- a/tests/unit/common/config_sample.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-releng:
- dir: /home/opnfv/repos/releng
diff --git a/tests/unit/common/test_ansible_common.py b/tests/unit/common/test_ansible_common.py
deleted file mode 100644
index 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 1c6dfec27..000000000
--- a/tests/unit/common/test_process.py
+++ /dev/null
@@ -1,150 +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 mock
-import unittest
-
-from oslo_utils import encodeutils
-
-from yardstick.common import exceptions
-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()
-
-
-class ExecuteTestCase(unittest.TestCase):
-
- RET_CODE_OK = 0
- RET_CODE_WRONG = 1
-
- def setUp(self):
- self._mock_create_process = mock.patch.object(process,
- 'create_process')
- self.mock_create_process = self._mock_create_process.start()
- self.obj = mock.Mock()
- self.cmd = mock.Mock()
- self.obj.communicate = mock.Mock()
- self.stdout = 'std out'
- self.stderr = 'std err'
- self.obj.communicate.return_value = (self.stdout, self.stderr)
- self.mock_create_process.return_value = (self.obj, self.cmd)
- self.input_cmd = 'input cmd'
- self.additional_env = mock.Mock()
-
- def test_execute_with_input(self):
- process_input = 'process input'
- self.obj.returncode = self.RET_CODE_OK
- out = process.execute(self.input_cmd, process_input=process_input,
- additional_env=self.additional_env)
- self.obj.communicate.assert_called_once_with(
- encodeutils.to_utf8(process_input))
- self.mock_create_process.assert_called_once_with(
- self.input_cmd, run_as_root=False,
- additional_env=self.additional_env)
- self.assertEqual(self.stdout, out)
-
- def test_execute_no_input(self):
- self.obj.returncode = self.RET_CODE_OK
- out = process.execute(self.input_cmd,
- additional_env=self.additional_env)
- self.obj.communicate.assert_called_once_with(None)
- self.mock_create_process.assert_called_once_with(
- self.input_cmd, run_as_root=False,
- additional_env=self.additional_env)
- self.assertEqual(self.stdout, out)
-
- def test_execute_exception(self):
- self.obj.returncode = self.RET_CODE_WRONG
- self.assertRaises(exceptions.ProcessExecutionError, process.execute,
- self.input_cmd, additional_env=self.additional_env)
- self.obj.communicate.assert_called_once_with(None)
-
- def test_execute_with_extra_code(self):
- self.obj.returncode = self.RET_CODE_WRONG
- out = process.execute(self.input_cmd,
- additional_env=self.additional_env,
- extra_ok_codes=[self.RET_CODE_WRONG])
- self.obj.communicate.assert_called_once_with(None)
- self.mock_create_process.assert_called_once_with(
- self.input_cmd, run_as_root=False,
- additional_env=self.additional_env)
- self.assertEqual(self.stdout, out)
-
- def test_execute_exception_no_check(self):
- self.obj.returncode = self.RET_CODE_WRONG
- out = process.execute(self.input_cmd,
- additional_env=self.additional_env,
- check_exit_code=False)
- self.obj.communicate.assert_called_once_with(None)
- self.mock_create_process.assert_called_once_with(
- self.input_cmd, run_as_root=False,
- additional_env=self.additional_env)
- self.assertEqual(self.stdout, out)
-
-
-class CreateProcessTestCase(unittest.TestCase):
-
- @mock.patch.object(process, 'subprocess_popen')
- def test_process_string_command(self, mock_subprocess_popen):
- cmd = 'command'
- obj = mock.Mock()
- mock_subprocess_popen.return_value = obj
- out1, out2 = process.create_process(cmd)
- self.assertEqual(obj, out1)
- self.assertEqual([cmd], out2)
-
- @mock.patch.object(process, 'subprocess_popen')
- def test_process_list_command(self, mock_subprocess_popen):
- cmd = ['command']
- obj = mock.Mock()
- mock_subprocess_popen.return_value = obj
- out1, out2 = process.create_process(cmd)
- self.assertEqual(obj, out1)
- self.assertEqual(cmd, out2)
-
- @mock.patch.object(process, 'subprocess_popen')
- def test_process_with_env(self, mock_subprocess_popen):
- cmd = ['command']
- obj = mock.Mock()
- additional_env = {'var1': 'value1'}
- mock_subprocess_popen.return_value = obj
- out1, out2 = process.create_process(cmd, additional_env=additional_env)
- self.assertEqual(obj, out1)
- self.assertEqual(['env', 'var1=value1'] + cmd, out2)
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 452b93a56..000000000
--- a/tests/unit/common/test_utils.py
+++ /dev/null
@@ -1,1085 +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
-
-from copy import deepcopy
-import errno
-import ipaddress
-from itertools import product, chain
-import mock
-import os
-import six
-from six.moves import configparser
-import unittest
-
-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: # pylint: disable=broad-except
- # NOTE(ralonsoh): to narrow the scope of this exception.
- 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, *args):
- # NOTE(ralonsoh): check the calls to mocked functions.
- 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, *args):
- # NOTE(ralonsoh): check the calls to mocked functions.
- 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, *args):
- # NOTE(ralonsoh): check the calls to mocked functions.
- 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)
-
-
-class SafeDecodeUtf8TestCase(unittest.TestCase):
-
- @unittest.skipIf(six.PY2,
- 'This test should only be launched with Python 3.x')
- def test_safe_decode_utf8(self):
- _bytes = b'this is a byte array'
- out = utils.safe_decode_utf8(_bytes)
- self.assertIs(type(out), str)
- self.assertEqual('this is a byte array', out)
-
-
-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/__init__.py b/tests/unit/network_services/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/collector/__init__.py b/tests/unit/network_services/collector/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/collector/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/collector/test_publisher.py b/tests/unit/network_services/collector/test_publisher.py
deleted file mode 100644
index d1e56e114..000000000
--- a/tests/unit/network_services/collector/test_publisher.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Unittest for yardstick.network_services.collector.publisher
-
-from __future__ import absolute_import
-import unittest
-
-from yardstick.network_services.collector import publisher
-
-
-class PublisherTestCase(unittest.TestCase):
-
- def setUp(self):
- self.test_publisher = publisher.Publisher()
-
- def test_successful_init(self):
- pass
-
- def test_unsuccessful_init(self):
- pass
-
- def test_start(self):
- self.assertIsNone(self.test_publisher.start())
-
- def test_stop(self):
- self.assertIsNone(self.test_publisher.stop())
diff --git a/tests/unit/network_services/collector/test_subscriber.py b/tests/unit/network_services/collector/test_subscriber.py
deleted file mode 100644
index f324f627d..000000000
--- a/tests/unit/network_services/collector/test_subscriber.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Unittest for yardstick.network_services.collector.subscriber
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.network_services.collector import subscriber
-
-
-class MockVnfAprrox(object):
-
- def __init__(self):
- self.result = {}
- self.name = "vnf__1"
-
- def collect_kpi(self):
- self.result = {
- 'pkt_in_up_stream': 100,
- 'pkt_drop_up_stream': 5,
- 'pkt_in_down_stream': 50,
- 'pkt_drop_down_stream': 40
- }
- return self.result
-
-
-class CollectorTestCase(unittest.TestCase):
-
- NODES = {
- 'node1': {},
- 'node2': {
- 'ip': '1.2.3.4',
- 'collectd': {
- 'plugins': {'abc': 12, 'def': 34},
- 'interval': 987,
- },
- },
- }
- TRAFFIC_PROFILE = {
- 'key1': 'value1',
- }
-
- def setUp(self):
- vnf = MockVnfAprrox()
- self.ssh_patch = mock.patch('yardstick.network_services.nfvi.resource.ssh', autospec=True)
- mock_ssh = self.ssh_patch.start()
- mock_instance = mock.Mock()
- mock_instance.execute.return_value = 0, '', ''
- mock_ssh.AutoConnectSSH.from_node.return_value = mock_instance
- self.collector = subscriber.Collector([vnf], self.NODES, self.TRAFFIC_PROFILE, 1800)
-
- def tearDown(self):
- self.ssh_patch.stop()
-
- def test___init__(self, *_):
- vnf = MockVnfAprrox()
- collector = subscriber.Collector([vnf], {}, {})
- self.assertEqual(len(collector.vnfs), 1)
- self.assertEqual(collector.traffic_profile, {})
-
- def test___init___with_data(self, *_):
- self.assertEqual(len(self.collector.vnfs), 1)
- self.assertDictEqual(self.collector.traffic_profile, self.TRAFFIC_PROFILE)
- self.assertEqual(len(self.collector.resource_profiles), 1)
-
- def test___init___negative(self, *_):
- pass
-
- def test_start(self, *_):
- self.assertIsNone(self.collector.start())
-
- def test_stop(self, *_):
- self.assertIsNone(self.collector.stop())
-
- def test_get_kpi(self, *_):
- result = self.collector.get_kpi()
-
- self.assertEqual(result["vnf__1"]["pkt_in_up_stream"], 100)
- self.assertEqual(result["vnf__1"]["pkt_drop_up_stream"], 5)
- self.assertEqual(result["vnf__1"]["pkt_in_down_stream"], 50)
- self.assertEqual(result["vnf__1"]["pkt_drop_down_stream"], 40)
- self.assertIn('node2', result)
diff --git a/tests/unit/network_services/helpers/__init__.py b/tests/unit/network_services/helpers/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/helpers/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/helpers/acl_vnf_topology_ixia.yaml b/tests/unit/network_services/helpers/acl_vnf_topology_ixia.yaml
deleted file mode 100644
index f60834fbd..000000000
--- a/tests/unit/network_services/helpers/acl_vnf_topology_ixia.yaml
+++ /dev/null
@@ -1,50 +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.
-
-nsd:nsd-catalog:
- nsd:
- - id: VACL
- name: VACL
- short-name: VACL
- description: scenario with VACL,L3fwd and VNF
- constituent-vnfd:
- - member-vnf-index: '1'
- vnfd-id-ref: tg__1
- VNF model: ../../vnf_descriptors/ixia_rfc2544_tpl.yaml
- - member-vnf-index: '2'
- vnfd-id-ref: vnf__1
- VNF model: ../../vnf_descriptors/acl_vnf.yaml
-
- vld:
- - id: uplink_1
- name: tg__1 to vnf__1 link 1
- type: ELAN
- vnfd-connection-point-ref:
- - member-vnf-index-ref: '1'
- vnfd-connection-point-ref: xe0
- vnfd-id-ref: tg__1 #TREX
- - member-vnf-index-ref: '2'
- vnfd-connection-point-ref: xe0
- vnfd-id-ref: vnf__1 #VNF
-
- - id: downlink_1
- name: vnf__1 to tg__1 link 2
- type: ELAN
- vnfd-connection-point-ref:
- - member-vnf-index-ref: '2'
- vnfd-connection-point-ref: xe1
- vnfd-id-ref: vnf__1 #L3fwd
- - member-vnf-index-ref: '1'
- vnfd-connection-point-ref: xe1
- vnfd-id-ref: tg__1 #VACL VNF
diff --git a/tests/unit/network_services/helpers/test_cpu.py b/tests/unit/network_services/helpers/test_cpu.py
deleted file mode 100644
index 7ea6bd0fc..000000000
--- a/tests/unit/network_services/helpers/test_cpu.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-from __future__ import division
-import unittest
-import mock
-import subprocess
-
-from yardstick.network_services.helpers.cpu import \
- CpuSysCores
-
-
-class TestCpuSysCores(unittest.TestCase):
-
- def test___init__(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(1, "", ""))
- cpu_topo = CpuSysCores(ssh_mock)
- self.assertIsNotNone(cpu_topo.connection)
-
- def test__get_core_details(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(1, "", ""))
- cpu_topo = CpuSysCores(ssh_mock)
- subprocess.check_output = mock.Mock(return_value=0)
- lines = ["cpu:1", "topo:2", ""]
- self.assertEqual([{'topo': '2', 'cpu': '1'}],
- cpu_topo._get_core_details(lines))
-
- def test_get_core_socket(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(1, "", ""))
- cpu_topo = CpuSysCores(ssh_mock)
- subprocess.check_output = mock.Mock(return_value=0)
- cpu_topo._get_core_details = \
- mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
- [{'physical id': '2', 'processor': '1'}]])
- self.assertEqual({'thread_per_core': '1', '2': ['1'],
- 'cores_per_socket': '2'},
- cpu_topo.get_core_socket())
-
- def test_validate_cpu_cfg(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(1, "", ""))
- cpu_topo = CpuSysCores(ssh_mock)
- subprocess.check_output = mock.Mock(return_value=0)
- cpu_topo._get_core_details = \
- mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
- [{'physical id': '2', 'processor': '1'}]])
- cpu_topo.core_map = \
- {'thread_per_core': '1', '2':['1'], 'cores_per_socket': '2'}
- self.assertEqual(-1, cpu_topo.validate_cpu_cfg())
-
- def test_validate_cpu_cfg_2t(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(1, "", ""))
- cpu_topo = CpuSysCores(ssh_mock)
- subprocess.check_output = mock.Mock(return_value=0)
- cpu_topo._get_core_details = \
- mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
- [{'physical id': '2', 'processor': '1'}]])
- cpu_topo.core_map = \
- {'thread_per_core': 1, '2':['1'], 'cores_per_socket': '2'}
- vnf_cfg = {'lb_config': 'SW', 'lb_count': 1, 'worker_config':
- '1C/2T', 'worker_threads': 1}
- self.assertEqual(-1, cpu_topo.validate_cpu_cfg(vnf_cfg))
-
- def test_validate_cpu_cfg_fail(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(1, "", ""))
- cpu_topo = CpuSysCores(ssh_mock)
- subprocess.check_output = mock.Mock(return_value=0)
- cpu_topo._get_core_details = \
- mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
- [{'physical id': '2', 'processor': '1'}]])
- cpu_topo.core_map = \
- {'thread_per_core': 1, '2':[1], 'cores_per_socket': 2}
- vnf_cfg = {'lb_config': 'SW', 'lb_count': 1, 'worker_config':
- '1C/1T', 'worker_threads': 1}
- self.assertEqual(-1, cpu_topo.validate_cpu_cfg(vnf_cfg))
diff --git a/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py b/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
deleted file mode 100644
index 0f1cf7d92..000000000
--- a/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
+++ /dev/null
@@ -1,260 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import mock
-import unittest
-from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkBindHelper
-from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkBindHelperException
-from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_KERNEL
-from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_DPDK
-from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_KERNEL
-from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_DPDK
-from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_OTHER
-from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_OTHER
-
-pass
-
-
-class TestDpdkBindHelper(unittest.TestCase):
- EXAMPLE_OUTPUT = """
-
-Network devices using DPDK-compatible driver
-============================================
-0000:00:04.0 'Virtio network device' drv=igb_uio unused=
-0000:00:05.0 'Virtio network device' drv=igb_uio unused=
-
-Network devices using kernel driver
-===================================
-0000:00:03.0 'Virtio network device' if=ens3 drv=virtio-pci unused=igb_uio *Active*
-
-Other network devices
-=====================
-<none>
-
-Crypto devices using DPDK-compatible driver
-===========================================
-<none>
-
-Crypto devices using kernel driver
-==================================
-<none>
-
-Other crypto devices
-====================
-<none>
-"""
-
- PARSED_EXAMPLE = {
- NETWORK_DPDK: [
- {'active': False,
- 'dev_type': 'Virtio network device',
- 'driver': 'igb_uio',
- 'iface': None,
- 'unused': '',
- 'vpci': '0000:00:04.0',
- },
- {'active': False,
- 'dev_type': 'Virtio network device',
- 'driver': 'igb_uio',
- 'iface': None,
- 'unused': '',
- 'vpci': '0000:00:05.0',
- }
- ],
- NETWORK_KERNEL: [
- {'active': True,
- 'dev_type': 'Virtio network device',
- 'driver': 'virtio-pci',
- 'iface': 'ens3',
- 'unused': 'igb_uio',
- 'vpci': '0000:00:03.0',
- }
- ],
- CRYPTO_KERNEL: [],
- CRYPTO_DPDK: [],
- NETWORK_OTHER: [],
- CRYPTO_OTHER: [],
- }
-
- CLEAN_STATUS = {
- NETWORK_KERNEL: [],
- NETWORK_DPDK: [],
- CRYPTO_KERNEL: [],
- CRYPTO_DPDK: [],
- NETWORK_OTHER: [],
- CRYPTO_OTHER: [],
- }
-
- ONE_INPUT_LINE = ("0000:00:03.0 'Virtio network device' if=ens3 "
- "drv=virtio-pci unused=igb_uio *Active*")
-
- ONE_INPUT_LINE_PARSED = [{
- 'vpci': '0000:00:03.0',
- 'dev_type': 'Virtio network device',
- 'iface': 'ens3',
- 'driver': 'virtio-pci',
- 'unused': 'igb_uio',
- 'active': True,
- }]
-
- def test___init__(self):
- conn = mock.Mock()
- conn.provision_tool = mock.Mock(return_value='path_to_tool')
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- self.assertEquals(conn, dpdk_bind_helper.ssh_helper)
- self.assertEquals(self.CLEAN_STATUS, dpdk_bind_helper.dpdk_status)
- self.assertIsNone(dpdk_bind_helper.status_nic_row_re)
- self.assertIsNone(dpdk_bind_helper._dpdk_nic_bind_attr)
- self.assertIsNone(dpdk_bind_helper._status_cmd_attr)
-
- def test__dpdk_execute(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, 'output', 'error'))
- conn.provision_tool = mock.Mock(return_value='tool_path')
- dpdk_bind_helper = DpdkBindHelper(conn)
- self.assertEquals((0, 'output', 'error'), dpdk_bind_helper._dpdk_execute('command'))
-
- def test__dpdk_execute_failure(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(1, 'output', 'error'))
- conn.provision_tool = mock.Mock(return_value='tool_path')
- dpdk_bind_helper = DpdkBindHelper(conn)
- with self.assertRaises(DpdkBindHelperException):
- dpdk_bind_helper._dpdk_execute('command')
-
- def test__addline(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper._addline(NETWORK_KERNEL, self.ONE_INPUT_LINE)
-
- self.assertIsNotNone(dpdk_bind_helper.dpdk_status)
- self.assertEquals(self.ONE_INPUT_LINE_PARSED, dpdk_bind_helper.dpdk_status[NETWORK_KERNEL])
-
- def test__switch_active_dict_by_header(self):
- line = "Crypto devices using DPDK-compatible driver"
- olddict = 'olddict'
- self.assertEqual(CRYPTO_DPDK, DpdkBindHelper._switch_active_dict(line, olddict))
-
- def test__switch_active_dict_by_header_empty(self):
- line = "<none>"
- olddict = 'olddict'
- self.assertEqual(olddict, DpdkBindHelper._switch_active_dict(line, olddict))
-
- def test_parse_dpdk_status_output(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
-
- self.maxDiff = None
- self.assertEquals(self.PARSED_EXAMPLE, dpdk_bind_helper.dpdk_status)
-
- def test_read_status(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, self.EXAMPLE_OUTPUT, ''))
- conn.provision_tool = mock.Mock(return_value='path_to_tool')
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- self.assertEquals(self.PARSED_EXAMPLE, dpdk_bind_helper.read_status())
-
- def test__get_bound_pci_addresses(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
-
- self.assertEquals(['0000:00:04.0', '0000:00:05.0'],
- dpdk_bind_helper._get_bound_pci_addresses(NETWORK_DPDK))
- self.assertEquals(['0000:00:03.0'],
- dpdk_bind_helper._get_bound_pci_addresses(NETWORK_KERNEL))
-
- def test_interface_driver_map(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
-
- self.assertEquals({'0000:00:04.0': 'igb_uio',
- '0000:00:03.0': 'virtio-pci',
- '0000:00:05.0': 'igb_uio',
- },
- dpdk_bind_helper.interface_driver_map)
-
- def test_bind(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, '', ''))
- conn.provision_tool = mock.Mock(return_value='/opt/nsb_bin/dpdk-devbind.py')
-
- dpdk_bind_helper = DpdkBindHelper(conn)
- dpdk_bind_helper.read_status = mock.Mock()
-
- dpdk_bind_helper.bind(['0000:00:03.0', '0000:00:04.0'], 'my_driver')
-
- conn.execute.assert_called_with('sudo /opt/nsb_bin/dpdk-devbind.py --force '
- '-b my_driver 0000:00:03.0 0000:00:04.0')
- dpdk_bind_helper.read_status.assert_called_once()
-
- def test_bind_single_pci(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, '', ''))
- conn.provision_tool = mock.Mock(return_value='/opt/nsb_bin/dpdk-devbind.py')
-
- dpdk_bind_helper = DpdkBindHelper(conn)
- dpdk_bind_helper.read_status = mock.Mock()
-
- dpdk_bind_helper.bind('0000:00:03.0', 'my_driver')
-
- conn.execute.assert_called_with('sudo /opt/nsb_bin/dpdk-devbind.py --force '
- '-b my_driver 0000:00:03.0')
- dpdk_bind_helper.read_status.assert_called_once()
-
- def test_rebind_drivers(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper.bind = mock.Mock()
- dpdk_bind_helper.used_drivers = {
- 'd1': ['0000:05:00.0'],
- 'd3': ['0000:05:01.0', '0000:05:02.0'],
- }
-
- dpdk_bind_helper.rebind_drivers()
-
- dpdk_bind_helper.bind.assert_any_call(['0000:05:00.0'], 'd1', True)
- dpdk_bind_helper.bind.assert_any_call(['0000:05:01.0', '0000:05:02.0'], 'd3', True)
-
- def test_save_used_drivers(self):
- conn = mock.Mock()
- dpdk_bind_helper = DpdkBindHelper(conn)
- dpdk_bind_helper.dpdk_status = self.PARSED_EXAMPLE
-
- dpdk_bind_helper.save_used_drivers()
-
- expected = {
- 'igb_uio': ['0000:00:04.0', '0000:00:05.0'],
- 'virtio-pci': ['0000:00:03.0'],
- }
-
- self.assertDictEqual(expected, dpdk_bind_helper.used_drivers)
diff --git a/tests/unit/network_services/helpers/test_iniparser.py b/tests/unit/network_services/helpers/test_iniparser.py
deleted file mode 100644
index bd27b497e..000000000
--- a/tests/unit/network_services/helpers/test_iniparser.py
+++ /dev/null
@@ -1,225 +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.
-#
-
-from __future__ import absolute_import
-
-import unittest
-from contextlib import contextmanager
-import mock
-
-from tests.unit import STL_MOCKS
-
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.helpers.iniparser import ParseError
- from yardstick.network_services.helpers.iniparser import LineParser
- from yardstick.network_services.helpers.iniparser import BaseParser
- from yardstick.network_services.helpers.iniparser import ConfigParser
-
-PARSE_TEXT_1 = """\
-
-[section1]
-key1=value1
-list1: value2
- value3
- value4
-key3='single quote value' ; comment here
-key4=
-
-[section2] ; comment with #2 other symbol
-# here is a comment line
-list2: value5
-key with no value # mixed comment ; symbols
-; another comment line
-key5=
-
-[section1] ; reopen a section!
-key2="double quote value"
-"""
-
-PARSE_TEXT_2 = """\
-[section1]
-list1 = item1
- item2
- ended by eof"""
-
-PARSE_TEXT_BAD_1 = """\
-key1=value1
-"""
-
-PARSE_TEXT_BAD_2 = """\
-[section1
-"""
-
-PARSE_TEXT_BAD_3 = """\
-[]
-"""
-
-PARSE_TEXT_BAD_4 = """\
-[section1]
- bad continuation
-"""
-
-PARSE_TEXT_BAD_5 = """\
-[section1]
-=value with no key
-"""
-
-
-class TestParseError(unittest.TestCase):
-
- def test___str__(self):
- error = ParseError('a', 2, 'c')
- self.assertEqual(str(error), "at line 2, a: 'c'")
-
-
-class TestLineParser(unittest.TestCase):
-
- def test___repr__(self):
- line_parser = LineParser('', 101)
- self.assertIsNotNone(repr(line_parser))
-
- def test_error_invalid_assignment(self):
- line_parser = LineParser('', 101)
- self.assertIsNotNone(line_parser.error_invalid_assignment())
-
-
-class TestBaseParser(unittest.TestCase):
-
- @staticmethod
- def make_open(text_blob):
- @contextmanager
- def internal_open(*args, **kwargs):
- yield text_blob.split('\n')
-
- return internal_open
-
- def test_parse(self):
- parser = BaseParser()
- parser.parse()
-
- def test_parse_empty_string(self):
- parser = BaseParser()
- self.assertIsNone(parser.parse(''))
-
- def test_not_implemented_methods(self):
- parser = BaseParser()
-
- with self.assertRaises(NotImplementedError):
- parser.assignment('key', 'value', LineParser('', 100))
-
- with self.assertRaises(NotImplementedError):
- parser.new_section('section')
-
- with self.assertRaises(NotImplementedError):
- parser.comment('comment')
-
-
-class TestConfigParser(unittest.TestCase):
-
- @staticmethod
- def make_open(text_blob):
- @contextmanager
- def internal_open(*args, **kwargs):
- yield text_blob.split('\n')
-
- return internal_open
-
- @mock.patch('yardstick.network_services.helpers.iniparser.open')
- def test_parse(self, mock_open):
- mock_open.side_effect = self.make_open(PARSE_TEXT_1)
-
- existing_data = [['section0', [['key0', 'value0']]]]
- config_parser = ConfigParser('my_file', existing_data)
- config_parser.parse()
-
- expected = [
- [
- 'section0',
- [
- ['key0', 'value0'],
- ],
- ],
- [
- 'section1',
- [
- ['key1', 'value1'],
- ['list1', 'value2\nvalue3\nvalue4'],
- ['key3', 'single quote value'],
- ['key4', ''],
- ['key2', 'double quote value'],
- ],
- ],
- [
- 'section2',
- [
- ['list2', 'value5'],
- ['key with no value', '@'],
- ['key5', ''],
- ],
- ],
- ]
-
- self.assertEqual(config_parser.sections, expected)
- self.assertIsNotNone(config_parser.find_section('section1'))
- self.assertIsNone(config_parser.find_section('section3'))
- self.assertEqual(config_parser.find_section_index('section1'), 1)
- self.assertEqual(config_parser.find_section_index('section3'), -1)
-
- @mock.patch('yardstick.network_services.helpers.iniparser.open')
- def test_parse_2(self, mock_open):
- mock_open.side_effect = self.make_open(PARSE_TEXT_2)
-
- config_parser = ConfigParser('my_file')
- config_parser.parse()
-
- expected = [
- [
- 'section1',
- [
- ['list1', 'item1\nitem2\nended by eof'],
- ],
- ],
- ]
-
- self.assertEqual(config_parser.sections, expected)
-
- @mock.patch('yardstick.network_services.helpers.iniparser.open')
- def test_parse_negative(self, mock_open):
- bad_text_dict = {
- 'no section': PARSE_TEXT_BAD_1,
- 'incomplete section': PARSE_TEXT_BAD_2,
- 'empty section name': PARSE_TEXT_BAD_3,
- 'bad_continuation': PARSE_TEXT_BAD_4,
- 'value with no key': PARSE_TEXT_BAD_5,
- }
-
- for bad_reason, bad_text in bad_text_dict.items():
- mock_open.side_effect = self.make_open(bad_text)
-
- config_parser = ConfigParser('my_file', [])
-
- try:
- # TODO: replace with assertRaises, when the UT framework supports
- # advanced messages when exceptions fail to occur
- config_parser.parse()
- except ParseError:
- pass
- else:
- self.fail('\n'.join([bad_reason, bad_text, str(config_parser.sections)]))
diff --git a/tests/unit/network_services/helpers/test_samplevnf_helper.py b/tests/unit/network_services/helpers/test_samplevnf_helper.py
deleted file mode 100644
index 05acdfaa9..000000000
--- a/tests/unit/network_services/helpers/test_samplevnf_helper.py
+++ /dev/null
@@ -1,1170 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-from __future__ import division
-
-import unittest
-
-import mock
-
-from yardstick.network_services.helpers.samplevnf_helper import MultiPortConfig, PortPairs
-from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
-
-
-class TestPortPairs(unittest.TestCase):
- def test_port_pairs_list(self):
- vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- interfaces = vnfd['vdu'][0]['external-interface']
- port_pairs = PortPairs(interfaces)
- self.assertEqual(port_pairs.port_pair_list, [("xe0", "xe1")])
-
- def test_valid_networks(self):
- vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- interfaces = vnfd['vdu'][0]['external-interface']
- port_pairs = PortPairs(interfaces)
- self.assertEqual(port_pairs.valid_networks, [("uplink_0", "downlink_0")])
-
- def test_all_ports(self):
- vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- interfaces = vnfd['vdu'][0]['external-interface']
- port_pairs = PortPairs(interfaces)
- self.assertEqual(set(port_pairs.all_ports), {"xe0", "xe1"})
-
- def test_uplink_ports(self):
- vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- interfaces = vnfd['vdu'][0]['external-interface']
- port_pairs = PortPairs(interfaces)
- self.assertEqual(port_pairs.uplink_ports, ["xe0"])
-
- def test_downlink_ports(self):
- vnfd = TestMultiPortConfig.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- interfaces = vnfd['vdu'][0]['external-interface']
- port_pairs = PortPairs(interfaces)
- self.assertEqual(port_pairs.downlink_ports, ["xe1"])
-
-
-class TestMultiPortConfig(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: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',
- 'ifname': 'xe0',
- 'local_iface_name': 'eth0',
- 'local_mac': '00:00:00:00:00:02',
- 'vld_id': 'uplink_0',
- },
- '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',
- 'ifname': 'xe1',
- 'local_iface_name': 'eth1',
- 'local_mac': '00:00:00:00:00:01',
- 'vld_id': 'downlink_0',
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1'}
- ]}],
- 'description': 'Vpe approximation using DPDK',
- 'mgmt-interface':
- {'vdu-id': 'vpevnf-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': 'AclApproxVnf', 'name': 'VPEVnfSsh'}
-
- VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- VNFD_0,
- ]
- }
- }
-
- def test_validate_ip_and_prefixlen(self):
- ip_addr, prefix_len = MultiPortConfig.validate_ip_and_prefixlen('10.20.30.40', '16')
- self.assertEqual(ip_addr, '10.20.30.40')
- self.assertEqual(prefix_len, 16)
-
- ip_addr, prefix_len = MultiPortConfig.validate_ip_and_prefixlen('::1', '40')
- self.assertEqual(ip_addr, '0000:0000:0000:0000:0000:0000:0000:0001')
- self.assertEqual(prefix_len, 40)
-
- def test_validate_ip_and_prefixlen_negative(self):
- with self.assertRaises(AttributeError):
- MultiPortConfig.validate_ip_and_prefixlen('', '')
-
- with self.assertRaises(AttributeError):
- MultiPortConfig.validate_ip_and_prefixlen('10.20.30.400', '16')
-
- with self.assertRaises(AttributeError):
- MultiPortConfig.validate_ip_and_prefixlen('10.20.30.40', '33')
-
- with self.assertRaises(AttributeError):
- MultiPortConfig.validate_ip_and_prefixlen('::1', '129')
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test___init__(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- self.assertEqual(0, opnfv_vnf.swq)
- mock_os.path = mock.MagicMock()
- mock_os.path.isfile = mock.Mock(return_value=False)
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- self.assertEqual(0, opnfv_vnf.swq)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_update_timer(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- self.assertEqual(None, opnfv_vnf.update_timer())
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_script(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = VnfdHelper(self.VNFD_0)
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'arp_route_tbl': '', 'arp_route_tbl6': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- self.assertIsNotNone(opnfv_vnf.generate_script(self.VNFD))
- opnfv_vnf.lb_config = 'HW'
- self.assertIsNotNone(opnfv_vnf.generate_script(self.VNFD))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_script_data(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.vnf_type = 'ACL'
- opnfv_vnf.generate_link_config = mock.Mock()
- opnfv_vnf.generate_arp_config = mock.Mock()
- opnfv_vnf.generate_arp_config6 = mock.Mock()
- opnfv_vnf.generate_action_config = mock.Mock()
- opnfv_vnf.generate_rule_config = mock.Mock()
- self.assertIsNotNone(opnfv_vnf.generate_script_data())
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_rule_config(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'ACL'
- opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.get_ports_gateway6 = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway6 = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.rules = ''
- self.assertIsNotNone(opnfv_vnf.generate_rule_config())
- opnfv_vnf.rules = 'new'
- self.assertIsNotNone(opnfv_vnf.generate_rule_config())
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_action_config(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.get_ports_gateway6 = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway6 = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- self.assertIsNotNone(opnfv_vnf.generate_action_config())
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_arp_config6(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.get_ports_gateway6 = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway6 = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.interfaces = mock.MagicMock()
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- self.assertIsNotNone(opnfv_vnf.generate_arp_config6())
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_arp_config(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.get_ports_gateway = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.get_ports_gateway6 = mock.Mock(return_value=u'1.1.1.1')
- opnfv_vnf.get_netmask_gateway6 = mock.Mock(return_value=u'255.255.255.0')
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.interfaces = mock.MagicMock()
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- self.assertIsNotNone(opnfv_vnf.generate_arp_config())
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_get_ports_gateway(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.interfaces = mock.MagicMock()
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- self.assertIsNotNone(opnfv_vnf.get_ports_gateway('xe0'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_get_ports_gateway6(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.interfaces = mock.MagicMock()
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- self.assertIsNotNone(opnfv_vnf.get_ports_gateway6('xe0'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_get_netmask_gateway(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.interfaces = mock.MagicMock()
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- self.assertIsNotNone(opnfv_vnf.get_netmask_gateway('xe0'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_get_netmask_gateway6(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.interfaces = mock.MagicMock()
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- self.assertIsNotNone(opnfv_vnf.get_netmask_gateway6('xe0'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_link_config(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
-
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.get_port_pairs = mock.Mock()
- opnfv_vnf.vnf_type = 'VFW'
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.all_ports = ['32', '1', '987']
- opnfv_vnf.validate_ip_and_prefixlen = mock.Mock(return_value=('10.20.30.40', 16))
-
- result = opnfv_vnf.generate_link_config()
- self.assertEqual(len(result.splitlines()), 9)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_config(self, mock_open, mock_os, ConfigParser):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.get_config_tpl_data = mock.MagicMock()
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.update_write_parser = mock.MagicMock()
- opnfv_vnf.generate_script_data = \
- mock.Mock(return_value={'link_config': 0, 'arp_config': '',
- 'arp_config6': '', 'actions': '',
- 'rules': ''})
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.get_ports_gateway6 = mock.Mock()
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.generate_lb_to_port_pair_mapping = mock.Mock()
- opnfv_vnf.generate_config_data = mock.Mock()
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.is_openstack = True
- self.assertIsNone(opnfv_vnf.generate_config())
- opnfv_vnf.is_openstack = False
- self.assertIsNone(opnfv_vnf.generate_config())
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_get_config_tpl_data(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=True)
- opnfv_vnf.read_parser.get = mock.Mock(return_value='filename')
-
- self.assertIsNotNone(opnfv_vnf.get_config_tpl_data('filename'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_get_txrx_tpl_data(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=True)
- opnfv_vnf.read_parser.get = mock.Mock(return_value='filename')
-
- self.assertIsNotNone(opnfv_vnf.get_txrx_tpl_data('filename'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_init_write_parser_template(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=True)
- opnfv_vnf.read_parser.get = mock.Mock(return_value='filename')
-
- self.assertIsNone(opnfv_vnf.init_write_parser_template('filename'))
- opnfv_vnf.write_parser.add_section = mock.MagicMock()
- opnfv_vnf.read_parser.item = mock.Mock(return_value=[1, 2, 3])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=False)
- opnfv_vnf.write_parser.set = mock.Mock()
- self.assertIsNone(opnfv_vnf.init_write_parser_template('filename'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_init_write_parser_template_2(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- self.assertIsNone(opnfv_vnf.init_write_parser_template('filename'))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_update_write_parser(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- self.assertIsNone(opnfv_vnf.update_write_parser({'filename': 1}))
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_get_worker_threads(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- result = opnfv_vnf.get_worker_threads(1)
- self.assertEqual(1, result)
- opnfv_vnf.worker_config = '2t'
- result = opnfv_vnf.get_worker_threads(2)
- self.assertEqual(2, result)
- opnfv_vnf.worker_config = '2t'
- result = opnfv_vnf.get_worker_threads(3)
- self.assertEqual(2, result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_next_core_id(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- result = opnfv_vnf.generate_next_core_id()
- self.assertEqual(None, result)
- opnfv_vnf.worker_config = '2t'
- opnfv_vnf.start_core = 'a'
- self.assertRaises(ValueError, opnfv_vnf.generate_next_core_id)
- opnfv_vnf.worker_config = '2t'
- opnfv_vnf.start_core = 1
- result = opnfv_vnf.generate_next_core_id()
- self.assertEqual(None, result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_lb_to_port_pair_mapping(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = VnfdHelper(self.VNFD_0)
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf._port_pairs = PortPairs(vnfd_mock.interfaces)
- opnfv_vnf.port_pair_list = opnfv_vnf._port_pairs.port_pair_list
- result = opnfv_vnf.generate_lb_to_port_pair_mapping()
- self.assertEqual(None, result)
- result = opnfv_vnf.set_priv_to_pub_mapping()
- self.assertEqual('(0,1)', result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_set_priv_que_handler(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = VnfdHelper(self.VNFD_0)
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- result = opnfv_vnf.set_priv_que_handler()
- self.assertEqual(None, result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- def test_generate_arp_route_tbl(self, *_):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = ""
- vnfd_mock = mock.MagicMock()
- vnfd_mock.port_num.side_effect = ['32', '1', '987']
- vnfd_mock.find_interface.side_effect = [
- {
- 'virtual-interface': {
- 'dst_ip': '10.20.30.40',
- 'netmask': '20',
- },
- },
- {
- 'virtual-interface': {
- 'dst_ip': '10.200.30.40',
- 'netmask': '24',
- },
- },
- {
- 'virtual-interface': {
- 'dst_ip': '10.20.3.40',
- 'netmask': '8',
- },
- },
- ]
-
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.all_ports = [3, 2, 5]
-
- expected = 'routeadd net 32 10.20.30.40 0xfffff000\n' \
- 'routeadd net 1 10.200.30.40 0xffffff00\n' \
- 'routeadd net 987 10.20.3.40 0xff000000'
- result = opnfv_vnf.generate_arp_route_tbl()
- self.assertEqual(result, expected)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_arpicmp_data(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- result = opnfv_vnf.generate_arpicmp_data()
- self.assertIsNotNone(result)
- opnfv_vnf.nfv_type = 'ovs'
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- result = opnfv_vnf.generate_arpicmp_data()
- self.assertIsNotNone(result)
- opnfv_vnf.nfv_type = 'openstack'
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- result = opnfv_vnf.generate_arpicmp_data()
- self.assertIsNotNone(result)
- opnfv_vnf.lb_config = 'HW'
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- result = opnfv_vnf.generate_arpicmp_data()
- self.assertIsNotNone(result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_final_txrx_data(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.ports_len = 2
- opnfv_vnf.lb_index = 1
- opnfv_vnf.pktq_out_os = [1, 2]
- result = opnfv_vnf.generate_final_txrx_data()
- self.assertIsNotNone(result)
- opnfv_vnf.nfv_type = 'openstack'
- opnfv_vnf.pktq_out_os = [1, 2]
- opnfv_vnf.lb_index = 1
- result = opnfv_vnf.generate_final_txrx_data()
- self.assertIsNotNone(result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_initial_txrx_data(self, mock_open, mock_os,
- ConfigParser, OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.lb_index = 1
- opnfv_vnf.ports_len = 2
- result = opnfv_vnf.generate_initial_txrx_data()
- self.assertIsNotNone(result)
- opnfv_vnf.nfv_type = 'openstack'
- opnfv_vnf.pktq_out_os = [1, 2]
- result = opnfv_vnf.generate_initial_txrx_data()
- self.assertIsNotNone(result)
- opnfv_vnf.nfv_type = 'ovs'
- opnfv_vnf.init_ovs = False
- opnfv_vnf.ovs_pktq_out = ''
- opnfv_vnf.pktq_out_os = [1, 2]
- opnfv_vnf.lb_index = 1
- result = opnfv_vnf.generate_initial_txrx_data()
- self.assertIsNotNone(result)
- opnfv_vnf.nfv_type = 'ovs'
- opnfv_vnf.init_ovs = True
- opnfv_vnf.pktq_out_os = [1, 2]
- opnfv_vnf.ovs_pktq_out = ''
- opnfv_vnf.lb_index = 1
- result = opnfv_vnf.generate_initial_txrx_data()
- self.assertIsNotNone(result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_lb_data(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.lb_index = 1
- opnfv_vnf.ports_len = 2
- opnfv_vnf.prv_que_handler = 0
- result = opnfv_vnf.generate_lb_data()
- self.assertIsNotNone(result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_vnf_data(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.lb_index = 1
- opnfv_vnf.ports_len = 1
- opnfv_vnf.pktq_out = ['1', '2']
- opnfv_vnf.vnf_tpl = {'public_ip_port_range': '98164810',
- 'vnf_set': '(2,4,5)'}
- opnfv_vnf.prv_que_handler = 0
- result = opnfv_vnf.generate_vnf_data()
- self.assertIsNotNone(result)
- opnfv_vnf.lb_config = 'HW'
- opnfv_vnf.mul = 0.1
- result = opnfv_vnf.generate_vnf_data()
- self.assertIsNotNone(result)
- opnfv_vnf.lb_config = 'HW'
- opnfv_vnf.mul = 0.1
- opnfv_vnf.vnf_type = 'ACL'
- result = opnfv_vnf.generate_vnf_data()
- self.assertIsNotNone(result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_generate_config_data(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = VnfdHelper(self.VNFD_0)
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.lb_index = 1
- opnfv_vnf.ports_len = 1
- opnfv_vnf.pktq_out = ['1', '2']
- opnfv_vnf.prv_que_handler = 0
- opnfv_vnf.init_write_parser_template = mock.Mock()
- opnfv_vnf.arpicmp_tpl = mock.MagicMock()
- opnfv_vnf.txrx_tpl = mock.MagicMock()
- opnfv_vnf.loadb_tpl = mock.MagicMock()
- opnfv_vnf.vnf_tpl = {'public_ip_port_range': '98164810 (1,65535)',
- 'vnf_set': "(2,4,5)"}
- opnfv_vnf.generate_vnf_data = mock.Mock(return_value={})
- opnfv_vnf.update_write_parser = mock.Mock()
- result = opnfv_vnf.generate_config_data()
- self.assertIsNone(result)
- opnfv_vnf.generate_final_txrx_data = mock.Mock()
- opnfv_vnf.update_write_parser = mock.Mock()
- result = opnfv_vnf.generate_config_data()
- self.assertIsNone(result)
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.lb_index = 1
- opnfv_vnf.ports_len = 1
- opnfv_vnf.pktq_out = ['1', '2']
- opnfv_vnf.prv_que_handler = 0
- opnfv_vnf.init_write_parser_template = mock.Mock()
- opnfv_vnf.arpicmp_tpl = mock.MagicMock()
- opnfv_vnf.txrx_tpl = mock.MagicMock()
- opnfv_vnf.loadb_tpl = mock.MagicMock()
- opnfv_vnf.vnf_type = 'CGNAPT'
- opnfv_vnf.update_timer = mock.Mock()
- opnfv_vnf.port_pair_list = [("xe0", "xe1"), ("xe0", "xe2")]
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.generate_arpicmp_data = mock.Mock()
- result = opnfv_vnf.generate_config_data()
- self.assertIsNone(result)
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.open')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.os')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.ConfigParser')
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.OrderedDict')
- def test_init_eal(self, mock_open, mock_os, ConfigParser,
- OrderedDict):
- topology_file = mock.Mock()
- config_tpl = mock.Mock()
- tmp_file = mock.Mock()
- vnfd_mock = mock.MagicMock()
- opnfv_vnf = MultiPortConfig(topology_file, config_tpl, tmp_file, vnfd_mock)
- opnfv_vnf.socket = 0
- opnfv_vnf.start_core = 0
- opnfv_vnf.port_pair_list = [("xe0", "xe1")]
- opnfv_vnf.port_pairs = [("xe0", "xe1")]
- opnfv_vnf.txrx_pipeline = ''
- opnfv_vnf.rules = ''
- opnfv_vnf.write_parser = mock.MagicMock()
- opnfv_vnf.read_parser = mock.MagicMock()
- opnfv_vnf.read_parser.sections = mock.Mock(return_value=['MASTER'])
- opnfv_vnf.read_parser.has_option = mock.Mock(return_value=[])
- opnfv_vnf.write_parser.set = mock.Mock()
- opnfv_vnf.write_parser.add_section = mock.Mock()
- opnfv_vnf.read_parser.items = mock.MagicMock()
- opnfv_vnf.pipeline_counter = 0
- opnfv_vnf.worker_config = '1t'
- opnfv_vnf.start_core = 0
- opnfv_vnf.lb_count = 1
- opnfv_vnf.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- opnfv_vnf.interfaces = opnfv_vnf.vnfd['vdu'][0]['external-interface']
- opnfv_vnf.lb_to_port_pair_mapping = [0, 1]
- opnfv_vnf.lb_index = 1
- opnfv_vnf.ports_len = 1
- opnfv_vnf.pktq_out = ['1', '2']
- opnfv_vnf.prv_que_handler = 0
- opnfv_vnf.init_write_parser_template = mock.Mock()
- opnfv_vnf.arpicmp_tpl = mock.MagicMock()
- opnfv_vnf.txrx_tpl = mock.MagicMock()
- opnfv_vnf.loadb_tpl = mock.MagicMock()
- opnfv_vnf.vnf_tpl = {'public_ip_port_range': '98164810 (1,65535)'}
- opnfv_vnf.generate_vnf_data = mock.Mock(return_value={})
- opnfv_vnf.update_write_parser = mock.Mock()
- opnfv_vnf.tmp_file = "/tmp/config"
- result = opnfv_vnf.init_eal()
- self.assertIsNone(result)
diff --git a/tests/unit/network_services/libs/__init__.py b/tests/unit/network_services/libs/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/libs/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/libs/ixia_libs/__init__.py b/tests/unit/network_services/libs/ixia_libs/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/libs/ixia_libs/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py b/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
deleted file mode 100644
index 3f374fb50..000000000
--- a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
+++ /dev/null
@@ -1,876 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Unittest for yardstick.network_services.libs.ixia_libs.IxNet
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IxNextgen
-from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_4
-from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_6
-
-
-UPLINK = "uplink"
-DOWNLINK = "downlink"
-
-class TestIxNextgen(unittest.TestCase):
-
- def test___init__(self):
- ixnet_gen = IxNextgen()
- self.assertIsNone(ixnet_gen._bidir)
-
- @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
- def test_connect(self, mock_sys):
-
- ixnet_gen = IxNextgen()
- ixnet_gen.get_config = mock.MagicMock()
- ixnet_gen.get_ixnet = mock.MagicMock()
-
- self.assertRaises(ImportError, ixnet_gen._connect, {"py_lib_path": "/tmp"})
-
- def test_clear_ixia_config(self):
- ixnet = mock.MagicMock()
- ixnet.execute = mock.Mock()
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.clear_ixia_config()
- self.assertIsNone(result)
- self.assertEqual(ixnet.execute.call_count, 1)
-
- def test_load_ixia_profile(self):
- ixnet = mock.MagicMock()
- ixnet.execute = mock.Mock()
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.load_ixia_profile({})
- self.assertIsNone(result)
- self.assertEqual(ixnet.execute.call_count, 1)
-
- def test_load_ixia_config(self):
- ixnet = mock.MagicMock()
- ixnet.execute = mock.Mock()
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_load_config({})
- self.assertIsNone(result)
- self.assertEqual(ixnet.execute.call_count, 2)
-
- @mock.patch('yardstick.network_services.libs.ixia_libs.IxNet.IxNet.log')
- def test_ix_assign_ports(self, mock_logger):
- ixnet = mock.MagicMock()
- ixnet.getList.return_value = [0, 1]
- ixnet.getAttribute.side_effect = ['up', 'down']
-
- config = {
- 'chassis': '1.1.1.1',
- 'cards': ['1', '2'],
- 'ports': ['2', '2'],
- }
-
- ixnet_gen = IxNextgen(ixnet)
- ixnet_gen._cfg = config
-
- result = ixnet_gen.ix_assign_ports()
- self.assertIsNone(result)
- self.assertEqual(ixnet.execute.call_count, 1)
- self.assertEqual(ixnet.commit.call_count, 1)
- self.assertEqual(ixnet.getAttribute.call_count, 2)
- self.assertEqual(mock_logger.error.call_count, 1)
-
- def test_ix_update_frame(self):
- static_traffic_params = {
- UPLINK: {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": {
- "64B": "100",
- "1KB": "0",
- },
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- DOWNLINK: {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": False,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
-
- ixnet = mock.MagicMock()
- ixnet.remapIds.return_value = ["0"]
- ixnet.setMultiAttribute.return_value = [1]
- ixnet.commit.return_value = [1]
- ixnet.getList.side_effect = [
- [1],
- [1],
- [1],
- [
- "ethernet.header.destinationAddress",
- "ethernet.header.sourceAddress",
- ],
- ]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_update_frame(static_traffic_params)
- self.assertIsNone(result)
- self.assertEqual(ixnet.setMultiAttribute.call_count, 7)
- self.assertEqual(ixnet.commit.call_count, 2)
-
- def test_ix_update_udp(self):
- ixnet = mock.MagicMock()
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_update_udp({})
- self.assertIsNone(result)
-
- def test_ix_update_tcp(self):
- ixnet = mock.MagicMock()
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_update_tcp({})
- self.assertIsNone(result)
-
- def test_ix_start_traffic(self):
- ixnet = mock.MagicMock()
- ixnet.getList.return_value = [0]
- ixnet.getAttribute.return_value = 'down'
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_start_traffic()
- self.assertIsNone(result)
- self.assertEqual(ixnet.getList.call_count, 1)
- self.assertEqual(ixnet.execute.call_count, 3)
-
- def test_ix_stop_traffic(self):
- ixnet = mock.MagicMock()
- ixnet.getList.return_value = [0]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_stop_traffic()
- self.assertIsNone(result)
- self.assertEqual(ixnet.getList.call_count, 1)
- self.assertEqual(ixnet.execute.call_count, 1)
-
- def test_ix_get_statistics(self):
- ixnet = mock.MagicMock()
- ixnet.execute.return_value = ""
- ixnet.getList.side_effect = [
- [
- '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
- '::ixNet::OBJ-/statistics/view:"Port Statistics"',
- ],
- [
- '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
- ],
- ]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_get_statistics()
- self.assertIsNotNone(result)
- self.assertEqual(ixnet.getList.call_count, 1)
- self.assertEqual(ixnet.execute.call_count, 20)
-
- def test_find_view_obj_no_where(self):
- views = ['here', 'there', 'everywhere']
- result = IxNextgen.find_view_obj('no_where', views)
- self.assertEqual(result, '')
-
- def test_add_ip_header_v4(self):
- static_traffic_params = {
- "uplink_0": {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "count": 1024,
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- "downlink_0": {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
-
- ixnet = mock.MagicMock()
- ixnet.remapIds.return_value = ["0"]
- ixnet.setMultiAttribute.return_value = [1]
- ixnet.commit.return_value = [1]
- ixnet.getList.side_effect = [[1], [0], [0], ["srcIp", "dstIp"]]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
- self.assertIsNone(result)
- self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
- self.assertEqual(ixnet.commit.call_count, 1)
-
- def test_add_ip_header_v4_nothing_to_do(self):
- static_traffic_params = {
- "uplink_0": {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "count": 1024,
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- "downlink_0": {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
-
- ixnet = mock.MagicMock()
- ixnet.remapIds.return_value = ["0"]
- ixnet.setMultiAttribute.return_value = [1]
- ixnet.commit.return_value = [1]
- ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
- self.assertIsNone(result)
- self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
- self.assertEqual(ixnet.commit.call_count, 1)
-
- def test_add_ip_header_v6(self):
- static_traffic_profile = {
- "uplink_0": {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- "downlink_0": {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
-
- ixnet = mock.MagicMock()
- ixnet.getList.side_effect = [[1], [1], [1], ["srcIp", "dstIp"]]
- ixnet.remapIds.return_value = ["0"]
- ixnet.setMultiAttribute.return_value = [1]
- ixnet.commit.return_value = [1]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.add_ip_header(static_traffic_profile, IP_VERSION_6)
- self.assertIsNone(result)
- self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
- self.assertEqual(ixnet.commit.call_count, 1)
-
- def test_add_ip_header_v6_nothing_to_do(self):
- static_traffic_params = {
- "uplink_0": {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "count": 1024,
- "ttl": 32
- },
- "outer_l3v6": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- "downlink_0": {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": {"64B": "100"},
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
-
- ixnet = mock.MagicMock()
- ixnet.getList.side_effect = [[1], [0, 1], [1], ["srcIP", "dstIP"]]
- ixnet.remapIds.return_value = ["0"]
- ixnet.setMultiAttribute.return_value = [1]
- ixnet.commit.return_value = [1]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_6)
- self.assertIsNone(result)
- self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
-
- def test_set_random_ip_multi_attributes_bad_ip_version(self):
- bad_ip_version = object()
- ixnet_gen = IxNextgen(mock.Mock())
- mock1 = mock.Mock()
- mock2 = mock.Mock()
- mock3 = mock.Mock()
- with self.assertRaises(ValueError):
- ixnet_gen.set_random_ip_multi_attributes(mock1, bad_ip_version, mock2, mock3)
-
- def test_get_config(self):
- tg_cfg = {
- "vdu": [
- {
- "external-interface": [
- {
- "virtual-interface": {
- "vpci": "0000:07:00.1",
- },
- },
- {
- "virtual-interface": {
- "vpci": "0001:08:01.2",
- },
- },
- ],
- },
- ],
- "mgmt-interface": {
- "ip": "test1",
- "tg-config": {
- "dut_result_dir": "test2",
- "version": "test3",
- "ixchassis": "test4",
- "tcl_port": "test5",
- "py_lib_path": "test6",
- },
- }
- }
-
- expected = {
- 'py_lib_path': 'test6',
- 'machine': 'test1',
- 'port': 'test5',
- 'chassis': 'test4',
- 'cards': ['0000', '0001'],
- 'ports': ['07', '08'],
- 'output_dir': 'test2',
- 'version': 'test3',
- 'bidir': True,
- }
-
- result = IxNextgen.get_config(tg_cfg)
- self.assertDictEqual(result, expected)
-
- def test_ix_update_ether(self):
- static_traffic_params = {
- "uplink_0": {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- "downlink_0": {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
-
- ixnet = mock.MagicMock()
- ixnet.setMultiAttribute.return_value = [1]
- ixnet.commit.return_value = [1]
- ixnet.getList.side_effect = [
- [1],
- [1],
- [1],
- [
- "ethernet.header.destinationAddress",
- "ethernet.header.sourceAddress",
- ],
- ]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_update_ether(static_traffic_params)
- self.assertIsNone(result)
- self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
-
- def test_ix_update_ether_nothing_to_do(self):
- static_traffic_params = {
- "uplink_0": {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- "downlink_0": {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
-
- ixnet = mock.MagicMock()
- ixnet.setMultiAttribute.return_value = [1]
- ixnet.commit.return_value = [1]
- ixnet.getList.side_effect = [
- [1],
- [1],
- [1],
- [
- "ethernet.header.destinationAddress",
- "ethernet.header.sourceAddress",
- ],
- ]
-
- ixnet_gen = IxNextgen(ixnet)
-
- result = ixnet_gen.ix_update_ether(static_traffic_params)
- self.assertIsNone(result)
- self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
diff --git a/tests/unit/network_services/nfvi/__init__.py b/tests/unit/network_services/nfvi/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/nfvi/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/nfvi/test_collectd.py b/tests/unit/network_services/nfvi/test_collectd.py
deleted file mode 100644
index 866c31d32..000000000
--- a/tests/unit/network_services/nfvi/test_collectd.py
+++ /dev/null
@@ -1,157 +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 unittest
-import multiprocessing
-import mock
-
-from yardstick.network_services.nfvi.collectd import AmqpConsumer
-
-
-class TestAmqpConsumer(unittest.TestCase):
- def setUp(self):
- self.queue = multiprocessing.Queue()
- self.url = 'amqp://admin:admin@127.0.0.1:5672/%2F'
- self.amqp_consumer = AmqpConsumer(self.url, self.queue)
-
- def test___init__(self):
- self.assertEqual(self.url, self.amqp_consumer._url)
-
- def test_on_connection_open(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer._connection.add_on_close_callback = \
- mock.Mock(return_value=0)
- self.amqp_consumer._connection.channel = mock.Mock(return_value=0)
- self.assertEqual(None, self.amqp_consumer.on_connection_open(10))
-
- def test_on_connection_closed(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer._connection.ioloop = mock.Mock()
- self.amqp_consumer._connection.ioloop.stop = mock.Mock(return_value=0)
- self.amqp_consumer._connection.add_timeout = mock.Mock(return_value=0)
- self.amqp_consumer._closing = True
- self.assertEqual(None,
- self.amqp_consumer.on_connection_closed("", 404,
- "Not Found"))
- self.amqp_consumer._closing = False
- self.assertEqual(None,
- self.amqp_consumer.on_connection_closed("", 404,
- "Not Found"))
-
- def test_reconnect(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer._connection.ioloop = mock.Mock()
- self.amqp_consumer._connection.ioloop.stop = mock.Mock(return_value=0)
- self.amqp_consumer.connect = mock.Mock(return_value=0)
- self.amqp_consumer._closing = True
- self.assertEqual(None, self.amqp_consumer.reconnect())
-
- def test_on_channel_open(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer._connection.add_on_close_callback = \
- mock.Mock(return_value=0)
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer.add_on_channel_close_callback = mock.Mock()
- self.amqp_consumer._channel.exchange_declare = \
- mock.Mock(return_value=0)
- self.assertEqual(None,
- self.amqp_consumer.on_channel_open(
- self.amqp_consumer._channel))
-
- def test_add_on_channel_close_callback(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer._connection.add_on_close_callback = \
- mock.Mock(return_value=0)
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.add_on_close_callback = mock.Mock()
- self.assertEqual(None,
- self.amqp_consumer.add_on_channel_close_callback())
-
- def test_on_channel_closed(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer._connection.close = mock.Mock(return_value=0)
- _channel = mock.Mock()
- self.assertEqual(None,
- self.amqp_consumer.on_channel_closed(_channel,
- "", ""))
-
- def test_ion_exchange_declareok(self):
- self.amqp_consumer.setup_queue = mock.Mock(return_value=0)
- self.assertEqual(None, self.amqp_consumer.on_exchange_declareok(10))
-
- def test_setup_queue(self):
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.add_on_close_callback = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.setup_queue("collectd"))
-
- def test_on_queue_declareok(self):
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.queue_bind = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.on_queue_declareok(10))
-
- def test__on_bindok(self):
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.basic_consume = mock.Mock()
- self.amqp_consumer.add_on_cancel_callback = mock.Mock()
- self.assertEqual(None, self.amqp_consumer._on_bindok(10))
-
- def test_add_on_cancel_callback(self):
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.add_on_cancel_callback = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.add_on_cancel_callback())
-
- def test_on_consumer_cancelled(self):
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.close = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.on_consumer_cancelled(10))
-
- def test_on_message(self):
- body = "msg {} cpu/cpu-0/ipc 101010:10"
- properties = ""
- basic_deliver = mock.Mock()
- basic_deliver.delivery_tag = mock.Mock(return_value=0)
- self.amqp_consumer.ack_message = mock.Mock()
- self.assertEqual(None,
- self.amqp_consumer.on_message(10, basic_deliver,
- properties, body))
-
- def test_ack_message(self):
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.basic_ack = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.ack_message(10))
-
- def test_on_cancelok(self):
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.close = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.on_cancelok(10))
-
- def test_run(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer.connect = mock.Mock()
- self.amqp_consumer._connection.ioloop.start = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.run())
-
- def test_stop(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer.connect = mock.Mock()
- self.amqp_consumer._connection.ioloop.start = mock.Mock()
- self.amqp_consumer._channel = mock.Mock()
- self.amqp_consumer._channel.basic_cancel = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.stop())
-
- def test_close_connection(self):
- self.amqp_consumer._connection = mock.Mock(autospec=AmqpConsumer)
- self.amqp_consumer._connection.close = mock.Mock()
- self.assertEqual(None, self.amqp_consumer.close_connection())
diff --git a/tests/unit/network_services/nfvi/test_resource.py b/tests/unit/network_services/nfvi/test_resource.py
deleted file mode 100644
index 5c2f890e8..000000000
--- a/tests/unit/network_services/nfvi/test_resource.py
+++ /dev/null
@@ -1,275 +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 unittest
-
-import errno
-import mock
-
-from yardstick.network_services.nfvi.resource import ResourceProfile
-from yardstick.network_services.nfvi import resource, collectd
-
-
-class TestResourceProfile(unittest.TestCase):
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'short-name': 'VpeVnf',
- 'vdu':
- [{'routing_table':
- [{'network': '172.16.100.20',
- 'netmask': '255.255.255.0',
- 'gateway': '172.16.100.20',
- 'if': 'xe0'},
- {'network': '172.16.40.20',
- 'netmask': '255.255.255.0',
- 'gateway': '172.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': '3c:fd:fe:9e:64:38',
- 'vpci': '0000:05:00.0',
- 'local_ip': '172.16.100.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 0,
- 'bandwidth': '10 Gbps',
- 'dst_ip': '172.16.100.20',
- 'local_mac': '3c:fd:fe:a1:2b:80'},
- 'vnfd-connection-point-ref': 'xe0',
- 'name': 'xe0'},
- {'virtual-interface':
- {'dst_mac': '00:1e:67:d0:60:5c',
- 'vpci': '0000:05:00.1',
- 'local_ip': '172.16.40.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 1,
- 'bandwidth': '10 Gbps',
- 'dst_ip': '172.16.40.20',
- 'local_mac': '3c:fd:fe:a1:2b:81'},
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1'}]}],
- 'description': 'Vpe approximation using DPDK',
- 'mgmt-interface':
- {'vdu-id': 'vpevnf-baremetal',
- 'host': '127.0.0.1',
- 'password': 'r00t',
- 'user': 'root',
- 'ip': '127.0.0.1'},
- 'benchmark':
- {'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']},
- 'connection-point': [{'type': 'VPORT', 'name': 'xe0'},
- {'type': 'VPORT', 'name': 'xe1'}],
- 'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'}]}}
-
- def setUp(self):
- with mock.patch("yardstick.ssh.AutoConnectSSH") as ssh:
- self.ssh_mock = mock.Mock(autospec=ssh.SSH)
- self.ssh_mock.execute = \
- mock.Mock(return_value=(0, "", ""))
- ssh.from_node.return_value = self.ssh_mock
-
- mgmt = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]['mgmt-interface']
- # interfaces = \
- # self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]['vdu'][0]['external-interface']
- port_names = \
- self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]['vdu'][0]['external-interface']
- self.resource_profile = \
- ResourceProfile(mgmt, port_names)
- self.resource_profile.connection = self.ssh_mock
-
- 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"),
- (0, ""))
-
- def test_check_if_sa_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))
-
- def test_get_cpu_data(self):
- reskey = ["", "cpufreq", "cpufreq-0"]
- value = "metric:10"
- val = self.resource_profile.get_cpu_data(reskey[1], reskey[2], value)
- self.assertIsNotNone(val)
-
- def test_get_cpu_data_error(self):
- reskey = ["", "", ""]
- value = "metric:10"
- val = self.resource_profile.get_cpu_data(reskey[0], reskey[1], value)
- self.assertEqual(val, ('error', 'Invalid', '', ''))
-
- def test__start_collectd(self):
- self.assertIsNone(
- self.resource_profile._start_collectd(self.ssh_mock, "/opt/nsb_bin"))
-
- def test__prepare_collectd_conf(self):
- self.assertIsNone(
- self.resource_profile._prepare_collectd_conf("/opt/nsb_bin"))
-
- def test__setup_ovs_stats(self):
- self.assertIsNone(
- self.resource_profile._setup_ovs_stats(self.ssh_mock))
-
- @mock.patch("yardstick.network_services.nfvi.resource.open")
- @mock.patch("yardstick.network_services.nfvi.resource.os")
- def test__provide_config_file(self, mock_open, mock_os):
- loadplugin = range(5)
- port_names = range(5)
- kwargs = {
- "interval": '25',
- "loadplugin": loadplugin,
- "port_names": port_names,
- }
- self.resource_profile._provide_config_file("/opt/nsb_bin", "collectd.conf", kwargs)
- self.ssh_mock.execute.assert_called_once()
-
- @mock.patch("yardstick.network_services.nfvi.resource.open")
- def test_initiate_systemagent(self, mock_open):
- 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):
- self.resource_profile._start_collectd = mock.Mock(side_effect=RuntimeError)
- with self.assertRaises(RuntimeError):
- self.resource_profile.initiate_systemagent("/opt/nsb_bin")
-
- def test__parse_hugepages(self):
- reskey = ["cpu", "cpuFreq"]
- value = "timestamp:12345"
- res = self.resource_profile.parse_hugepages(reskey, value)
- self.assertEqual({'cpu/cpuFreq': '12345'}, res)
-
- def test__parse_dpdkstat(self):
- reskey = ["dpdk0", "0"]
- value = "tx:12345"
- res = self.resource_profile.parse_dpdkstat(reskey, value)
- self.assertEqual({'dpdk0/0': '12345'}, res)
-
- def test__parse_virt(self):
- reskey = ["vm0", "cpu"]
- value = "load:45"
- res = self.resource_profile.parse_virt(reskey, value)
- self.assertEqual({'vm0/cpu': '45'}, res)
-
- def test__parse_ovs_stats(self):
- reskey = ["ovs", "stats"]
- value = "tx:45"
- res = self.resource_profile.parse_ovs_stats(reskey, value)
- self.assertEqual({'ovs/stats': '45'}, res)
-
- def test_parse_collectd_result(self):
- res = self.resource_profile.parse_collectd_result({})
- expected_result = {'cpu': {}, 'dpdkstat': {}, 'hugepages': {},
- 'memory': {}, 'ovs_stats': {}, 'timestamp': '',
- 'virt': {}}
- self.assertDictEqual(res, expected_result)
-
- def test_parse_collectd_result_cpu(self):
- metric = {"nsb_stats/cpu/0/ipc": "101"}
- self.resource_profile.get_cpu_data = mock.Mock(return_value=[1,
- "ipc",
- "1234",
- ""])
- res = self.resource_profile.parse_collectd_result(metric)
- expected_result = {'cpu': {1: {'ipc': '1234'}}, 'dpdkstat': {}, 'hugepages': {},
- 'memory': {}, 'ovs_stats': {}, 'timestamp': '',
- 'virt': {}}
- self.assertDictEqual(res, expected_result)
-
- def test_parse_collectd_result_memory(self):
- metric = {"nsb_stats/memory/bw": "101"}
- res = self.resource_profile.parse_collectd_result(metric)
- expected_result = {'cpu': {}, 'dpdkstat': {}, 'hugepages': {},
- 'memory': {'bw': '101'}, 'ovs_stats': {}, 'timestamp': '',
- 'virt': {}}
- self.assertDictEqual(res, expected_result)
-
- def test_parse_collectd_result_hugepage(self):
- # amqp returns bytes
- metric = {b"nsb_stats/hugepages/free": b"101"}
- self.resource_profile.parse_hugepages = mock.Mock(return_value={"free": "101"})
- res = self.resource_profile.parse_collectd_result(metric)
- expected_result = {'cpu': {}, 'dpdkstat': {}, 'hugepages': {'free': '101'},
- 'memory': {}, 'ovs_stats': {}, 'timestamp': '',
- 'virt': {}}
- self.assertDictEqual(res, expected_result)
-
- def test_parse_collectd_result_dpdk_virt_ovs(self):
- metric = {b"nsb_stats/dpdkstat/tx": b"101",
- b"nsb_stats/ovs_stats/tx": b"101",
- b"nsb_stats/virt/virt/memory": b"101"}
- self.resource_profile.parse_dpdkstat = \
- mock.Mock(return_value={"tx": "101"})
- self.resource_profile.parse_virt = \
- mock.Mock(return_value={"memory": "101"})
- self.resource_profile.parse_ovs_stats = \
- mock.Mock(return_value={"tx": "101"})
- res = self.resource_profile.parse_collectd_result(metric)
- expected_result = {'cpu': {}, 'dpdkstat': {'tx': '101'}, 'hugepages': {},
- 'memory': {}, 'ovs_stats': {'tx': '101'}, 'timestamp': '',
- 'virt': {'memory': '101'}}
- self.assertDictEqual(res, expected_result)
-
- def test_amqp_process_for_nfvi_kpi(self):
- self.resource_profile.amqp_client = \
- mock.MagicMock(side_effect=[None, mock.MagicMock()])
- self.resource_profile.run_collectd_amqp = \
- mock.Mock(return_value=0)
- res = self.resource_profile.amqp_process_for_nfvi_kpi()
- self.assertEqual(None, res)
-
- def test_amqp_collect_nfvi_kpi(self):
- self.resource_profile.amqp_client = \
- mock.MagicMock(side_effect=[None, mock.MagicMock()])
- self.resource_profile.run_collectd_amqp = \
- mock.Mock(return_value=0)
- self.resource_profile.parse_collectd_result = mock.Mock()
- res = self.resource_profile.amqp_collect_nfvi_kpi()
- self.assertIsNotNone(res)
-
- def test_run_collectd_amqp(self):
- resource.AmqpConsumer = mock.Mock(autospec=collectd)
- self.assertIsNone(self.resource_profile.run_collectd_amqp())
-
- def test_start(self):
- self.assertIsNone(self.resource_profile.start())
-
- def test_stop(self):
- self.assertIsNone(self.resource_profile.stop())
-
- def test_stop(self):
- self.resource_profile.amqp_client = mock.MagicMock()
- self.assertIsNone(self.resource_profile.stop())
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/test_utils.py b/tests/unit/network_services/test_utils.py
deleted file mode 100644
index bf98a4474..000000000
--- a/tests/unit/network_services/test_utils.py
+++ /dev/null
@@ -1,143 +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.
-#
-
-# Unittest for yardstick.network_services.utils
-
-import os
-import unittest
-import mock
-
-from yardstick.network_services import utils
-
-
-class UtilsTestCase(unittest.TestCase):
- """Test all VNF helper methods."""
-
- DPDK_PATH = os.path.join(utils.NSB_ROOT, "dpdk-devbind.py")
-
- def setUp(self):
- super(UtilsTestCase, self).setUp()
-
- def test_get_nsb_options(self):
- result = utils.get_nsb_option("bin_path", None)
- self.assertEqual(result, utils.NSB_ROOT)
-
- def test_get_nsb_option_is_invalid_key(self):
- result = utils.get_nsb_option("bin", None)
- self.assertEqual(result, None)
-
- def test_get_nsb_option_default(self):
- default = object()
- result = utils.get_nsb_option("nosuch", default)
- self.assertIs(result, default)
-
- def test_provision_tool(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, self.DPDK_PATH, ""))
- ssh.return_value = ssh_mock
- tool_path = utils.provision_tool(ssh_mock, self.DPDK_PATH)
- self.assertEqual(tool_path, self.DPDK_PATH)
-
- def test_provision_tool_no_path(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, self.DPDK_PATH, ""))
- ssh.return_value = ssh_mock
- tool_path = utils.provision_tool(ssh_mock, self.DPDK_PATH)
- self.assertEqual(tool_path, self.DPDK_PATH)
-
-
-class PciAddressTestCase(unittest.TestCase):
-
- PCI_ADDRESS_DBSF = '000A:07:03.2'
- PCI_ADDRESS_BSF = '06:02.1'
- PCI_ADDRESS_DBSF_MULTILINE_1 = '0001:08:04.3\nother text\n'
- PCI_ADDRESS_DBSF_MULTILINE_2 = 'first line\n 0001:08:04.3 \nother text\n'
- # Will match and return the first address found.
- PCI_ADDRESS_DBSF_MULTILINE_3 = ' 0001:08:04.1 \n 05:03.1 \nother\n'
- PCI_ADDRESS_BSF_MULTILINE_1 = 'first line\n 08:04.3 \n 0002:05:03.1\n'
- BAD_INPUT_1 = 'no address found'
- BAD_INPUT_2 = '001:08:04.1'
- BAD_INPUT_3 = '08:4.1'
-
- def test_pciaddress_dbsf(self):
- pci_address = utils.PciAddress(PciAddressTestCase.PCI_ADDRESS_DBSF)
- self.assertEqual('000a', pci_address.domain)
- self.assertEqual('07', pci_address.bus)
- self.assertEqual('03', pci_address.slot)
- self.assertEqual('2', pci_address.function)
-
- def test_pciaddress_bsf(self):
- pci_address = utils.PciAddress(PciAddressTestCase.PCI_ADDRESS_BSF)
- self.assertEqual('0000', pci_address.domain)
- self.assertEqual('06', pci_address.bus)
- self.assertEqual('02', pci_address.slot)
- self.assertEqual('1', pci_address.function)
-
- def test_pciaddress_dbsf_multiline_1(self):
- pci_address = utils.PciAddress(
- PciAddressTestCase.PCI_ADDRESS_DBSF_MULTILINE_1)
- self.assertEqual('0001', pci_address.domain)
- self.assertEqual('08', pci_address.bus)
- self.assertEqual('04', pci_address.slot)
- self.assertEqual('3', pci_address.function)
-
- def test_pciaddress_dbsf_multiline_2(self):
- pci_address = utils.PciAddress(
- PciAddressTestCase.PCI_ADDRESS_DBSF_MULTILINE_2)
- self.assertEqual('0001', pci_address.domain)
- self.assertEqual('08', pci_address.bus)
- self.assertEqual('04', pci_address.slot)
- self.assertEqual('3', pci_address.function)
-
- def test_pciaddress_dbsf_multiline_3(self):
- pci_address = utils.PciAddress(
- PciAddressTestCase.PCI_ADDRESS_DBSF_MULTILINE_3)
- self.assertEqual('0001', pci_address.domain)
- self.assertEqual('08', pci_address.bus)
- self.assertEqual('04', pci_address.slot)
- self.assertEqual('1', pci_address.function)
-
- def test_pciaddress_bsf_multiline_1(self):
- pci_address = utils.PciAddress(
- PciAddressTestCase.PCI_ADDRESS_BSF_MULTILINE_1)
- self.assertEqual('0000', pci_address.domain)
- self.assertEqual('08', pci_address.bus)
- self.assertEqual('04', pci_address.slot)
- self.assertEqual('3', pci_address.function)
-
- def test_pciaddress_bad_input_no_address(self):
- with self.assertRaises(ValueError) as exception:
- utils.PciAddress(PciAddressTestCase.BAD_INPUT_1)
- self.assertEqual('Invalid PCI address: {}'.format(
- PciAddressTestCase.BAD_INPUT_1), str(exception.exception))
-
- def test_pciaddress_bad_input_dbsf_bad_formatted(self):
- # In this test case, the domain has only 3 characters instead of 4.
- pci_address = utils.PciAddress(
- PciAddressTestCase.BAD_INPUT_2)
- self.assertEqual('0000', pci_address.domain)
- self.assertEqual('08', pci_address.bus)
- self.assertEqual('04', pci_address.slot)
- self.assertEqual('1', pci_address.function)
-
- def test_pciaddress_bad_input_bsf_bad_formatted(self):
- with self.assertRaises(ValueError) as exception:
- utils.PciAddress(PciAddressTestCase.BAD_INPUT_3)
- self.assertEqual('Invalid PCI address: {}'.format(
- PciAddressTestCase.BAD_INPUT_3), str(exception.exception))
diff --git a/tests/unit/network_services/test_yang_model.py b/tests/unit/network_services/test_yang_model.py
deleted file mode 100644
index 0b29da701..000000000
--- a/tests/unit/network_services/test_yang_model.py
+++ /dev/null
@@ -1,135 +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.
-#
-
-# Unittest for yardstick.network_services.utils
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-import yaml
-
-from yardstick.network_services.yang_model import YangModel
-
-
-class YangModelTestCase(unittest.TestCase):
- """Test all Yang Model methods."""
-
- ENTRIES = {
- 'access-list1': {
- 'acl': {
- 'access-list-entries': [{
- 'ace': {
- 'ace-oper-data': {
- 'match-counter': 0},
- 'actions': 'drop,count',
- 'matches': {
- 'destination-ipv4-network':
- '152.16.40.20/24',
- 'destination-port-range': {
- 'lower-port': 0,
- 'upper-port': 65535},
- 'source-ipv4-network': '0.0.0.0/0',
- 'source-port-range': {
- 'lower-port': 0,
- 'upper-port': 65535}},
- 'rule-name': 'rule1588'}},
- {
- 'ace': {
- 'ace-oper-data': {
- 'match-counter': 0},
- 'actions': 'drop,count',
- 'matches': {
- 'destination-ipv4-network':
- '0.0.0.0/0',
- 'destination-port-range': {
- 'lower-port': 0,
- 'upper-port': 65535},
- 'source-ipv4-network':
- '152.16.100.20/24',
- 'source-port-range': {
- 'lower-port': 0,
- 'upper-port': 65535}},
- 'rule-name': 'rule1589'}}],
- 'acl-name': 'sample-ipv4-acl',
- 'acl-type': 'ipv4-acl'}
- }
- }
-
- def test__init__(self):
- cfg = "yang.yaml"
- y = YangModel(cfg)
- self.assertEqual(y.config_file, cfg)
-
- def test_config_file_setter(self):
- cfg = "yang.yaml"
- y = YangModel(cfg)
- self.assertEqual(y.config_file, cfg)
- cfg2 = "yang2.yaml"
- y.config_file = cfg2
- self.assertEqual(y.config_file, cfg2)
-
- def test__get_entries(self):
- cfg = "yang.yaml"
- y = YangModel(cfg)
- y._options = self.ENTRIES
- y._get_entries()
- self.assertIn("p acl add", y._rules)
-
- def test__get_entries_no_options(self):
- cfg = "yang.yaml"
- y = YangModel(cfg)
- y._get_entries()
- self.assertEqual(y._rules, '')
-
- @mock.patch('yardstick.network_services.yang_model.yaml_load')
- @mock.patch('yardstick.network_services.yang_model.open')
- def test__read_config(self, mock_open, mock_safe_load):
- cfg = "yang.yaml"
- y = YangModel(cfg)
- mock_safe_load.return_value = expected = {'key1': 'value1', 'key2': 'value2'}
- y._read_config()
- self.assertDictEqual(y._options, expected)
-
- @mock.patch('yardstick.network_services.yang_model.open')
- def test__read_config_open_error(self, mock_open):
- cfg = "yang.yaml"
- y = YangModel(cfg)
- mock_open.side_effect = IOError('my error')
-
- self.assertEqual(y._options, {})
- with self.assertRaises(IOError) as raised:
- y._read_config()
-
- self.assertIn('my error', str(raised.exception))
- self.assertEqual(y._options, {})
-
- def test_get_rules(self):
- cfg = "yang.yaml"
- y = YangModel(cfg)
- y._read_config = read_mock = mock.Mock()
- y._get_entries = get_mock = mock.Mock()
-
- y._rules = None
- self.assertIsNone(y.get_rules())
- self.assertEqual(read_mock.call_count, 1)
- self.assertEqual(get_mock.call_count, 1)
-
- # True value should prevent calling read and get
- y._rules = 999
- self.assertEqual(y.get_rules(), 999)
- self.assertEqual(read_mock.call_count, 1)
- self.assertEqual(get_mock.call_count, 1)
diff --git a/tests/unit/network_services/traffic_profile/__init__.py b/tests/unit/network_services/traffic_profile/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/traffic_profile/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/traffic_profile/test_base.py b/tests/unit/network_services/traffic_profile/test_base.py
deleted file mode 100644
index 290610361..000000000
--- a/tests/unit/network_services/traffic_profile/test_base.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Unittest for yardstick.network_services.traffic_profile.test_base
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.network_services.traffic_profile.base import \
- TrafficProfile, DummyProfile
-
-
-class TestTrafficProfile(unittest.TestCase):
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64}}
-
- def _get_res_mock(self, **kw):
- _mock = mock.MagicMock()
- for k, v in kw.items():
- setattr(_mock, k, v)
- return _mock
-
- def test___init__(self):
- traffic_profile = TrafficProfile(self.TRAFFIC_PROFILE)
- self.assertEqual(self.TRAFFIC_PROFILE, traffic_profile.params)
-
- def test_execute(self):
- traffic_profile = TrafficProfile(self.TRAFFIC_PROFILE)
- self.assertRaises(NotImplementedError, traffic_profile.execute_traffic, {})
-
- def test_get(self):
- traffic_profile = TrafficProfile(self.TRAFFIC_PROFILE)
- self.assertRaises(RuntimeError, traffic_profile.get,
- self.TRAFFIC_PROFILE)
-
-
-class TestDummyProfile(unittest.TestCase):
- def test_execute(self):
- dummy_profile = DummyProfile(TrafficProfile)
- self.assertIsNone(dummy_profile.execute({}))
diff --git a/tests/unit/network_services/traffic_profile/test_fixed.py b/tests/unit/network_services/traffic_profile/test_fixed.py
deleted file mode 100644
index eb182a2fb..000000000
--- a/tests/unit/network_services/traffic_profile/test_fixed.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.traffic_profile.base import TrafficProfile
- from yardstick.network_services.traffic_profile.fixed import FixedProfile
-
-
-class TestFixedProfile(unittest.TestCase):
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64}}
-
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'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: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',
- '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:03',
- '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'}]}}
-
- def test___init__(self):
- fixed_profile = \
- FixedProfile(TrafficProfile)
- self.assertIsNotNone(fixed_profile)
-
- def test_execute(self):
- traffic_generator = mock.Mock(autospec=TrafficProfile)
- traffic_generator.my_ports = [0, 1]
- traffic_generator.vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- traffic_generator.client = \
- mock.Mock(return_value=True)
- fixed_profile = FixedProfile(self.TRAFFIC_PROFILE)
- fixed_profile.params = self.TRAFFIC_PROFILE
- fixed_profile.first_run = True
- self.assertEqual(None, fixed_profile.execute(traffic_generator))
diff --git a/tests/unit/network_services/traffic_profile/test_http.py b/tests/unit/network_services/traffic_profile/test_http.py
deleted file mode 100644
index e818a0528..000000000
--- a/tests/unit/network_services/traffic_profile/test_http.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-import unittest
-
-from yardstick.network_services.traffic_profile.base import TrafficProfile
-from yardstick.network_services.traffic_profile.http import \
- TrafficProfileGenericHTTP
-
-
-class TestTrafficProfileGenericHTTP(unittest.TestCase):
- def test___init__(self):
- traffic_profile_generic_htt_p = \
- TrafficProfileGenericHTTP(TrafficProfile)
- self.assertIsNotNone(traffic_profile_generic_htt_p)
-
- def test_execute(self):
- traffic_profile_generic_htt_p = \
- TrafficProfileGenericHTTP(TrafficProfile)
- traffic_generator = {}
- self.assertEqual(None,
- traffic_profile_generic_htt_p.execute(
- traffic_generator))
-
- def test__send_http_request(self):
- traffic_profile_generic_htt_p = \
- TrafficProfileGenericHTTP(TrafficProfile)
- self.assertEqual(None,
- traffic_profile_generic_htt_p._send_http_request(
- "10.1.1.1", "250", "/req"))
diff --git a/tests/unit/network_services/traffic_profile/test_http_ixload.py b/tests/unit/network_services/traffic_profile/test_http_ixload.py
deleted file mode 100644
index 5110439fd..000000000
--- a/tests/unit/network_services/traffic_profile/test_http_ixload.py
+++ /dev/null
@@ -1,272 +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.
-
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from oslo_serialization import jsonutils
-
-from yardstick.network_services.traffic_profile import http_ixload
-from yardstick.network_services.traffic_profile.http_ixload import \
- join_non_strings, validate_non_string_sequence
-
-
-class TestJoinNonStrings(unittest.TestCase):
-
- def test_validate_non_string_sequence(self):
- self.assertEqual(validate_non_string_sequence([1, 2, 3]), [1, 2, 3])
- self.assertIsNone(validate_non_string_sequence('123'))
- self.assertIsNone(validate_non_string_sequence(1))
-
- self.assertEqual(validate_non_string_sequence(1, 2), 2)
- self.assertEqual(validate_non_string_sequence(1, default=2), 2)
-
- with self.assertRaises(RuntimeError):
- validate_non_string_sequence(1, raise_exc=RuntimeError)
-
- def test_join_non_strings(self):
- self.assertEqual(join_non_strings(':'), '')
- self.assertEqual(join_non_strings(':', 'a'), 'a')
- self.assertEqual(join_non_strings(':', 'a', 2, 'c'), 'a:2:c')
- self.assertEqual(join_non_strings(':', ['a', 2, 'c']), 'a:2:c')
- self.assertEqual(join_non_strings(':', 'abc'), 'abc')
-
-
-class TestIxLoadTrafficGen(unittest.TestCase):
-
- def test_parse_run_test(self):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
- j = jsonutils.dump_as_bytes(test_input)
- ixload = http_ixload.IXLOADHttpTest(j)
- self.assertDictEqual(ixload.test_input, test_input)
- self.assertIsNone(ixload.parse_run_test())
- self.assertEqual(ixload.ports_to_reassign, [
- ["IXIA_CHASSIS", "CARD", 1],
- ["IXIA_CHASSIS", "CARD", 2],
- ["IXIA_CHASSIS", "CARD", 3],
- ])
-
- def test_format_ports_for_reassignment(self):
- ports = [
- ["IXIA_CHASSIS", "CARD", 1],
- ["IXIA_CHASSIS", "CARD", 2],
- ["IXIA_CHASSIS", "CARD", 3],
- ]
- formatted = http_ixload.IXLOADHttpTest.format_ports_for_reassignment(ports)
- self.assertEqual(formatted, [
- "IXIA_CHASSIS;CARD;1",
- "IXIA_CHASSIS;CARD;2",
- "IXIA_CHASSIS;CARD;3",
- ])
-
- def test_reassign_ports(self):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
- j = jsonutils.dump_as_bytes(test_input)
- ixload = http_ixload.IXLOADHttpTest(j)
- repository = mock.Mock()
- test = mock.MagicMock()
- test.setPorts = mock.Mock()
- ports_to_reassign = [(1, 2, 3), (1, 2, 4)]
- ixload.format_ports_for_reassignment = mock.Mock(return_value=["1;2;3"])
- self.assertIsNone(ixload.reassign_ports(test, repository, ports_to_reassign))
-
- def test_reassign_ports_error(self):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
- j = jsonutils.dump_as_bytes(test_input)
- ixload = http_ixload.IXLOADHttpTest(j)
- repository = mock.Mock()
- test = "test"
- ports_to_reassign = [(1, 2, 3), (1, 2, 4)]
- ixload.format_ports_for_reassignment = mock.Mock(return_value=["1;2;3"])
- ixload.ix_load = mock.MagicMock()
- ixload.ix_load.delete = mock.Mock()
- ixload.ix_load.disconnect = mock.Mock()
- with self.assertRaises(Exception):
- ixload.reassign_ports(test, repository, ports_to_reassign)
-
- def test_stat_collector(self):
- args = [0, 1]
- self.assertIsNone(
- http_ixload.IXLOADHttpTest.stat_collector(*args))
-
- def test_IxL_StatCollectorCommand(self):
- args = [[0, 1, 2, 3], [0, 1, 2, 3]]
- self.assertIsNone(
- http_ixload.IXLOADHttpTest.IxL_StatCollectorCommand(*args))
-
- def test_set_results_dir(self):
- test_stat_collector = mock.MagicMock()
- test_stat_collector.setResultDir = mock.Mock()
- results_on_windows = "c:/Results"
- self.assertIsNone(
- http_ixload.IXLOADHttpTest.set_results_dir(test_stat_collector,
- results_on_windows))
-
- def test_set_results_dir_error(self):
- test_stat_collector = ""
- results_on_windows = "c:/Results"
- with self.assertRaises(Exception):
- http_ixload.IXLOADHttpTest.set_results_dir(test_stat_collector, results_on_windows)
-
- def test_load_config_file(self):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
- j = jsonutils.dump_as_bytes(test_input)
- ixload = http_ixload.IXLOADHttpTest(j)
- ixload.ix_load = mock.MagicMock()
- ixload.ix_load.new = mock.Mock(return_value="")
- self.assertIsNotNone(ixload.load_config_file("ixload.cfg"))
-
- def test_load_config_file_error(self):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
- j = jsonutils.dump_as_bytes(test_input)
- ixload = http_ixload.IXLOADHttpTest(j)
- ixload.ix_load = "test"
- with self.assertRaises(Exception):
- ixload.load_config_file("ixload.cfg")
-
- @mock.patch('yardstick.network_services.traffic_profile.http_ixload.IxLoad')
- @mock.patch('yardstick.network_services.traffic_profile.http_ixload.StatCollectorUtils')
- def test_start_http_test_connect_error(self, mock_collector_type, mock_ixload_type):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
-
- j = jsonutils.dump_as_bytes(test_input)
-
- mock_ixload = mock_ixload_type()
- mock_ixload.connect.side_effect = RuntimeError
-
- ixload = http_ixload.IXLOADHttpTest(j)
- ixload.results_on_windows = 'windows_result_dir'
- ixload.result_dir = 'my_result_dir'
-
- with self.assertRaises(RuntimeError):
- ixload.start_http_test()
-
- @mock.patch('yardstick.network_services.traffic_profile.http_ixload.IxLoad')
- @mock.patch('yardstick.network_services.traffic_profile.http_ixload.StatCollectorUtils')
- def test_start_http_test(self, mock_collector_type, mock_ixload_type):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
-
- j = jsonutils.dump_as_bytes(test_input)
-
- ixload = http_ixload.IXLOADHttpTest(j)
- ixload.results_on_windows = 'windows_result_dir'
- ixload.result_dir = 'my_result_dir'
- ixload.load_config_file = mock.MagicMock()
-
- self.assertIsNone(ixload.start_http_test())
-
- @mock.patch('yardstick.network_services.traffic_profile.http_ixload.IxLoad')
- @mock.patch('yardstick.network_services.traffic_profile.http_ixload.StatCollectorUtils')
- def test_start_http_test_reassign_error(self, mock_collector_type, mock_ixload_type):
- ports = [1, 2, 3]
- test_input = {
- "remote_server": "REMOTE_SERVER",
- "ixload_cfg": "IXLOAD_CFG",
- "result_dir": "RESULT_DIR",
- "ixia_chassis": "IXIA_CHASSIS",
- "IXIA": {
- "card": "CARD",
- "ports": ports,
- },
- }
-
- j = jsonutils.dump_as_bytes(test_input)
-
- ixload = http_ixload.IXLOADHttpTest(j)
- ixload.load_config_file = mock.MagicMock()
-
- reassign_ports = mock.Mock(side_effect=RuntimeError)
- ixload.reassign_ports = reassign_ports
- ixload.results_on_windows = 'windows_result_dir'
- ixload.result_dir = 'my_result_dir'
-
- ixload.start_http_test()
- self.assertEqual(reassign_ports.call_count, 1)
-
- @mock.patch("yardstick.network_services.traffic_profile.http_ixload.IXLOADHttpTest")
- def test_main(self, IXLOADHttpTest):
- args = ["1", "2", "3"]
- http_ixload.main(args)
diff --git a/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py b/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py
deleted file mode 100644
index 616921e33..000000000
--- a/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py
+++ /dev/null
@@ -1,646 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-from __future__ import division
-import unittest
-import mock
-
-from copy import deepcopy
-
-from tests.unit import STL_MOCKS
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.traffic_profile.traffic_profile \
- import TrexProfile
- from yardstick.network_services.traffic_profile.ixia_rfc2544 import \
- IXIARFC2544Profile
- from yardstick.network_services.traffic_profile import ixia_rfc2544
-
-
-class TestIXIARFC2544Profile(unittest.TestCase):
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64,
- },
- }
-
- PROFILE = {'description': 'Traffic profile to run RFC2544 latency',
- 'name': 'rfc2544',
- 'traffic_profile': {'traffic_type': 'IXIARFC2544Profile',
- 'frame_rate': 100},
- IXIARFC2544Profile.DOWNLINK: {'ipv4':
- {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'}},
- 'outer_l3v4': {'dstip4': '1.1.1.1-1.15.255.255',
- 'proto': 'udp', 'count': '1',
- 'srcip4': '90.90.1.1-90.105.255.255',
- 'dscp': 0, 'ttl': 32},
- 'outer_l4': {'srcport': '2001',
- 'dsrport': '1234'}}},
- IXIARFC2544Profile.UPLINK: {'ipv4':
- {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'}},
- 'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
- 'proto': 'udp', 'count': '1',
- 'srcip4': '1.1.1.1-1.15.255.255',
- 'dscp': 0, 'ttl': 32},
- 'outer_l4': {'dstport': '2001',
- 'srcport': '1234'}}},
- 'schema': 'isb:traffic_profile:0.1'}
-
- def test_get_ixia_traffic_profile_error(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.my_ports = [0, 1]
- traffic_generator.uplink_ports = [-1]
- traffic_generator.downlink_ports = [1]
- traffic_generator.client = \
- mock.Mock(return_value=True)
- STATIC_TRAFFIC = {
- IXIARFC2544Profile.UPLINK: {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- IXIARFC2544Profile.DOWNLINK: {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
- ixia_rfc2544.STATIC_TRAFFIC = STATIC_TRAFFIC
-
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.rate = 100
- mac = {"src_mac_0": "00:00:00:00:00:01",
- "src_mac_1": "00:00:00:00:00:02",
- "src_mac_2": "00:00:00:00:00:02",
- "dst_mac_0": "00:00:00:00:00:03",
- "dst_mac_1": "00:00:00:00:00:04",
- "dst_mac_2": "00:00:00:00:00:04"}
- result = r_f_c2544_profile._get_ixia_traffic_profile(
- self.PROFILE, mac, xfile="tmp",
- static_traffic=STATIC_TRAFFIC)
- self.assertIsNotNone(result)
-
- def test_get_ixia_traffic_profile(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.my_ports = [0, 1]
- traffic_generator.uplink_ports = [-1]
- traffic_generator.downlink_ports = [1]
- traffic_generator.client = \
- mock.Mock(return_value=True)
- STATIC_TRAFFIC = {
- IXIARFC2544Profile.UPLINK: {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32,
- "count": "1"
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32,
- "count": "1"
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234",
- "count": "1"
- },
- "traffic_type": "continuous"
- },
- IXIARFC2544Profile.DOWNLINK: {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32,
- "count": "1"
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32,
- "count": "1"
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001",
- "count": "1"
- },
- "traffic_type": "continuous"
- }
- }
- ixia_rfc2544.STATIC_TRAFFIC = STATIC_TRAFFIC
-
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.rate = 100
- mac = {"src_mac_0": "00:00:00:00:00:01",
- "src_mac_1": "00:00:00:00:00:02",
- "src_mac_2": "00:00:00:00:00:02",
- "dst_mac_0": "00:00:00:00:00:03",
- "dst_mac_1": "00:00:00:00:00:04",
- "dst_mac_2": "00:00:00:00:00:04"}
- result = r_f_c2544_profile._get_ixia_traffic_profile(
- self.PROFILE, mac, xfile="tmp", static_traffic=STATIC_TRAFFIC)
- self.assertIsNotNone(result)
-
- @mock.patch("yardstick.network_services.traffic_profile.ixia_rfc2544.open")
- def test_get_ixia_traffic_profile_v6(self, mock_open):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.my_ports = [0, 1]
- traffic_generator.uplink_ports = [-1]
- traffic_generator.downlink_ports = [1]
- traffic_generator.client = \
- mock.Mock(return_value=True)
- STATIC_TRAFFIC = {
- IXIARFC2544Profile.UPLINK: {
- "id": 1,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:03",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "dscp": 0,
- "dstip4": "152.16.40.20",
- "proto": "udp",
- "srcip4": "152.16.100.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "2001",
- "srcport": "1234"
- },
- "traffic_type": "continuous"
- },
- IXIARFC2544Profile.DOWNLINK: {
- "id": 2,
- "bidir": "False",
- "duration": 60,
- "iload": "100",
- "outer_l2": {
- "dstmac": "00:00:00:00:00:04",
- "framesPerSecond": True,
- "framesize": 64,
- "srcmac": "00:00:00:00:00:01"
- },
- "outer_l3": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v4": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l3v6": {
- "count": 1024,
- "dscp": 0,
- "dstip4": "152.16.100.20",
- "proto": "udp",
- "srcip4": "152.16.40.20",
- "ttl": 32
- },
- "outer_l4": {
- "dstport": "1234",
- "srcport": "2001"
- },
- "traffic_type": "continuous"
- }
- }
- ixia_rfc2544.STATIC_TRAFFIC = STATIC_TRAFFIC
-
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.rate = 100
- mac = {"src_mac_0": "00:00:00:00:00:01",
- "src_mac_1": "00:00:00:00:00:02",
- "src_mac_2": "00:00:00:00:00:02",
- "dst_mac_0": "00:00:00:00:00:03",
- "dst_mac_1": "00:00:00:00:00:04",
- "dst_mac_2": "00:00:00:00:00:04"}
- profile_data = {'description': 'Traffic profile to run RFC2544',
- 'name': 'rfc2544',
- 'traffic_profile':
- {'traffic_type': 'IXIARFC2544Profile',
- 'frame_rate': 100},
- IXIARFC2544Profile.DOWNLINK:
- {'ipv4':
- {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'}},
- 'outer_l3v4': {'dstip4': '1.1.1.1-1.15.255.255',
- 'proto': 'udp', 'count': '1',
- 'srcip4': '90.90.1.1-90.105.255.255',
- 'dscp': 0, 'ttl': 32},
- 'outer_l3v6': {'dstip6': '1.1.1.1-1.15.255.255',
- 'proto': 'udp', 'count': '1',
- 'srcip6': '90.90.1.1-90.105.255.255',
- 'dscp': 0, 'ttl': 32},
- 'outer_l4': {'srcport': '2001',
- 'dsrport': '1234'}}},
- IXIARFC2544Profile.UPLINK: {'ipv4':
- {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'}},
- 'outer_l3v4':
- {'dstip4': '9.9.1.1-90.105.255.255',
- 'proto': 'udp', 'count': '1',
- 'srcip4': '1.1.1.1-1.15.255.255',
- 'dscp': 0, 'ttl': 32},
- 'outer_l3v6':
- {'dstip6': '9.9.1.1-90.105.255.255',
- 'proto': 'udp', 'count': '1',
- 'srcip6': '1.1.1.1-1.15.255.255',
- 'dscp': 0, 'ttl': 32},
-
- 'outer_l4': {'dstport': '2001',
- 'srcport': '1234'}}},
- 'schema': 'isb:traffic_profile:0.1'}
- result = r_f_c2544_profile._get_ixia_traffic_profile(
- profile_data, mac, static_traffic=STATIC_TRAFFIC)
- self.assertIsNotNone(result)
-
- def test__get_ixia_traffic_profile_default_args(self):
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
-
- expected = {}
- result = r_f_c2544_profile._get_ixia_traffic_profile({})
- self.assertDictEqual(result, expected)
-
- def test__ixia_traffic_generate(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = \
- mock.Mock(return_value=True)
- traffic = {IXIARFC2544Profile.DOWNLINK: {'iload': 10},
- IXIARFC2544Profile.UPLINK: {'iload': 10}}
- ixia_obj = mock.MagicMock()
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.rate = 100
- result = r_f_c2544_profile._ixia_traffic_generate(traffic_generator,
- traffic, ixia_obj)
- self.assertIsNone(result)
-
- def test_execute(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.first_run = True
- r_f_c2544_profile.params = {IXIARFC2544Profile.DOWNLINK: {'iload': 10},
- IXIARFC2544Profile.UPLINK: {'iload': 10}}
-
- r_f_c2544_profile.get_streams = mock.Mock()
- r_f_c2544_profile.full_profile = {}
- r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
- r_f_c2544_profile.get_multiplier = mock.Mock()
- r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
- ixia_obj = mock.MagicMock()
- self.assertEqual(None, r_f_c2544_profile.execute_traffic(traffic_generator, ixia_obj))
-
- def test_update_traffic_profile(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"], # private, one value for intfs
- "downlink_0": ["xe1", "xe2"], # public, two values for intfs
- "downlink_1": ["xe3"], # not in TRAFFIC PROFILE
- "tenant_0": ["xe4"], # not public or private
- }
-
- ports_expected = [8, 3, 5]
- traffic_generator.vnfd_helper.port_num.side_effect = ports_expected
- traffic_generator.client.return_value = True
-
- traffic_profile = deepcopy(self.TRAFFIC_PROFILE)
- traffic_profile.update({
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1", "xe2"],
- })
-
- r_f_c2544_profile = IXIARFC2544Profile(traffic_profile)
- r_f_c2544_profile.full_profile = {}
- r_f_c2544_profile.get_streams = mock.Mock()
-
- self.assertIsNone(r_f_c2544_profile.update_traffic_profile(traffic_generator))
- self.assertEqual(r_f_c2544_profile.ports, ports_expected)
-
- def test_get_drop_percentage(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- ixia_obj = mock.MagicMock()
- r_f_c2544_profile.execute = mock.Mock()
- r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
- r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
- r_f_c2544_profile.get_multiplier = mock.Mock()
- r_f_c2544_profile.tmp_throughput = 0
- r_f_c2544_profile.tmp_drop = 0
- r_f_c2544_profile.full_profile = {}
- samples = {}
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {"rx_throughput_fps": 20,
- "tx_throughput_fps": 20,
- "rx_throughput_mbps": 10,
- "tx_throughput_mbps": 10,
- "RxThroughput": 10,
- "TxThroughput": 10,
- "in_packets": 1000,
- "out_packets": 1000}
- tol_min = 100.0
- tolerance = 0.0
- self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage(
- traffic_generator, samples,
- tol_min, tolerance, ixia_obj))
-
- def test_get_drop_percentage_update(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.my_ports = [0, 1]
- traffic_generator.uplink_ports = [0]
- traffic_generator.downlink_ports = [1]
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- ixia_obj = mock.MagicMock()
- r_f_c2544_profile.execute = mock.Mock()
- r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
- r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
- r_f_c2544_profile.get_multiplier = mock.Mock()
- r_f_c2544_profile.tmp_throughput = 0
- r_f_c2544_profile.tmp_drop = 0
- r_f_c2544_profile.full_profile = {}
- samples = {}
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {"rx_throughput_fps": 20,
- "tx_throughput_fps": 20,
- "rx_throughput_mbps": 10,
- "tx_throughput_mbps": 10,
- "RxThroughput": 10,
- "TxThroughput": 10,
- "in_packets": 1000,
- "out_packets": 1002}
- tol_min = 0.0
- tolerance = 1.0
- self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage(
- traffic_generator, samples,
- tol_min, tolerance, ixia_obj))
-
- def test_get_drop_percentage_div_zero(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.my_ports = [0, 1]
- traffic_generator.uplink_ports = [0]
- traffic_generator.downlink_ports = [1]
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- ixia_obj = mock.MagicMock()
- r_f_c2544_profile.execute = mock.Mock()
- r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
- r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
- r_f_c2544_profile.get_multiplier = mock.Mock()
- r_f_c2544_profile.tmp_throughput = 0
- r_f_c2544_profile.tmp_drop = 0
- r_f_c2544_profile.full_profile = {}
- samples = {}
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {"rx_throughput_fps": 20,
- "tx_throughput_fps": 20,
- "rx_throughput_mbps": 10,
- "tx_throughput_mbps": 10,
- "RxThroughput": 10,
- "TxThroughput": 10,
- "in_packets": 1000,
- "out_packets": 0}
- tol_min = 0.0
- tolerance = 0.0
- r_f_c2544_profile.tmp_throughput = 0
- self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage(
- traffic_generator, samples,
- tol_min, tolerance, ixia_obj))
-
- def test_get_multiplier(self):
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.max_rate = 100
- r_f_c2544_profile.min_rate = 100
- self.assertEqual("1.0", r_f_c2544_profile.get_multiplier())
-
- def test_start_ixia_latency(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.max_rate = 100
- r_f_c2544_profile.min_rate = 100
- ixia_obj = mock.MagicMock()
- r_f_c2544_profile._get_ixia_traffic_profile = \
- mock.Mock(return_value={})
- r_f_c2544_profile.full_profile = {}
- r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
- self.assertEqual(
- None,
- r_f_c2544_profile.start_ixia_latency(traffic_generator,
- ixia_obj))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/traffic_profile/test_prox_acl.py b/tests/unit/network_services/traffic_profile/test_prox_acl.py
deleted file mode 100644
index ef5bac0d5..000000000
--- a/tests/unit/network_services/traffic_profile/test_prox_acl.py
+++ /dev/null
@@ -1,78 +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.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.traffic_profile.prox_ACL import ProxACLProfile
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxTestDataTuple
-
-
-class TestProxACLProfile(unittest.TestCase):
-
- def test_run_test_with_pkt_size(self):
- def target(*args, **kwargs):
- runs.append(args[2])
- if args[2] < 0 or args[2] > 100:
- raise RuntimeError(' '.join([str(args), str(runs)]))
- if args[2] > 75.0:
- return fail_tuple, {}
- return success_tuple, {}
-
- def get_mock_samples(*args, **kwargs):
- if args[2] < 0:
- raise RuntimeError(' '.join([str(args), str(runs)]))
- return success_tuple
-
- tp_config = {
- 'traffic_profile': {
- 'upper_bound': 100.0,
- 'lower_bound': 0.0,
- 'tolerated_loss': 50.0,
- 'attempts': 20
- },
- }
-
- runs = []
- success_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.1, 5.2, 5.3], 995, 1000, 123.4)
- fail_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.6, 5.7, 5.8], 850, 1000, 123.4)
-
- traffic_gen = mock.MagicMock()
-
- profile_helper = mock.MagicMock()
- profile_helper.run_test = target
-
- profile = ProxACLProfile(tp_config)
- profile.init(mock.MagicMock())
-
- profile.prox_config["attempts"] = 20
- profile.queue = mock.MagicMock()
- profile.tolerated_loss = 50.0
- profile.pkt_size = 128
- profile.duration = 30
- profile.test_value = 100.0
- profile.tolerated_loss = 100.0
- profile._profile_helper = profile_helper
-
- profile.run_test_with_pkt_size(traffic_gen, profile.pkt_size, profile.duration)
diff --git a/tests/unit/network_services/traffic_profile/test_prox_binsearch.py b/tests/unit/network_services/traffic_profile/test_prox_binsearch.py
deleted file mode 100644
index c1f1c825b..000000000
--- a/tests/unit/network_services/traffic_profile/test_prox_binsearch.py
+++ /dev/null
@@ -1,99 +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.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-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.prox_helpers import ProxTestDataTuple
- from yardstick.network_services.traffic_profile.prox_binsearch import ProxBinSearchProfile
-
-
-class TestProxBinSearchProfile(unittest.TestCase):
-
- def test_execute_1(self):
- def target(*args, **kwargs):
- runs.append(args[2])
- if args[2] < 0 or args[2] > 100:
- raise RuntimeError(' '.join([str(args), str(runs)]))
- if args[2] > 75.0:
- return fail_tuple, {}
- return success_tuple, {}
-
- tp_config = {
- 'traffic_profile': {
- 'packet_sizes': [200],
- },
- }
-
- runs = []
- success_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.1, 5.2, 5.3], 995, 1000, 123.4)
- fail_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.6, 5.7, 5.8], 850, 1000, 123.4)
-
- traffic_generator = mock.MagicMock()
-
- profile_helper = mock.MagicMock()
- profile_helper.run_test = target
-
- profile = ProxBinSearchProfile(tp_config)
- profile.init(mock.MagicMock())
- profile._profile_helper = profile_helper
-
- profile.execute_traffic(traffic_generator)
- self.assertEqual(round(profile.current_lower, 2), 74.69)
- self.assertEqual(round(profile.current_upper, 2), 75.39)
- self.assertEqual(len(runs), 8)
-
- def test_execute_2(self):
- def target(*args, **kwargs):
- runs.append(args[2])
- if args[2] < 0 or args[2] > 100:
- raise RuntimeError(' '.join([str(args), str(runs)]))
- if args[2] > 25.0:
- return fail_tuple, {}
- return success_tuple, {}
-
- tp_config = {
- 'traffic_profile': {
- 'packet_sizes': [200],
- 'test_precision': 2.0,
- },
- }
-
- runs = []
- success_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.1, 5.2, 5.3], 995, 1000, 123.4)
- fail_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.6, 5.7, 5.8], 850, 1000, 123.4)
-
- traffic_generator = mock.MagicMock()
-
- profile_helper = mock.MagicMock()
- profile_helper.run_test = target
-
- profile = ProxBinSearchProfile(tp_config)
- profile.init(mock.MagicMock())
- profile._profile_helper = profile_helper
-
- profile.execute_traffic(traffic_generator)
- self.assertEqual(round(profile.current_lower, 2), 24.06)
- self.assertEqual(round(profile.current_upper, 2), 25.47)
- self.assertEqual(len(runs), 7)
diff --git a/tests/unit/network_services/traffic_profile/test_prox_profile.py b/tests/unit/network_services/traffic_profile/test_prox_profile.py
deleted file mode 100644
index 078e72b8e..000000000
--- a/tests/unit/network_services/traffic_profile/test_prox_profile.py
+++ /dev/null
@@ -1,117 +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.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.traffic_profile.prox_profile import ProxProfile
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxResourceHelper
-
-
-class TestProxProfile(unittest.TestCase):
-
- def test_fill_samples(self):
- samples = {}
- traffic_generator = mock.MagicMock()
- traffic_generator.vpci_if_name_ascending = [
- ['id1', 'name1'],
- ['id2', 'name2'],
- ]
-
- traffic_generator.resource_helper.sut.port_stats.side_effect = [
- list(range(12)),
- list(range(10, 22)),
- ]
-
- expected = {
- 'name1': {
- 'in_packets': 6,
- 'out_packets': 7,
- },
- 'name2': {
- 'in_packets': 16,
- 'out_packets': 17,
- },
- }
- ProxProfile.fill_samples(samples, traffic_generator)
- self.assertDictEqual(samples, expected)
-
- def test_init(self):
- tp_config = {
- 'traffic_profile': {},
- }
-
- profile = ProxProfile(tp_config)
- queue = mock.Mock()
- profile.init(queue)
- self.assertIs(profile.queue, queue)
-
- def test_execute_traffic(self):
- packet_sizes = [
- 10,
- 100,
- 1000,
- ]
- tp_config = {
- 'traffic_profile': {
- 'packet_sizes': packet_sizes,
- },
- }
-
- traffic_generator = mock.MagicMock()
-
- setup_helper = traffic_generator.setup_helper
- setup_helper.find_in_section.return_value = None
-
- prox_resource_helper = ProxResourceHelper(setup_helper)
- traffic_generator.resource_helper = prox_resource_helper
-
- profile = ProxProfile(tp_config)
-
- self.assertFalse(profile.done)
- for _ in packet_sizes:
- with self.assertRaises(NotImplementedError):
- profile.execute_traffic(traffic_generator)
-
- self.assertIsNone(profile.execute_traffic(traffic_generator))
- self.assertTrue(profile.done)
-
- def test_bounds_iterator(self):
- tp_config = {
- 'traffic_profile': {},
- }
-
- profile = ProxProfile(tp_config)
- value = 0.0
- for value in profile.bounds_iterator():
- pass
-
- self.assertEqual(value, 100.0)
-
- mock_logger = mock.MagicMock()
- for _ in profile.bounds_iterator(mock_logger):
- pass
-
- self.assertEqual(mock_logger.debug.call_count, 1)
- self.assertEqual(mock_logger.info.call_count, 10)
diff --git a/tests/unit/network_services/traffic_profile/test_prox_ramp.py b/tests/unit/network_services/traffic_profile/test_prox_ramp.py
deleted file mode 100644
index 1acec2f68..000000000
--- a/tests/unit/network_services/traffic_profile/test_prox_ramp.py
+++ /dev/null
@@ -1,97 +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.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.traffic_profile.prox_ramp import ProxRampProfile
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxProfileHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxTestDataTuple
-
-
-class TestProxRampProfile(unittest.TestCase):
-
- def test_run_test_with_pkt_size(self):
- tp_config = {
- 'traffic_profile': {
- 'lower_bound': 10.0,
- 'upper_bound': 100.0,
- 'step_value': 10.0,
- },
- }
-
- success_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.1, 5.2, 5.3], 995, 1000, 123.4)
-
- traffic_gen = mock.MagicMock()
- traffic_gen._test_type = 'Generic'
-
- profile_helper = ProxProfileHelper(traffic_gen.resource_helper)
- profile_helper.run_test = run_test = mock.MagicMock(return_value=success_tuple)
-
- profile = ProxRampProfile(tp_config)
- profile.fill_samples = fill_samples = mock.MagicMock()
- profile.queue = mock.MagicMock()
- profile._profile_helper = profile_helper
-
- profile.run_test_with_pkt_size(traffic_gen, 128, 30)
- self.assertEqual(run_test.call_count, 10)
- self.assertEqual(fill_samples.call_count, 10)
-
- def test_run_test_with_pkt_size_with_fail(self):
- tp_config = {
- 'traffic_profile': {
- 'lower_bound': 10.0,
- 'upper_bound': 100.0,
- 'step_value': 10.0,
- },
- }
-
- success_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.1, 5.2, 5.3], 995, 1000, 123.4)
- fail_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.6, 5.7, 5.8], 850, 1000, 123.4)
-
- result_list = [
- success_tuple,
- success_tuple,
- success_tuple,
- fail_tuple,
- success_tuple,
- fail_tuple,
- fail_tuple,
- fail_tuple,
- ]
-
- traffic_gen = mock.MagicMock()
- traffic_gen._test_type = 'Generic'
-
- profile_helper = ProxProfileHelper(traffic_gen.resource_helper)
- profile_helper.run_test = run_test = mock.MagicMock(side_effect=result_list)
-
- profile = ProxRampProfile(tp_config)
- profile.fill_samples = fill_samples = mock.MagicMock()
- profile.queue = mock.MagicMock()
- profile._profile_helper = profile_helper
-
- profile.run_test_with_pkt_size(traffic_gen, 128, 30)
- self.assertEqual(run_test.call_count, 4)
- self.assertEqual(fill_samples.call_count, 3)
diff --git a/tests/unit/network_services/traffic_profile/test_rfc2544.py b/tests/unit/network_services/traffic_profile/test_rfc2544.py
deleted file mode 100644
index 221233710..000000000
--- a/tests/unit/network_services/traffic_profile/test_rfc2544.py
+++ /dev/null
@@ -1,290 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-from __future__ import division
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.traffic_profile.traffic_profile \
- import TrexProfile
- from yardstick.network_services.traffic_profile.rfc2544 import \
- RFC2544Profile
-
-
-class TestRFC2544Profile(unittest.TestCase):
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64}}
-
- PROFILE = {'description': 'Traffic profile to run RFC2544 latency',
- 'name': 'rfc2544',
- 'traffic_profile': {'traffic_type': 'RFC2544Profile',
- 'frame_rate': 100},
- 'downlink_0': {'ipv4':
- {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'}},
- 'outer_l3v4': {'dstip4': '1.1.1.1-1.15.255.255',
- 'proto': 'udp',
- 'srcip4': '90.90.1.1-90.105.255.255',
- 'dscp': 0, 'ttl': 32, 'count': 1},
- 'outer_l4': {'srcport': '2001',
- 'dsrport': '1234', 'count': 1}}},
- 'uplink_0': {'ipv4':
- {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'}},
- 'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
- 'proto': 'udp',
- 'srcip4': '1.1.1.1-1.15.255.255',
- 'dscp': 0, 'ttl': 32, 'count': 1},
- 'outer_l4': {'dstport': '2001',
- 'srcport': '1234', 'count': 1}}},
- 'schema': 'isb:traffic_profile:0.1'}
-
- def test___init__(self):
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- assert r_f_c2544_profile.rate
-
- def test_execute(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- r_f_c2544_profile.first_run = True
- self.assertEqual(None, r_f_c2544_profile.execute_traffic(traffic_generator))
-
- def test_get_drop_percentage(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = mock.Mock(return_value=True)
-
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- r_f_c2544_profile.register_generator(traffic_generator)
- self.assertIsNone(r_f_c2544_profile.execute_traffic(traffic_generator))
-
- samples = {}
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {
- "rx_throughput_fps": 20,
- "tx_throughput_fps": 20,
- "rx_throughput_mbps": 10,
- "tx_throughput_mbps": 10,
- "in_packets": 1000,
- "out_packets": 1000,
- }
-
- expected = {
- 'DropPercentage': 0.0,
- 'RxThroughput': 100 / 3.0,
- 'TxThroughput': 100 / 3.0,
- 'CurrentDropPercentage': 0.0,
- 'Throughput': 66.66666666666667,
- 'xe0': {
- 'tx_throughput_fps': 20,
- 'in_packets': 1000,
- 'out_packets': 1000,
- 'rx_throughput_mbps': 10,
- 'tx_throughput_mbps': 10,
- 'rx_throughput_fps': 20,
- },
- }
- traffic_generator.generate_samples = mock.MagicMock(return_value=samples)
- traffic_generator.RUN_DURATION = 30
- traffic_generator.rfc2544_helper.tolerance_low = 0.0001
- traffic_generator.rfc2544_helper.tolerance_high = 0.0001
- result = r_f_c2544_profile.get_drop_percentage(traffic_generator)
- self.assertDictEqual(result, expected)
-
- def test_get_drop_percentage_update(self):
- traffic_generator = mock.Mock(autospec=RFC2544Profile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = mock.Mock(return_value=True)
-
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- r_f_c2544_profile.register_generator(traffic_generator)
- self.assertIsNone(r_f_c2544_profile.execute_traffic())
-
- samples = {}
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {
- "rx_throughput_fps": 20,
- "tx_throughput_fps": 20,
- "rx_throughput_mbps": 10,
- "tx_throughput_mbps": 10,
- "in_packets": 1000,
- "out_packets": 1002,
- }
- tol_min = 0.0
- tolerance = 1.0
- expected = {
- 'DropPercentage': 0.1996,
- 'RxThroughput': 33.333333333333336,
- 'TxThroughput': 33.4,
- 'CurrentDropPercentage': 0.1996,
- 'Throughput': 66.66666666666667,
- 'xe0': {
- 'tx_throughput_fps': 20,
- 'in_packets': 1000,
- 'out_packets': 1002,
- 'rx_throughput_mbps': 10,
- 'tx_throughput_mbps': 10,
- 'rx_throughput_fps': 20,
- },
- }
- traffic_generator.generate_samples = mock.MagicMock(return_value=samples)
- traffic_generator.RUN_DURATION = 30
- traffic_generator.rfc2544_helper.tolerance_low = 0.0001
- traffic_generator.rfc2544_helper.tolerance_high = 0.0001
- result = r_f_c2544_profile.get_drop_percentage(traffic_generator)
- self.assertDictEqual(expected, result)
-
- def test_get_drop_percentage_div_zero(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "uplink_0": ["xe0"],
- "downlink_0": ["xe1"],
- }
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- self.assertEqual(None, r_f_c2544_profile.execute_traffic(traffic_generator))
- samples = {}
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {"rx_throughput_fps": 20,
- "tx_throughput_fps": 20,
- "rx_throughput_mbps": 10,
- "tx_throughput_mbps": 10,
- "in_packets": 1000,
- "out_packets": 0}
- tol_min = 0.0
- tolerance = 0.0
- r_f_c2544_profile.throughput_max = 0
- expected = {
- 'DropPercentage': 100.0, 'RxThroughput': 100 / 3.0,
- 'TxThroughput': 0.0, 'CurrentDropPercentage': 100.0,
- 'Throughput': 66.66666666666667,
- 'xe0': {
- 'tx_throughput_fps': 20, 'in_packets': 1000,
- 'out_packets': 0, 'rx_throughput_mbps': 10,
- 'tx_throughput_mbps': 10, 'rx_throughput_fps': 20
- }
- }
- traffic_generator.generate_samples = mock.MagicMock(return_value=samples)
- traffic_generator.RUN_DURATION = 30
- traffic_generator.rfc2544_helper.tolerance_low = 0.0001
- traffic_generator.rfc2544_helper.tolerance_high = 0.0001
- self.assertDictEqual(expected,
- r_f_c2544_profile.get_drop_percentage(traffic_generator))
-
- def test_get_multiplier(self):
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.max_rate = 100
- r_f_c2544_profile.min_rate = 100
- self.assertEqual("1.0", r_f_c2544_profile.get_multiplier())
-
- def test_calculate_pps(self):
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.rate = 100
- r_f_c2544_profile.pps = 100
- samples = {'Throughput': 4549093.33}
- self.assertEqual((2274546.67, 1.0),
- r_f_c2544_profile.calculate_pps(samples))
-
- def test_create_single_stream(self):
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile._create_single_packet = mock.MagicMock()
- r_f_c2544_profile.pg_id = 1
- self.assertIsNotNone(
- r_f_c2544_profile.create_single_stream(64, 2274546.67))
-
- def test_create_single_stream_no_pg_id(self):
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile._create_single_packet = mock.MagicMock()
- r_f_c2544_profile.pg_id = 0
- self.assertIsNotNone(
- r_f_c2544_profile.create_single_stream(64, 2274546.67))
-
- def test_execute_latency(self):
- traffic_generator = mock.Mock(autospec=TrexProfile)
- traffic_generator.networks = {
- "private_0": ["xe0"],
- "public_0": ["xe1"],
- }
- traffic_generator.client = \
- mock.Mock(return_value=True)
- r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
- r_f_c2544_profile.params = self.PROFILE
- r_f_c2544_profile.first_run = True
- samples = {}
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {"rx_throughput_fps": 20,
- "tx_throughput_fps": 20,
- "rx_throughput_mbps": 10,
- "tx_throughput_mbps": 10,
- "in_packets": 1000,
- "out_packets": 0}
-
- samples['Throughput'] = 4549093.33
- r_f_c2544_profile.calculate_pps = mock.Mock(return_value=[2274546.67,
- 1.0])
-
- self.assertEqual(None,
- r_f_c2544_profile.execute_latency(traffic_generator,
- samples))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/unit/network_services/traffic_profile/test_traffic_profile.py b/tests/unit/network_services/traffic_profile/test_traffic_profile.py
deleted file mode 100644
index 8355c85b6..000000000
--- a/tests/unit/network_services/traffic_profile/test_traffic_profile.py
+++ /dev/null
@@ -1,246 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-
-STLClient = mock.MagicMock()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.traffic_profile.base import TrafficProfile
- from yardstick.network_services.traffic_profile.traffic_profile import TrexProfile
- from yardstick.network_services.traffic_profile.traffic_profile import SRC
- from yardstick.network_services.traffic_profile.traffic_profile import DST
- from yardstick.network_services.traffic_profile.traffic_profile import ETHERNET
- from yardstick.network_services.traffic_profile.traffic_profile import IP
- from yardstick.network_services.traffic_profile.traffic_profile import IPv6
- from yardstick.network_services.traffic_profile.traffic_profile import UDP
- from yardstick.network_services.traffic_profile.traffic_profile import SRC_PORT
- from yardstick.network_services.traffic_profile.traffic_profile import DST_PORT
- from yardstick.network_services.traffic_profile.traffic_profile import TYPE_OF_SERVICE
-
-
-class TestTrexProfile(unittest.TestCase):
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64}}
-
- EXAMPLE_ETHERNET_ADDR = "00:00:00:00:00:01"
- EXAMPLE_IP_ADDR = "10.0.0.1"
- EXAMPLE_IPv6_ADDR = "0064:ff9b:0:0:0:0:9810:6414"
-
- PROFILE = {'description': 'Traffic profile to run RFC2544 latency',
- 'name': 'rfc2544',
- 'traffic_profile': {'traffic_type': 'RFC2544Profile',
- 'frame_rate': 100},
- TrafficProfile.DOWNLINK: {'ipv4': {'outer_l2': {'framesize': {'64B': '100',
- '1518B': '0',
- '128B': '0',
- '1400B': '0',
- '256B': '0',
- '373b': '0',
- '570B': '0'},
- "srcmac": "00:00:00:00:00:02",
- "dstmac": "00:00:00:00:00:01"},
- 'outer_l3v4': {'dstip4': '1.1.1.1-1.1.2.2',
- 'proto': 'udp',
- 'srcip4': '9.9.1.1-90.1.2.2',
- 'dscp': 0, 'ttl': 32,
- 'count': 1},
- 'outer_l4': {'srcport': '2001',
- 'dsrport': '1234',
- 'count': 1}}},
- TrafficProfile.UPLINK: {'ipv4':
- {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'},
- "srcmac": "00:00:00:00:00:01",
- "dstmac": "00:00:00:00:00:02"},
- 'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
- 'proto': 'udp',
- 'srcip4': '1.1.1.1-1.15.255.255',
- 'dscp': 0, 'ttl': 32, 'count': 1},
- 'outer_l4': {'dstport': '2001',
- 'srcport': '1234',
- 'count': 1}}},
- 'schema': 'isb:traffic_profile:0.1'}
- PROFILE_v6 = {'description': 'Traffic profile to run RFC2544 latency',
- 'name': 'rfc2544',
- 'traffic_profile': {'traffic_type': 'RFC2544Profile',
- 'frame_rate': 100},
- TrafficProfile.DOWNLINK: {'ipv6': {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'},
- "srcmac": "00:00:00:00:00:02",
- "dstmac": "00:00:00:00:00:01"},
- 'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420',
- 'proto': 'udp',
- 'srcip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820',
- 'dscp': 0, 'ttl': 32,
- 'count': 1},
- 'outer_l4': {'srcport': '2001',
- 'dsrport': '1234',
- 'count': 1}}},
- TrafficProfile.UPLINK:
- {'ipv6': {'outer_l2': {'framesize':
- {'64B': '100', '1518B': '0',
- '128B': '0', '1400B': '0',
- '256B': '0', '373b': '0',
- '570B': '0'},
- "srcmac": "00:00:00:00:00:01",
- "dstmac": "00:00:00:00:00:02"},
- 'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820',
- 'proto': 'udp',
- 'srcip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420',
- 'dscp': 0, 'ttl': 32,
- 'count': 1},
- 'outer_l4': {'dstport': '2001',
- 'srcport': '1234',
- 'count': 1}}},
- 'schema': 'isb:traffic_profile:0.1'}
-
- def test___init__(self):
- TrafficProfile.params = self.PROFILE
- trex_profile = \
- TrexProfile(TrafficProfile)
- self.assertEqual(trex_profile.pps, 100)
-
- def test_qinq(self):
- qinq = {"S-VLAN": {"id": 128, "priority": 0, "cfi": 0},
- "C-VLAN": {"id": 512, "priority": 0, "cfi": 0}}
-
- trex_profile = \
- TrexProfile(TrafficProfile)
- self.assertEqual(None, trex_profile.set_qinq(qinq))
-
- qinq = {"S-VLAN": {"id": "128-130", "priority": 0, "cfi": 0},
- "C-VLAN": {"id": "512-515", "priority": 0, "cfi": 0}}
- self.assertEqual(None, trex_profile.set_qinq(qinq))
-
- def test__set_outer_l2_fields(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- qinq = {"S-VLAN": {"id": 128, "priority": 0, "cfi": 0},
- "C-VLAN": {"id": 512, "priority": 0, "cfi": 0}}
- outer_l2 = self.PROFILE[TrafficProfile.UPLINK]['ipv4']['outer_l2']
- outer_l2['QinQ'] = qinq
- self.assertEqual(None, trex_profile._set_outer_l2_fields(outer_l2))
-
- def test__set_outer_l3v4_fields(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- outer_l3v4 = self.PROFILE[TrafficProfile.UPLINK]['ipv4']['outer_l3v4']
- outer_l3v4['proto'] = 'tcp'
- self.assertEqual(None, trex_profile._set_outer_l3v4_fields(outer_l3v4))
-
- def test__set_outer_l3v6_fields(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- outer_l3v6 = self.PROFILE_v6[TrafficProfile.UPLINK]['ipv6']['outer_l3v4']
- outer_l3v6['proto'] = 'tcp'
- outer_l3v6['tc'] = 1
- outer_l3v6['hlim'] = 10
- self.assertEqual(None, trex_profile._set_outer_l3v6_fields(outer_l3v6))
-
- def test__set_outer_l4_fields(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- outer_l4 = self.PROFILE[TrafficProfile.UPLINK]['ipv4']['outer_l4']
- self.assertEqual(None, trex_profile._set_outer_l4_fields(outer_l4))
-
- def test_get_streams(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- trex_profile.params = self.PROFILE
- profile_data = self.PROFILE[TrafficProfile.UPLINK]
- self.assertIsNotNone(trex_profile.get_streams(profile_data))
- trex_profile.pg_id = 1
- self.assertIsNotNone(trex_profile.get_streams(profile_data))
- trex_profile.params = self.PROFILE_v6
- trex_profile.profile_data = self.PROFILE_v6[TrafficProfile.UPLINK]
- self.assertIsNotNone(trex_profile.get_streams(profile_data))
- trex_profile.pg_id = 1
- self.assertIsNotNone(trex_profile.get_streams(profile_data))
-
- def test_generate_packets(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- trex_profile.fsize = 10
- trex_profile.base_pkt = [10]
- self.assertIsNone(trex_profile.generate_packets())
-
- def test_generate_imix_data_error(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- self.assertEqual({}, trex_profile.generate_imix_data(False))
-
- def test__get_start_end_ipv6(self):
- trex_profile = \
- TrexProfile(TrafficProfile)
- self.assertRaises(SystemExit, trex_profile._get_start_end_ipv6,
- "1.1.1.3", "1.1.1.1")
-
- def test__general_single_action_partial(self):
- trex_profile = TrexProfile(TrafficProfile)
-
- trex_profile._general_single_action_partial(ETHERNET)(SRC)(self.EXAMPLE_ETHERNET_ADDR)
- self.assertEqual(self.EXAMPLE_ETHERNET_ADDR, trex_profile.ether_packet.src)
-
- trex_profile._general_single_action_partial(IP)(DST)(self.EXAMPLE_IP_ADDR)
- self.assertEqual(self.EXAMPLE_IP_ADDR, trex_profile.ip_packet.dst)
-
- trex_profile._general_single_action_partial(IPv6)(DST)(self.EXAMPLE_IPv6_ADDR)
- self.assertEqual(self.EXAMPLE_IPv6_ADDR, trex_profile.ip6_packet.dst)
-
- trex_profile._general_single_action_partial(UDP)(SRC_PORT)(5060)
- self.assertEqual(5060, trex_profile.udp_packet.sport)
-
- trex_profile._general_single_action_partial(IP)(TYPE_OF_SERVICE)(0)
- self.assertEqual(0, trex_profile.ip_packet.tos)
-
- def test__set_proto_addr(self):
- trex_profile = TrexProfile(TrafficProfile)
-
- ether_range = "00:00:00:00:00:01-00:00:00:00:00:02"
- ip_range = "1.1.1.2-1.1.1.10"
- ipv6_range = '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420'
-
- trex_profile._set_proto_addr(ETHERNET, SRC, ether_range)
- trex_profile._set_proto_addr(ETHERNET, DST, ether_range)
- trex_profile._set_proto_addr(IP, SRC, ip_range)
- trex_profile._set_proto_addr(IP, DST, ip_range)
- trex_profile._set_proto_addr(IPv6, SRC, ipv6_range)
- trex_profile._set_proto_addr(IPv6, DST, ipv6_range)
- trex_profile._set_proto_addr(UDP, SRC_PORT, "5060-5090")
- trex_profile._set_proto_addr(UDP, DST_PORT, "5060")
diff --git a/tests/unit/network_services/vnf_generic/__init__.py b/tests/unit/network_services/vnf_generic/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/vnf_generic/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/vnf_generic/test_vnfdgen.py b/tests/unit/network_services/vnf_generic/test_vnfdgen.py
deleted file mode 100644
index ee881c963..000000000
--- a/tests/unit/network_services/vnf_generic/test_vnfdgen.py
+++ /dev/null
@@ -1,281 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Unittest for yardstick.network_services.vnf_generic.vnfdgen
-
-from __future__ import absolute_import
-import unittest
-from six.moves import range
-
-from yardstick.common.yaml_loader import yaml_load
-from yardstick.network_services.vnf_generic import vnfdgen
-
-
-UPLINK = "uplink"
-DOWNLINK = "downlink"
-
-TREX_VNFD_TEMPLATE = """
-vnfd:vnfd-catalog:
- vnfd:
- - id: TrexTrafficGen # ISB class mapping
- name: trexgen
- short-name: trexgen
- description: TRex stateless traffic generator for RFC2544
- mgmt-interface:
- vdu-id: trexgen-baremetal
- user: {{user}} # Value filled by vnfdgen
- password: {{password}} # Value filled by vnfdgen
- ip: {{ip}} # Value filled by vnfdgen
- connection-point:
- - name: xe0
- type: VPORT
- - name: xe1
- type: VPORT
- vdu:
- - id: trexgen-baremetal
- name: trexgen-baremetal
- description: TRex stateless traffic generator for RFC2544
- external-interface:
- - name: xe0
- virtual-interface:
- type: PCI-PASSTHROUGH
- vpci: '{{ interfaces.xe0.vpci}}'
- local_ip: '{{ interfaces.xe0.local_ip }}'
- dst_ip: '{{ interfaces.xe0.dst_ip }}'
- local_mac: '{{ interfaces.xe0.local_mac }}'
- dst_mac: '{{ interfaces.xe0.dst_mac }}'
- bandwidth: 10 Gbps
- vnfd-connection-point-ref: xe0
- - name: xe1
- virtual-interface:
- type: PCI-PASSTHROUGH
- vpci: '{{ interfaces.xe1.vpci }}'
- local_ip: '{{ interfaces.xe1.local_ip }}'
- dst_ip: '{{ interfaces.xe1.dst_ip }}'
- local_mac: '{{ interfaces.xe1.local_mac }}'
- dst_mac: '{{ interfaces.xe1.dst_mac }}'
- bandwidth: 10 Gbps
- vnfd-connection-point-ref: xe1
- routing_table: {{ routing_table }}
- nd_route_tbl: {{ nd_route_tbl }}
-
- benchmark:
- kpi:
- - rx_throughput_fps
- - tx_throughput_fps
- - tx_throughput_mbps
- - rx_throughput_mbps
- - tx_throughput_pc_linerate
- - rx_throughput_pc_linerate
- - min_latency
- - max_latency
- - avg_latency
-"""
-
-COMPLETE_TREX_VNFD = \
- {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'benchmark':
- {'kpi':
- ['rx_throughput_fps',
- 'tx_throughput_fps',
- 'tx_throughput_mbps',
- 'rx_throughput_mbps',
- 'tx_throughput_pc_linerate',
- 'rx_throughput_pc_linerate',
- 'min_latency',
- 'max_latency',
- 'avg_latency']},
- 'connection-point': [{'name': 'xe0',
- 'type': 'VPORT'},
- {'name': 'xe1',
- 'type': 'VPORT'}],
- 'description': 'TRex stateless traffic generator for RFC2544',
- 'id': 'TrexTrafficGen',
- 'mgmt-interface': {'ip': '1.1.1.1',
- 'password': 'berta',
- 'user': 'berta',
- 'vdu-id': 'trexgen-baremetal'},
- 'name': 'trexgen',
- 'short-name': 'trexgen',
- 'vdu': [{'description': 'TRex stateless traffic generator for RFC2544',
- 'external-interface':
- [{'name': 'xe0',
- 'virtual-interface': {'bandwidth': '10 Gbps',
- 'dst_ip': '1.1.1.1',
- 'dst_mac': '00:01:02:03:04:05',
- 'local_ip': '1.1.1.2',
- 'local_mac': '00:01:02:03:05:05',
- 'type': 'PCI-PASSTHROUGH',
- 'vpci': '0000:00:10.2'},
- 'vnfd-connection-point-ref': 'xe0'},
- {'name': 'xe1',
- 'virtual-interface': {'bandwidth': '10 Gbps',
- 'dst_ip': '2.1.1.1',
- 'dst_mac': '00:01:02:03:04:06',
- 'local_ip': '2.1.1.2',
- 'local_mac': '00:01:02:03:05:06',
- 'type': 'PCI-PASSTHROUGH',
- 'vpci': '0000:00:10.1'},
- 'vnfd-connection-point-ref': 'xe1'}],
- 'id': 'trexgen-baremetal',
- 'nd_route_tbl': [{'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0',
- 'netmask': '112',
- 'network': '0064:ff9b:0:0:0:0:9810:6414'},
- {'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1',
- 'netmask': '112',
- 'network': '0064:ff9b:0:0:0:0:9810:2814'}],
- 'routing_table': [{'gateway': '152.16.100.20',
- 'if': 'xe0',
- 'netmask': '255.255.255.0',
- 'network': '152.16.100.20'},
- {'gateway': '152.16.40.20',
- 'if': 'xe1',
- 'netmask': '255.255.255.0',
- 'network': '152.16.40.20'}],
- 'name': 'trexgen-baremetal'}]}]}}
-
-NODE_CFG = {'ip': '1.1.1.1',
- 'name': 'demeter',
- 'password': 'berta',
- 'role': 'TrafficGen',
- 'user': 'berta',
- 'interfaces': {'xe0': {'dpdk_port_num': 1,
- 'dst_ip': '1.1.1.1',
- 'dst_mac': '00:01:02:03:04:05',
- 'local_ip': '1.1.1.2',
- 'local_mac': '00:01:02:03:05:05',
- 'vpci': '0000:00:10.2'},
- 'xe1': {'dpdk_port_num': 0,
- 'dst_ip': '2.1.1.1',
- 'dst_mac': '00:01:02:03:04:06',
- 'local_ip': '2.1.1.2',
- 'local_mac': '00:01:02:03:05:06',
- 'vpci': '0000:00:10.1'}},
- 'nd_route_tbl': [{u'gateway': u'0064:ff9b:0:0:0:0:9810:6414',
- u'if': u'xe0',
- u'netmask': u'112',
- u'network': u'0064:ff9b:0:0:0:0:9810:6414'},
- {u'gateway': u'0064:ff9b:0:0:0:0:9810:2814',
- u'if': u'xe1',
- u'netmask': u'112',
- u'network': u'0064:ff9b:0:0:0:0:9810:2814'}],
- 'routing_table': [{u'gateway': u'152.16.100.20',
- u'if': u'xe0',
- u'netmask': u'255.255.255.0',
- u'network': u'152.16.100.20'},
- {u'gateway': u'152.16.40.20',
- u'if': u'xe1',
- u'netmask': u'255.255.255.0',
- u'network': u'152.16.40.20'}],
- }
-
-
-# need to template, but can't use {} so use %s
-TRAFFIC_PROFILE_TPL = """
-%(0)s:
- - ipv4:
- outer_l2:
- framesize:
- 64B: "{{ get(imix, '%(0)s.imix_small', 10) }}"
- 128B: "{{ get(imix, '%(0)s.imix_128B', 10) }}"
- 256B: "{{ get(imix, '%(0)s.imix_256B', 10) }}"
- 373B: "{{ get(imix, '%(0)s.imix_373B', 10) }}"
- 570B: "{{get(imix, '%(0)s.imix_570B', 10) }}"
- 1400B: "{{get(imix, '%(0)s.imix_1400B', 10) }}"
- 1518B: "{{get(imix, '%(0)s.imix_1500B', 40) }}"
-""" % {"0": UPLINK}
-
-TRAFFIC_PROFILE = {
- UPLINK: [{"ipv4": {"outer_l2":
- {"framesize": {"64B": '10', "128B": '10',
- "256B": '10', "373B": '10',
- "570B": '10', "1400B": '10',
- "1518B": '40'}}}}]}
-
-
-class TestRender(unittest.TestCase):
-
- def test_render_none(self):
-
- tmpl = "{{ routing_table }}"
- self.assertEqual(vnfdgen.render(tmpl, routing_table=None), u'~')
- self.assertEqual(yaml_load(vnfdgen.render(tmpl, routing_table=None)), None)
-
- def test_render_unicode_dict(self):
-
- tmpl = "{{ routing_table }}"
- self.assertEqual(yaml_load(vnfdgen.render(tmpl, **NODE_CFG)), NODE_CFG["routing_table"])
-
-
-class TestVnfdGen(unittest.TestCase):
- """ Class to verify VNFS testcases """
-
- def test_generate_vnfd(self):
- """ Function to verify vnfd generation based on template """
- self.maxDiff = None
- generated_vnfd = vnfdgen.generate_vnfd(TREX_VNFD_TEMPLATE, NODE_CFG)
- self.assertDictEqual(COMPLETE_TREX_VNFD, generated_vnfd)
-
- def test_generate_tp_no_vars(self):
- """ Function to verify traffic profile generation without imix """
-
- self.maxDiff = None
- generated_tp = vnfdgen.generate_vnfd(TRAFFIC_PROFILE_TPL, {"imix": {}})
- self.assertDictEqual(TRAFFIC_PROFILE, generated_tp)
-
- def test_deepgetitem(self):
- d = {'a': 1, 'b': 2}
- self.assertEqual(vnfdgen.deepgetitem(d, "a"), 1)
-
- def test_dict_flatten_int(self):
- d = {'a': 1, 'b': 2}
- self.assertEqual(vnfdgen.deepgetitem(d, "a"), 1)
-
- def test_dict_flatten_str_int_key_first(self):
- d = {'0': 1, 0: 24, 'b': 2}
- self.assertEqual(vnfdgen.deepgetitem(d, "0"), 1)
-
- def test_dict_flatten_int_key_fallback(self):
- d = {0: 1, 'b': 2}
- self.assertEqual(vnfdgen.deepgetitem(d, "0"), 1)
-
- def test_dict_flatten_list(self):
- d = {'a': 1, 'b': list(range(2))}
- self.assertEqual(vnfdgen.deepgetitem(d, "b.0"), 0)
-
- def test_dict_flatten_dict(self):
- d = {'a': 1, 'b': {x: x for x in list(range(2))}}
- self.assertEqual(vnfdgen.deepgetitem(d, "b.0"), 0)
-
- def test_dict_flatten_only_str_key(self):
- d = {'0': 1, 0: 24, 'b': 2}
- self.assertRaises(AttributeError, vnfdgen.deepgetitem, d, 0)
-
-
- def test_generate_tp_single_var(self):
- """ Function to verify traffic profile generation with imix """
-
- generated_tp = \
- vnfdgen.generate_vnfd(TRAFFIC_PROFILE_TPL,
- {"imix": {UPLINK: {"imix_small": '20'}}})
- self.maxDiff = None
- tp2 = dict(TRAFFIC_PROFILE)
- tp2[UPLINK][0]["ipv4"]["outer_l2"]["framesize"]["64B"] = '20'
- self.assertDictEqual(tp2, generated_tp)
diff --git a/tests/unit/network_services/vnf_generic/vnf/__init__.py b/tests/unit/network_services/vnf_generic/vnf/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/__init__.py
+++ /dev/null
diff --git a/tests/unit/network_services/vnf_generic/vnf/acl_1rule.yaml b/tests/unit/network_services/vnf_generic/vnf/acl_1rule.yaml
deleted file mode 100644
index b184a29e2..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/acl_1rule.yaml
+++ /dev/null
@@ -1,47 +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.
-
-access-list1:
- acl:
- access-list-entries:
- - ace:
- ace-oper-data:
- match-counter: 0
- actions: drop,count
- matches:
- destination-ipv4-network: 152.16.40.20/24
- destination-port-range:
- lower-port: 0
- upper-port: 65535
- source-ipv4-network: 0.0.0.0/0
- source-port-range:
- lower-port: 0
- upper-port: 65535
- rule-name: rule1588
- - ace:
- ace-oper-data:
- match-counter: 0
- actions: drop,count
- matches:
- destination-ipv4-network: 0.0.0.0/0
- destination-port-range:
- lower-port: 0
- upper-port: 65535
- source-ipv4-network: 152.16.100.20/24
- source-port-range:
- lower-port: 0
- upper-port: 65535
- rule-name: rule1589
- acl-name: sample-ipv4-acl
- acl-type: ipv4-acl
diff --git a/tests/unit/network_services/vnf_generic/vnf/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml b/tests/unit/network_services/vnf_generic/vnf/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml
deleted file mode 100644
index fb1be35c1..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml
+++ /dev/null
@@ -1,41 +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.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
- traffic_profile: "../../traffic_profiles/ipv4_throughput_vpe.yaml"
- topology: vpe_vnf_topology.yaml
- nodes:
- tg__1: trafficgen_1.yardstick
- vnf__1: vnf.yardstick
- tc_options:
- rfc2544:
- allowed_drop_rate: 0.8 - 1
- vnf_options:
- vpe:
- cfg: vpe_config
- runner:
- type: Duration
- duration: 400
- interval: 35
- traffic_options:
- flow: "../../traffic_profiles/ipv4_1flow_Packets_vpe.yaml"
- imix: "../../traffic_profiles/imix_voice.yaml"
-context:
- type: Node
- name: yardstick
- nfvi_type: baremetal
- file: /etc/yardstick/nodes/pod.yaml
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
deleted file mode 100644
index 2a2647a91..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
+++ /dev/null
@@ -1,348 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import unittest
-import mock
-import os
-
-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.acl_vnf import AclApproxVnf
- 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'
-
-
-@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
-class TestAclApproxVnf(unittest.TestCase):
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'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: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': 'Vpe approximation using DPDK',
- 'mgmt-interface':
- {'vdu-id': 'vpevnf-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': 'AclApproxVnf', 'name': 'VPEVnfSsh'}]}}
-
- scenario_cfg = {'options': {'packetsize': 64, 'traffic_type': 4,
- 'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
- 'vnf__1': {'rules': 'acl_1rule.yaml',
- 'vnf_config': {'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config':
- '1C/1T',
- 'worker_threads': 1}}
- },
- 'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
- 'task_path': '/tmp',
- 'tc': 'tc_ipv4_1Mflow_64B_packetsize',
- 'runner': {'object': 'NetworkServiceTestCase',
- 'interval': 35,
- 'output_filename': '/tmp/yardstick.out',
- 'runner_id': 74476, 'duration': 400,
- 'type': 'Duration'},
- 'traffic_profile': 'ipv4_throughput_acl.yaml',
- 'traffic_options': {'flow': 'ipv4_Packets_acl.yaml',
- 'imix': 'imix_voice.yaml'},
- 'type': 'ISB',
- 'nodes': {'tg__2': 'trafficgen_2.yardstick',
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick'},
- 'topology': 'vpe-tg-topology-baremetal.yaml'}
-
- context_cfg = {'nodes': {'tg__2':
- {'member-vnf-index': '3',
- 'role': 'TrafficGen',
- 'name': 'trafficgen_2.yardstick',
- 'vnfd-id-ref': 'tg__2',
- 'ip': '1.2.1.1',
- 'interfaces':
- {'xe0': {'local_iface_name': 'ens513f0',
- 'vld_id': AclApproxVnf.DOWNLINK,
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.20',
- 'dst_mac': '00:00:00:00:00:01',
- 'local_mac': '00:00:00:00:00:03',
- 'dst_ip': '152.16.40.19',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.0',
- 'dpdk_port_num': 0},
- 'xe1': {'local_iface_name': 'ens513f1',
- 'netmask': '255.255.255.0',
- 'network': '202.16.100.0',
- 'local_ip': '202.16.100.20',
- 'local_mac': '00:1e:67:d0:60:5d',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.1',
- 'dpdk_port_num': 1}},
- 'password': 'r00t',
- 'VNF model': 'l3fwd_vnf.yaml',
- 'user': 'root'},
- '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': AclApproxVnf.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': AclApproxVnf.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': AclApproxVnf.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':
- [{'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'network': '152.16.100.20',
- 'if': 'xe0'},
- {'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'network': '152.16.40.20',
- 'if': 'xe1'}],
- 'member-vnf-index': '2',
- 'host': '1.2.1.1',
- 'role': 'vnf',
- 'user': 'root',
- 'nd_route_tbl':
- [{'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0'},
- {'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1'}],
- 'password': 'r00t',
- 'VNF model': 'acl_vnf.yaml'}}}
-
- 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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- acl_approx_vnf = AclApproxVnf(name, vnfd)
- acl_approx_vnf.q_in = mock.MagicMock()
- acl_approx_vnf.q_out = mock.MagicMock()
- acl_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- acl_approx_vnf.resource = mock.Mock(autospec=ResourceProfile)
- acl_approx_vnf.vnf_execute = mock.Mock(return_value="")
- result = {'packets_dropped': 0, 'packets_fwd': 0, 'packets_in': 0}
- self.assertEqual(result, acl_approx_vnf.collect_kpi())
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
- @mock.patch(SSH_HELPER)
- def test_vnf_execute_command(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- acl_approx_vnf = AclApproxVnf(name, vnfd)
- acl_approx_vnf.q_in = mock.MagicMock()
- acl_approx_vnf.q_out = mock.MagicMock()
- acl_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- cmd = "quit"
- self.assertEqual("", acl_approx_vnf.vnf_execute(cmd))
-
- @mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- acl_approx_vnf = AclApproxVnf(name, vnfd)
- acl_approx_vnf.q_in = mock.MagicMock()
- acl_approx_vnf.q_out = mock.MagicMock()
- acl_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- result = "ACL TOTAL: pkts_processed: 100, pkts_drop: 0, spkts_received: 100"
- acl_approx_vnf.vnf_execute = mock.Mock(return_value=result)
- self.assertEqual(result, acl_approx_vnf.get_stats())
-
- 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
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.hex")
- @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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- acl_approx_vnf = AclApproxVnf(name, vnfd)
- acl_approx_vnf._build_config = mock.MagicMock()
- acl_approx_vnf.queue_wrapper = mock.MagicMock()
- acl_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
- acl_approx_vnf.vnf_cfg = {'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config': '1C/1T',
- 'worker_threads': 1}
- acl_approx_vnf.all_options = {'traffic_type': '4',
- 'topology': 'nsb_test_case.yaml'}
- acl_approx_vnf._run()
- acl_approx_vnf.ssh_helper.run.assert_called_once()
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.YangModel")
- @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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- acl_approx_vnf = AclApproxVnf(name, vnfd)
- acl_approx_vnf.deploy_helper = mock.MagicMock()
- acl_approx_vnf.resource_helper = mock.MagicMock()
- acl_approx_vnf._build_config = mock.MagicMock()
- self.scenario_cfg['vnf_options'] = {'acl': {'cfg': "",
- 'rules': ""}}
- acl_approx_vnf.q_out.put("pipeline>")
- acl_approx_vnf.WAIT_TIME = 0
- self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
- self.assertIsNone(acl_approx_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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- acl_approx_vnf = AclApproxVnf(name, vnfd)
- acl_approx_vnf._vnf_process = mock.MagicMock()
- acl_approx_vnf._vnf_process.terminate = mock.Mock()
- acl_approx_vnf.used_drivers = {"01:01.0": "i40e",
- "01:01.1": "i40e"}
- acl_approx_vnf.vnf_execute = mock.MagicMock()
- 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())
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_base.py b/tests/unit/network_services/vnf_generic/vnf/test_base.py
deleted file mode 100644
index e9488f76f..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_base.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Unittest for yardstick.network_services.vnf_generic.vnf.test_base
-
-import multiprocessing
-import os
-
-import mock
-import unittest
-
-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_ND_CFG_FILE_TPL = """
-nd_route_tbl = ({port1_dst_ip_hex6},"""
-"""{port1_dst_netmask_hex6},1,{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):
- super(FileAbsPath, self).__init__()
- self.module_path = os.path.dirname(os.path.abspath(module_file))
-
- def get_path(self, filename):
- file_path = os.path.join(self.module_path, filename)
- return file_path
-
-
-def mock_ssh(mock_ssh_type, spec=None, exec_result=_LOCAL_OBJECT, run_result=_LOCAL_OBJECT):
- if spec is None:
- spec = SSH
-
- if exec_result is _LOCAL_OBJECT:
- exec_result = 0, "", ""
-
- if run_result is _LOCAL_OBJECT:
- run_result = 0, "", ""
-
- mock_ssh_instance = mock.Mock(autospec=spec)
- mock_ssh_instance._get_client.return_value = mock.Mock()
- mock_ssh_instance.execute.return_value = exec_result
- mock_ssh_instance.run.return_value = run_result
- mock_ssh_type.from_node.return_value = mock_ssh_instance
- return mock_ssh_instance
-
-
-class TestQueueFileWrapper(unittest.TestCase):
- def setUp(self):
- self.prompt = "pipeline>"
- self.q_in = multiprocessing.Queue()
- self.q_out = multiprocessing.Queue()
-
- def test___init__(self):
- queue_file_wrapper = \
- 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 = \
- base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
- queue_file_wrapper.bufsize = 5
- queue_file_wrapper.write("pipeline>")
- queue_file_wrapper.close()
- self.assertIsNone(queue_file_wrapper.clear())
- self.assertIsNotNone(queue_file_wrapper.q_out.empty())
-
- def test_close(self):
- queue_file_wrapper = \
- base.QueueFileWrapper(self.q_in, self.q_out, self.prompt)
- self.assertEqual(None, queue_file_wrapper.close())
-
- def test_read(self):
- queue_file_wrapper = \
- 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 = \
- 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):
-
- 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 = VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- name = 'vnf1'
- with self.assertRaises(TypeError) as exc:
- # pylint: disable=abstract-class-instantiated
- base.GenericTrafficGen(name, vnfd)
- msg = ("Can't instantiate abstract class GenericTrafficGen with "
- "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
deleted file mode 100644
index f2ce18fb3..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_cgnapt_vnf.py
+++ /dev/null
@@ -1,437 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from copy import deepcopy
-import os
-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.cgnapt_vnf import CgnaptApproxVnf, \
- CgnaptApproxSetupEnvHelper
- from yardstick.network_services.vnf_generic.vnf import cgnapt_vnf
- 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__0'
-
-
-class TestCgnaptApproxSetupEnvHelper(unittest.TestCase):
-
- def test__generate_ip_from_pool(self):
-
- ip = CgnaptApproxSetupEnvHelper._generate_ip_from_pool("1.2.3.4")
- self.assertEqual(next(ip), '1.2.3.4')
- self.assertEqual(next(ip), '1.2.4.4')
- self.assertEqual(next(ip), '1.2.5.4')
-
- def test__update_cgnat_script_file(self):
-
- sample = """\
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-link 0 down
-link 0 config {port0_local_ip} {port0_prefixlen}
-link 0 up
-link 1 down
-link 1 config {port1_local_ip} {port1_prefixlen}
-link 1 up
-"""
- header = "This is a header"
-
- out = CgnaptApproxSetupEnvHelper._update_cgnat_script_file(header, sample.splitlines())
- self.assertNotIn("This is a header", out)
-
- def test__get_cgnapt_config(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.port_pairs.uplink_ports = [{"name": 'a'}, {"name": "b"}, {"name": "c"}]
-
- helper = CgnaptApproxSetupEnvHelper(vnfd_helper, mock.Mock(), mock.Mock())
- result = helper._get_cgnapt_config()
- self.assertIsNotNone(result)
-
- def test_scale(self):
- helper = CgnaptApproxSetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
- with self.assertRaises(NotImplementedError):
- helper.scale()
-
-
-@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
-class TestCgnaptApproxVnf(unittest.TestCase):
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'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: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': 'Vpe approximation using DPDK',
- 'mgmt-interface':
- {'vdu-id': 'vpevnf-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': 'CgnaptApproxVnf', 'name': 'VPEVnfSsh'}]}}
-
- SCENARIO_CFG = {
- 'options': {
- 'packetsize': 64,
- 'traffic_type': 4,
- 'rfc2544': {
- 'allowed_drop_rate': '0.8 - 1',
- },
- 'vnf__0': {
- 'napt': 'dynamic',
- 'vnf_config': {
- 'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config':
- '1C/1T',
- 'worker_threads': 1,
- },
- },
- 'flow': {'count': 1,
- 'dst_ip': [{'tg__1': 'xe0'}],
- 'public_ip': [''],
- 'src_ip': [{'tg__0': 'xe0'}]},
- },
- 'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
- 'task_path': '/tmp',
- 'tc': 'tc_ipv4_1Mflow_64B_packetsize',
- 'runner': {
- 'object': 'NetworkServiceTestCase',
- 'interval': 35,
- 'output_filename': '/tmp/yardstick.out',
- 'runner_id': 74476,
- 'duration': 400,
- 'type': 'Duration',
- },
- 'traffic_profile': 'ipv4_throughput_acl.yaml',
- 'type': 'NSPerf',
- 'nodes': {
- 'tg__1': 'trafficgen_1.yardstick',
- 'tg__0': 'trafficgen_0.yardstick',
- 'vnf__0': 'vnf.yardstick',
- },
- 'topology': 'vpe-tg-topology-baremetal.yaml',
- }
-
- context_cfg = {'nodes': {'tg__2':
- {'member-vnf-index': '3',
- 'role': 'TrafficGen',
- 'name': 'trafficgen_2.yardstick',
- 'vnfd-id-ref': 'tg__2',
- 'ip': '1.2.1.1',
- 'interfaces':
- {'xe0': {'local_iface_name': 'ens513f0',
- 'vld_id': CgnaptApproxVnf.DOWNLINK,
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.20',
- 'dst_mac': '00:00:00:00:00:01',
- 'local_mac': '00:00:00:00:00:03',
- 'dst_ip': '152.16.40.19',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.0',
- 'dpdk_port_num': 0},
- 'xe1': {'local_iface_name': 'ens513f1',
- 'netmask': '255.255.255.0',
- 'network': '202.16.100.0',
- 'local_ip': '202.16.100.20',
- 'local_mac': '00:1e:67:d0:60:5d',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.1',
- 'dpdk_port_num': 1}},
- 'password': 'r00t',
- 'VNF model': 'l3fwd_vnf.yaml',
- 'user': 'root'},
- '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': CgnaptApproxVnf.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__0':
- {'name': 'vnf.yardstick',
- 'vnfd-id-ref': 'vnf__0',
- 'ip': '1.2.1.1',
- 'interfaces':
- {'xe0': {'local_iface_name': 'ens786f0',
- 'vld_id': CgnaptApproxVnf.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': CgnaptApproxVnf.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':
- [{'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'network': '152.16.100.20',
- 'if': 'xe0'},
- {'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'network': '152.16.40.20',
- 'if': 'xe1'}],
- 'member-vnf-index': '2',
- 'host': '1.2.1.1',
- 'role': 'vnf',
- 'user': 'root',
- 'nd_route_tbl':
- [{'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0'},
- {'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1'}],
- 'password': 'r00t',
- 'VNF model': 'cgnapt_vnf.yaml'}}}
-
- def setUp(self):
- self.scenario_cfg = deepcopy(self.SCENARIO_CFG)
-
- 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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf._vnf_process = mock.MagicMock(
- **{"is_alive.return_value": True, "exitcode": None})
- cgnapt_approx_vnf.q_in = mock.MagicMock()
- cgnapt_approx_vnf.q_out = mock.MagicMock()
- cgnapt_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- cgnapt_approx_vnf.resource = mock.Mock(autospec=ResourceProfile)
- result = {'packets_dropped': 0, 'packets_fwd': 0, 'packets_in': 0}
- self.assertEqual(result, cgnapt_approx_vnf.collect_kpi())
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
- @mock.patch(SSH_HELPER)
- def test_vnf_execute_command(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf.q_in = mock.MagicMock()
- cgnapt_approx_vnf.q_out = mock.MagicMock()
- cgnapt_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- cmd = "quit"
- self.assertEqual("", cgnapt_approx_vnf.vnf_execute(cmd))
-
- @mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf.q_in = mock.MagicMock()
- cgnapt_approx_vnf.q_out = mock.MagicMock()
- cgnapt_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- result = \
- "CG-NAPT(.*\n)*Received 100, Missed 0, Dropped 0,Translated 100,ingress"
- cgnapt_approx_vnf.vnf_execute = mock.Mock(return_value=result)
- self.assertListEqual(list(result), list(cgnapt_approx_vnf.get_stats()))
-
- 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
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.cgnapt_vnf.hex")
- @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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf._build_config = mock.MagicMock()
- cgnapt_approx_vnf.queue_wrapper = mock.MagicMock()
- cgnapt_approx_vnf.ssh_helper = mock.MagicMock()
- cgnapt_approx_vnf.ssh_helper.run = mock.MagicMock()
- cgnapt_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
- cgnapt_approx_vnf._run()
- cgnapt_approx_vnf.ssh_helper.run.assert_called_once()
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
- @mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf.deploy_helper = mock.MagicMock()
- cgnapt_approx_vnf.resource_helper = mock.MagicMock()
- cgnapt_approx_vnf._build_config = mock.MagicMock()
- self.scenario_cfg['vnf_options'] = {'acl': {'cfg': "",
- 'rules': ""}}
- cgnapt_approx_vnf.q_out.put("pipeline>")
- cgnapt_vnf.WAIT_TIME = 3
- self.scenario_cfg.update({"nodes": {"vnf__0": ""}})
- self.assertIsNone(cgnapt_approx_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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf._vnf_process = mock.MagicMock()
- cgnapt_approx_vnf._vnf_process.terminate = mock.Mock()
- cgnapt_approx_vnf.used_drivers = {"01:01.0": "i40e",
- "01:01.1": "i40e"}
- cgnapt_approx_vnf.vnf_execute = mock.MagicMock()
- cgnapt_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
- cgnapt_approx_vnf._resource_collect_stop = mock.Mock()
- self.assertEqual(None, cgnapt_approx_vnf.terminate())
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
- @mock.patch(SSH_HELPER)
- def test__vnf_up_post(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- self.scenario_cfg['options'][name]['napt'] = 'static'
-
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf._vnf_process = mock.MagicMock()
- cgnapt_approx_vnf._vnf_process.terminate = mock.Mock()
- cgnapt_approx_vnf.vnf_execute = mock.MagicMock()
- cgnapt_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
- cgnapt_approx_vnf._resource_collect_stop = mock.Mock()
- cgnapt_approx_vnf._vnf_up_post()
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
- @mock.patch(SSH_HELPER)
- def test__vnf_up_post_short(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- cgnapt_approx_vnf = CgnaptApproxVnf(name, vnfd)
- cgnapt_approx_vnf._vnf_process = mock.MagicMock()
- cgnapt_approx_vnf._vnf_process.terminate = mock.Mock()
- cgnapt_approx_vnf.vnf_execute = mock.MagicMock()
- cgnapt_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
- cgnapt_approx_vnf._resource_collect_stop = mock.Mock()
- cgnapt_approx_vnf._vnf_up_post()
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
deleted file mode 100644
index ed49c7000..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
+++ /dev/null
@@ -1,2312 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from itertools import repeat, chain
-import mock
-import os
-import socket
-import time
-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()
-
-if stl_patch:
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxSocketHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import PacketDump
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import CoreSocketTuple
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxTestDataTuple
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDpdkVnfSetupEnvHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import TotStatsTuple
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDataHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxResourceHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxProfileHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxMplsProfileHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxBngProfileHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxVpeProfileHelper
- from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxlwAFTRProfileHelper
-
-
-class TestCoreTuple(unittest.TestCase):
- def test___init__(self):
- core_tuple = CoreSocketTuple('core 5s6')
- self.assertEqual(core_tuple.core_id, 5)
- self.assertEqual(core_tuple.socket_id, 6)
- self.assertFalse(core_tuple.is_hyperthread())
-
- core_tuple = CoreSocketTuple('core 5s6h')
- self.assertEqual(core_tuple.core_id, 5)
- self.assertEqual(core_tuple.socket_id, 6)
- self.assertTrue(core_tuple.is_hyperthread())
-
- def test___init__negative(self):
- bad_inputs = [
- '',
- '5',
- '5s',
- '6h',
- '5s6',
- 'core',
- 'core h',
- 'core 5s',
- 'core 5 6',
- 'core 5 6h',
- 'core 5d6',
- 'core 5d6h',
- 1,
- 2.3,
- [],
- {},
- object(),
- ]
-
- for bad_input in bad_inputs:
- with self.assertRaises(ValueError):
- CoreSocketTuple(bad_input)
-
- def test_find_in_topology(self):
- topology_in = {
- 6: {
- 5: {
- 'key1': ['a', 'b'],
- 'key2': ['c', 'd'],
- },
- },
- }
-
- core_tuple = CoreSocketTuple('core 5s6')
-
- expected = 'a'
- result = core_tuple.find_in_topology(topology_in)
- self.assertEqual(result, expected)
-
- core_tuple = CoreSocketTuple('core 5s6h')
-
- expected = 'c'
- result = core_tuple.find_in_topology(topology_in)
- self.assertEqual(result, expected)
-
- def test_find_in_topology_negative(self):
- core_tuple = CoreSocketTuple('core 6s5')
- with self.assertRaises(ValueError):
- # no socket key
- core_tuple.find_in_topology({})
-
- with self.assertRaises(ValueError):
- # no core key
- core_tuple.find_in_topology({5: {}})
-
- with self.assertRaises(ValueError):
- # no first value (as needed by non-hyperthread core)
- core_tuple.find_in_topology({5: {6: {'key1': []}}})
-
- core_tuple = CoreSocketTuple('core 6s5h')
- with self.assertRaises(ValueError):
- # no second value (as needed by hyperthread core)
- core_tuple.find_in_topology({5: {6: {'key1': ['e']}}})
-
-
-class TestTotStatsTuple(unittest.TestCase):
- def test___new___negative(self):
- with self.assertRaises(TypeError):
- # no values
- TotStatsTuple()
-
- with self.assertRaises(TypeError):
- # one, non-integer value
- TotStatsTuple('a')
-
- with self.assertRaises(TypeError):
- # too many values
- TotStatsTuple(3, 4, 5, 6, 7)
-
-
-class TestProxTestDataTuple(unittest.TestCase):
- def test___init__(self):
- prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9)
- self.assertEqual(prox_test_data.tolerated, 1)
- self.assertEqual(prox_test_data.tsc_hz, 2)
- self.assertEqual(prox_test_data.delta_rx, 3)
- self.assertEqual(prox_test_data.delta_tx, 4)
- self.assertEqual(prox_test_data.delta_tsc, 5)
- self.assertEqual(prox_test_data.latency, 6)
- self.assertEqual(prox_test_data.rx_total, 7)
- self.assertEqual(prox_test_data.tx_total, 8)
- self.assertEqual(prox_test_data.pps, 9)
-
- def test_properties(self):
- prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9)
- self.assertEqual(prox_test_data.pkt_loss, 12.5)
- self.assertEqual(prox_test_data.mpps, 1.6 / 1e6)
- self.assertEqual(prox_test_data.can_be_lost, 0)
- self.assertEqual(prox_test_data.drop_total, 1)
- self.assertFalse(prox_test_data.success)
-
- prox_test_data = ProxTestDataTuple(10, 2, 3, 4, 5, 6, 997, 998, 9)
- self.assertTrue(prox_test_data.success)
-
- def test_pkt_loss_zero_division(self):
- prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 0, 9)
- self.assertEqual(prox_test_data.pkt_loss, 100.0)
-
- def test_get_samples(self):
- prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9)
-
- expected = {
- "Throughput": 1.6 / 1e6,
- "DropPackets": 12.5,
- "CurrentDropPackets": 12.5,
- "TxThroughput": 9 / 1e6,
- "RxThroughput": 1.6 / 1e6,
- "PktSize": 64,
- "PortSample": 1,
- "LatencyMin": 6.1,
- "LatencyMax": 6.9,
- "LatencyAvg": 6.4,
- }
- result = prox_test_data.get_samples(64, port_samples={"PortSample": 1})
- self.assertDictEqual(result, expected)
-
- expected = {
- "Throughput": 1.6 / 1e6,
- "DropPackets": 0.123,
- "CurrentDropPackets": 0.123,
- "TxThroughput": 9 / 1e6,
- "RxThroughput": 1.6 / 1e6,
- "PktSize": 64,
- "LatencyMin": 6.1,
- "LatencyMax": 6.9,
- "LatencyAvg": 6.4,
- }
- result = prox_test_data.get_samples(64, 0.123)
- self.assertDictEqual(result, expected)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.LOG')
- def test_log_data(self, mock_logger):
- my_mock_logger = mock.MagicMock()
- prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9)
- prox_test_data.log_data()
- self.assertEqual(my_mock_logger.debug.call_count, 0)
- self.assertEqual(mock_logger.debug.call_count, 2)
-
- mock_logger.debug.reset_mock()
- prox_test_data.log_data(my_mock_logger)
- self.assertEqual(my_mock_logger.debug.call_count, 2)
- self.assertEqual(mock_logger.debug.call_count, 0)
-
-
-class TestPacketDump(unittest.TestCase):
- PAYLOAD = "payload"
-
- def test__init__(self):
- PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
-
- def test___str__(self):
- expected = '<PacketDump port: port_id payload: {}>'.format(self.PAYLOAD)
- dump1 = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
- self.assertEqual(str(dump1), expected)
-
- def test_port_id(self):
- p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
- self.assertEqual(p.port_id, "port_id")
-
- def test_data_len(self):
- p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
- self.assertEqual(p.data_len, len(self.PAYLOAD))
-
- def test_payload(self):
- p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
- self.assertEqual(p.payload(), self.PAYLOAD)
-
- self.assertEqual(p.payload(3), self.PAYLOAD[3:])
-
- self.assertEqual(p.payload(end=3), self.PAYLOAD[:4])
-
- self.assertEqual(p.payload(2, 4), self.PAYLOAD[2:5])
-
-
-PACKET_DUMP_1 = """\
-pktdump,3,11
-hello world
-"""
-
-PACKET_DUMP_2 = """\
-pktdump,3,11
-hello world
-pktdump,2,9
-brown fox jumped over
-pktdump,4,8
-lazy
-dog
-"""
-
-PACKET_DUMP_NON_1 = """\
-not_a_dump,1,2
-other data
-"""
-
-PACKET_DUMP_MIXED_1 = """\
-pktdump,3,11
-hello world
-not_a_dump,1,2
-other data
-"""
-
-PACKET_DUMP_BAD_1 = """\
-pktdump,one,12
-bad port id
-"""
-
-PACKET_DUMP_BAD_2 = """\
-pktdump,3,twelve
-bad data length
-"""
-
-PACKET_DUMP_BAD_3 = """\
-pktdump,3
-no data length value
-"""
-
-
-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):
- expected = mock_socket.socket()
- prox = ProxSocketHelper()
- result = prox._sock
- self.assertEqual(result, expected)
-
- 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_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_select.select.side_effect = [[1], [0]]
- mock_socket = mock.MagicMock()
- mock_recv = mock_socket.recv()
- mock_recv.decode.return_value = ""
- prox = ProxSocketHelper(mock_socket)
- ret = prox.get_data()
- self.assertEqual(ret, "")
- self.assertEqual(len(prox._pkt_dumps), 0)
-
- mock_select.select.reset_mock()
- mock_select.select.side_effect = chain([['a'], ['']], repeat([1], 3))
- mock_recv.decode.return_value = PACKET_DUMP_1
- ret = prox.get_data()
- self.assertEqual(mock_select.select.call_count, 2)
- self.assertEqual(ret, 'pktdump,3,11')
- self.assertEqual(len(prox._pkt_dumps), 1)
-
- mock_select.select.reset_mock()
- mock_select.select.side_effect = chain([[object()], [None]], repeat([1], 3))
- mock_recv.decode.return_value = PACKET_DUMP_2
- ret = prox.get_data()
- self.assertEqual(mock_select.select.call_count, 2)
- self.assertEqual(ret, 'jumped over')
- self.assertEqual(len(prox._pkt_dumps), 3)
-
- 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')
- self.assertEqual(len(prox._pkt_dumps), 0)
-
- ret = prox._parse_socket_data(PACKET_DUMP_MIXED_1, False)
- self.assertEqual(ret, 'not_a_dump,1,2')
- self.assertEqual(len(prox._pkt_dumps), 1)
-
- 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)
-
- with self.assertRaises(ValueError):
- prox._parse_socket_data(PACKET_DUMP_BAD_2, False)
-
- ret = prox._parse_socket_data(PACKET_DUMP_BAD_3, False)
- self.assertEqual(ret, 'pktdump,3')
-
- def test__parse_socket_data_pkt_dump_only(self):
- prox = ProxSocketHelper(mock.MagicMock())
- ret = prox._parse_socket_data('', True)
- self.assertFalse(ret)
-
- ret = prox._parse_socket_data(PACKET_DUMP_1, True)
- self.assertTrue(ret)
-
- ret = prox._parse_socket_data(PACKET_DUMP_2, True)
- self.assertTrue(ret)
-
- 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_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_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox._pkt_dumps = []
- self.assertIsNone(prox.get_packet_dump())
-
- prox._pkt_dumps = [234]
- self.assertEqual(prox.get_packet_dump(), 234)
- self.assertEqual(prox._pkt_dumps, [])
-
- 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_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.stop_all()
- mock_socket.sendall.assert_called()
-
- 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_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.start_all()
- mock_socket.sendall.assert_called()
-
- 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_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.reset_stats()
- mock_socket.sendall.assert_called()
-
- 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_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_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_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):
- core_data = [
- {
- 'cores': [3, 4, 5],
- 'speed': 1000,
- },
- {
- 'cores': [9, 10, 11],
- 'speed': '500.5',
- },
- ]
-
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.set_speed = set_speed = mock.MagicMock()
- prox.slope_speed(core_data, 5)
- self.assertEqual(set_speed.call_count, 20)
-
- set_speed.reset_mock()
- prox.slope_speed(core_data, 5, 5)
- self.assertEqual(set_speed.call_count, 10)
-
- 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):
- latency_output = [
- '1, 2 , 3', # has white space
- '4,5', # too short
- '7,8,9,10.5,11', # too long with float, but float is in unused portion
- 'twelve,13,14', # value as English word
- '15,16.2,17', # float in used portion
- ]
-
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.get_data = mock.MagicMock(side_effect=latency_output)
-
- expected = (
- {
- 3: 1,
- 5: 7,
- },
- {
- 3: 2,
- 5: 8,
- },
- {
- 3: 3,
- 5: 9,
- },
- )
- result = prox.lat_stats([3, 4, 5, 6, 7], 16)
- self.assertEqual(mock_socket.sendall.call_count, 5)
- self.assertEqual(result, expected)
-
- 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')
- expected = [0, 0, 0, 0]
- result = prox.get_all_tot_stats()
- self.assertEqual(result, expected)
-
- 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')
- expected = 3, 4, 5, 6
- result = prox.get_all_tot_stats()
- self.assertEqual(result, expected)
-
- def test_hz(self):
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.get_data = mock.MagicMock(return_value='3,4,5,6')
- expected = 6
- result = prox.hz()
- self.assertEqual(result, expected)
-
- def test_core_stats(self):
- core_stats = [
- '3,4,5,6',
- '7,8,9,10,NaN',
- '11,12,13,14,15',
- ]
-
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.get_data = mock.MagicMock(side_effect=core_stats)
- expected = 21, 24, 27, 14
- result = prox.core_stats([3, 4, 5], 16)
- self.assertEqual(result, expected)
-
- 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)),
- ','.join(str(n) for n in range(5, 89, 7)),
- ]
-
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.get_data = mock.MagicMock(side_effect=port_stats)
- expected = [16, 26, 36, 46, 56, 66, 76, 86, 96, 106, 116, 126]
- result = prox.port_stats([3, 4, 5])
- self.assertEqual(result, expected)
-
- def test_measure_tot_stats(self):
- start_tot = 3, 4, 5, 6
- end_tot = 7, 9, 11, 13
- delta_tot = 4, 5, 6, 7
-
- get_data_output = [
- ','.join(str(n) for n in start_tot),
- ','.join(str(n) for n in end_tot),
- ]
-
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.get_data = mock.MagicMock(side_effect=get_data_output)
- expected = {
- 'start_tot': start_tot,
- 'end_tot': end_tot,
- 'delta': delta_tot,
- }
- with prox.measure_tot_stats() as result:
- pass
- self.assertEqual(result, expected)
-
- def test_tot_stats(self):
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.get_data = mock.MagicMock(return_value='3,4,5,6')
- expected = 3, 4, 5
- result = prox.tot_stats()
- self.assertEqual(result, expected)
-
- def test_tot_ierrors(self):
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.get_data = mock.MagicMock(return_value='3,4,5,6')
- expected = 3, 3
- result = prox.tot_ierrors()
- self.assertEqual(result, expected)
-
- 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_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_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.quit()
- mock_socket.sendall.assert_called()
-
- def test_force_quit(self):
- mock_socket = mock.MagicMock()
- prox = ProxSocketHelper(mock_socket)
- prox.force_quit()
- mock_socket.sendall.assert_called()
-
-
-class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
-
- VNFD0 = {
- 'short-name': 'ProxVnf',
- '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': 'PROX approximation using DPDK',
- 'name': 'proxvnf-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': 'proxvnf-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',
- 'vld_id': 'uplink_0',
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 0,
- 'bandwidth': '10 Gbps',
- 'driver': "i40e",
- 'dst_ip': '152.16.100.19',
- 'local_iface_name': 'xe0',
- 'local_mac': '00:00:00:00:00:02',
- 'ifname': 'xe0',
- },
- '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',
- 'vld_id': 'downlink_0',
- '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',
- 'ifname': 'xe1',
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1',
- },
- ],
- },
- ],
- 'description': 'PROX approximation using DPDK',
- 'mgmt-interface': {
- 'vdu-id': 'proxvnf-baremetal',
- 'host': '1.2.1.1',
- 'password': 'r00t',
- 'user': 'root',
- 'ip': '1.2.1.1',
- },
- 'benchmark': {
- 'kpi': [
- 'packets_in',
- 'packets_fwd',
- 'packets_dropped',
- ],
- },
- 'id': 'ProxApproxVnf',
- 'name': 'ProxVnf',
- }
-
- VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- VNFD0,
- ],
- },
- }
-
- def test_global_section(self):
- setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
- mock.MagicMock())
-
- setup_helper._prox_config_data = [('a', [])]
-
- with self.assertRaises(KeyError):
- _ = setup_helper.global_section
-
- global_section = (
- 'global', [
- ('not_name', 'other data'),
- ('name_not', 'more data'),
- ('name', 'prox type'),
- ],
- )
-
- setup_helper._prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- global_section,
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ('name', 'tagged'),
- ]),
- ('section3', [
- ('key1', 'value1'),
- ('key2', 'value2'),
- ('key3', 'value3'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ('name', 'udp'),
- ]),
- ]
-
- result = setup_helper.global_section
- self.assertEqual(result, global_section[1])
-
- def test_find_in_section(self):
- setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
- mock.MagicMock())
-
- setup_helper._prox_config_data = [
- ('global', [
- ('not_name', 'other data'),
- ('name_not', 'more data'),
- ('name', 'prox type'),
- ]),
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ('name', 'tagged'),
- ]),
- ('section3', [
- ('key1', 'value1'),
- ('key2', 'value2'),
- ('key3', 'value3'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ('name', 'udp'),
- ]),
- ]
-
- expected = 'value3'
- result = setup_helper.find_in_section('section3', 'key3')
- self.assertEqual(result, expected)
-
- expected = 'default value'
- result = setup_helper.find_in_section('section3', 'key4', 'default value')
- self.assertEqual(result, expected)
-
- with self.assertRaises(KeyError):
- setup_helper.find_in_section('section4', 'key1')
-
- with self.assertRaises(KeyError):
- setup_helper.find_in_section('section1', 'key1')
-
- def test__replace_quoted_with_value(self):
- # empty string
- input_str = ''
- expected = ''
- result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
- self.assertEqual(result, expected)
-
- # no quoted substring
- input_str = 'lion tiger bear'
- expected = 'lion tiger bear'
- result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
- self.assertEqual(result, expected)
-
- # partially quoted substring
- input_str = 'lion "tiger bear'
- expected = 'lion "tiger bear'
- result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
- self.assertEqual(result, expected)
-
- # one quoted substring
- input_str = 'lion "tiger" bear'
- expected = 'lion "cat" bear'
- result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
- self.assertEqual(result, expected)
-
- # two quoted substrings
- input_str = 'lion "tiger" bear "shark" whale'
- expected = 'lion "cat" bear "shark" whale'
- result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
- self.assertEqual(result, expected)
-
- # two quoted substrings, both replaced
- input_str = 'lion "tiger" bear "shark" whale'
- expected = 'lion "cat" bear "cat" whale'
- result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat', 2)
- self.assertEqual(result, expected)
-
- def test__get_tx_port(self):
- # no data
- input_data = {'section1': []}
- expected = -1
- result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
- self.assertEqual(result, expected)
-
- # data for other section
- input_data = {
- 'section1': [],
- 'section2': [
- ('rx port', '3'),
- ('tx port', '4'),
- ],
- }
- expected = -1
- result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
- self.assertEqual(result, expected)
-
- # data for section
- input_data['section1'] = section1 = [
- ('rx port', '4', 'more', 432),
- ('tx port', '3'),
- ]
- expected = 3
- result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
- self.assertEqual(result, expected)
-
- # more data for section,
- section1.extend([
- ('rx port', '2'),
- ('tx port', '1', 'and more', 234),
- ])
- expected = 1
- result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
- self.assertEqual(result, expected)
-
- def test_write_prox_config(self):
- input_data = {}
- expected = ''
- result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
- self.assertEqual(result, expected)
-
- input_data = [
- [
- 'section1',
- [],
- ],
- ]
- expected = '[section1]'
- result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
- self.assertEqual(result, expected)
-
- input_data = [
- [
- 'section1',
- [],
- ],
- [
- 'section2',
- [
- ['key1', 'value1'],
- ['__name__', 'not this one'],
- ['key2', None],
- ['key3', 234],
- ['key4', 'multi-line\nvalue'],
- ],
- ],
- ]
- expected = os.linesep.join([
- '[section1]',
- '[section2]',
- 'key1=value1',
- 'key2',
- 'key3=234',
- 'key4=multi-line\n\tvalue',
- ])
- result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
- self.assertEqual(result, expected)
-
- def test_prox_config_data(self):
- setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
- mock.MagicMock())
-
- setup_helper.config_queue = config_queue = mock.MagicMock()
- config_queue.get.return_value = expected = [('s', [('a', 3), ('b', 45)])]
-
- result = setup_helper.prox_config_data
- self.assertEqual(result, expected)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
- def test_build_config_file_no_additional_file(self, mock_find_path):
- vnf1 = {
- 'prox_args': {'-c': ""},
- 'prox_path': 'd',
- 'prox_config': 'e/f',
- 'prox_generate_parameter': False,
- }
-
- mock_find_path.side_effect = ['1', '2']
-
- vnfd_helper = mock.MagicMock()
- ssh_helper = mock.MagicMock()
- scenario_helper = ScenarioHelper('vnf1')
- scenario_helper.scenario_cfg = {
- 'task_path': 'a/b',
- 'options': {
- 'vnf1': vnf1,
- },
- }
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.copy_to_target = mock.MagicMock(return_value='3')
- helper.generate_prox_config_file = mock.MagicMock(return_value='4')
- helper.upload_prox_config = mock.MagicMock(return_value='5')
-
- self.assertEqual(helper.additional_files, {})
- self.assertNotEqual(helper._prox_config_data, '4')
- self.assertNotEqual(helper.remote_path, '5')
- helper.build_config_file()
- self.assertEqual(helper.additional_files, {})
- self.assertEqual(helper._prox_config_data, '4')
- self.assertEqual(helper.remote_path, '5')
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
- def test_build_config_file_additional_file_string(self, mock_find_path):
- vnf1 = {
- 'prox_args': {'-c': ""},
- 'prox_path': 'd',
- 'prox_config': 'e/f',
- 'prox_files': 'g/h.i',
- 'prox_generate_parameter': True,
- }
-
- mock_find_path.side_effect = ['1', '2']
- vnfd_helper = mock.MagicMock()
- ssh_helper = mock.MagicMock()
- scenario_helper = ScenarioHelper('vnf1')
- scenario_helper.scenario_cfg = {
- 'task_path': 'a/b',
- 'options': {
- 'vnf1': vnf1,
- },
- }
-
- vnfd_helper.port_pairs.all_ports = ['xe0', 'xe1', 'xe2', 'xe3']
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35'])
- helper.generate_prox_config_file = mock.MagicMock(return_value='44')
- helper.upload_prox_config = mock.MagicMock(return_value='55')
-
- self.assertEqual(helper.additional_files, {})
- expected = {'h.i': '33'}
- helper.build_config_file()
- self.assertDictEqual(helper.additional_files, expected)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
- def test_build_config_file_additional_file(self, mock_find_path):
- vnf1 = {
- 'prox_args': {'-c': ""},
- 'prox_path': 'd',
- 'prox_config': 'e/f',
- 'prox_files': [
- 'g/h.i',
- 'j/k/l',
- 'm_n',
- ],
- }
-
- mock_find_path.side_effect = ['1', '2'] + [str(i) for i in range(len(vnf1['prox_files']))]
- vnfd_helper = mock.MagicMock()
- ssh_helper = mock.MagicMock()
- scenario_helper = ScenarioHelper('vnf1')
- scenario_helper.scenario_cfg = {
- 'task_path': 'a/b',
- 'options': {
- 'vnf1': vnf1,
- },
- }
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35'])
- helper.generate_prox_config_file = mock.MagicMock(return_value='44')
- helper.upload_prox_config = mock.MagicMock(return_value='55')
-
- self.assertEqual(helper.additional_files, {})
- self.assertNotEqual(helper._prox_config_data, '44')
- self.assertNotEqual(helper.remote_path, '55')
- expected = {'h.i': '33', 'l': '34', 'm_n': '35'}
- helper.build_config_file()
- self.assertDictEqual(helper.additional_files, expected)
- self.assertEqual(helper._prox_config_data, '44')
- self.assertEqual(helper.remote_path, '55')
-
- def test_build_config(self):
- vnf1 = {
- 'prox_args': {'-f': ""},
- 'prox_path': '/opt/nsb_bin/prox',
- 'prox_config': 'configs/gen_l2fwd-2.cfg',
- 'prox_files': [
- 'g/h.i',
- 'j/k/l',
- 'm_n',
- ],
- }
-
- 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',
- 'options': {
- 'vnf1': vnf1,
- },
- }
-
- 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()
- ssh_helper = mock.MagicMock()
- scenario_helper = mock.MagicMock()
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.additional_files = {"ipv4.lua": "/tmp/ipv4.lua"}
- res = helper._insert_additional_file('dofile("ipv4.lua")')
- self.assertEqual(res, 'dofile("/tmp/ipv4.lua")')
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ConfigParser')
- def test_generate_prox_config_file(self, mock_parser_type):
- def init(*args):
- if sections_data:
- args[-1].extend(sections_data)
- return mock.MagicMock()
-
- sections_data = []
-
- mock_parser_type.side_effect = init
-
- vnfd_helper = VnfdHelper(self.VNFD0)
- ssh_helper = mock.MagicMock()
- scenario_helper = mock.MagicMock()
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.additional_files = {}
-
- expected = []
- result = helper.generate_prox_config_file('a/b')
- self.assertEqual(result, expected)
-
- helper.additional_files = {"ipv4.lua": "/tmp/ipv4.lua"}
-
- helper.remote_prox_file_name = 'remote'
- sections_data = [
- [
- 'lua',
- [
- ['dofile("ipv4.lua")', ''],
- ],
- ],
- [
- 'port 0',
- [
- ['ip', ''],
- ['mac', 'foo'],
- ['dst mac', '@@1'],
- ['tx port', '1'],
- ],
- ],
- [
- 'port 2',
- [
- ['ip', ''],
- ['$sut_mac0', '@@dst_mac0'],
- ['tx port', '0'],
- ['single', '@'],
- ['user_table', 'dofile("ipv4.lua")'],
- ['missing_addtional_file', 'dofile("nosuch")'],
- ],
- ],
- ]
-
- expected = [
- [
- 'lua',
- [
- ['dofile("/tmp/ipv4.lua")', ''],
- ],
- ],
- [
- 'port 0',
- [
- ['ip', ''],
- ['mac', 'hardware'],
- ['dst mac', '00:00:00:00:00:03'],
- ['tx port', '1'],
- ],
- ],
- [
- 'port 2',
- [
- ['ip', ''],
- ['$sut_mac0', '00 00 00 00 00 04'],
- ['tx port', '0'],
- ['single', '@'],
- ['user_table', 'dofile("/tmp/ipv4.lua")'],
- ['missing_addtional_file', 'dofile("nosuch")'],
- ],
- ],
- ]
- result = helper.generate_prox_config_file('/c/d/e')
- self.assertEqual(result, expected, str(result))
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ConfigParser')
- def test_generate_prox_config_file_negative(self, mock_parser_type):
- def init(*args):
- args[-1].update(sections_data)
- return mock.MagicMock()
-
- sections_data = {}
-
- mock_parser_type.side_effect = init
-
- vnfd_helper = mock.MagicMock()
- vnfd_helper.interfaces = []
- ssh_helper = mock.MagicMock()
- scenario_helper = mock.MagicMock()
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.additional_files = {}
- helper.remote_prox_file_name = 'remote'
- vnfd_helper.interfaces = [
- {
- 'virtual-interface': {
- 'dpdk_port_num': 3,
- 'dst_mac': '00:00:00:de:ad:88',
- },
- },
- {
- 'virtual-interface': {
- 'dpdk_port_num': 5,
- 'dst_mac': '00:00:00:de:ad:ff',
- },
- },
- {
- 'virtual-interface': {
- 'dpdk_port_num': 7,
- 'dst_mac': '00:00:00:de:ad:ff',
- },
- },
- ]
- sections_data = {
- 'port 3': [
- ['ip', ''],
- ['mac', 'foo'],
- ['dst mac', ''],
- ],
- 'port 5': [
- ['ip', ''],
- ['dst mac', ''],
- ['tx port', '0'],
- ['???', 'dofile "here" 23'],
- ],
- }
-
- with self.assertRaises(Exception):
- helper.generate_prox_config_file('a/b')
-
- def test_put_string_to_file(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.interfaces = []
- ssh_helper = mock.MagicMock()
- scenario_helper = mock.MagicMock()
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
- expected = 'a/b'
- result = helper.put_string_to_file('my long string', 'a/b')
- self.assertEqual(result, expected)
-
- def test_copy_to_target(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.interfaces = []
- ssh_helper = mock.MagicMock()
- scenario_helper = mock.MagicMock()
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- expected = '/tmp/c'
- result = helper.copy_to_target('a/b', 'c')
- self.assertEqual(result, expected)
-
- def test_upload_prox_config(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.interfaces = []
- ssh_helper = mock.MagicMock()
- scenario_helper = mock.MagicMock()
-
- helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- helper.write_prox_config = mock.MagicMock(return_value='a long string')
- expected = '/tmp/a'
- result = helper.upload_prox_config('a', {})
- self.assertEqual(result, expected)
-
-
-class TestProxResourceHelper(unittest.TestCase):
-
- VNFD0 = {
- 'short-name': 'ProxVnf',
- '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': 'PROX approximation using DPDK',
- 'name': 'proxvnf-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': 'proxvnf-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',
- 'vld_id': 'uplink_0',
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 0,
- 'bandwidth': '10 Gbps',
- 'driver': "i40e",
- 'dst_ip': '152.16.100.19',
- 'local_iface_name': 'xe0',
- 'local_mac': '00:00:00:00:00:02',
- 'ifname': 'xe0',
- },
- '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',
- 'vld_id': 'downlink_0',
- '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',
- 'ifname': 'xe1',
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1',
- },
- ],
- },
- ],
- 'description': 'PROX approximation using DPDK',
- 'mgmt-interface': {
- 'vdu-id': 'proxvnf-baremetal',
- 'host': '1.2.1.1',
- 'password': 'r00t',
- 'user': 'root',
- 'ip': '1.2.1.1',
- },
- 'benchmark': {
- 'kpi': [
- 'packets_in',
- 'packets_fwd',
- 'packets_dropped',
- ],
- },
- 'id': 'ProxApproxVnf',
- 'name': 'ProxVnf',
- }
-
- VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- VNFD0,
- ],
- },
- }
-
- def test_find_pci(self):
- input_str_list = [
- 'no target here',
- 'nor here',
- 'and still not',
- ]
- result = ProxResourceHelper.find_pci('target', input_str_list)
- self.assertFalse(result)
-
- input_str_list = [
- 'no target here',
- 'nor here',
- 'this is a target',
- 'did we miss it',
- ]
- result = ProxResourceHelper.find_pci('target', input_str_list)
- self.assertTrue(result)
-
- @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, *args):
- helper = ProxResourceHelper(mock.MagicMock())
- self.assertIsNone(helper.client)
- result = helper.sut
- self.assertIsNotNone(result)
- self.assertIs(result, helper.client)
- self.assertIs(result, helper.sut)
-
- def test_test_type(self):
- setup_helper = mock.MagicMock()
- setup_helper.find_in_section.return_value = expected = 'prox type'
-
- helper = ProxResourceHelper(setup_helper)
-
- self.assertIsNone(helper._test_type)
- self.assertEqual(helper.test_type, expected)
- self.assertEqual(helper._test_type, expected)
- self.assertEqual(helper.test_type, expected)
-
- def test_collect_collectd_kpi(self):
- helper = ProxResourceHelper(mock.MagicMock())
- helper.resource = resource = mock.MagicMock()
-
- resource.check_if_sa_running.return_value = 0, '1234'
- resource.amqp_collect_nfvi_kpi.return_value = 543
- resource.check_if_sa_running.return_value = (0, None)
-
- expected = {'core': 543}
- result = helper.collect_collectd_kpi()
- self.assertDictEqual(result, expected)
-
- def test_collect_kpi(self):
- helper = ProxResourceHelper(mock.MagicMock())
- helper._queue = queue = mock.MagicMock()
- helper._result = {'z': 123}
- helper.resource = resource = mock.MagicMock()
-
- resource.check_if_sa_running.return_value = 0, '1234'
- resource.amqp_collect_nfvi_kpi.return_value = 543
- resource.check_if_sa_running.return_value = (0, None)
-
- queue.empty.return_value = False
- queue.get.return_value = {'a': 789}
-
- expected = {'z': 123, 'a': 789, 'collect_stats': {'core': 543}}
- result = helper.collect_kpi()
- self.assertDictEqual(result, expected)
-
- @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, *args):
- client = mock_socket_helper_type()
- client.connect.side_effect = chain(repeat(socket.error, 5), [None])
-
- setup_helper = mock.MagicMock()
- setup_helper.vnfd_helper.interfaces = []
-
- helper = ProxResourceHelper(setup_helper)
-
- result = helper._connect()
- self.assertIs(result, client)
-
- client.connect.side_effect = chain(repeat(socket.error, 65), [None])
-
- with self.assertRaises(Exception):
- helper._connect()
-
- def test_run_traffic(self):
- setup_helper = mock.MagicMock()
- helper = ProxResourceHelper(setup_helper)
- traffic_profile = mock.MagicMock(**{"done": True})
- helper.run_traffic(traffic_profile)
- self.assertEqual(helper._terminated.value, 1)
-
- def test__run_traffic_once(self):
- setup_helper = mock.MagicMock()
- helper = ProxResourceHelper(setup_helper)
- traffic_profile = mock.MagicMock(**{"done": True})
- helper._run_traffic_once(traffic_profile)
- self.assertEqual(helper._terminated.value, 1)
-
- def test_start_collect(self):
- setup_helper = mock.MagicMock()
- helper = ProxResourceHelper(setup_helper)
- helper.resource = resource = mock.MagicMock()
- self.assertIsNone(helper.start_collect())
- resource.start.assert_called_once()
-
- def test_terminate(self):
- setup_helper = mock.MagicMock()
- helper = ProxResourceHelper(setup_helper)
- with self.assertRaises(NotImplementedError):
- helper.terminate()
-
- def test_up_post(self):
- setup_helper = mock.MagicMock()
- helper = ProxResourceHelper(setup_helper)
- helper.client = expected = mock.MagicMock()
- result = helper.up_post()
- self.assertEqual(result, expected)
-
- def test_execute(self):
- setup_helper = mock.MagicMock()
- helper = ProxResourceHelper(setup_helper)
- helper.client = mock.MagicMock()
-
- expected = helper.client.my_command()
- result = helper.execute('my_command')
- self.assertEqual(result, expected)
-
- helper.client = object()
-
- result = helper.execute('my_command')
- self.assertIsNone(result)
-
-
-class TestProxDataHelper(unittest.TestCase):
-
- def test_totals_and_pps(self):
- pkt_size = 180
- vnfd_helper = mock.MagicMock()
- vnfd_helper.port_pairs.all_ports = list(range(4))
-
- sut = mock.MagicMock()
- sut.port_stats.return_value = list(range(10))
-
- data_helper = ProxDataHelper(vnfd_helper, sut, pkt_size, 25, None)
-
- self.assertEqual(data_helper.rx_total, 6)
- self.assertEqual(data_helper.tx_total, 7)
- self.assertEqual(data_helper.pps, 6.25e6)
-
- def test_samples(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.port_pairs.all_ports = list(range(4))
- vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
-
- sut = mock.MagicMock()
- sut.port_stats.return_value = list(range(10))
-
- data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None)
-
- expected = {
- 'xe1': {
- 'in_packets': 6,
- 'out_packets': 7,
- },
- 'xe2': {
- 'in_packets': 6,
- 'out_packets': 7,
- },
- }
- result = data_helper.samples
- self.assertDictEqual(result, expected)
-
- def test___enter__(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.port_pairs.all_ports = list(range(4))
- vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
-
- sut = mock.MagicMock()
- sut.port_stats.return_value = list(range(10))
-
- data_helper = ProxDataHelper(vnfd_helper, sut, None, None, 5.4)
- data_helper._totals_and_pps = 12, 32, 4.5
- data_helper.tsc_hz = 9.8
- data_helper.measured_stats = {'delta': TotStatsTuple(6.1, 6.2, 6.3, 6.4)}
- data_helper.latency = 7
-
- self.assertIsNone(data_helper.result_tuple)
-
- expected = ProxTestDataTuple(5.4, 9.8, 6.1, 6.2, 6.3, 7, 12, 32, 4.5)
- with data_helper:
- pass
-
- result = data_helper.result_tuple
- self.assertEqual(result, expected)
-
- data_helper.make_tuple()
- self.assertIs(data_helper.result_tuple, result)
-
- def test___enter___negative(self):
- vnfd_helper = mock.MagicMock()
-
- data_helper = ProxDataHelper(vnfd_helper, None, None, None, None)
-
- vnfd_helper.port_pairs.all_ports = []
- with self.assertRaises(AssertionError):
- with data_helper:
- pass
-
- vnfd_helper.port_pairs.all_ports = [0, 1, 2]
- with self.assertRaises(AssertionError):
- with data_helper:
- pass
-
- def test_measure_tot_stats(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.port_pairs.all_ports = list(range(4))
-
- start = (3, 4, 1, 2)
- end = (9, 7, 6, 8)
-
- sut = ProxSocketHelper(mock.MagicMock())
- sut.get_all_tot_stats = mock.MagicMock(side_effect=[start, end])
-
- data_helper = ProxDataHelper(vnfd_helper, sut, None, None, 5.4)
-
- self.assertIsNone(data_helper.measured_stats)
-
- expected = {
- 'start_tot': start,
- 'end_tot': end,
- 'delta': TotStatsTuple(6, 3, 5, 6),
- }
- with data_helper.measure_tot_stats():
- pass
-
- self.assertEqual(data_helper.measured_stats, expected)
-
- def test_capture_tsc_hz(self):
- vnfd_helper = mock.MagicMock()
- vnfd_helper.port_pairs.all_ports = list(range(4))
-
- sut = mock.MagicMock()
- sut.hz.return_value = '54.6'
-
- data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None)
-
- self.assertIsNone(data_helper.tsc_hz)
-
- expected = 54.6
- data_helper.capture_tsc_hz()
- self.assertEqual(data_helper.tsc_hz, expected)
-
-
-class TestProxProfileHelper(unittest.TestCase):
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.utils')
- def test_get_cls(self, mock_utils):
- mock_type1 = mock.MagicMock()
- mock_type1.__prox_profile_type__ = 'another_type'
- mock_type2 = mock.MagicMock()
- mock_type2.__prox_profile_type__ = 'my_type'
- mock_utils.itersubclasses.return_value = [mock_type1, mock_type2]
-
- self.assertEqual(ProxProfileHelper.get_cls('my_type'), mock_type2)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.utils')
- def test_get_cls_default(self, mock_utils):
- mock_utils.itersubclasses.return_value = []
- ProxProfileHelper.get_cls('my_type')
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.SocketTopology')
- def test_cpu_topology(self, mock_socket_topology):
- mock_socket_topology.parse_cpuinfo.return_value = 432
-
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.ssh_helper.execute.return_value = 0, 'output', ''
-
- helper = ProxProfileHelper(resource_helper)
- self.assertIsNone(helper._cpu_topology)
- result = helper.cpu_topology
- self.assertEqual(result, 432)
- self.assertIs(result, helper._cpu_topology)
- self.assertIs(result, helper.cpu_topology)
-
- def test_test_cores(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = []
-
- helper = ProxProfileHelper(resource_helper)
- helper._cpu_topology = []
-
- expected = []
- result = helper.test_cores
- self.assertEqual(result, expected)
-
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1s3', []),
- ('core 2s5', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3s1', [
- ('index', 5),
- ('mode', 'gen'),
- ]),
- ('core 4s9h', [
- ('index', 7),
- ('mode', 'gen'),
- ]),
- ]
-
- helper = ProxProfileHelper(resource_helper)
- helper._cpu_topology = {
- 1: {
- 3: {
- 'key1': (23, 32),
- 'key2': (12, 21),
- 'key3': (44, 33),
- },
- },
- 9: {
- 4: {
- 'key1': (44, 32),
- 'key2': (23, 21),
- 'key3': (12, 33),
- },
- },
- }
-
- self.assertIsNone(helper._test_cores)
- expected = [12, 23]
- result = helper.test_cores
- self.assertEqual(result, expected)
- self.assertIs(result, helper._test_cores)
- self.assertIs(result, helper.test_cores)
-
- def test_latency_cores(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = []
-
- helper = ProxProfileHelper(resource_helper)
- helper._cpu_topology = []
-
- expected = []
- result = helper.latency_cores
- self.assertEqual(result, expected)
-
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1s3', []),
- ('core 2s5', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3s1', [
- ('index', 5),
- ('mode', 'lat'),
- ]),
- ('core 4s9h', [
- ('index', 7),
- ('mode', 'lat'),
- ]),
- ]
-
- helper = ProxProfileHelper(resource_helper)
- helper._cpu_topology = {
- 1: {
- 3: {
- 'key1': (23, 32),
- 'key2': (12, 21),
- 'key3': (44, 33),
- },
- },
- 9: {
- 4: {
- 'key1': (44, 32),
- 'key2': (23, 21),
- 'key3': (12, 33),
- },
- },
- }
-
- self.assertIsNone(helper._latency_cores)
- expected = [12, 23]
- result = helper.latency_cores
- self.assertEqual(result, expected)
- self.assertIs(result, helper._latency_cores)
- self.assertIs(result, helper.latency_cores)
-
- def test_all_rx_cores(self):
- helper = ProxBngProfileHelper(mock.MagicMock())
- helper._latency_cores = expected = [3, 4, 6]
- helper._test_cores = [5, 2, 1]
-
- result = helper.all_rx_cores
- self.assertEqual(result, expected)
-
- def test_get_cores(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ]),
- ]
-
- helper = ProxProfileHelper(resource_helper)
- helper._cpu_topology = {
- 0: {
- 1: {
- 5: (5, 1, 0)
- },
- 2: {
- 6: (6, 2, 0)
- },
- 3: {
- 7: (7, 3, 0)
- },
- 4: {
- 8: (8, 3, 0)
- },
- }
- }
-
- expected = [7, 8]
- result = helper.get_cores(helper.PROX_CORE_GEN_MODE)
- self.assertEqual(result, expected)
-
- def test_get_latency(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.vnfd_helper.interfaces = []
-
- helper = ProxProfileHelper(resource_helper)
- helper._latency_cores = []
-
- expected = []
- result = helper.get_latency()
- self.assertEqual(result, expected)
-
- helper._latency_cores = [1, 2]
- helper.client = mock.MagicMock()
-
- expected = helper.sut.lat_stats()
- result = helper.get_latency()
- self.assertIs(result, expected)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
- def test_traffic_context(self, *args):
- setup_helper = mock.MagicMock()
- setup_helper.vnfd_helper.interfaces = []
-
- helper = ProxProfileHelper(setup_helper)
- helper._cpu_topology = {
- 0: {
- 1: {
- 5: (5, 1, 0)
- },
- 2: {
- 6: (6, 2, 0)
- },
- 3: {
- 7: (7, 3, 0)
- },
- 4: {
- 8: (8, 3, 0)
- },
- }
- }
-
- setup_helper.prox_config_data = [
- ('global', [
- ('not_name', 'other data'),
- ('name_not', 'more data'),
- ('name', helper.__prox_profile_type__),
- ]),
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ('name', 'tagged'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ('name', 'udp'),
- ]),
- ]
-
- client = mock.MagicMock()
- client.hz.return_value = 2
- client.port_stats.return_value = tuple(range(12))
-
- helper.client = client
- helper.get_latency = mock.MagicMock(return_value=[3.3, 3.6, 3.8])
-
- helper._test_cores = [3, 4]
-
- with helper.traffic_context(64, 1):
- pass
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
- def test_run_test(self, _):
- resource_helper = mock.MagicMock()
- resource_helper.step_delta = 0.4
- resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
- resource_helper.sut.port_stats.return_value = list(range(10))
-
- helper = ProxProfileHelper(resource_helper)
-
- helper.run_test(120, 5, 6.5)
-
-
-class TestProxMplsProfileHelper(unittest.TestCase):
-
- def test_mpls_cores(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ('name', 'tagged'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ('name', 'udp'),
- ]),
- ]
-
- helper = ProxMplsProfileHelper(resource_helper)
- helper._cpu_topology = {
- 0: {
- 1: {
- 5: (5, 1, 0)
- },
- 2: {
- 6: (6, 2, 0)
- },
- 3: {
- 7: (7, 3, 0)
- },
- 4: {
- 8: (8, 3, 0)
- },
- }
- }
-
- expected_tagged = [7]
- expected_plain = [8]
- self.assertIsNone(helper._cores_tuple)
- self.assertEqual(helper.tagged_cores, expected_tagged)
- self.assertEqual(helper.plain_cores, expected_plain)
- self.assertEqual(helper._cores_tuple, (expected_tagged, expected_plain))
-
- def test_traffic_context(self):
- setup_helper = mock.MagicMock()
- helper = ProxMplsProfileHelper(setup_helper)
-
- with helper.traffic_context(120, 5.4):
- pass
-
-
-class TestProxBngProfileHelper(unittest.TestCase):
-
- def test_bng_cores(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ('name', 'cpe'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ('name', 'inet'),
- ]),
- ('core 6', [
- ('index', 3),
- ('mode', 'gen'),
- ('name', 'arp_task'),
- ]),
- ('core 9', [
- ('index', 2),
- ('mode', 'gen'),
- ('name', 'arp'),
- ]),
- ]
-
- helper = ProxBngProfileHelper(resource_helper)
- helper._cpu_topology = {
- 0: {
- 1: {
- 5: (5, 1, 0)
- },
- 2: {
- 6: (6, 2, 0)
- },
- 3: {
- 7: (7, 3, 0)
- },
- 4: {
- 8: (8, 3, 0)
- },
- 6: {
- 1: (4, 8, 0)
- },
- 9: {
- 2: (3, 7, 0)
- },
- }
- }
-
- expected_cpe = [7]
- expected_inet = [8]
- expected_arp = [4, 3]
- expected_arp_task = [0, 4]
- expected_combined = (expected_cpe, expected_inet, expected_arp, expected_arp_task)
-
- self.assertIsNone(helper._cores_tuple)
- self.assertEqual(helper.cpe_cores, expected_cpe)
- self.assertEqual(helper.inet_cores, expected_inet)
- self.assertEqual(helper.arp_cores, expected_arp)
- self.assertEqual(helper.arp_task_cores, expected_arp_task)
- self.assertEqual(helper._cores_tuple, expected_combined)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
- def test_run_test(self, _):
- resource_helper = mock.MagicMock()
- resource_helper.step_delta = 0.4
- resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
- resource_helper.sut.port_stats.return_value = list(range(10))
-
- helper = ProxBngProfileHelper(resource_helper)
-
- helper.run_test(120, 5, 6.5)
- helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1
-
-
-class TestProxVpeProfileHelper(unittest.TestCase):
-
- def test_vpe_cores(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ('name', 'cpe'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ('name', 'inet'),
- ]),
- ]
-
- helper = ProxVpeProfileHelper(resource_helper)
- helper._cpu_topology = {
- 0: {
- 1: {
- 5: (5, 1, 0)
- },
- 2: {
- 6: (6, 2, 0)
- },
- 3: {
- 7: (7, 3, 0)
- },
- 4: {
- 8: (8, 3, 0)
- },
- }
- }
-
- expected_cpe = [7]
- expected_inet = [8]
- expected_combined = (expected_cpe, expected_inet)
-
- self.assertIsNone(helper._cores_tuple)
- self.assertEqual(helper.cpe_cores, expected_cpe)
- self.assertEqual(helper.inet_cores, expected_inet)
- self.assertEqual(helper._cores_tuple, expected_combined)
-
- def test_vpe_ports(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('port 3', [
- ('index', '5'),
- ('name', 'cpe'),
- ('mac', 'hardware'),
- ]),
- ('port 4', [
- ('index', '7'),
- ('name', 'inet'),
- ('mac', 'hardware'),
- ]),
- ]
-
- helper = ProxVpeProfileHelper(resource_helper)
- helper._port_list = {
- 0: {
- 1: {
- 5: 'cpe'
- },
- 2: {
- 6: 'inet'
- },
- 3: {
- 7: 'cpe'
- },
- 4: {
- 8: 'inet'
- },
- }
- }
-
- expected_cpe = [3]
- expected_inet = [4]
- expected_combined = (expected_cpe, expected_inet)
-
- self.assertIsNone(helper._ports_tuple)
- self.assertEqual(helper.cpe_ports, expected_cpe)
- self.assertEqual(helper.inet_ports, expected_inet)
- self.assertEqual(helper._ports_tuple, expected_combined)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
- def test_run_test(self, _):
- resource_helper = mock.MagicMock()
- resource_helper.step_delta = 0.4
- resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
- resource_helper.sut.port_stats.return_value = list(range(10))
-
- helper = ProxVpeProfileHelper(resource_helper)
-
- helper.run_test(120, 5, 6.5)
- helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1
-
-
-class TestProxlwAFTRProfileHelper(unittest.TestCase):
-
- def test_lwaftr_cores(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('core 1', []),
- ('core 2', [
- ('index', 8),
- ('mode', ''),
- ]),
- ('core 3', [
- ('index', 5),
- ('mode', 'gen'),
- ('name', 'tun'),
- ]),
- ('core 4', [
- ('index', 7),
- ('mode', 'gen'),
- ('name', 'inet'),
- ]),
- ]
-
- helper = ProxlwAFTRProfileHelper(resource_helper)
- helper._cpu_topology = {
- 0: {
- 1: {
- 5: (5, 1, 0)
- },
- 2: {
- 6: (6, 2, 0)
- },
- 3: {
- 7: (7, 3, 0)
- },
- 4: {
- 8: (8, 3, 0)
- },
- }
- }
-
- expected_tun = [7]
- expected_inet = [8]
- expected_combined = (expected_tun, expected_inet)
-
- self.assertIsNone(helper._cores_tuple)
- self.assertEqual(helper.tun_cores, expected_tun)
- self.assertEqual(helper.inet_cores, expected_inet)
- self.assertEqual(helper._cores_tuple, expected_combined)
-
- def test_tun_ports(self):
- resource_helper = mock.MagicMock()
- resource_helper.setup_helper.prox_config_data = [
- ('section1', []),
- ('section2', [
- ('a', 'b'),
- ('c', 'd'),
- ]),
- ('port 3', [
- ('index', '5'),
- ('name', 'lwB4'),
- ('mac', 'hardware'),
- ]),
- ('port 4', [
- ('index', '7'),
- ('name', 'inet'),
- ('mac', 'hardware'),
- ]),
- ]
-
- helper = ProxlwAFTRProfileHelper(resource_helper)
- helper._port_list = {
- 0: {
- 1: {
- 5: 'lwB4'
- },
- 2: {
- 6: 'inet'
- },
- 3: {
- 7: 'lwB4'
- },
- 4: {
- 8: 'inet'
- },
- }
- }
-
- expected_tun = [3]
- expected_inet = [4]
- expected_combined = (expected_tun, expected_inet)
-
- self.assertIsNone(helper._ports_tuple)
- self.assertEqual(helper.tun_ports, expected_tun)
- self.assertEqual(helper.inet_ports, expected_inet)
- self.assertEqual(helper._ports_tuple, expected_combined)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
- def test_run_test(self, _):
- resource_helper = mock.MagicMock()
- resource_helper.step_delta = 0.4
- resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
- resource_helper.sut.port_stats.return_value = list(range(10))
-
- helper = ProxlwAFTRProfileHelper(resource_helper)
-
- helper.run_test(120, 5, 6.5)
- helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1
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
deleted file mode 100644
index 769279066..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_prox_vnf.py
+++ /dev/null
@@ -1,432 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import errno
-import os
-import unittest
-import mock
-from copy import deepcopy
-
-from tests.unit import STL_MOCKS
-
-
-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.prox_vnf import ProxApproxVnf
- from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
-
-
-NAME = "vnf__1"
-
-
-@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
-class TestProxApproxVnf(unittest.TestCase):
-
- VNFD0 = {
- 'short-name': 'ProxVnf',
- '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': 'PROX approximation using DPDK',
- 'name': 'proxvnf-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': 'proxvnf-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',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- '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',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe1',
- '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': 'PROX approximation using DPDK',
- 'mgmt-interface': {
- 'vdu-id': 'proxvnf-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': 'ProxApproxVnf',
- 'name': 'ProxVnf',
- }
-
- VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- VNFD0,
- ],
- },
- }
-
- SCENARIO_CFG = {
- 'task_path': "",
- 'nodes': {
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick'},
- 'runner': {
- 'duration': 600, 'type': 'Duration'},
- 'topology': 'prox-tg-topology-2.yaml',
- 'traffic_profile': '../../traffic_profiles/prox_binsearch.yaml',
- 'type': 'NSPerf',
- 'options': {
- 'tg__1': {'prox_args': {'-e': '',
- '-t': ''},
- 'prox_config': 'configs/l3-gen-2.cfg',
- 'prox_path':
- '/root/dppd-PROX-v035/build/prox'},
- 'vnf__1': {
- 'prox_args': {'-t': ''},
- 'prox_config': 'configs/l3-swap-2.cfg',
- 'prox_path': '/root/dppd-PROX-v035/build/prox'}}}
-
- CONTEXT_CFG = {
- 'nodes': {
- 'tg__2': {
- 'member-vnf-index': '3',
- 'role': 'TrafficGen',
- 'name': 'trafficgen_2.yardstick',
- 'vnfd-id-ref': 'tg__2',
- 'ip': '1.2.1.1',
- 'interfaces': {
- 'xe0': {
- 'local_iface_name': 'ens513f0',
- 'vld_id': ProxApproxVnf.DOWNLINK,
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.20',
- 'dst_mac': '00:00:00:00:00:01',
- 'local_mac': '00:00:00:00:00:03',
- 'dst_ip': '152.16.40.19',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.0',
- 'dpdk_port_num': 0,
- },
- 'xe1': {
- 'local_iface_name': 'ens513f1',
- 'netmask': '255.255.255.0',
- 'network': '202.16.100.0',
- 'local_ip': '202.16.100.20',
- 'local_mac': '00:1e:67:d0:60:5d',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.1',
- 'dpdk_port_num': 1,
- },
- },
- 'password': 'r00t',
- 'VNF model': 'l3fwd_vnf.yaml',
- 'user': 'root',
- },
- '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': ProxApproxVnf.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': ProxApproxVnf.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': ProxApproxVnf.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': [
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'network': '152.16.100.20',
- 'if': 'xe0',
- },
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'network': '152.16.40.20',
- 'if': 'xe1',
- },
- ],
- 'member-vnf-index': '2',
- 'host': '1.2.1.1',
- 'role': 'vnf',
- 'user': 'root',
- 'nd_route_tbl': [
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0',
- },
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1',
- },
- ],
- 'password': 'r00t',
- 'VNF model': 'prox_vnf.yaml',
- },
- },
- }
-
- @mock.patch(SSH_HELPER)
- 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, *args):
- mock_ssh(ssh)
-
- prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
- prox_approx_vnf.resource_helper = None
- expected = {
- 'packets_in': 0,
- 'packets_dropped': 0,
- 'packets_fwd': 0,
- 'collect_stats': {'core': {}},
- }
- result = prox_approx_vnf.collect_kpi()
- self.assertEqual(result, expected)
-
- @mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, *args):
- mock_ssh(ssh)
-
- resource_helper = mock.MagicMock()
- resource_helper.execute.return_value = list(range(12))
- resource_helper.collect_collectd_kpi.return_value = {'core': {'result': 234}}
-
- prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
- prox_approx_vnf.resource_helper = resource_helper
-
- expected = {
- 'packets_in': 6,
- 'packets_dropped': 1,
- 'packets_fwd': 7,
- 'collect_stats': {'core': {'result': 234}},
- }
- result = prox_approx_vnf.collect_kpi()
- self.assertEqual(result, expected)
-
- @mock.patch(SSH_HELPER)
- def test_collect_kpi_error(self, ssh, *args):
- mock_ssh(ssh)
-
- resource_helper = mock.MagicMock()
-
- prox_approx_vnf = ProxApproxVnf(NAME, deepcopy(self.VNFD0))
- prox_approx_vnf.resource_helper = resource_helper
- prox_approx_vnf.vnfd_helper['vdu'][0]['external-interface'] = []
- prox_approx_vnf.vnfd_helper.port_pairs.interfaces = []
-
- with self.assertRaises(RuntimeError):
- prox_approx_vnf.collect_kpi()
-
- 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(SSH_HELPER)
- 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()
- # we can't mock super
- prox_approx_vnf.instantiate(self.SCENARIO_CFG, self.CONTEXT_CFG)
- prox_approx_vnf.setup_helper.build_config.assert_called_once()
-
- @mock.patch(SSH_HELPER)
- 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})
- prox_approx_vnf._run_prox = mock.Mock(return_value=0)
- prox_approx_vnf.WAIT_TIME = 0
- prox_approx_vnf.q_out.put("PANIC")
- with self.assertRaises(RuntimeError):
- prox_approx_vnf.wait_for_instantiate()
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
- @mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, *args):
- mock_ssh(ssh)
- prox_approx_vnf = ProxApproxVnf(NAME, self.VNFD0)
- prox_approx_vnf._vnf_process = mock.MagicMock()
- prox_approx_vnf._vnf_process.terminate = mock.Mock()
- prox_approx_vnf.ssh_helper = mock.MagicMock()
- prox_approx_vnf.setup_helper = mock.Mock()
- prox_approx_vnf.resource_helper = mock.MagicMock()
-
- self.assertIsNone(prox_approx_vnf.terminate())
-
- @mock.patch(SSH_HELPER)
- 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()
-
- prox_approx_vnf._vnf_up_post()
- self.assertEqual(resource_helper.up_post.call_count, 1)
-
- @mock.patch(SSH_HELPER)
- 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()
-
- resource_helper.execute.side_effect = OSError(errno.EPIPE, "")
- prox_approx_vnf.vnf_execute("", _ignore_errors=True)
-
- resource_helper.execute.side_effect = OSError(errno.ESHUTDOWN, "")
- prox_approx_vnf.vnf_execute("", _ignore_errors=True)
-
- resource_helper.execute.side_effect = OSError(errno.EADDRINUSE, "")
- with self.assertRaises(OSError):
- prox_approx_vnf.vnf_execute("", _ignore_errors=True)
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
deleted file mode 100644
index 9ed6fd5b3..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_router_vnf.py
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-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
deleted file mode 100644
index beb4f8f9f..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
+++ /dev/null
@@ -1,2077 +0,0 @@
-#!/usr/bin/env python
-
-# 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 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.vnf_generic.vnf.base import VnfdHelper
-
-
-class MockError(BaseException):
- pass
-
-
-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.sample_vnf import VnfSshHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFDeployHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import ResourceHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import Rfc2544ResourceHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import SetupEnvHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNF
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import DpdkVnfSetupEnvHelper
-
-
-class TestVnfSshHelper(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',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe0',
- },
- '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',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- },
- '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 assertAll(self, iterable, message=None):
- self.assertTrue(all(iterable), message)
-
- def test_get_class(self):
- self.assertIs(VnfSshHelper.get_class(), VnfSshHelper)
-
- @mock.patch('yardstick.ssh.paramiko')
- def test_copy(self, _):
- ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
- ssh_helper._run = mock.Mock()
-
- ssh_helper.execute('ls')
- self.assertTrue(ssh_helper.is_connected)
- result = ssh_helper.copy()
- self.assertIsInstance(result, VnfSshHelper)
- self.assertFalse(result.is_connected)
- self.assertEqual(result.bin_path, ssh_helper.bin_path)
- self.assertEqual(result.host, ssh_helper.host)
- self.assertEqual(result.port, ssh_helper.port)
- self.assertEqual(result.user, ssh_helper.user)
- self.assertEqual(result.password, ssh_helper.password)
- self.assertEqual(result.key_filename, ssh_helper.key_filename)
-
- @mock.patch('yardstick.ssh.paramiko')
- def test_upload_config_file(self, mock_paramiko):
- ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
- ssh_helper._run = mock.MagicMock()
-
- self.assertFalse(ssh_helper.is_connected)
- cfg_file = ssh_helper.upload_config_file('my/prefix', 'my content')
- self.assertTrue(ssh_helper.is_connected)
- self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
- self.assertTrue(cfg_file.startswith('/tmp'))
-
- cfg_file = ssh_helper.upload_config_file('/my/prefix', 'my content')
- self.assertTrue(ssh_helper.is_connected)
- self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
- self.assertEqual(cfg_file, '/my/prefix')
-
- def test_join_bin_path(self):
- ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
-
- expected_start = 'my'
- expected_middle_list = ['bin']
- expected_end = 'path'
- result = ssh_helper.join_bin_path()
- self.assertTrue(result.startswith(expected_start))
- self.assertAll(middle in result for middle in expected_middle_list)
- self.assertTrue(result.endswith(expected_end))
-
- expected_middle_list.append(expected_end)
- expected_end = 'some_file.sh'
- result = ssh_helper.join_bin_path('some_file.sh')
- self.assertTrue(result.startswith(expected_start))
- self.assertAll(middle in result for middle in expected_middle_list)
- self.assertTrue(result.endswith(expected_end))
-
- expected_middle_list.append('some_dir')
- expected_end = 'some_file.sh'
- result = ssh_helper.join_bin_path('some_dir', 'some_file.sh')
- self.assertTrue(result.startswith(expected_start))
- self.assertAll(middle in result for middle in expected_middle_list)
- self.assertTrue(result.endswith(expected_end))
-
- @mock.patch('yardstick.ssh.paramiko')
- @mock.patch('yardstick.ssh.provision_tool')
- def test_provision_tool(self, mock_provision_tool, mock_paramiko):
- ssh_helper = VnfSshHelper(self.VNFD_0['mgmt-interface'], 'my/bin/path')
- ssh_helper._run = mock.MagicMock()
-
- self.assertFalse(ssh_helper.is_connected)
- ssh_helper.provision_tool()
- self.assertTrue(ssh_helper.is_connected)
- self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
- self.assertEqual(mock_provision_tool.call_count, 1)
-
- ssh_helper.provision_tool(tool_file='my_tool.sh')
- self.assertTrue(ssh_helper.is_connected)
- self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
- self.assertEqual(mock_provision_tool.call_count, 2)
-
- ssh_helper.provision_tool('tool_path', 'my_tool.sh')
- self.assertTrue(ssh_helper.is_connected)
- self.assertEqual(mock_paramiko.SSHClient.call_count, 1)
- self.assertEqual(mock_provision_tool.call_count, 3)
-
-
-class TestSetupEnvHelper(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',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe0',
- },
- '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',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- },
- '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'
- }
-
- def test_build_config(self):
- setup_env_helper = SetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
-
- with self.assertRaises(NotImplementedError):
- setup_env_helper.build_config()
-
- def test_setup_vnf_environment(self):
- setup_env_helper = SetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
- self.assertIsNone(setup_env_helper.setup_vnf_environment())
-
- def test_tear_down(self):
- setup_env_helper = SetupEnvHelper(mock.Mock(), mock.Mock(), mock.Mock())
-
- with self.assertRaises(NotImplementedError):
- setup_env_helper.tear_down()
-
-
-class TestDpdkVnfSetupEnvHelper(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',
- 'dpdk_port_num': 0,
- 'driver': 'i40e',
- 'local_ip': '152.16.100.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'bandwidth': '10 Gbps',
- 'dst_ip': '152.16.100.20',
- 'local_mac': '00:00:00:00:00:01',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe0',
- },
- 'vnfd-connection-point-ref': 'xe0',
- 'name': 'xe0'
- },
- {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:04',
- 'vpci': '0000:05:00.1',
- 'dpdk_port_num': 1,
- 'driver': 'ixgbe',
- 'local_ip': '152.16.40.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'bandwidth': '10 Gbps',
- 'dst_ip': '152.16.40.20',
- 'local_mac': '00:00:00:00:00:02',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- },
- '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__update_packet_type(self):
- ip_pipeline_cfg = 'pkt_type = ipv4'
- pkt_type = {'pkt_type': '1'}
-
- expected = "pkt_type = 1"
- result = DpdkVnfSetupEnvHelper._update_packet_type(ip_pipeline_cfg, pkt_type)
- self.assertEqual(result, expected)
-
- def test__update_packet_type_no_op(self):
- ip_pipeline_cfg = 'pkt_type = ipv6'
- pkt_type = {'pkt_type': '1'}
-
- expected = "pkt_type = ipv6"
- result = DpdkVnfSetupEnvHelper._update_packet_type(ip_pipeline_cfg, pkt_type)
- self.assertEqual(result, expected)
-
- def test__update_packet_type_multi_op(self):
- ip_pipeline_cfg = 'pkt_type = ipv4\npkt_type = 1\npkt_type = ipv4'
- pkt_type = {'pkt_type': '1'}
-
- expected = 'pkt_type = 1\npkt_type = 1\npkt_type = 1'
- result = DpdkVnfSetupEnvHelper._update_packet_type(ip_pipeline_cfg, pkt_type)
- self.assertEqual(result, expected)
-
- def test__update_traffic_type(self):
- ip_pipeline_cfg = 'pkt_type = ipv4'
-
- traffic_options = {"vnf_type": DpdkVnfSetupEnvHelper.APP_NAME, 'traffic_type': 4}
- expected = "pkt_type = ipv4"
- result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
- self.assertEqual(result, expected)
-
- def test__update_traffic_type_ipv6(self):
- ip_pipeline_cfg = 'pkt_type = ipv4'
-
- traffic_options = {"vnf_type": DpdkVnfSetupEnvHelper.APP_NAME, 'traffic_type': 6}
- expected = "pkt_type = ipv6"
- result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
- self.assertEqual(result, expected)
-
- def test__update_traffic_type_not_app_name(self):
- ip_pipeline_cfg = 'traffic_type = 4'
-
- vnf_type = ''.join(["Not", DpdkVnfSetupEnvHelper.APP_NAME])
- traffic_options = {"vnf_type": vnf_type, 'traffic_type': 8}
- expected = "traffic_type = 8"
- result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
- self.assertEqual(result, expected)
-
- def test__setup_hugepages(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- ssh_helper.execute.return_value = 0, '', ''
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
- result = dpdk_setup_helper._setup_hugepages()
- expect_start_list = ['awk', 'awk', 'echo']
- expect_in_list = ['meminfo', 'nr_hugepages', '16']
- call_args_iter = (args[0][0] for args in ssh_helper.execute.call_args_list)
- self.assertIsNone(result)
- self.assertEqual(ssh_helper.execute.call_count, 3)
- for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list,
- call_args_iter):
- self.assertTrue(arg0.startswith(expect_start))
- self.assertIn(expect_in, arg0)
-
- def test__setup_hugepages_2_mb(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- ssh_helper.execute.return_value = 0, '2048kB ', ''
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
- result = dpdk_setup_helper._setup_hugepages()
- expect_start_list = ['awk', 'awk', 'echo']
- expect_in_list = ['meminfo', 'nr_hugepages', '8192']
- call_args_iter = (args[0][0] for args in ssh_helper.execute.call_args_list)
- self.assertIsNone(result)
- self.assertEqual(ssh_helper.execute.call_count, 3)
- for expect_start, expect_in, arg0 in zip(expect_start_list, expect_in_list,
- call_args_iter):
- self.assertTrue(arg0.startswith(expect_start))
- self.assertIn(expect_in, arg0)
-
- @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, *args):
- mock_multi_port_config = mock_multi_port_config_class()
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- scenario_helper.vnf_cfg = {}
- scenario_helper.all_options = {}
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-
- dpdk_setup_helper.PIPELINE_COMMAND = expected = 'pipeline command'
- result = dpdk_setup_helper.build_config()
- self.assertEqual(result, expected)
- self.assertGreaterEqual(ssh_helper.upload_config_file.call_count, 2)
- self.assertGreaterEqual(mock_find.call_count, 1)
- self.assertGreaterEqual(mock_multi_port_config.generate_config.call_count, 1)
- self.assertGreaterEqual(mock_multi_port_config.generate_script.call_count, 1)
-
- def test__build_pipeline_kwargs(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- ssh_helper.provision_tool.return_value = 'tool_path'
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper.CFG_CONFIG = 'config'
- dpdk_setup_helper.CFG_SCRIPT = 'script'
- dpdk_setup_helper.pipeline_kwargs = {}
- dpdk_setup_helper.all_ports = [0, 1, 2]
-
- expected = {
- 'cfg_file': 'config',
- 'script': 'script',
- 'port_mask_hex': '0x3',
- 'tool_path': 'tool_path',
- }
- dpdk_setup_helper._build_pipeline_kwargs()
- self.assertDictEqual(dpdk_setup_helper.pipeline_kwargs, expected)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
- @mock.patch('yardstick.ssh.SSH')
- def test_setup_vnf_environment(self, *args):
- def execute(cmd):
- if cmd.startswith('which '):
- return exec_failure
- return exec_success
-
- exec_success = (0, 'good output', '')
- exec_failure = (1, 'bad output', 'error output')
-
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- ssh_helper.execute = execute
-
- dpdk_vnf_setup_env_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, mock.Mock())
- dpdk_vnf_setup_env_helper._validate_cpu_cfg = mock.Mock(return_value=[])
-
- self.assertIsInstance(dpdk_vnf_setup_env_helper.setup_vnf_environment(), ResourceProfile)
-
- def test__setup_dpdk_early_success(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- ssh_helper.execute.return_value = 0, 'output', ''
- ssh_helper.join_bin_path.return_value = 'joined_path'
- ssh_helper.provision_tool.return_value = 'provision string'
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper._setup_hugepages = mock.Mock()
-
- self.assertIsNone(dpdk_setup_helper._setup_dpdk())
- self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 2)
-
- @mock.patch('yardstick.ssh.SSH')
- def test__setup_dpdk_short(self, _):
- def execute_side(cmd):
- if 'joined_path' in cmd:
- return 0, 'output', ''
- return 1, 'bad output', 'error output'
-
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- ssh_helper.execute.side_effect = execute_side
- ssh_helper.join_bin_path.return_value = 'joined_path'
- ssh_helper.provision_tool.return_value = 'provision string'
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper._setup_hugepages = mock.Mock()
-
- self.assertIsNone(dpdk_setup_helper._setup_dpdk())
- self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 3)
-
- @mock.patch('yardstick.ssh.SSH')
- def test__setup_resources(self, _):
- vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper._validate_cpu_cfg = mock.Mock()
-
- dpdk_setup_helper.bound_pci = [v['virtual-interface']["vpci"] for v in
- vnfd_helper.interfaces]
- result = dpdk_setup_helper._setup_resources()
- self.assertIsInstance(result, ResourceProfile)
- self.assertEqual(dpdk_setup_helper.socket, 0)
-
- @mock.patch('yardstick.ssh.SSH')
- def test__setup_resources_socket_1(self, _):
- vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
- vnfd_helper.interfaces[0]['virtual-interface']['vpci'] = '0000:55:00.0'
- vnfd_helper.interfaces[1]['virtual-interface']['vpci'] = '0000:35:00.0'
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper._validate_cpu_cfg = mock.Mock()
-
- dpdk_setup_helper.bound_pci = [v['virtual-interface']["vpci"] for v in
- vnfd_helper.interfaces]
- result = dpdk_setup_helper._setup_resources()
- self.assertIsInstance(result, ResourceProfile)
- 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, *args):
- vnfd_helper = VnfdHelper(deepcopy(self.VNFD_0))
- ssh_helper = mock.Mock()
- # ssh_helper.execute = mock.Mock(return_value = (0, 'text', ''))
- # ssh_helper.execute.return_value = 0, 'output', ''
- scenario_helper = mock.Mock()
- rv = ['0000:05:00.1', '0000:05:00.0']
-
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper.dpdk_bind_helper._get_bound_pci_addresses = mock.Mock(return_value=rv)
- dpdk_setup_helper.dpdk_bind_helper.bind = mock.Mock()
- dpdk_setup_helper.dpdk_bind_helper.read_status = mock.Mock()
-
- self.assertIsNone(dpdk_setup_helper._detect_and_bind_drivers())
-
- intf_0 = vnfd_helper.vdu[0]['external-interface'][0]['virtual-interface']
- intf_1 = vnfd_helper.vdu[0]['external-interface'][1]['virtual-interface']
- self.assertEquals(0, intf_0['dpdk_port_num'])
- self.assertEquals(1, intf_1['dpdk_port_num'])
-
- def test_tear_down(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper.dpdk_bind_helper.bind = mock.Mock()
- dpdk_setup_helper.dpdk_bind_helper.used_drivers = {
- 'd1': ['0000:05:00.0'],
- 'd3': ['0000:05:01.0'],
- }
-
- self.assertIsNone(dpdk_setup_helper.tear_down())
- dpdk_setup_helper.dpdk_bind_helper.bind.assert_any_call(['0000:05:00.0'], 'd1', True)
- dpdk_setup_helper.dpdk_bind_helper.bind.assert_any_call(['0000:05:01.0'], 'd3', True)
-
-
-class TestResourceHelper(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',
- 'driver': 'i40e',
- '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',
- 'driver': 'ixgbe',
- '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'
- }
-
- def test_setup(self):
- resource = object()
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- dpdk_setup_helper.setup_vnf_environment = mock.Mock(return_value=resource)
- resource_helper = ResourceHelper(dpdk_setup_helper)
-
- self.assertIsNone(resource_helper.setup())
- self.assertIs(resource_helper.resource, resource)
-
- def test_generate_cfg(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- resource_helper = ResourceHelper(dpdk_setup_helper)
-
- self.assertIsNone(resource_helper.generate_cfg())
-
- def test_stop_collect(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- resource_helper = ResourceHelper(dpdk_setup_helper)
- resource_helper.resource = mock.Mock()
-
- self.assertIsNone(resource_helper.stop_collect())
-
- def test_stop_collect_none(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- resource_helper = ResourceHelper(dpdk_setup_helper)
- resource_helper.resource = None
-
- self.assertIsNone(resource_helper.stop_collect())
-
-
-class TestClientResourceHelper(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',
- 'driver': 'i40e',
- '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',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe0',
- },
- 'vnfd-connection-point-ref': 'xe0',
- 'name': 'xe0'
- },
- {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:04',
- 'vpci': '0000:05:00.1',
- 'driver': 'ixgbe',
- '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',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1'
- },
- {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:13',
- 'vpci': '0000:05:00.2',
- 'driver': 'ixgbe',
- 'local_ip': '152.16.40.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 2,
- 'bandwidth': '10 Gbps',
- 'dst_ip': '152.16.40.30',
- 'local_mac': '00:00:00:00:00:11'
- },
- 'vnfd-connection-point-ref': 'xe2',
- 'name': 'xe2'
- },
- ],
- },
- ],
- '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,
- ],
- },
- }
-
- @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, *args):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.MagicMock()
- client_resource_helper.client.get_stats.side_effect = mock_state_error
-
- self.assertEqual(client_resource_helper.get_stats(), {})
- self.assertEqual(client_resource_helper.client.get_stats.call_count, 1)
-
- def test_generate_samples(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.MagicMock()
- client_resource_helper.client.get_stats.return_value = {
- 0: {
- 'rx_pps': 5.5,
- 'tx_pps': 4.9,
- 'rx_bps': 234.78,
- 'tx_bps': 243.11,
- 'ipackets': 34251,
- 'opackets': 52342,
- },
- 1: {
- 'tx_pps': 5.9,
- 'rx_bps': 434.78,
- 'opackets': 48791,
- },
- }
-
- expected = {
- 'xe0': {
- "rx_throughput_fps": 5.5,
- "tx_throughput_fps": 4.9,
- "rx_throughput_mbps": 234.78,
- "tx_throughput_mbps": 243.11,
- "in_packets": 34251,
- "out_packets": 52342,
- },
- 'xe1': {
- "rx_throughput_fps": 0.0,
- "tx_throughput_fps": 5.9,
- "rx_throughput_mbps": 434.78,
- "tx_throughput_mbps": 0.0,
- "in_packets": 0,
- "out_packets": 48791,
- },
- }
- ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
- result = client_resource_helper.generate_samples(ports)
- self.assertDictEqual(result, expected)
-
- def test_generate_samples_with_key(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.MagicMock()
- client_resource_helper.client.get_stats.return_value = {
- 'key_name': 'key_value',
- 0: {
- 'rx_pps': 5.5,
- 'tx_pps': 4.9,
- 'rx_bps': 234.78,
- 'tx_bps': 243.11,
- 'ipackets': 34251,
- 'opackets': 52342,
- },
- 1: {
- 'tx_pps': 5.9,
- 'rx_bps': 434.78,
- 'opackets': 48791,
- },
- }
-
- expected = {
- 'xe0': {
- 'key_name': 'key_value',
- "rx_throughput_fps": 5.5,
- "tx_throughput_fps": 4.9,
- "rx_throughput_mbps": 234.78,
- "tx_throughput_mbps": 243.11,
- "in_packets": 34251,
- "out_packets": 52342,
- },
- 'xe1': {
- 'key_name': 'key_value',
- "rx_throughput_fps": 0.0,
- "tx_throughput_fps": 5.9,
- "rx_throughput_mbps": 434.78,
- "tx_throughput_mbps": 0.0,
- "in_packets": 0,
- "out_packets": 48791,
- },
- }
- ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
- result = client_resource_helper.generate_samples(ports, 'key_name')
- self.assertDictEqual(result, expected)
-
- def test_generate_samples_with_key_and_default(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.MagicMock()
- client_resource_helper.client.get_stats.return_value = {
- 0: {
- 'rx_pps': 5.5,
- 'tx_pps': 4.9,
- 'rx_bps': 234.78,
- 'tx_bps': 243.11,
- 'ipackets': 34251,
- 'opackets': 52342,
- },
- 1: {
- 'tx_pps': 5.9,
- 'rx_bps': 434.78,
- 'opackets': 48791,
- },
- }
-
- expected = {
- 'xe0': {
- 'key_name': 'default',
- "rx_throughput_fps": 5.5,
- "tx_throughput_fps": 4.9,
- "rx_throughput_mbps": 234.78,
- "tx_throughput_mbps": 243.11,
- "in_packets": 34251,
- "out_packets": 52342,
- },
- 'xe1': {
- 'key_name': 'default',
- "rx_throughput_fps": 0.0,
- "tx_throughput_fps": 5.9,
- "rx_throughput_mbps": 434.78,
- "tx_throughput_mbps": 0.0,
- "in_packets": 0,
- "out_packets": 48791,
- },
- }
- ports = vnfd_helper.port_nums(vnfd_helper.port_pairs.all_ports)
- result = client_resource_helper.generate_samples(ports, 'key_name', 'default')
- self.assertDictEqual(result, expected)
-
- def test_clear_stats(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.Mock()
-
- self.assertIsNone(client_resource_helper.clear_stats())
- self.assertEqual(client_resource_helper.client.clear_stats.call_count, 1)
-
- def test_clear_stats_of_ports(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.Mock()
-
- self.assertIsNone(client_resource_helper.clear_stats([3, 4]))
- self.assertEqual(client_resource_helper.client.clear_stats.call_count, 1)
-
- def test_start(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.Mock()
-
- self.assertIsNone(client_resource_helper.start())
- self.assertEqual(client_resource_helper.client.start.call_count, 1)
-
- def test_start_ports(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper.client = mock.Mock()
-
- self.assertIsNone(client_resource_helper.start([3, 4]))
- self.assertEqual(client_resource_helper.client.start.call_count, 1)
-
- def test_collect_kpi_with_queue(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client_resource_helper._result = {'existing': 43, 'replaceable': 12}
- client_resource_helper._queue = mock.Mock()
- client_resource_helper._queue.empty.return_value = False
- client_resource_helper._queue.get.return_value = {'incoming': 34, 'replaceable': 99}
-
- expected = {
- 'existing': 43,
- 'incoming': 34,
- 'replaceable': 99,
- }
- result = client_resource_helper.collect_kpi()
- self.assertDictEqual(result, expected)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
- @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, *args):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- ssh_helper = mock.Mock()
- scenario_helper = mock.Mock()
- dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
- client_resource_helper = ClientResourceHelper(dpdk_setup_helper)
- client = mock.MagicMock()
- client.connect.side_effect = mock_error
-
- self.assertIs(client_resource_helper._connect(client), client)
-
-
-class TestRfc2544ResourceHelper(unittest.TestCase):
-
- RFC2544_CFG_1 = {
- 'latency': True,
- 'correlated_traffic': True,
- 'allowed_drop_rate': '0.1 - 0.15',
- }
-
- RFC2544_CFG_2 = {
- 'allowed_drop_rate': ' 0.25 - 0.05 ',
- }
-
- RFC2544_CFG_3 = {
- 'allowed_drop_rate': '0.2',
- }
-
- RFC2544_CFG_4 = {
- 'latency': True,
- }
-
- SCENARIO_CFG_1 = {
- 'options': {
- 'rfc2544': RFC2544_CFG_1,
- }
- }
-
- SCENARIO_CFG_2 = {
- 'options': {
- 'rfc2544': RFC2544_CFG_2,
- }
- }
-
- SCENARIO_CFG_3 = {
- 'options': {
- 'rfc2544': RFC2544_CFG_3,
- }
- }
-
- SCENARIO_CFG_4 = {
- 'options': {
- 'rfc2544': RFC2544_CFG_4,
- }
- }
-
- def test_property_rfc2544(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertIsNone(rfc2544_resource_helper._rfc2544)
- self.assertDictEqual(rfc2544_resource_helper.rfc2544, self.RFC2544_CFG_1)
- self.assertDictEqual(rfc2544_resource_helper._rfc2544, self.RFC2544_CFG_1)
- scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
- self.assertDictEqual(rfc2544_resource_helper.rfc2544, self.RFC2544_CFG_1)
-
- def test_property_tolerance_high(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertIsNone(rfc2544_resource_helper._tolerance_high)
- self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.15)
- self.assertEqual(rfc2544_resource_helper._tolerance_high, 0.15)
- scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
- self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.15)
-
- def test_property_tolerance_low(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertIsNone(rfc2544_resource_helper._tolerance_low)
- self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.1)
- self.assertEqual(rfc2544_resource_helper._tolerance_low, 0.1)
- scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
- self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.1)
-
- def test_property_tolerance_high_range_swap(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.25)
-
- def test_property_tolerance_low_range_swap(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.05)
-
- def test_property_tolerance_high_not_range(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_3
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.2)
-
- def test_property_tolerance_low_not_range(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_3
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.2)
-
- def test_property_tolerance_high_default(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_4
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertEqual(rfc2544_resource_helper.tolerance_high, 0.0001)
-
- def test_property_tolerance_low_default(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_4
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertEqual(rfc2544_resource_helper.tolerance_low, 0.0001)
-
- def test_property_latency(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertIsNone(rfc2544_resource_helper._latency)
- self.assertTrue(rfc2544_resource_helper.latency)
- self.assertTrue(rfc2544_resource_helper._latency)
- scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
- self.assertTrue(rfc2544_resource_helper.latency)
-
- def test_property_latency_default(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertFalse(rfc2544_resource_helper.latency)
-
- def test_property_correlated_traffic(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_1
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertIsNone(rfc2544_resource_helper._correlated_traffic)
- self.assertTrue(rfc2544_resource_helper.correlated_traffic)
- self.assertTrue(rfc2544_resource_helper._correlated_traffic)
- scenario_helper.scenario_cfg = {} # ensure that resource_helper caches
- self.assertTrue(rfc2544_resource_helper.correlated_traffic)
-
- def test_property_correlated_traffic_default(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = self.SCENARIO_CFG_2
- rfc2544_resource_helper = Rfc2544ResourceHelper(scenario_helper)
-
- self.assertFalse(rfc2544_resource_helper.correlated_traffic)
-
-
-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, *args):
- vnfd_helper = mock.Mock()
- ssh_helper = mock.Mock()
- ssh_helper.join_bin_path.return_value = 'joined_path'
- ssh_helper.execute.return_value = 1, 'bad output', 'error output'
- ssh_helper.put.return_value = None
- sample_vnf_deploy_helper = SampleVNFDeployHelper(vnfd_helper, ssh_helper)
-
- self.assertIsNone(sample_vnf_deploy_helper.deploy_vnfs('name1'))
- sample_vnf_deploy_helper.DISABLE_DEPLOY = True
- self.assertEqual(ssh_helper.execute.call_count, 5)
- self.assertEqual(ssh_helper.put.call_count, 1)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.time')
- @mock.patch('subprocess.check_output')
- def test_deploy_vnfs(self, *args):
- vnfd_helper = mock.Mock()
- ssh_helper = mock.Mock()
- ssh_helper.join_bin_path.return_value = 'joined_path'
- ssh_helper.execute.return_value = 1, 'bad output', 'error output'
- ssh_helper.put.return_value = None
- sample_vnf_deploy_helper = SampleVNFDeployHelper(vnfd_helper, ssh_helper)
- sample_vnf_deploy_helper.DISABLE_DEPLOY = False
-
- self.assertIsNone(sample_vnf_deploy_helper.deploy_vnfs('name1'))
- self.assertEqual(ssh_helper.execute.call_count, 5)
- self.assertEqual(ssh_helper.put.call_count, 1)
-
- @mock.patch('subprocess.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'
- ssh_helper.execute.return_value = 0, 'output', ''
- ssh_helper.put.return_value = None
- sample_vnf_deploy_helper = SampleVNFDeployHelper(vnfd_helper, ssh_helper)
- sample_vnf_deploy_helper.DISABLE_DEPLOY = False
-
- self.assertIsNone(sample_vnf_deploy_helper.deploy_vnfs('name1'))
- self.assertEqual(ssh_helper.execute.call_count, 1)
- self.assertEqual(ssh_helper.put.call_count, 0)
-
-
-class TestScenarioHelper(unittest.TestCase):
-
- def test_property_task_path(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = {
- 'task_path': 'my_path',
- }
-
- self.assertEqual(scenario_helper.task_path, 'my_path')
-
- def test_property_nodes(self):
- nodes = ['node1', 'node2']
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = {
- 'nodes': nodes,
- }
-
- self.assertEqual(scenario_helper.nodes, nodes)
-
- def test_property_all_options(self):
- data = {
- 'name1': {
- 'key3': 'value3',
- },
- 'name2': {}
- }
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = {
- 'options': data,
- }
-
- self.assertDictEqual(scenario_helper.all_options, data)
-
- def test_property_options(self):
- data = {
- 'key1': 'value1',
- 'key2': 'value2',
- }
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = {
- 'options': {
- 'name1': data,
- },
- }
-
- self.assertDictEqual(scenario_helper.options, data)
-
- def test_property_vnf_cfg(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = {
- 'options': {
- 'name1': {
- 'vnf_config': 'my_config',
- },
- },
- }
-
- self.assertEqual(scenario_helper.vnf_cfg, 'my_config')
-
- def test_property_vnf_cfg_default(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = {
- 'options': {
- 'name1': {},
- },
- }
-
- self.assertDictEqual(scenario_helper.vnf_cfg, ScenarioHelper.DEFAULT_VNF_CFG)
-
- def test_property_topology(self):
- scenario_helper = ScenarioHelper('name1')
- scenario_helper.scenario_cfg = {
- 'topology': 'my_topology',
- }
-
- self.assertEqual(scenario_helper.topology, 'my_topology')
-
-
-class TestSampleVnf(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,
- ]
- }
- }
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64,
- },
- }
-
- def test___init__(self):
- sample_vnf = SampleVNF('vnf1', self.VNFD_0)
-
- self.assertEqual(sample_vnf.name, 'vnf1')
- self.assertDictEqual(sample_vnf.vnfd_helper, self.VNFD_0)
-
- # test the default setup helper is SetupEnvHelper, not subclass
- self.assertEqual(type(sample_vnf.setup_helper), SetupEnvHelper)
-
- # test the default resource helper is ResourceHelper, not subclass
- self.assertEqual(type(sample_vnf.resource_helper), ResourceHelper)
-
- def test___init___alt_types(self):
- class MySetupEnvHelper(SetupEnvHelper):
- pass
-
- class MyResourceHelper(ResourceHelper):
- pass
-
- sample_vnf = SampleVNF('vnf1', self.VNFD_0, MySetupEnvHelper, MyResourceHelper)
-
- self.assertEqual(sample_vnf.name, 'vnf1')
- self.assertDictEqual(sample_vnf.vnfd_helper, self.VNFD_0)
-
- # test the default setup helper is MySetupEnvHelper, not subclass
- self.assertEqual(type(sample_vnf.setup_helper), MySetupEnvHelper)
-
- # test the default resource helper is MyResourceHelper, not subclass
- self.assertEqual(type(sample_vnf.resource_helper), MyResourceHelper)
-
- def test__get_port0localip6(self):
- sample_vnf = SampleVNF('vnf1', self.VNFD_0)
- expected = '0064:ff9b:0:0:0:0:9810:6414'
- result = sample_vnf._get_port0localip6()
- self.assertEqual(result, expected)
-
- def test__get_port1localip6(self):
- sample_vnf = SampleVNF('vnf1', self.VNFD_0)
- expected = '0064:ff9b:0:0:0:0:9810:2814'
- result = sample_vnf._get_port1localip6()
- self.assertEqual(result, expected)
-
- def test__get_port0prefixip6(self):
- sample_vnf = SampleVNF('vnf1', self.VNFD_0)
- expected = '112'
- result = sample_vnf._get_port0prefixlen6()
- self.assertEqual(result, expected)
-
- def test__get_port1prefixip6(self):
- sample_vnf = SampleVNF('vnf1', self.VNFD_0)
- expected = '112'
- result = sample_vnf._get_port1prefixlen6()
- self.assertEqual(result, expected)
-
- def test__get_port0gateway6(self):
- sample_vnf = SampleVNF('vnf1', self.VNFD_0)
- expected = '0064:ff9b:0:0:0:0:9810:6414'
- result = sample_vnf._get_port0gateway6()
- self.assertEqual(result, expected)
-
- def test__get_port1gateway6(self):
- sample_vnf = SampleVNF('vnf1', self.VNFD_0)
- expected = '0064:ff9b:0:0:0:0:9810:2814'
- result = sample_vnf._get_port1gateway6()
- self.assertEqual(result, expected)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.Process')
- def test__start_vnf(self, *args):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf._run = mock.Mock()
-
- self.assertIsNone(sample_vnf.queue_wrapper)
- self.assertIsNone(sample_vnf._vnf_process)
- self.assertIsNone(sample_vnf._start_vnf())
- self.assertIsNotNone(sample_vnf.queue_wrapper)
- self.assertIsNotNone(sample_vnf._vnf_process)
-
- @mock.patch("yardstick.ssh.SSH")
- def test_instantiate(self, ssh):
- mock_ssh(ssh)
-
- nodes = {
- 'vnf1': 'name1',
- 'vnf2': 'name2',
- }
-
- context1 = mock.Mock()
- context1._get_server.return_value = None
- context2 = mock.Mock()
- context2._get_server.return_value = context2
-
- try:
- Context.list.clear()
- except AttributeError:
- # clear() but works in Py2.7
- Context.list[:] = []
-
- Context.list.extend([
- context1,
- context2,
- ])
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf.APP_NAME = 'sample1'
- sample_vnf._start_server = mock.Mock(return_value=0)
- sample_vnf._vnf_process = mock.MagicMock()
- sample_vnf._vnf_process._is_alive.return_value = 1
- sample_vnf.ssh_helper = mock.MagicMock()
- sample_vnf.deploy_helper = mock.MagicMock()
- sample_vnf.resource_helper.ssh_helper = mock.MagicMock()
- scenario_cfg = {
- 'nodes': nodes,
- }
-
- self.assertIsNone(sample_vnf.instantiate(scenario_cfg, {}))
- self.assertEqual(sample_vnf.nfvi_context, context2)
-
- @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, *args):
- mock_ssh(ssh, exec_result=(1, "", ""))
-
- queue_size_list = [
- 0,
- 1,
- 0,
- 1,
- ]
-
- queue_get_list = [
- 'some output',
- 'pipeline> ',
- ]
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf.APP_NAME = 'sample1'
- sample_vnf.WAIT_TIME_FOR_SCRIPT = 0
- sample_vnf._start_server = mock.Mock(return_value=0)
- sample_vnf._vnf_process = mock.MagicMock()
- sample_vnf._vnf_process.exitcode = 0
- sample_vnf._vnf_process._is_alive.return_value = 1
- sample_vnf.queue_wrapper = mock.Mock()
- sample_vnf.q_out = mock.Mock()
- sample_vnf.q_out.qsize.side_effect = iter(queue_size_list)
- sample_vnf.q_out.get.side_effect = iter(queue_get_list)
- sample_vnf.ssh_helper = mock.MagicMock()
- sample_vnf.resource_helper.ssh_helper = mock.MagicMock()
- sample_vnf.resource_helper.start_collect = mock.MagicMock()
-
- self.assertEqual(sample_vnf.wait_for_instantiate(), 0)
-
- def test__build_ports(self):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
-
- self.assertIsNone(sample_vnf._build_ports())
- self.assertIsNotNone(sample_vnf.networks)
- self.assertIsNotNone(sample_vnf.uplink_ports)
- self.assertIsNotNone(sample_vnf.downlink_ports)
- 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, *args):
- queue_size_list = [
- 1,
- 1,
- 0,
- ]
-
- queue_get_list = [
- 'hello ',
- 'world'
- ]
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf.APP_NAME = 'sample1'
- sample_vnf.q_out = mock.Mock()
- sample_vnf.q_out.qsize.side_effect = iter(queue_size_list)
- sample_vnf.q_out.get.side_effect = iter(queue_get_list)
-
- self.assertEqual(sample_vnf.vnf_execute('my command'), 'hello world')
-
- def test_terminate_without_vnf_process(self):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf.APP_NAME = 'sample1'
- sample_vnf.vnf_execute = mock.Mock()
- sample_vnf.ssh_helper = mock.Mock()
- sample_vnf._tear_down = mock.Mock()
- sample_vnf.resource_helper = mock.Mock()
-
- self.assertIsNone(sample_vnf.terminate())
-
- def test_get_stats(self):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf.APP_NAME = 'sample1'
- sample_vnf.APP_WORD = 'sample1'
- sample_vnf.vnf_execute = mock.Mock(return_value='the stats')
-
- self.assertEqual(sample_vnf.get_stats(), 'the stats')
-
- def test_collect_kpi(self):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf.APP_NAME = 'sample1'
- sample_vnf.COLLECT_KPI = r'\s(\d+)\D*(\d+)\D*(\d+)'
- sample_vnf.COLLECT_MAP = {
- 'k1': 3,
- 'k2': 1,
- 'k3': 2,
- }
- sample_vnf.get_stats = mock.Mock(return_value='index0: 34 -- 91, 27')
- sample_vnf.resource_helper = mock.Mock()
- sample_vnf.resource_helper.collect_kpi.return_value = {}
-
- expected = {
- 'k1': 27,
- 'k2': 34,
- 'k3': 91,
- 'collect_stats': {},
- }
- result = sample_vnf.collect_kpi()
- self.assertDictEqual(result, expected)
-
- def test_collect_kpi_default(self):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sample_vnf = SampleVNF('vnf1', vnfd)
- sample_vnf.APP_NAME = 'sample1'
- sample_vnf.COLLECT_KPI = r'\s(\d+)\D*(\d+)\D*(\d+)'
- sample_vnf.get_stats = mock.Mock(return_value='')
-
- expected = {
- 'packets_in': 0,
- 'packets_fwd': 0,
- 'packets_dropped': 0,
- }
- 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):
-
- 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',
- 'driver': 'i40e',
- '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',
- 'driver': 'ixgbe',
- '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,
- ],
- },
- }
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64,
- },
- }
-
- def test__check_status(self):
- sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
-
- with self.assertRaises(NotImplementedError):
- sample_vnf_tg._check_status()
-
- def test_listen_traffic(self):
- sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
-
- sample_vnf_tg.listen_traffic(mock.Mock())
-
- def test_verify_traffic(self):
- sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
-
- sample_vnf_tg.verify_traffic(mock.Mock())
-
- def test_terminate(self):
- sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
- sample_vnf_tg._traffic_process = mock.Mock()
- sample_vnf_tg._tg_process = mock.Mock()
-
- sample_vnf_tg.terminate()
-
- def test__wait_for_process(self):
- sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
- with mock.patch.object(sample_vnf_tg, '_check_status',
- return_value=0) as mock_status, \
- mock.patch.object(sample_vnf_tg, '_tg_process') as mock_proc:
- mock_proc.is_alive.return_value = True
- mock_proc.exitcode = 234
- self.assertEqual(sample_vnf_tg._wait_for_process(), 234)
- mock_proc.is_alive.assert_called_once()
- mock_status.assert_called_once()
-
- def test__wait_for_process_not_alive(self):
- sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
- with mock.patch.object(sample_vnf_tg, '_tg_process') as mock_proc:
- mock_proc.is_alive.return_value = False
- self.assertRaises(RuntimeError, sample_vnf_tg._wait_for_process)
- mock_proc.is_alive.assert_called_once()
-
- def test__wait_for_process_delayed(self):
- sample_vnf_tg = SampleVNFTrafficGen('tg1', self.VNFD_0)
- with mock.patch.object(sample_vnf_tg, '_check_status',
- side_effect=[1, 0]) as mock_status, \
- mock.patch.object(sample_vnf_tg,
- '_tg_process') as mock_proc:
- mock_proc.is_alive.return_value = True
- mock_proc.exitcode = 234
- 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_ixload.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py
deleted file mode 100644
index e6e4b882e..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-import subprocess
-
-from tests.unit import STL_MOCKS
-
-
-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.tg_ixload import IxLoadTrafficGen
- from yardstick.network_services.vnf_generic.vnf.tg_ixload import IxLoadResourceHelper
- from yardstick.network_services.traffic_profile.base import TrafficProfile
-
-
-NAME = "tg__1"
-
-
-class TestIxLoadTrafficGen(unittest.TestCase):
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'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: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': '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'}]}}
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64}}
-
- def test___init__(self):
- 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]
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
- self.assertIsNone(ixload_traffic_gen.resource_helper.data)
-
- def test_collect_kpi(self):
- 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]
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
- ixload_traffic_gen.data = {}
- restult = ixload_traffic_gen.collect_kpi()
- self.assertEqual({}, restult)
-
- def test_listen_traffic(self):
- 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]
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
- self.assertEqual(None, ixload_traffic_gen.listen_traffic({}))
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.makedirs")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
- def test_instantiate(self, call, shutil, mock_makedirs):
- with mock.patch("yardstick.ssh.SSH") 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
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
- scenario_cfg = {'tc': "nsb_test_case",
- 'ixia_profile': "ixload.cfg",
- 'task_path': "/path/to/task"}
- ixload_traffic_gen.RESULTS_MOUNT = "/tmp/result"
- shutil.copy = mock.Mock()
- scenario_cfg.update({'options': {'packetsize': 64, 'traffic_type': 4,
- 'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
- 'vnf__1': {'rules': 'acl_1rule.yaml',
- 'vnf_config': {'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config':
- '1C/1T',
- 'worker_threads': 1}}
- }})
- with mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', create=True) as mock_open:
- mock_open.return_value = mock.MagicMock()
- ixload_traffic_gen.instantiate(scenario_cfg, {})
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.open")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.min")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len")
- def test_run_traffic(self, call, shutil, main_open, min, max, len):
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
- with mock.patch("yardstick.ssh.SSH") 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
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vnfd["mgmt-interface"].update({"tg-config": {}})
- vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
- "1.1.1.1"})
- vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
- "/root"})
- sut = IxLoadTrafficGen(NAME, vnfd)
- sut.connection = mock.Mock()
- sut.connection.run = mock.Mock()
- sut._traffic_runner = mock.Mock(return_value=0)
- shutil.copy = mock.Mock()
- result = sut.run_traffic(mock_traffic_profile)
- self.assertIsNone(result)
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.open")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.min")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len")
- def test_run_traffic_csv(self, call, shutil, main_open, min, max, len):
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
- with mock.patch("yardstick.ssh.SSH") 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
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vnfd["mgmt-interface"].update({"tg-config": {}})
- vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
- "1.1.1.1"})
- vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
- "/root"})
- sut = IxLoadTrafficGen(NAME, vnfd)
- sut.connection = mock.Mock()
- sut.connection.run = mock.Mock()
- sut._traffic_runner = mock.Mock(return_value=0)
- shutil.copy = mock.Mock()
- subprocess.call(["touch", "/tmp/1.csv"])
- sut.rel_bin_path = mock.Mock(return_value="/tmp/*.csv")
- result = sut.run_traffic(mock_traffic_profile)
- self.assertIsNone(result)
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
- def test_terminate(self, call):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "", ""))
- ssh.from_node.return_value = ssh_mock
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
- self.assertEqual(None, ixload_traffic_gen.terminate())
-
- @mock.patch("yardstick.ssh.SSH")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
- def test_parse_csv_read(self, mock_call, mock_ssh):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- kpi_data = {
- 'HTTP Total Throughput (Kbps)': 1,
- 'HTTP Simulated Users': 2,
- 'HTTP Concurrent Connections': '3',
- 'HTTP Connection Rate': 4.3,
- 'HTTP Transaction Rate': True,
- }
- http_reader = [kpi_data]
-
- mock_ssh_type = mock.Mock(autospec=mock_ssh.SSH)
- mock_ssh_type.execute.return_value = 0, "", ""
- mock_ssh.from_node.return_value = mock_ssh_type
-
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
- result = ixload_traffic_gen.resource_helper.result
-
- ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
- for key_left, key_right in IxLoadResourceHelper.KPI_LIST.items():
- self.assertEqual(result[key_left][-1], int(kpi_data[key_right]))
-
- @mock.patch("yardstick.ssh.SSH")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
- def test_parse_csv_read_value_error(self, mock_call, mock_ssh):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- http_reader = [{
- 'HTTP Total Throughput (Kbps)': 1,
- 'HTTP Simulated Users': 2,
- 'HTTP Concurrent Connections': "not a number",
- 'HTTP Connection Rate': 4,
- 'HTTP Transaction Rate': 5,
- }]
-
- mock_ssh_type = mock.Mock(autospec=mock_ssh.SSH)
- mock_ssh_type.execute.return_value = 0, "", ""
- mock_ssh.from_node.return_value = mock_ssh_type
-
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
- init_value = ixload_traffic_gen.resource_helper.result
-
- ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
- self.assertDictEqual(ixload_traffic_gen.resource_helper.result, init_value)
-
- @mock.patch("yardstick.ssh.SSH")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
- def test_parse_csv_read_error(self, mock_call, mock_ssh):
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- http_reader = [{
- 'HTTP Total Throughput (Kbps)': 1,
- 'HTTP Simulated Users': 2,
- 'HTTP Concurrent Connections': 3,
- 'HTTP Transaction Rate': 5,
- }]
-
- mock_ssh_type = mock.Mock(autospec=mock_ssh.SSH)
- mock_ssh_type.execute.return_value = 0, "", ""
- mock_ssh.from_node.return_value = mock_ssh_type
-
- ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
-
- with self.assertRaises(KeyError):
- ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
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
deleted file mode 100644
index 63b2ac4ab..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
+++ /dev/null
@@ -1,296 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-from multiprocessing import Queue
-import multiprocessing
-
-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"
-
-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.tg_ping import PingParser
- from yardstick.network_services.vnf_generic.vnf.tg_ping import PingTrafficGen
- from yardstick.network_services.vnf_generic.vnf.tg_ping import PingResourceHelper
- from yardstick.network_services.vnf_generic.vnf.tg_ping import PingSetupEnvHelper
- from yardstick.network_services.vnf_generic.vnf.sample_vnf import VnfSshHelper
-
-
-class TestPingResourceHelper(unittest.TestCase):
- def test___init__(self):
- setup_helper = mock.Mock()
- helper = PingResourceHelper(setup_helper)
-
- self.assertIsInstance(helper._queue, multiprocessing.queues.Queue)
- self.assertIsInstance(helper._parser, PingParser)
-
- def test_run_traffic(self):
- setup_helper = mock.Mock()
- traffic_profile = mock.Mock()
- traffic_profile.params = {
- 'traffic_profile': {
- 'frame_size': 64,
- },
- }
-
- helper = PingResourceHelper(setup_helper)
- helper.cmd_kwargs = {'target_ip': '10.0.0.2',
- 'local_ip': '10.0.0.1',
- 'local_if_name': 'eth0',
- }
- helper.ssh_helper = mock.Mock()
- helper.run_traffic(traffic_profile)
- helper.ssh_helper.run.called_with('ping-s 64 10.0.0.2')
-
-
-class TestPingParser(unittest.TestCase):
- def test___init__(self):
- q_out = Queue()
- ping_parser = PingParser(q_out)
- self.assertIsNotNone(ping_parser.queue)
-
- def test_clear(self):
- sample_out = """
-64 bytes from 10.102.22.93: icmp_seq=3 ttl=64 time=0.296 ms
- """
- q_out = Queue()
- ping_parser = PingParser(q_out)
- ping_parser.write(sample_out)
- ping_parser.clear()
- self.assertEqual(True, q_out.empty())
-
- def test_close(self):
- q_out = Queue()
- ping_parser = PingParser(q_out)
- self.assertIsNone(ping_parser.close())
-
- def test_write(self):
- sample_out = """
-64 bytes from 10.102.22.93: icmp_seq=3 ttl=64 time=0.296 ms
- """
- q_out = Queue()
- ping_parser = PingParser(q_out)
- ping_parser.write(sample_out)
-
- self.assertEqual({"packets_received": 3.0, "rtt": 0.296}, q_out.get())
-
-
-class TestPingTrafficGen(unittest.TestCase):
- VNFD_0_EXT_IF_0 = {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:04',
- 'vpci': '0000:05:00.0',
- 'local_ip': u'152.16.100.19',
- 'type': 'PCI-PASSTHROUGH',
- 'netmask': '255.255.255.0',
- 'bandwidth': '10 Gbps',
- 'driver': "i40e",
- 'dst_ip': u'152.16.100.20',
- 'local_iface_name': 'xe0',
- 'local_mac': '00:00:00:00:00:02',
- },
- 'vnfd-connection-point-ref': 'xe0',
- 'name': 'xe0',
- }
-
- VNFD_0_EXT_IF_1 = {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:03',
- 'vpci': '0000:05:00.1',
- 'local_ip': u'152.16.40.19',
- 'type': 'PCI-PASSTHROUGH',
- 'driver': "i40e",
- 'netmask': '255.255.255.0',
- 'bandwidth': '10 Gbps',
- 'dst_ip': u'152.16.40.20',
- 'local_iface_name': 'xe1',
- 'local_mac': '00:00:00:00:00:01',
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1',
- }
-
- VNFD_0_EXT_IF_LIST = [
- VNFD_0_EXT_IF_0,
- VNFD_0_EXT_IF_1,
- ]
-
- VNFD_0 = {
- 'short-name': 'VpeVnf',
- 'vdu': [
- {
- 'routing_table': [
- {
- 'network': u'152.16.100.20',
- 'netmask': u'255.255.255.0',
- 'gateway': u'152.16.100.20',
- 'if': 'xe0',
- },
- {
- 'network': u'152.16.40.20',
- 'netmask': u'255.255.255.0',
- 'gateway': u'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': VNFD_0_EXT_IF_LIST,
- },
- ],
- '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,
- ],
- },
- }
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64,
- },
- }
-
- CMD_KWARGS = {
- 'target_ip': u'152.16.100.20',
- 'local_ip': u'152.16.100.19',
- 'local_if_name': u'xe0_fake',
- }
-
- @mock.patch("yardstick.ssh.SSH")
- def test___init__(self, ssh):
- ssh.from_node.return_value.execute.return_value = 0, "success", ""
- ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
-
- self.assertIsInstance(ping_traffic_gen.setup_helper, PingSetupEnvHelper)
- self.assertIsInstance(ping_traffic_gen.resource_helper, PingResourceHelper)
- self.assertEquals(ping_traffic_gen._result, {})
-
- @mock.patch("yardstick.ssh.SSH")
- def test__bind_device_kernel_with_failure(self, ssh):
- mock_ssh(ssh)
-
- execute_result_data = [
- (1, 'bad stdout messages', 'error messages'),
- (0, '', ''),
- (0, 'if_name_1', ''),
- (0, 'if_name_2', ''),
- ]
- ssh.from_node.return_value.execute.side_effect = iter(execute_result_data)
- ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
- ext_ifs = ping_traffic_gen.vnfd_helper.interfaces
- self.assertNotEqual(ext_ifs[0]['virtual-interface']['local_iface_name'], 'if_name_1')
- self.assertNotEqual(ext_ifs[1]['virtual-interface']['local_iface_name'], 'if_name_2')
-
- @mock.patch("yardstick.ssh.SSH")
- def test_collect_kpi(self, ssh):
- mock_ssh(ssh, exec_result=(0, "success", ""))
- ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
- ping_traffic_gen._queue = Queue()
- ping_traffic_gen._queue.put({})
- ping_traffic_gen.collect_kpi()
- self.assertEqual(ping_traffic_gen._result, {})
-
- @mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh):
- 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, "xe0_fake", "")})
- self.assertIsInstance(ping_traffic_gen.ssh_helper, mock.Mock)
- self.assertEqual(ping_traffic_gen._result, {})
-
- self.assertIsNone(ping_traffic_gen.instantiate({}, {}))
-
- self.assertEqual(
- ping_traffic_gen.vnfd_helper.interfaces[0]['virtual-interface']['local_iface_name'],
- '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, *args):
- ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
- self.assertIsNone(ping_traffic_gen.listen_traffic({}))
-
- @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", ""
-
- ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
- self.assertIsNone(ping_traffic_gen.terminate())
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
deleted file mode 100644
index 7b4d79e02..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
+++ /dev/null
@@ -1,426 +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 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()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.vnf_generic.vnf.tg_prox import ProxTrafficGen
- from yardstick.network_services.traffic_profile.base import TrafficProfile
-
-
-@mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
-class TestProxTrafficGen(unittest.TestCase):
- VNFD0 = {
- 'short-name': 'ProxVnf',
- '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': 'PROX approximation using DPDK',
- 'name': 'proxvnf-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': 'proxvnf-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',
- 'vld_id': '',
- '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',
- 'vld_id': '',
- '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': 'PROX approximation using DPDK',
- 'mgmt-interface': {
- 'vdu-id': 'proxvnf-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': 'ProxApproxVnf',
- 'name': 'ProxVnf',
- }
-
- VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- VNFD0,
- ],
- },
- }
-
- SCENARIO_CFG = {
- 'task_path': "",
- 'nodes': {
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick'},
- 'runner': {
- 'duration': 600, 'type': 'Duration'},
- 'topology': 'prox-tg-topology-2.yaml',
- 'traffic_profile': '../../traffic_profiles/prox_binsearch.yaml',
- 'type': 'NSPerf',
- 'options': {
- 'tg__1': {'prox_args': {'-e': '',
- '-t': ''},
- 'prox_config': 'configs/l3-gen-2.cfg',
- 'prox_path':
- '/root/dppd-PROX-v035/build/prox'},
- 'vnf__1': {
- 'prox_args': {'-t': ''},
- 'prox_config': 'configs/l3-swap-2.cfg',
- 'prox_path': '/root/dppd-PROX-v035/build/prox'}}}
-
- CONTEXT_CFG = {
- 'nodes': {
- 'tg__2': {
- 'member-vnf-index': '3',
- 'role': 'TrafficGen',
- 'name': 'trafficgen_2.yardstick',
- 'vnfd-id-ref': 'tg__2',
- 'ip': '1.2.1.1',
- 'interfaces': {
- 'xe0': {
- 'local_iface_name': 'ens513f0',
- 'vld_id': ProxTrafficGen.DOWNLINK,
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.20',
- 'dst_mac': '00:00:00:00:00:01',
- 'local_mac': '00:00:00:00:00:03',
- 'dst_ip': '152.16.40.19',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.0',
- 'dpdk_port_num': 0,
- },
- 'xe1': {
- 'local_iface_name': 'ens513f1',
- 'netmask': '255.255.255.0',
- 'network': '202.16.100.0',
- 'local_ip': '202.16.100.20',
- 'local_mac': '00:1e:67:d0:60:5d',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.1',
- 'dpdk_port_num': 1,
- },
- },
- 'password': 'r00t',
- 'VNF model': 'l3fwd_vnf.yaml',
- 'user': 'root',
- },
- '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': ProxTrafficGen.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': ProxTrafficGen.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': ProxTrafficGen.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': [
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'network': '152.16.100.20',
- 'if': 'xe0',
- },
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'network': '152.16.40.20',
- 'if': 'xe1',
- },
- ],
- 'member-vnf-index': '2',
- 'host': '1.2.1.1',
- 'role': 'vnf',
- 'user': 'root',
- 'nd_route_tbl': [
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0',
- },
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1',
- },
- ],
- 'password': 'r00t',
- 'VNF model': 'prox_vnf.yaml',
- },
- },
- }
-
- TRAFFIC_PROFILE = {
- 'description': 'Binary search for max no-drop throughput over given packet sizes',
- 'name': 'prox_binsearch',
- 'schema': 'nsb:traffic_profile:0.1',
- 'traffic_profile': {
- 'duration': 5,
- 'lower_bound': 0.0,
- 'packet_sizes': [64, 65],
- 'test_precision': 1.0,
- 'tolerated_loss': 0.0,
- 'traffic_type': 'ProxBinSearchProfile',
- 'upper_bound': 100.0}}
-
- @mock.patch(SSH_HELPER)
- 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, *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]})
- 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.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_cpu_sys_cores, *args):
- mock_ssh(ssh)
-
- mock_cpu_sys_cores.get_core_socket.return_value = {'0': '01234'}
-
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
- ssh_helper = mock.MagicMock(
- **{"execute.return_value": (0, "", ""), "bin_path": ""})
- prox_traffic_gen.ssh_helper = ssh_helper
- prox_traffic_gen.setup_helper.dpdk_bind_helper.ssh_helper = ssh_helper
- prox_traffic_gen.setup_helper._setup_resources = mock.MagicMock()
- prox_traffic_gen.setup_hugepages = mock.MagicMock()
- prox_traffic_gen.generate_prox_config_file = mock.MagicMock()
- prox_traffic_gen.upload_prox_config = mock.MagicMock()
- prox_traffic_gen.setup_helper._find_used_drivers = mock.MagicMock()
- prox_traffic_gen.setup_helper.used_drivers = {}
- prox_traffic_gen.setup_helper.bound_pci = []
- prox_traffic_gen._start_server = mock.Mock(return_value=0)
- prox_traffic_gen._tg_process = mock.MagicMock()
- prox_traffic_gen._tg_process.start = mock.Mock()
- prox_traffic_gen._tg_process.exitcode = 0
- prox_traffic_gen._tg_process._is_alive = mock.Mock(return_value=1)
- prox_traffic_gen.ssh_helper = mock.MagicMock()
- prox_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- scenario_cfg = {
- 'task_path': '',
- 'options': {'tg__1': {'prox_args': {'-e': '',
- '-t': ''},
- 'prox_config': 'configs/l3-gen-2.cfg',
- 'prox_path': '/root/dppd-PROX-v035/build/prox'},
- 'vnf__1': {'prox_args': {'-t': ''},
- 'prox_config': 'configs/l3-swap-2.cfg',
- 'prox_path': '/root/dppd-PROX-v035/build/prox'}
- }
- }
- prox_traffic_gen.instantiate(scenario_cfg, {})
-
- @mock.patch(SSH_HELPER)
- def test__traffic_runner(self, ssh, *args):
- mock_ssh(ssh)
-
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.execute_traffic.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- sut = ProxTrafficGen(NAME, vnfd)
- sut._get_socket = mock.MagicMock()
- sut.ssh_helper = mock.Mock()
- sut.ssh_helper.run = mock.Mock()
- sut.setup_helper.prox_config_dict = {}
- sut._connect_client = mock.Mock(autospec=STLClient)
- sut._connect_client.get_stats = mock.Mock(return_value="0")
- sut._traffic_runner(mock_traffic_profile)
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
- @mock.patch(SSH_HELPER)
- def test_listen_traffic(self, ssh, *args):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
- self.assertIsNone(prox_traffic_gen.listen_traffic(mock.Mock()))
-
- @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
- @mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, *args):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- prox_traffic_gen = ProxTrafficGen(NAME, vnfd)
- prox_traffic_gen._terminated = mock.MagicMock()
- prox_traffic_gen._traffic_process = mock.MagicMock()
- prox_traffic_gen._traffic_process.terminate = mock.Mock()
- prox_traffic_gen.ssh_helper = mock.MagicMock()
- prox_traffic_gen.setup_helper = mock.MagicMock()
- prox_traffic_gen.resource_helper = mock.MagicMock()
- prox_traffic_gen._vnf_wrapper.setup_helper = mock.MagicMock()
- prox_traffic_gen._vnf_wrapper._vnf_process = mock.MagicMock()
- prox_traffic_gen._vnf_wrapper.resource_helper = mock.MagicMock()
- self.assertEqual(None, prox_traffic_gen.terminate())
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
deleted file mode 100644
index e9f718cb7..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
+++ /dev/null
@@ -1,352 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import os
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-
-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.tg_rfc2544_ixia import IxiaTrafficGen
- from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaRfc2544Helper
- from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaResourceHelper
- from yardstick.network_services.traffic_profile.base import TrafficProfile
-
-TEST_FILE_YAML = 'nsb_test_case.yaml'
-
-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, *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, *args):
- mock_client = mock.Mock()
-
- ixia_resource_helper = IxiaResourceHelper(mock.Mock())
-
- ixia_resource_helper.client = mock_client
- ixia_resource_helper.stop_collect()
- self.assertEqual(mock_client.ix_stop_traffic.call_count, 1)
-
-
-@mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.IxNextgen")
-class TestIXIATrafficGen(unittest.TestCase):
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'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: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': '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'}]}}
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64}}
-
- TC_YAML = {'scenarios': [{'tc_options':
- {'rfc2544': {'allowed_drop_rate': '0.8 - 1'}},
- 'runner': {'duration': 400,
- 'interval': 35, 'type': 'Duration'},
- 'traffic_options':
- {'flow': 'ipv4_1flow_Packets_vpe.yaml',
- 'imix': 'imix_voice.yaml'},
- 'vnf_options': {'vpe': {'cfg': 'vpe_config'}},
- 'traffic_profile': 'ipv4_throughput_vpe.yaml',
- 'type': 'NSPerf',
- 'nodes': {'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick'},
- 'topology': 'vpe_vnf_topology.yaml'}],
- 'context': {'nfvi_type': 'baremetal', 'type': 'Node',
- 'name': 'yardstick',
- 'file': '/etc/yardstick/nodes/pod.yaml'},
- 'schema': 'yardstick:task:0.1'}
-
- 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]
- # NOTE(ralonsoh): check the object returned.
- IxiaTrafficGen(NAME, vnfd)
-
- def test_listen_traffic(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)
- self.assertEqual(None, ixnet_traffic_gen.listen_traffic({}))
-
- def test_instantiate(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_mock.run = \
- 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)
- scenario_cfg = {'tc': "nsb_test_case", "topology": "",
- 'ixia_profile': "ixload.cfg"}
- scenario_cfg.update({'options': {'packetsize': 64,
- 'traffic_type': 4,
- 'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
- 'vnf__1': {'rules': 'acl_1rule.yaml',
- 'vnf_config': {'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config':
- '1C/1T',
- 'worker_threads': 1}}
- }})
- ixnet_traffic_gen.topology = ""
- ixnet_traffic_gen.get_ixobj = mock.MagicMock()
- ixnet_traffic_gen._ixia_traffic_gen = mock.MagicMock()
- ixnet_traffic_gen._ixia_traffic_gen._connect = mock.Mock()
- self.assertRaises(
- IOError,
- ixnet_traffic_gen.instantiate(scenario_cfg, {}))
-
- def test_collect_kpi(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)
- ixnet_traffic_gen.data = {}
- restult = ixnet_traffic_gen.collect_kpi()
- self.assertEqual({}, restult)
-
- 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)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "", ""))
- ssh.from_node.return_value = ssh_mock
- ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
- ixnet_traffic_gen._terminated = mock.MagicMock()
- ixnet_traffic_gen._terminated.value = 0
- ixnet_traffic_gen._ixia_traffic_gen = mock.MagicMock()
- ixnet_traffic_gen._ixia_traffic_gen.ix_stop_traffic = mock.Mock()
- ixnet_traffic_gen._traffic_process = mock.MagicMock()
- ixnet_traffic_gen._traffic_process.terminate = mock.Mock()
- self.assertEqual(None, ixnet_traffic_gen.terminate())
-
- 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
-
- 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_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
- # traffic_profile.ports is standardized on port_num
- mock_traffic_profile.ports = [0, 1]
-
- mock_ssh_instance = mock.Mock(autospec=mock_ssh.SSH)
- mock_ssh_instance.execute.return_value = 0, "", ""
- mock_ssh_instance.run.return_value = 0, "", ""
-
- mock_ssh.from_node.return_value = mock_ssh_instance
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vnfd["mgmt-interface"].update({
- 'tg-config': {
- "ixchassis": "1.1.1.1",
- "py_bin_path": "/root",
- }
- })
-
- samples = {}
- name = ''
- for ifname in range(1):
- name = "xe{}".format(ifname)
- samples[name] = {
- "Rx_Rate_Kbps": 20,
- "Tx_Rate_Kbps": 20,
- "Rx_Rate_Mbps": 10,
- "Tx_Rate_Mbps": 10,
- "RxThroughput": 10,
- "TxThroughput": 10,
- "Valid_Frames_Rx": 1000,
- "Frames_Tx": 1000,
- "in_packets": 1000,
- "out_packets": 1000,
- }
-
- samples.update({"CurrentDropPercentage": 0.0})
-
- last_res = [
- 0,
- {
- "Rx_Rate_Kbps": [20, 20],
- "Tx_Rate_Kbps": [20, 20],
- "Rx_Rate_Mbps": [10, 10],
- "Tx_Rate_Mbps": [10, 10],
- "CurrentDropPercentage": [0, 0],
- "RxThroughput": [10, 10],
- "TxThroughput": [10, 10],
- "Frames_Tx": [1000, 1000],
- "in_packets": [1000, 1000],
- "Valid_Frames_Rx": [1000, 1000],
- "out_packets": [1000, 1000],
- },
- ]
-
- mock_traffic_profile.execute_traffic.return_value = ['Completed', samples]
- mock_traffic_profile.get_drop_percentage.return_value = ['Completed', samples]
-
- sut = IxiaTrafficGen(name, vnfd)
- sut.vnf_port_pairs = [[[0], [1]]]
- sut.tc_file_name = self._get_file_abspath(TEST_FILE_YAML)
- sut.topology = ""
-
- sut.ssh_helper = mock.Mock()
- sut._traffic_process = mock.MagicMock()
- sut.generate_port_pairs = mock.Mock()
-
- sut._ixia_traffic_gen = mock.MagicMock()
- sut._ixia_traffic_gen.ix_get_statistics.return_value = last_res
-
- sut.resource_helper.client = mock.MagicMock()
- sut.resource_helper.client_started = mock.MagicMock()
- sut.resource_helper.client_started.value = 1
- sut.resource_helper.rfc_helper.iteration.value = 11
-
- sut.scenario_helper.scenario_cfg = {
- 'options': {
- 'packetsize': 64,
- 'traffic_type': 4,
- 'rfc2544': {
- 'allowed_drop_rate': '0.8 - 1',
- 'latency': True
- },
- 'vnf__1': {
- 'rules': 'acl_1rule.yaml',
- 'vnf_config': {
- 'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config': '1C/1T',
- 'worker_threads': 1,
- },
- },
- },
- 'ixia_profile': '/path/to/profile',
- 'task_path': '/path/to/task'
- }
-
- @mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', create=True)
- @mock.patch('yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.open',
- mock.mock_open(), create=True)
- @mock.patch('yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.LOG.exception')
- def _traffic_runner(*args):
- result = sut._traffic_runner(mock_traffic_profile)
- self.assertIsNone(result)
-
- _traffic_runner()
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
deleted file mode 100644
index 7342cfcdc..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_trex.py
+++ /dev/null
@@ -1,341 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import absolute_import
-
-import unittest
-import mock
-
-from tests.unit import STL_MOCKS
-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.tg_rfc2544_trex import TrexTrafficGenRFC, \
- TrexRfcResourceHelper
- from yardstick.network_services.vnf_generic.vnf import tg_rfc2544_trex
- from yardstick.network_services.traffic_profile.base import TrafficProfile
- from tests.unit.network_services.vnf_generic.vnf.test_base import FileAbsPath, mock_ssh
-
-MODULE_PATH = FileAbsPath(__file__)
-get_file_abspath = MODULE_PATH.get_path
-
-
-class TestTrexRfcResouceHelper(unittest.TestCase):
-
- @mock.patch('yardstick.network_services.helpers.samplevnf_helper.MultiPortConfig')
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_trex.time")
- @mock.patch(SSH_HELPER)
- def test__run_traffic_once(self, ssh, *_):
- mock_ssh(ssh)
-
- mock_traffic_profile = mock.MagicMock(autospec=TrafficProfile,
- **{'get_drop_percentage.return_value': {}})
- sut = TrexRfcResourceHelper(mock.MagicMock(), mock.MagicMock())
- sut.client = mock.MagicMock()
- sut._run_traffic_once(mock_traffic_profile)
-
-
-class TestTrexTrafficGenRFC(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': {
- 'ifname': 'xe0',
- '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',
- 'vld_id': 'uplink_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:01',
- },
- 'vnfd-connection-point-ref': 'xe0',
- 'name': 'xe0',
- },
- {
- 'virtual-interface': {
- 'ifname': 'xe1',
- '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',
- 'vld_id': 'downlink_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: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,
- ],
- },
- }
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64,
- },
- }
-
- TC_YAML = {
- 'scenarios': [
- {
- 'tc_options': {
- 'rfc2544': {
- 'allowed_drop_rate': '0.8 - 1',
- },
- },
- 'runner': {
- 'duration': 400,
- 'interval': 35,
- 'type': 'Duration',
- },
- 'traffic_options': {
- 'flow': 'ipv4_1flow_Packets_vpe.yaml',
- 'imix': 'imix_voice.yaml',
- },
- 'vnf_options': {
- 'vpe': {
- 'cfg': 'vpe_config',
- },
- },
- 'traffic_profile': 'ipv4_throughput_vpe.yaml',
- 'type': 'NSPerf',
- 'nodes': {
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick',
- },
- 'topology': 'vpe_vnf_topology.yaml',
- },
- ],
- 'context': {
- 'nfvi_type': 'baremetal',
- 'type': 'Node',
- 'name': 'yardstick',
- 'file': '/etc/yardstick/nodes/pod.yaml',
- },
- 'schema': 'yardstick:task:0.1',
- }
-
- @mock.patch(SSH_HELPER)
- def test___init__(self, ssh):
- mock_ssh(ssh)
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- self.assertIsNotNone(trex_traffic_gen.resource_helper._terminated.value)
-
- @mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh):
- mock_ssh(ssh)
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- self.assertEqual(trex_traffic_gen.collect_kpi(), {})
-
- @mock.patch(SSH_HELPER)
- def test_listen_traffic(self, ssh):
- mock_ssh(ssh)
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- self.assertIsNone(trex_traffic_gen.listen_traffic({}))
-
- @mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh):
- mock_ssh(ssh)
-
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
-
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- trex_traffic_gen._start_server = mock.Mock(return_value=0)
- trex_traffic_gen.resource_helper = mock.MagicMock()
- trex_traffic_gen.setup_helper.setup_vnf_environment = mock.MagicMock()
-
- scenario_cfg = {
- "tc": "tc_baremetal_rfc2544_ipv4_1flow_64B",
- "topology": 'nsb_test_case.yaml',
- 'options': {
- 'packetsize': 64,
- 'traffic_type': 4,
- 'rfc2544': {
- 'allowed_drop_rate': '0.8 - 1',
- },
- 'vnf__1': {
- 'rules': 'acl_1rule.yaml',
- 'vnf_config': {
- 'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config': '1C/1T',
- 'worker_threads': 1
- },
- },
- },
- }
- tg_rfc2544_trex.WAIT_TIME = 3
- scenario_cfg.update({"nodes": ["tg_1", "vnf_1"]})
- self.assertIsNone(trex_traffic_gen.instantiate(scenario_cfg, {}))
-
- @mock.patch(SSH_HELPER)
- def test_instantiate_error(self, ssh):
- mock_ssh(ssh, exec_result=(1, "", ""))
-
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
-
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- trex_traffic_gen.resource_helper = mock.MagicMock()
- trex_traffic_gen.setup_helper.setup_vnf_environment = mock.MagicMock()
- scenario_cfg = {
- "tc": "tc_baremetal_rfc2544_ipv4_1flow_64B",
- "nodes": [
- "tg_1",
- "vnf_1",
- ],
- "topology": 'nsb_test_case.yaml',
- 'options': {
- 'packetsize': 64,
- 'traffic_type': 4,
- 'rfc2544': {
- 'allowed_drop_rate': '0.8 - 1',
- },
- 'vnf__1': {
- 'rules': 'acl_1rule.yaml',
- 'vnf_config': {
- 'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config': '1C/1T',
- 'worker_threads': 1,
- },
- },
- },
- }
- trex_traffic_gen.instantiate(scenario_cfg, {})
-
- @mock.patch(SSH_HELPER)
- def test__start_server(self, ssh):
- mock_ssh(ssh)
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- trex_traffic_gen.resource_helper = mock.MagicMock()
- self.assertIsNone(trex_traffic_gen._start_server())
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_trex.time")
- @mock.patch(SSH_HELPER)
- def test__generate_trex_cfg(self, ssh, _):
- mock_ssh(ssh)
-
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- trex_traffic_gen.ssh_helper = mock.MagicMock()
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- self.assertIsNone(trex_traffic_gen.resource_helper.generate_cfg())
-
- def test_terminate(self):
- with mock.patch(SSH_HELPER) as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "", ""))
- ssh.from_node.return_value = ssh_mock
- trex_traffic_gen = TrexTrafficGenRFC('vnf1', self.VNFD_0)
- trex_traffic_gen.resource_helper = mock.MagicMock()
- self.assertIsNone(trex_traffic_gen.terminate())
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
deleted file mode 100644
index 618071507..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_trex.py
+++ /dev/null
@@ -1,489 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import copy
-import mock
-
-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()
-stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
-stl_patch.start()
-
-if stl_patch:
- from yardstick.network_services.vnf_generic.vnf.tg_trex import \
- TrexTrafficGen, TrexResourceHelper
- from yardstick.network_services.traffic_profile.base import TrafficProfile
-
-
-class TestTrexTrafficGen(unittest.TestCase):
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'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: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',
- 'vld_id': 'downlink_0',
- 'ifname': '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',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe1',
- 'local_mac': '00:00:00:00:00:01'},
- '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'}]}}
-
- TRAFFIC_PROFILE = {
- "schema": "isb:traffic_profile:0.1",
- "name": "fixed",
- "description": "Fixed traffic profile to run UDP traffic",
- "traffic_profile": {
- "traffic_type": "FixedTraffic",
- "frame_rate": 100, # pps
- "flow_number": 10,
- "frame_size": 64
- },
- }
-
- SCENARIO_CFG = {
- "options": {
- "packetsize": 64,
- "traffic_type": 4,
- "rfc2544": {
- "allowed_drop_rate": "0.8 - 1",
- },
- "vnf__1": {
- "rules": "acl_1rule.yaml",
- "vnf_config": {
- "lb_config": "SW",
- "lb_count": 1,
- "worker_config": "1C/1T",
- "worker_threads": 1,
- }
- }
- },
- "task_id": "a70bdf4a-8e67-47a3-9dc1-273c14506eb7",
- "tc": "tc_ipv4_1Mflow_64B_packetsize",
- "runner": {
- "object": "NetworkServiceTestCase",
- "interval": 35,
- "output_filename": "/tmp/yardstick.out",
- "runner_id": 74476, "duration": 400,
- "type": "Duration"
- },
- "traffic_profile": "ipv4_throughput_acl.yaml",
- "traffic_options": {
- "flow": "ipv4_Packets_acl.yaml",
- "imix": "imix_voice.yaml"
- },
- "type": "ISB",
- "nodes": {
- "tg__2": "trafficgen_2.yardstick",
- "tg__1": "trafficgen_1.yardstick",
- "vnf__1": "vnf.yardstick"
- },
- "topology": "udpreplay-tg-topology-baremetal.yaml"
- }
-
- CONTEXT_CFG = {
- "nodes": {
- "vnf__1": {
- "vnfd-id-ref": "vnf__1",
- "ip": "1.2.1.1",
- "interfaces": {
- "xe0": {
- "local_iface_name": "ens786f0",
- "vld_id": TrafficProfile.UPLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:05:00.0",
- "local_ip": "152.16.100.19",
- "driver": "i40e",
- "dst_ip": "152.16.100.20",
- "local_mac": "00:00:00:00:00:02",
- "dst_mac": "00:00:00:00:00:04",
- "dpdk_port_num": 0
- },
- "xe1": {
- "local_iface_name": "ens786f1",
- "vld_id": TrafficProfile.DOWNLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:05:00.1",
- "local_ip": "152.16.40.19",
- "driver": "i40e",
- "dst_ip": "152.16.40.20",
- "local_mac": "00:00:00:00:00:01",
- "dst_mac": "00:00:00:00:00:03",
- "dpdk_port_num": 1
- }
- },
- "host": "1.2.1.1",
- "user": "root",
- "nd_route_tbl": [
- {
- "netmask": "112",
- "if": "xe0",
- "gateway": "0064:ff9b:0:0:0:0:9810:6414",
- "network": "0064:ff9b:0:0:0:0:9810:6414"
- },
- {
- "netmask": "112",
- "if": "xe1",
- "gateway": "0064:ff9b:0:0:0:0:9810:2814",
- "network": "0064:ff9b:0:0:0:0:9810:2814"
- }
- ],
- "password": "r00t",
- "VNF model": "udp_replay.yaml",
- "name": "vnf.yardstick",
- "member-vnf-index": "2",
- "routing_table": [
- {
- "netmask": "255.255.255.0",
- "if": "xe0",
- "gateway": "152.16.100.20",
- "network": "152.16.100.20"
- },
- {
- "netmask": "255.255.255.0",
- "if": "xe1",
- "gateway": "152.16.40.20",
- "network": "152.16.40.20"
- }
- ],
- "role": "vnf"
- },
- "trafficgen_2.yardstick": {
- "member-vnf-index": "3",
- "role": "TrafficGen",
- "name": "trafficgen_2.yardstick",
- "vnfd-id-ref": "tg__2",
- "ip": "1.2.1.1",
- "interfaces": {
- "xe0": {
- "local_iface_name": "ens513f0",
- "vld_id": TrafficProfile.DOWNLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:02:00.0",
- "local_ip": "152.16.40.20",
- "driver": "ixgbe",
- "dst_ip": "152.16.40.19",
- "local_mac": "00:00:00:00:00:03",
- "dst_mac": "00:00:00:00:00:01",
- "dpdk_port_num": 0
- },
- "xe1": {
- "local_iface_name": "ens513f1",
- "netmask": "255.255.255.0",
- "network": "202.16.100.0",
- "local_ip": "202.16.100.20",
- "driver": "ixgbe",
- "local_mac": "00:1e:67:d0:60:5d",
- "vpci": "0000:02:00.1",
- "dpdk_port_num": 1
- }
- },
- "password": "r00t",
- "VNF model": "l3fwd_vnf.yaml",
- "user": "root"
- },
- "trafficgen_1.yardstick": {
- "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": TrafficProfile.UPLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:05:00.0",
- "local_ip": "152.16.100.20",
- "driver": "i40e",
- "dst_ip": "152.16.100.19",
- "local_mac": "00:00:00:00:00:04",
- "dst_mac": "00:00:00:00:00:02",
- "dpdk_port_num": 0
- },
- "xe1": {
- "local_ip": "152.16.100.21",
- "driver": "i40e",
- "vpci": "0000:05:00.1",
- "dpdk_port_num": 1,
- "local_iface_name": "ens785f1",
- "netmask": "255.255.255.0",
- "local_mac": "00:00:00:00:00:01"
- }
- },
- "password": "r00t",
- "VNF model": "tg_rfc2544_tpl.yaml",
- "user": "root"
- }
- }
- }
-
- @mock.patch(SSH_HELPER)
- def test___init__(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- self.assertIsInstance(trex_traffic_gen.resource_helper, TrexResourceHelper)
-
- @mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen.resource_helper._queue.put({})
- result = trex_traffic_gen.collect_kpi()
- self.assertEqual({}, result)
-
- @mock.patch(SSH_HELPER)
- def test_listen_traffic(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- self.assertIsNone(trex_traffic_gen.listen_traffic({}))
-
- @mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen._start_server = mock.Mock(return_value=0)
- trex_traffic_gen._tg_process = mock.MagicMock()
- trex_traffic_gen._tg_process.start = mock.Mock()
- trex_traffic_gen._tg_process.exitcode = 0
- trex_traffic_gen._tg_process._is_alive = mock.Mock(return_value=1)
- trex_traffic_gen.ssh_helper = mock.MagicMock()
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- trex_traffic_gen.setup_helper.setup_vnf_environment = mock.MagicMock()
-
- self.assertIsNone(trex_traffic_gen.instantiate(self.SCENARIO_CFG, self.CONTEXT_CFG))
-
- @mock.patch(SSH_HELPER)
- def test_instantiate_error(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._start_server = mock.Mock(return_value=0)
- trex_traffic_gen._tg_process = mock.MagicMock()
- trex_traffic_gen._tg_process.start = mock.Mock()
- trex_traffic_gen._tg_process._is_alive = mock.Mock(return_value=0)
- trex_traffic_gen.ssh_helper = mock.MagicMock()
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- trex_traffic_gen.setup_helper.setup_vnf_environment = mock.MagicMock()
- self.assertIsNone(trex_traffic_gen.instantiate(self.SCENARIO_CFG, self.CONTEXT_CFG))
-
- @mock.patch(SSH_HELPER)
- def test__start_server(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen.ssh_helper = mock.MagicMock()
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- trex_traffic_gen.scenario_helper.scenario_cfg = {}
- self.assertIsNone(trex_traffic_gen._start_server())
-
- @mock.patch(SSH_HELPER)
- def test__start_server_multiple_queues(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen.ssh_helper = mock.MagicMock()
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- trex_traffic_gen.scenario_helper.scenario_cfg = {"options": {NAME: {"queues_per_port": 2}}}
- self.assertIsNone(trex_traffic_gen._start_server())
-
- @mock.patch(SSH_HELPER)
- def test__traffic_runner(self, ssh):
- mock_ssh(ssh)
-
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.execute_traffic.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- self.sut = TrexTrafficGen(NAME, vnfd)
- self.sut.ssh_helper = mock.Mock()
- self.sut.ssh_helper.run = mock.Mock()
- self.sut._connect_client = mock.Mock(autospec=STLClient)
- self.sut._connect_client.get_stats = mock.Mock(return_value="0")
- self.sut.resource_helper.RUN_DURATION = 0
- self.sut.resource_helper.QUEUE_WAIT_TIME = 0
- # must generate cfg before we can run traffic so Trex port mapping is created
- self.sut.resource_helper.generate_cfg()
- self.sut._traffic_runner(mock_traffic_profile)
-
- @mock.patch(SSH_HELPER)
- def test__generate_trex_cfg(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- self.assertIsNone(trex_traffic_gen.resource_helper.generate_cfg())
-
- @mock.patch(SSH_HELPER)
- def test_build_ports_reversed_pci_ordering(self, ssh):
- mock_ssh(ssh)
- vnfd = copy.deepcopy(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
- vnfd['vdu'][0]['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': 2,
- 'bandwidth': '10 Gbps',
- 'driver': "i40e",
- 'dst_ip': '152.16.100.20',
- 'local_iface_name': 'xe0',
- 'vld_id': 'downlink_0',
- 'ifname': '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:04:00.0',
- 'local_ip': '152.16.40.19',
- 'type': 'PCI-PASSTHROUGH',
- 'driver': "i40e",
- 'netmask': '255.255.255.0',
- 'dpdk_port_num': 0,
- 'bandwidth': '10 Gbps',
- 'dst_ip': '152.16.40.20',
- 'local_iface_name': 'xe1',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe1',
- 'local_mac': '00:00:00:00:00:01'},
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1'}]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- trex_traffic_gen.resource_helper.generate_cfg()
- trex_traffic_gen.resource_helper._build_ports()
- self.assertEqual(sorted(trex_traffic_gen.resource_helper.all_ports), [0, 1])
- # there is a gap in ordering
- self.assertEqual(dict(trex_traffic_gen.resource_helper.dpdk_to_trex_port_map),
- {0: 0, 2: 1})
-
- @mock.patch(SSH_HELPER)
- def test_run_traffic(self, ssh):
- mock_ssh(ssh)
-
- mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
- mock_traffic_profile.get_traffic_definition.return_value = "64"
- mock_traffic_profile.params = self.TRAFFIC_PROFILE
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- self.sut = TrexTrafficGen(NAME, vnfd)
- self.sut.ssh_helper = mock.Mock()
- self.sut.ssh_helper.run = mock.Mock()
- self.sut._traffic_runner = mock.Mock(return_value=0)
- self.sut.resource_helper.client_started.value = 1
- result = self.sut.run_traffic(mock_traffic_profile)
- self.sut._traffic_process.terminate()
- self.assertIsNotNone(result)
-
- @mock.patch(SSH_HELPER)
- def test_terminate(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- trex_traffic_gen.ssh_helper = mock.MagicMock()
- trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
- self.assertIsNone(trex_traffic_gen.terminate())
-
- @mock.patch(SSH_HELPER)
- def test__connect_client(self, ssh):
- mock_ssh(ssh)
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
- client = mock.Mock(autospec=STLClient)
- client.connect = mock.Mock(return_value=0)
- self.assertIsNotNone(trex_traffic_gen.resource_helper._connect(client))
-
-
-if __name__ == '__main__':
- unittest.main()
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
deleted file mode 100644
index 635ce2735..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
+++ /dev/null
@@ -1,476 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import unittest
-import mock
-import os
-
-from tests.unit import STL_MOCKS
-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.vnf_generic.vnf.sample_vnf import ScenarioHelper
-
-
-TEST_FILE_YAML = 'nsb_test_case.yaml'
-
-
-NAME = "vnf__1"
-
-
-@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
-class TestUdpReplayApproxVnf(unittest.TestCase):
-
- VNFD_0 = {
- 'short-name': 'UdpReplayVnf',
- 'vdu': [
- {
- 'description': 'UDPReplay approximation using DPDK',
- 'routing_table': [
- {
- 'netmask': '255.255.255.0',
- 'if': 'xe0',
- 'network': '152.16.100.20',
- 'gateway': '152.16.100.20',
- },
- {
- 'netmask': '255.255.255.0',
- 'if': 'xe1',
- 'network': '152.16.40.20',
- 'gateway': '152.16.40.20',
- }
- ],
- 'external-interface': [
- {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:04',
- 'driver': 'i40e',
- 'local_iface_name': 'xe0',
- 'bandwidth': '10 Gbps',
- 'local_ip': '152.16.100.19',
- 'local_mac': '00:00:00:00:00:02',
- 'vpci': '0000:05:00.0',
- 'dpdk_port_num': 0,
- 'netmask': '255.255.255.0',
- 'dst_ip': '152.16.100.20',
- 'type': 'PCI-PASSTHROUGH',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe0',
- },
- 'vnfd-connection-point-ref': 'xe0',
- 'name': 'xe0',
- },
- {
- 'virtual-interface': {
- 'dst_mac': '00:00:00:00:00:03',
- 'driver': 'i40e',
- 'local_iface_name': 'xe1',
- 'bandwidth': '10 Gbps',
- 'local_ip': '152.16.40.19',
- 'local_mac': '00:00:00:00:00:01',
- 'vpci': '0000:05:00.1',
- 'dpdk_port_num': 1,
- 'netmask': '255.255.255.0',
- 'dst_ip': '152.16.40.20',
- 'type': 'PCI-PASSTHROUGH',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1',
- }
- ],
- 'nd_route_tbl': [
- {
- 'netmask': '112',
- 'if': 'xe0',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- },
- {
- 'netmask': '112',
- 'if': 'xe1',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- }
- ],
- 'id': 'udpreplayvnf-baremetal',
- 'name': 'udpreplayvnf-baremetal',
- }
- ],
- 'description': 'UDPReplay approximation using DPDK',
- 'name': 'VPEVnfSsh',
- 'mgmt-interface': {
- 'vdu-id': 'udpreplay-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': 'UdpReplayApproxVnf',
- }
-
- SCENARIO_CFG = {
- "options": {
- "packetsize": 64,
- "traffic_type": 4,
- "rfc2544": {
- "allowed_drop_rate": "0.8 - 1",
- },
- "vnf__1": {
- "rules": "acl_1rule.yaml",
- "vnf_config": {
- "lb_config": "SW",
- "lb_count": 1,
- "worker_config": "1C/1T",
- "worker_threads": 1,
- },
- "hw_csum": "false",
- }
- },
- "task_id": "a70bdf4a-8e67-47a3-9dc1-273c14506eb7",
- "tc": "tc_ipv4_1Mflow_64B_packetsize",
- "runner": {
- "object": "NetworkServiceTestCase",
- "interval": 35,
- "output_filename": "/tmp/yardstick.out",
- "runner_id": 74476, "duration": 400,
- "type": "Duration"
- },
- "traffic_profile": "ipv4_throughput_acl.yaml",
- "traffic_options": {
- "flow": "ipv4_Packets_acl.yaml",
- "imix": "imix_voice.yaml"
- },
- "type": "ISB",
- "nodes": {
- "tg__2": "trafficgen_2.yardstick",
- "tg__1": "trafficgen_1.yardstick",
- "vnf__1": "vnf.yardstick"
- },
- "topology": "udpreplay-tg-topology-baremetal.yaml"
- }
-
- CONTEXT_CFG = {
- "nodes": {
- "vnf__1": {
- "vnfd-id-ref": "vnf__1",
- "ip": "1.2.1.1",
- "interfaces": {
- "xe0": {
- "local_iface_name": "ens786f0",
- "vld_id": UdpReplayApproxVnf.UPLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:05:00.0",
- "local_ip": "152.16.100.19",
- "driver": "i40e",
- "dst_ip": "152.16.100.20",
- "local_mac": "00:00:00:00:00:02",
- "dst_mac": "00:00:00:00:00:04",
- "dpdk_port_num": 0
- },
- "xe1": {
- "local_iface_name": "ens786f1",
- "vld_id": UdpReplayApproxVnf.DOWNLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:05:00.1",
- "local_ip": "152.16.40.19",
- "driver": "i40e",
- "dst_ip": "152.16.40.20",
- "local_mac": "00:00:00:00:00:01",
- "dst_mac": "00:00:00:00:00:03",
- "dpdk_port_num": 1
- }
- },
- "host": "1.2.1.1",
- "user": "root",
- "nd_route_tbl": [
- {
- "netmask": "112",
- "if": "xe0",
- "gateway": "0064:ff9b:0:0:0:0:9810:6414",
- "network": "0064:ff9b:0:0:0:0:9810:6414"
- },
- {
- "netmask": "112",
- "if": "xe1",
- "gateway": "0064:ff9b:0:0:0:0:9810:2814",
- "network": "0064:ff9b:0:0:0:0:9810:2814"
- }
- ],
- "password": "r00t",
- "VNF model": "udp_replay.yaml",
- "name": "vnf.yardstick",
- "member-vnf-index": "2",
- "routing_table": [
- {
- "netmask": "255.255.255.0",
- "if": "xe0",
- "gateway": "152.16.100.20",
- "network": "152.16.100.20"
- },
- {
- "netmask": "255.255.255.0",
- "if": "xe1",
- "gateway": "152.16.40.20",
- "network": "152.16.40.20"
- }
- ],
- "role": "vnf"
- },
- "trafficgen_2.yardstick": {
- "member-vnf-index": "3",
- "role": "TrafficGen",
- "name": "trafficgen_2.yardstick",
- "vnfd-id-ref": "tg__2",
- "ip": "1.2.1.1",
- "interfaces": {
- "xe0": {
- "local_iface_name": "ens513f0",
- "vld_id": UdpReplayApproxVnf.DOWNLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:02:00.0",
- "local_ip": "152.16.40.20",
- "driver": "ixgbe",
- "dst_ip": "152.16.40.19",
- "local_mac": "00:00:00:00:00:03",
- "dst_mac": "00:00:00:00:00:01",
- "dpdk_port_num": 0
- },
- "xe1": {
- "local_iface_name": "ens513f1",
- "netmask": "255.255.255.0",
- "network": "202.16.100.0",
- "local_ip": "202.16.100.20",
- "driver": "ixgbe",
- "local_mac": "00:1e:67:d0:60:5d",
- "vpci": "0000:02:00.1",
- "dpdk_port_num": 1
- }
- },
- "password": "r00t",
- "VNF model": "l3fwd_vnf.yaml",
- "user": "root"
- },
- "trafficgen_1.yardstick": {
- "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": UdpReplayApproxVnf.UPLINK,
- "netmask": "255.255.255.0",
- "vpci": "0000:05:00.0",
- "local_ip": "152.16.100.20",
- "driver": "i40e",
- "dst_ip": "152.16.100.19",
- "local_mac": "00:00:00:00:00:04",
- "dst_mac": "00:00:00:00:00:02",
- "dpdk_port_num": 0
- },
- "xe1": {
- "local_ip": "152.16.100.21",
- "driver": "i40e",
- "vpci": "0000:05:00.1",
- "dpdk_port_num": 1,
- "local_iface_name": "ens785f1",
- "netmask": "255.255.255.0",
- "local_mac": "00:00:00:00:00:01"
- }
- },
- "password": "r00t",
- "VNF model": "tg_rfc2544_tpl.yaml",
- "user": "root"
- }
- }
- }
-
- 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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD_0
- result = "stats\r\r\n\r\nUDP_Replay stats:\r\n--------------\r\n" \
- "Port\t\tRx Packet\t\tTx Packet\t\tRx Pkt Drop\t\tTx Pkt Drop \r\n"\
- "0\t\t7374156\t\t7374136\t\t\t0\t\t\t0\r\n" \
- "1\t\t7374316\t\t7374315\t\t\t0\t\t\t0\r\n\r\nReplay>\r\r\nReplay>"
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, vnfd)
- udp_replay_approx_vnf.q_in = mock.MagicMock()
- udp_replay_approx_vnf.q_out = mock.MagicMock()
- udp_replay_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- udp_replay_approx_vnf.all_ports = ["xe0", "xe1"]
- udp_replay_approx_vnf.get_stats = mock.Mock(return_value=result)
- result = {'collect_stats': {}, 'packets_dropped': 0,
- 'packets_fwd': 14748451, 'packets_in': 14748472}
- self.assertEqual(result, udp_replay_approx_vnf.collect_kpi())
-
- @mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, *args):
- mock_ssh(ssh)
-
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
- udp_replay_approx_vnf.q_in = mock.MagicMock()
- udp_replay_approx_vnf.q_out = mock.MagicMock()
- udp_replay_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- mock_result = \
- "CG-NAPT(.*\n)*Received 100, Missed 0, Dropped 0,Translated 100,ingress"
-
- udp_replay_approx_vnf.vnf_execute = mock.Mock(return_value=mock_result)
-
- self.assertEqual(mock_result,
- udp_replay_approx_vnf.get_stats())
-
- 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
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
- @mock.patch(SSH_HELPER)
- def test__build_config(self, ssh, mock_context, *args):
- mock_ssh(ssh)
-
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
- udp_replay_approx_vnf.queue_wrapper = mock.MagicMock()
- udp_replay_approx_vnf.nfvi_context = mock_context
- udp_replay_approx_vnf.nfvi_context.attrs = {'nfvi_type': 'baremetal'}
- udp_replay_approx_vnf.setup_helper.bound_pci = []
- udp_replay_approx_vnf.ssh_helper.provision_tool = mock.MagicMock(return_value="tool_path")
- udp_replay_approx_vnf.scenario_helper = ScenarioHelper(name='vnf__1')
- udp_replay_approx_vnf.scenario_helper.scenario_cfg = self.SCENARIO_CFG
-
- cmd_line = udp_replay_approx_vnf._build_config()
-
- expected = \
- "sudo tool_path --log-level=5 -c 0x7 -n 4 -w -- -p 0x3 --config='(0,0,1),(1,0,2)'"
- self.assertEqual(cmd_line, expected)
-
- @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, *args):
- mock_ssh(ssh)
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
- udp_replay_approx_vnf.nfvi_context = mock_context
- udp_replay_approx_vnf.nfvi_context.attrs = {'nfvi_type': 'baremetal'}
- udp_replay_approx_vnf.setup_helper.bound_pci = ['0000:00:0.1', '0000:00:0.3']
- udp_replay_approx_vnf.all_ports = ["xe0", "xe1"]
- udp_replay_approx_vnf.ssh_helper.provision_tool = mock.MagicMock(return_value="tool_path")
- udp_replay_approx_vnf.scenario_helper = ScenarioHelper(name='vnf__1')
- udp_replay_approx_vnf.scenario_helper.scenario_cfg = self.SCENARIO_CFG
-
- udp_replay_approx_vnf._build_pipeline_kwargs()
-
- self.assertEqual(udp_replay_approx_vnf.pipeline_kwargs, {
- 'config': '(0,0,1),(1,0,2)',
- 'cpu_mask_hex': '0x7',
- 'hw_csum': '',
- 'port_mask_hex': '0x3',
- 'tool_path': 'tool_path',
- 'whitelist': '0000:00:0.1 -w 0000:00:0.3'
- })
-
- @mock.patch(SSH_HELPER)
- def test_run_udp_replay(self, ssh, *args):
- mock_ssh(ssh)
-
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
- udp_replay_approx_vnf._build_config = mock.MagicMock()
- udp_replay_approx_vnf.queue_wrapper = mock.MagicMock()
- udp_replay_approx_vnf.scenario_helper = mock.MagicMock()
-
- udp_replay_approx_vnf._run()
-
- udp_replay_approx_vnf.ssh_helper.run.assert_called_once()
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
- @mock.patch(SSH_HELPER)
- def test_instantiate(self, ssh, *args):
- mock_ssh(ssh)
-
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
- udp_replay_approx_vnf.q_out.put("Replay>")
- udp_replay_approx_vnf.WAIT_TIME = 0
- udp_replay_approx_vnf.setup_helper.setup_vnf_environment = mock.Mock()
-
- udp_replay_approx_vnf.deploy_helper = mock.MagicMock()
- udp_replay_approx_vnf.deploy_vnfs = mock.MagicMock()
- self.assertIsNone(udp_replay_approx_vnf.instantiate(self.SCENARIO_CFG, self.CONTEXT_CFG))
-
- udp_replay_approx_vnf._vnf_process.is_alive = mock.Mock(return_value=1)
- udp_replay_approx_vnf._vnf_process.exitcode = 0
-
- self.assertEquals(udp_replay_approx_vnf.wait_for_instantiate(), 0)
-
- @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, *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")
- udp_replay_approx_vnf.setup_helper.setup_vnf_environment = mock.Mock()
-
- udp_replay_approx_vnf.deploy_helper = mock.MagicMock()
- self.assertIsNone(udp_replay_approx_vnf.instantiate(self.SCENARIO_CFG, self.CONTEXT_CFG))
- with self.assertRaises(RuntimeError):
- udp_replay_approx_vnf.wait_for_instantiate()
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
- @mock.patch(SSH_HELPER)
- def test_terminate(self, ssh, *args):
- mock_ssh(ssh)
-
- udp_replay_approx_vnf = UdpReplayApproxVnf(NAME, self.VNFD_0)
- udp_replay_approx_vnf._vnf_process = mock.MagicMock()
- udp_replay_approx_vnf._vnf_process.terminate = mock.Mock()
- 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())
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
deleted file mode 100644
index d128db0b4..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py
+++ /dev/null
@@ -1,365 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import unittest
-import mock
-import os
-
-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.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'
-
-
-@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
-class TestFWApproxVnf(unittest.TestCase):
- VNFD = {'vnfd:vnfd-catalog':
- {'vnfd':
- [{'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: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': 'Vpe approximation using DPDK',
- 'mgmt-interface':
- {'vdu-id': 'vpevnf-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': 'FWApproxVnf', 'name': 'VPEVnfSsh'}]}}
-
- scenario_cfg = {'options': {'packetsize': 64, 'traffic_type': 4,
- 'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
- 'vnf__1': {'rules': 'acl_1rule.yaml',
- 'vnf_config': {'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config':
- '1C/1T',
- 'worker_threads': 1}}
- },
- 'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
- 'task_path': '/tmp',
- 'tc': 'tc_ipv4_1Mflow_64B_packetsize',
- 'runner': {'object': 'NetworkServiceTestCase',
- 'interval': 35,
- 'output_filename': '/tmp/yardstick.out',
- 'runner_id': 74476, 'duration': 400,
- 'type': 'Duration'},
- 'traffic_profile': 'ipv4_throughput_vfw.yaml',
- 'traffic_options': {'flow': 'ipv4_Packets_vfw.yaml',
- 'imix': 'imix_voice.yaml'},
- 'type': 'ISB',
- 'nodes': {'tg__2': 'trafficgen_2.yardstick',
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick'},
- 'topology': 'vpe-tg-topology-baremetal.yaml'}
-
- context_cfg = {'nodes': {'tg__2':
- {'member-vnf-index': '3',
- 'role': 'TrafficGen',
- 'name': 'trafficgen_2.yardstick',
- 'vnfd-id-ref': 'tg__2',
- 'ip': '1.2.1.1',
- 'interfaces':
- {'xe0': {'local_iface_name': 'ens513f0',
- 'vld_id': FWApproxVnf.DOWNLINK,
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.20',
- 'dst_mac': '00:00:00:00:00:01',
- 'local_mac': '00:00:00:00:00:03',
- 'dst_ip': '152.16.40.19',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.0',
- 'dpdk_port_num': 0},
- 'xe1': {'local_iface_name': 'ens513f1',
- 'netmask': '255.255.255.0',
- 'network': '202.16.100.0',
- 'local_ip': '202.16.100.20',
- 'local_mac': '00:1e:67:d0:60:5d',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.1',
- 'dpdk_port_num': 1}},
- 'password': 'r00t',
- 'VNF model': 'l3fwd_vnf.yaml',
- 'user': 'root'},
- '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': FWApproxVnf.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': FWApproxVnf.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': FWApproxVnf.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':
- [{'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'network': '152.16.100.20',
- 'if': 'xe0'},
- {'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'network': '152.16.40.20',
- 'if': 'xe1'}],
- 'member-vnf-index': '2',
- 'host': '1.2.1.1',
- 'role': 'vnf',
- 'user': 'root',
- 'nd_route_tbl':
- [{'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0'},
- {'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1'}],
- 'password': 'r00t',
- 'VNF model': 'vfw_vnf.yaml'}}}
-
- 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)
-
- STATS = """\
-p vfw stats
-
-VFW Stats
-{"VFW_counters" : {"id" : "PIPELINE4", " pkts_received": 6007180, " pkts_fw_forwarded": 6007180, " pkts_drop_fw": 0, " pkts_acl_forwarded": 6007180, "pkts_drop_without_rule" : 0, "average_pkts_in_batch" : 31, "average_internal_time_in_clocks" : 17427, "average_external_time_in_clocks" : 261120, "total_time_measures" : 189829, "ct_packets_forwarded" : 6007148, "ct_packets_dropped" : 0, "bytes_processed ": 360430800, "ct_sessions" : {"active" : 130050, "open_attempt" : 130050, "re-open_attempt" : 0, "established" : 0, "closed" : 0, "timeout" : 0}, "ct_drops" : {"out_of_window" : 0, "invalid_conn" : 0, "invalid_state_transition" : 0 "RST" : 0}}
-VFW TOTAL: pkts_received: 6007180, "pkts_fw_forwarded": 6007180, "pkts_drop_fw": 0, "fw_drops" : {"TTL_zero" : 0, "bad_size" : 0, "fragmented_packet" : 0, "unsupported_packet_types" : 0, "no_arp_entry" : 6007180}, "pkts_acl_forwarded": 6007180, "pkts_drop_without_rule": 0, "packets_last_sec" : 0, "average_packets_per_sec" : 0, "bytes_last_sec" : 0, "average_bytes_per_sec" : 0, "bytes_processed ": 360430800
-"CT TOTAL: ct_packets_forwarded" : 6007180, " ct_packets_dropped" : 0, "ct_sessions" : {"active" : 130050, "open_attempt" : 130050, "re-open_attempt" : 0, "established" : 0, "closed" : 0, "timeout" : 0}, "ct_drops" : {"out_of_window" : 0, "invalid_conn" : 0, "invalid_state_transition" : 0 "RST" : 0}
-Action ID: 00, packetCount: 2954633, byteCount: 177277980
-Action ID: 01, packetCount: 3052547, byteCount: 183152820
-pipeline>
-
-pipeline>
-""" # noqa
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
- @mock.patch(SSH_HELPER)
- def test_collect_kpi(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vfw_approx_vnf = FWApproxVnf(name, vnfd)
- vfw_approx_vnf.q_in = mock.MagicMock()
- vfw_approx_vnf.q_out = mock.MagicMock()
- vfw_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- vfw_approx_vnf.resource = mock.Mock(autospec=ResourceProfile)
- vfw_approx_vnf.resource_helper = mock.MagicMock(
- **{'collect_kpi.return_value': {"core": {}}})
- vfw_approx_vnf.vnf_execute = mock.Mock(return_value=self.STATS)
- result = {
- 'packets_dropped': 0,
- 'packets_fwd': 6007180,
- 'packets_in': 6007180,
- 'collect_stats': {'core': {}},
- }
- self.assertEqual(result, vfw_approx_vnf.collect_kpi())
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
- @mock.patch(SSH_HELPER)
- def test_vnf_execute_command(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vfw_approx_vnf = FWApproxVnf(name, vnfd)
- vfw_approx_vnf.q_in = mock.MagicMock()
- vfw_approx_vnf.q_out = mock.MagicMock()
- vfw_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- cmd = "quit"
- self.assertEqual(vfw_approx_vnf.vnf_execute(cmd), "")
-
- @mock.patch(SSH_HELPER)
- def test_get_stats(self, ssh, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vfw_approx_vnf = FWApproxVnf(name, vnfd)
- vfw_approx_vnf.q_in = mock.MagicMock()
- vfw_approx_vnf.q_out = mock.MagicMock()
- vfw_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- vfw_approx_vnf.vnf_execute = mock.Mock(return_value=self.STATS)
- self.assertEqual(self.STATS, vfw_approx_vnf.get_stats())
-
- 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
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.hex")
- @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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vfw_approx_vnf = FWApproxVnf(name, vnfd)
- vfw_approx_vnf._build_config = mock.MagicMock()
- vfw_approx_vnf.queue_wrapper = mock.MagicMock()
- vfw_approx_vnf.ssh_helper = mock.MagicMock()
- vfw_approx_vnf.ssh_helper.run = mock.MagicMock()
- vfw_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
- vfw_approx_vnf.vnf_cfg = {'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config': '1C/1T',
- 'worker_threads': 1}
- vfw_approx_vnf.all_options = {'traffic_type': '4',
- 'topology': 'nsb_test_case.yaml'}
- vfw_approx_vnf._run()
- vfw_approx_vnf.ssh_helper.run.assert_called_once()
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.find_relative_file")
- @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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vfw_approx_vnf = FWApproxVnf(name, vnfd)
- vfw_approx_vnf.ssh_helper = ssh
- vfw_approx_vnf.deploy_helper = mock.MagicMock()
- vfw_approx_vnf.resource_helper = mock.MagicMock()
- vfw_approx_vnf._build_config = mock.MagicMock()
- self.scenario_cfg['vnf_options'] = {'acl': {'cfg': "",
- 'rules': ""}}
- self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
- self.assertIsNone(vfw_approx_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, *args):
- mock_ssh(ssh)
-
- vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
- vfw_approx_vnf = FWApproxVnf(name, vnfd)
- vfw_approx_vnf._vnf_process = mock.MagicMock()
- vfw_approx_vnf.used_drivers = {"01:01.0": "i40e",
- "01:01.1": "i40e"}
- vfw_approx_vnf.vnf_execute = mock.Mock()
- vfw_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
- vfw_approx_vnf._resource_collect_stop = mock.Mock()
- self.assertIsNone(vfw_approx_vnf.terminate())
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
deleted file mode 100644
index 55cd4d2e8..000000000
--- a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
+++ /dev/null
@@ -1,783 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import mock
-from multiprocessing import Process, Queue
-import os
-import six.moves.configparser as configparser
-import time
-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
-
-
-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.vpe_vnf import ConfigCreate
- from yardstick.network_services.nfvi.resource import ResourceProfile
- from yardstick.network_services.vnf_generic.vnf.vpe_vnf import \
- VpeApproxVnf, VpeApproxSetupEnvHelper
-
-
-TEST_FILE_YAML = 'nsb_test_case.yaml'
-
-NAME = 'vnf_1'
-
-PING_OUTPUT_1 = "Pkts in: 101\r\n\tPkts dropped by AH: 100\r\n\tPkts dropped by other: 100"
-
-MODULE_PATH = FileAbsPath(__file__)
-get_file_abspath = MODULE_PATH.get_path
-
-
-class TestConfigCreate(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',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe0',
- },
- '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',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- },
- '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'
- }
-
- def test___init__(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- config_create = ConfigCreate(vnfd_helper, 2)
- self.assertEqual(config_create.uplink_ports, ['xe0'])
- self.assertEqual(config_create.downlink_ports, ['xe1'])
- self.assertEqual(config_create.socket, 2)
-
- def test_vpe_initialize(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- config_create = ConfigCreate(vnfd_helper, 2)
- config = configparser.ConfigParser()
- config_create.vpe_initialize(config)
- self.assertEqual(config.get('EAL', 'log_level'), '0')
- self.assertEqual(config.get('PIPELINE0', 'type'), 'MASTER')
- self.assertEqual(config.get('PIPELINE0', 'core'), 's2C0')
- self.assertEqual(config.get('MEMPOOL0', 'pool_size'), '256K')
- self.assertEqual(config.get('MEMPOOL1', 'pool_size'), '2M')
-
- def test_vpe_rxq(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- config_create = ConfigCreate(vnfd_helper, 2)
- config = configparser.ConfigParser()
- config_create.downlink_ports = ['xe0']
- config_create.vpe_rxq(config)
- self.assertEqual(config.get('RXQ0.0', 'mempool'), 'MEMPOOL1')
-
- def test_get_sink_swq(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- config_create = ConfigCreate(vnfd_helper, 2)
- config = configparser.ConfigParser()
- config.add_section('PIPELINE0')
- config.set('PIPELINE0', 'key1', 'value1')
- config.set('PIPELINE0', 'key2', 'value2 SINK')
- config.set('PIPELINE0', 'key3', 'TM value3')
- config.set('PIPELINE0', 'key4', 'value4')
- config.set('PIPELINE0', 'key5', 'the SINK value5')
-
- self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key1', 5), 'SWQ-1')
- self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key2', 5), 'SWQ-1 SINK0')
- self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key3', 5), 'SWQ-1 TM5')
- config_create.sw_q += 1
- self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key4', 5), 'SWQ0')
- self.assertEqual(config_create.get_sink_swq(config, 'PIPELINE0', 'key5', 5), 'SWQ0 SINK1')
-
- def test_generate_vpe_script(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- vpe_config_vnf = ConfigCreate(vnfd_helper, 2)
- intf = [
- {
- "name": 'xe1',
- "virtual-interface": {
- "dst_ip": "1.1.1.1",
- "dst_mac": "00:00:00:00:00:00:02",
- },
- },
- {
- "name": 'xe2',
- "virtual-interface": {
- "dst_ip": "1.1.1.1",
- "dst_mac": "00:00:00:00:00:00:02",
- },
- },
- ]
- vpe_config_vnf.downlink_ports = ['xe1']
- vpe_config_vnf.uplink_ports = ['xe2']
- result = vpe_config_vnf.generate_vpe_script(intf)
- self.assertIsInstance(result, str)
- self.assertNotEqual(result, '')
-
- def test_create_vpe_config(self):
- vnfd_helper = VnfdHelper(self.VNFD_0)
- config_create = ConfigCreate(vnfd_helper, 23)
- config_create.downlink_ports = ['xe1']
- config_create.uplink_ports = ['xe1']
- curr_path = os.path.dirname(os.path.abspath(__file__))
- vpe_cfg = "samples/vnf_samples/nsut/vpe/vpe_config"
- vnf_cfg = os.path.join(curr_path, "../../../../..", vpe_cfg)
- config_create.create_vpe_config(vnf_cfg)
- os.system("git checkout -- %s" % vnf_cfg)
-
-
-class TestVpeApproxVnf(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: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',
- 'vld_id': 'uplink_0',
- 'ifname': 'xe0',
- },
- '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',
- 'vld_id': 'downlink_0',
- 'ifname': 'xe1',
- },
- 'vnfd-connection-point-ref': 'xe1',
- 'name': 'xe1',
- },
- ],
- },
- ],
- 'description': 'Vpe approximation using DPDK',
- 'mgmt-interface': {
- 'vdu-id': 'vpevnf-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': 'VpeApproxVnf',
- 'name': 'VPEVnfSsh',
- }
-
- VNFD = {
- 'vnfd:vnfd-catalog': {
- 'vnfd': [
- VNFD_0,
- ],
- },
- }
-
- SCENARIO_CFG = {
- 'options': {
- 'packetsize': 64,
- 'traffic_type': 4,
- 'rfc2544': {
- 'allowed_drop_rate': '0.8 - 1',
- },
- 'vnf__1': {
- 'cfg': 'acl_1rule.yaml',
- 'vnf_config': {
- 'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config':
- '1C/1T',
- 'worker_threads': 1,
- },
- }
- },
- 'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
- 'tc': 'tc_ipv4_1Mflow_64B_packetsize',
- 'runner': {
- 'object': 'NetworkServiceTestCase',
- 'interval': 35,
- 'output_filename': '/tmp/yardstick.out',
- 'runner_id': 74476,
- 'duration': 400,
- 'type': 'Duration',
- },
- 'traffic_profile': 'ipv4_throughput_vpe.yaml',
- 'traffic_options': {
- 'flow': 'ipv4_Packets_vpe.yaml',
- 'imix': 'imix_voice.yaml',
- },
- 'type': 'ISB',
- 'nodes': {
- 'tg__2': 'trafficgen_2.yardstick',
- 'tg__1': 'trafficgen_1.yardstick',
- 'vnf__1': 'vnf.yardstick',
- },
- 'topology': 'vpe-tg-topology-baremetal.yaml',
- }
-
- CONTEXT_CFG = {
- 'nodes': {
- 'tg__2': {
- 'member-vnf-index': '3',
- 'role': 'TrafficGen',
- 'name': 'trafficgen_2.yardstick',
- 'vnfd-id-ref': 'tg__2',
- 'ip': '1.2.1.1',
- 'interfaces': {
- 'xe0': {
- 'local_iface_name': 'ens513f0',
- 'vld_id': VpeApproxVnf.DOWNLINK,
- 'netmask': '255.255.255.0',
- 'local_ip': '152.16.40.20',
- 'dst_mac': '00:00:00:00:00:01',
- 'local_mac': '00:00:00:00:00:03',
- 'dst_ip': '152.16.40.19',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.0',
- 'dpdk_port_num': 0,
- },
- 'xe1': {
- 'local_iface_name': 'ens513f1',
- 'netmask': '255.255.255.0',
- 'network': '202.16.100.0',
- 'local_ip': '202.16.100.20',
- 'local_mac': '00:1e:67:d0:60:5d',
- 'driver': 'ixgbe',
- 'vpci': '0000:02:00.1',
- 'dpdk_port_num': 1,
- },
- },
- 'password': 'r00t',
- 'VNF model': 'l3fwd_vnf.yaml',
- 'user': 'root',
- },
- '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': VpeApproxVnf.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': VpeApproxVnf.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': VpeApproxVnf.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': [
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.100.20',
- 'network': '152.16.100.20',
- 'if': 'xe0',
- },
- {
- 'netmask': '255.255.255.0',
- 'gateway': '152.16.40.20',
- 'network': '152.16.40.20',
- 'if': 'xe1',
- },
- ],
- 'member-vnf-index': '2',
- 'host': '1.2.1.1',
- 'role': 'vnf',
- 'user': 'root',
- 'nd_route_tbl': [
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
- 'network': '0064:ff9b:0:0:0:0:9810:6414',
- 'if': 'xe0',
- },
- {
- 'netmask': '112',
- 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
- 'network': '0064:ff9b:0:0:0:0:9810:2814',
- 'if': 'xe1',
- },
- ],
- 'password': 'r00t',
- 'VNF model': 'vpe_vnf.yaml',
- },
- },
- }
-
- 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):
- mock_ssh(ssh)
-
- resource = mock.Mock(autospec=ResourceProfile)
- resource.check_if_sa_running.return_value = 1, ''
- resource.amqp_collect_nfvi_kpi.return_value = {'foo': 234}
- resource.check_if_sa_running.return_value = (1, None)
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf.q_in = mock.MagicMock()
- vpe_approx_vnf.q_out = mock.MagicMock()
- vpe_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- vpe_approx_vnf.resource_helper.resource = resource
-
- expected = {
- 'pkt_in_down_stream': 0,
- 'pkt_in_up_stream': 0,
- 'pkt_drop_down_stream': 0,
- 'pkt_drop_up_stream': 0,
- 'collect_stats': {'core': {}},
- }
- self.assertEqual(vpe_approx_vnf.collect_kpi(), expected)
-
- @mock.patch(SSH_HELPER)
- 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.amqp_collect_nfvi_kpi.return_value = {'foo': 234}
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf.q_in = mock.MagicMock()
- vpe_approx_vnf.q_out = mock.MagicMock()
- vpe_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- vpe_approx_vnf.resource_helper.resource = resource
-
- expected = {
- 'pkt_in_down_stream': 0,
- 'pkt_in_up_stream': 0,
- 'pkt_drop_down_stream': 0,
- 'pkt_drop_up_stream': 0,
- 'collect_stats': {'core': {'foo': 234}},
- }
- self.assertEqual(vpe_approx_vnf.collect_kpi(), expected)
-
- @mock.patch(SSH_HELPER)
- def test_vnf_execute(self, ssh):
- mock_ssh(ssh)
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf.q_in = mock.MagicMock()
- vpe_approx_vnf.q_out = mock.MagicMock()
- vpe_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
- self.assertEqual(vpe_approx_vnf.vnf_execute("quit", 0), '')
-
- @mock.patch(SSH_HELPER)
- def test_run_vpe(self, ssh):
- mock_ssh(ssh)
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf.tc_file_name = get_file_abspath(TEST_FILE_YAML)
- vpe_approx_vnf.vnf_cfg = {
- 'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config': '1C/1T',
- 'worker_threads': 1,
- }
- vpe_approx_vnf.scenario_helper.scenario_cfg = {
- 'options': {
- NAME: {
- 'traffic_type': '4',
- 'topology': 'nsb_test_case.yaml',
- 'vnf_config': 'vpe_config',
- }
- }
- }
- vpe_approx_vnf.topology = "nsb_test_case.yaml"
- vpe_approx_vnf.nfvi_type = "baremetal"
- vpe_approx_vnf._provide_config_file = mock.Mock()
- vpe_approx_vnf._build_config = mock.MagicMock()
-
- self.assertIsInstance(vpe_approx_vnf.ssh_helper, mock.Mock)
- self.assertIsInstance(vpe_approx_vnf.ssh_helper, mock.Mock)
- self.assertIsNone(vpe_approx_vnf._run())
-
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.MultiPortConfig")
- @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
- @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, ssh, *args):
- mock_ssh(ssh)
- vpe_approx_vnf = VpeApproxSetupEnvHelper(mock.MagicMock(),
- mock.MagicMock, mock.MagicMock)
- vpe_approx_vnf.tc_file_name = get_file_abspath(TEST_FILE_YAML)
- vpe_approx_vnf.generate_port_pairs = mock.Mock()
- vpe_approx_vnf.vnf_cfg = {
- 'lb_config': 'SW',
- 'lb_count': 1,
- 'worker_config': '1C/1T',
- 'worker_threads': 1,
- }
- vpe_approx_vnf.scenario_helper.scenario_cfg = {
- 'options': {
- NAME: {
- 'traffic_type': '4',
- 'topology': 'nsb_test_case.yaml',
- 'vnf_config': 'vpe_config',
- }
- }
- }
- vpe_approx_vnf.topology = "nsb_test_case.yaml"
- vpe_approx_vnf.nfvi_type = "baremetal"
- vpe_approx_vnf._provide_config_file = mock.Mock()
-
- vpe_approx_vnf.ssh_helper = mock.MagicMock()
- vpe_approx_vnf.scenario_helper = mock.MagicMock()
- vpe_approx_vnf.ssh_helper.bin_path = mock.Mock()
- vpe_approx_vnf.ssh_helper.upload_config_file = mock.MagicMock()
- self.assertIsNone(vpe_approx_vnf._build_vnf_ports())
- self.assertIsNotNone(vpe_approx_vnf.build_config())
-
- @mock.patch(SSH_HELPER)
- def test_wait_for_instantiate(self, ssh):
- mock_ssh(ssh)
-
- mock_process = mock.Mock(autospec=Process)
- mock_process.is_alive.return_value = True
- mock_process.exitcode = 432
-
- mock_q_out = mock.Mock(autospec=Queue)
- mock_q_out.get.side_effect = iter(["pipeline>"])
- mock_q_out.qsize.side_effect = range(1, -1, -1)
-
- mock_resource = mock.MagicMock()
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf._vnf_process = mock_process
- vpe_approx_vnf.q_out = mock_q_out
- vpe_approx_vnf.queue_wrapper = mock.Mock(autospec=QueueFileWrapper)
- vpe_approx_vnf.resource_helper.resource = mock_resource
-
- vpe_approx_vnf.q_out.put("pipeline>")
- self.assertEqual(vpe_approx_vnf.wait_for_instantiate(), 432)
-
- @mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_fragmented(self, ssh):
- mock_ssh(ssh)
-
- mock_process = mock.Mock(autospec=Process)
- mock_process.is_alive.return_value = True
- mock_process.exitcode = 432
-
- # test that fragmented pipeline prompt is recognized
- mock_q_out = mock.Mock(autospec=Queue)
- mock_q_out.get.side_effect = iter(["wow pipel", "ine>"])
- mock_q_out.qsize.side_effect = range(2, -1, -1)
-
- mock_resource = mock.MagicMock()
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf._vnf_process = mock_process
- vpe_approx_vnf.q_out = mock_q_out
- vpe_approx_vnf.queue_wrapper = mock.Mock(autospec=QueueFileWrapper)
- vpe_approx_vnf.resource_helper.resource = mock_resource
-
- self.assertEqual(vpe_approx_vnf.wait_for_instantiate(), 432)
-
- @mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_crash(self, ssh):
- mock_ssh(ssh, exec_result=(1, "", ""))
-
- mock_process = mock.Mock(autospec=Process)
- mock_process.is_alive.return_value = False
- mock_process.exitcode = 432
-
- mock_resource = mock.MagicMock()
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf._vnf_process = mock_process
- vpe_approx_vnf.resource_helper.resource = mock_resource
-
- with self.assertRaises(RuntimeError) as raised:
- vpe_approx_vnf.wait_for_instantiate()
-
- self.assertIn('VNF process died', str(raised.exception))
-
- @mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_panic(self, ssh):
- mock_ssh(ssh, exec_result=(1, "", ""))
-
- mock_process = mock.Mock(autospec=Process)
- mock_process.is_alive.return_value = True
- mock_process.exitcode = 432
-
- mock_resource = mock.MagicMock()
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf._vnf_process = mock_process
- vpe_approx_vnf.resource_helper.resource = mock_resource
-
- vpe_approx_vnf.q_out.put("PANIC")
- with self.assertRaises(RuntimeError) as raised:
- vpe_approx_vnf.wait_for_instantiate()
-
- self.assertIn('Error starting', str(raised.exception))
-
- @mock.patch(SSH_HELPER)
- def test_wait_for_instantiate_panic_fragmented(self, ssh):
- mock_ssh(ssh, exec_result=(1, "", ""))
-
- mock_process = mock.Mock(autospec=Process)
- mock_process.is_alive.return_value = True
- mock_process.exitcode = 432
-
- # test that fragmented PANIC is recognized
- mock_q_out = mock.Mock(autospec=Queue)
- mock_q_out.get.side_effect = iter(["omg PA", "NIC this is bad"])
- mock_q_out.qsize.side_effect = range(2, -1, -1)
-
- mock_resource = mock.MagicMock()
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf._vnf_process = mock_process
- vpe_approx_vnf.q_out = mock_q_out
- vpe_approx_vnf.resource_helper.resource = mock_resource
-
- with self.assertRaises(RuntimeError) as raised:
- vpe_approx_vnf.wait_for_instantiate()
-
- self.assertIn('Error starting', str(raised.exception))
-
- @mock.patch(SSH_HELPER)
- def test_terminate(self, ssh):
- mock_ssh(ssh)
-
- vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
- vpe_approx_vnf._vnf_process = mock.MagicMock()
- vpe_approx_vnf._resource_collect_stop = mock.Mock()
- vpe_approx_vnf.resource_helper = mock.MagicMock()
-
- self.assertIsNone(vpe_approx_vnf.terminate())
diff --git a/tests/unit/orchestrator/__init__.py b/tests/unit/orchestrator/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/orchestrator/__init__.py
+++ /dev/null
diff --git a/tests/unit/orchestrator/test_heat.py b/tests/unit/orchestrator/test_heat.py
deleted file mode 100644
index c34ea53fc..000000000
--- a/tests/unit/orchestrator/test_heat.py
+++ /dev/null
@@ -1,339 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2017 Intel Corporation
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.orchestrator.heat
-from contextlib import contextmanager
-from itertools import count
-from tempfile import NamedTemporaryFile
-import unittest
-import uuid
-import time
-import mock
-
-from yardstick.benchmark.contexts import node
-from yardstick.orchestrator import heat
-
-
-TARGET_MODULE = 'yardstick.orchestrator.heat'
-
-
-def mock_patch_target_module(inner_import):
- return mock.patch('.'.join([TARGET_MODULE, inner_import]))
-
-
-@contextmanager
-def timer():
- start = time.time()
- data = {'start': start}
- try:
- yield data
- finally:
- data['end'] = end = time.time()
- data['delta'] = end - start
-
-
-def index_value_iter(index, index_value, base_value=None):
- for current_index in count():
- if current_index == index:
- yield index_value
- else:
- yield base_value
-
-
-def get_error_message(error):
- try:
- # py2
- return error.message
- except AttributeError:
- # py3
- return next((arg for arg in error.args if isinstance(arg, str)), None)
-
-
-class HeatContextTestCase(unittest.TestCase):
-
- def test_get_short_key_uuid(self):
- u = uuid.uuid4()
- k = heat.get_short_key_uuid(u)
- self.assertEqual(heat.HEAT_KEY_UUID_LENGTH, len(k))
- self.assertIn(k, str(u))
-
-class HeatTemplateTestCase(unittest.TestCase):
-
- def setUp(self):
- self.template = heat.HeatTemplate('test')
-
- def test_add_tenant_network(self):
- self.template.add_network('some-network')
-
- self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::Net')
-
- def test_add_provider_network(self):
- self.template.add_network('some-network', 'physnet2', 'sriov')
-
- self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::ProviderNet')
- self.assertEqual(self.template.resources['some-network']['properties']['physical_network'], 'physnet2')
-
- def test_add_subnet(self):
- netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
- self.template.add_subnet('some-subnet', "some-network", netattrs['cidr'])
-
- self.assertEqual(self.template.resources['some-subnet']['type'], 'OS::Neutron::Subnet')
- self.assertEqual(self.template.resources['some-subnet']['properties']['cidr'], '10.0.0.0/24')
-
- def test_add_router(self):
- self.template.add_router('some-router', 'ext-net', 'some-subnet')
-
- self.assertEqual(self.template.resources['some-router']['type'], 'OS::Neutron::Router')
- self.assertIn('some-subnet', self.template.resources['some-router']['depends_on'])
-
- def test_add_router_interface(self):
- self.template.add_router_interface('some-router-if', 'some-router', 'some-subnet')
-
- self.assertEqual(self.template.resources['some-router-if']['type'], 'OS::Neutron::RouterInterface')
- self.assertIn('some-subnet', self.template.resources['some-router-if']['depends_on'])
-
- def test_add_servergroup(self):
- self.template.add_servergroup('some-server-group', 'anti-affinity')
-
- self.assertEqual(self.template.resources['some-server-group']['type'], 'OS::Nova::ServerGroup')
- self.assertEqual(self.template.resources['some-server-group']['properties']['policies'], ['anti-affinity'])
-
- def test__add_resources_to_template_raw(self):
- test_context = node.NodeContext()
- test_context.name = 'foo'
- test_context.template_file = '/tmp/some-heat-file'
- test_context.heat_parameters = {'image': 'cirros'}
- test_context.key_filename = "/tmp/1234"
- test_context.keypair_name = "foo-key"
- test_context.secgroup_name = "foo-secgroup"
- test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
- heat_object = heat.HeatObject()
-
- heat_stack = heat.HeatStack("tmpStack")
- self.assertTrue(heat_stack.stacks_exist())
-
- test_context.tmpfile = NamedTemporaryFile(delete=True, mode='w+t')
- test_context.tmpfile.write("heat_template_version: 2015-04-30")
- test_context.tmpfile.flush()
- test_context.tmpfile.seek(0)
- heat_template = heat.HeatTemplate(heat_object)
- heat_template.resources = {}
-
- heat_template.add_network("network1")
- heat_template.add_network("network2")
- heat_template.add_security_group("sec_group1")
- heat_template.add_security_group("sec_group2")
- heat_template.add_subnet("subnet1", "network1", "cidr1")
- heat_template.add_subnet("subnet2", "network2", "cidr2")
- heat_template.add_router("router1", "gw1", "subnet1")
- heat_template.add_router_interface("router_if1", "router1", "subnet1")
- heat_template.add_port("port1", "network1", "subnet1", "normal")
- heat_template.add_port("port2", "network2", "subnet2", "normal", sec_group_id="sec_group1",provider="not-sriov")
- heat_template.add_port("port3", "network2", "subnet2", "normal", sec_group_id="sec_group1",provider="sriov")
- heat_template.add_floating_ip("floating_ip1", "network1", "port1", "router_if1")
- heat_template.add_floating_ip("floating_ip2", "network2", "port2", "router_if2", "foo-secgroup")
- heat_template.add_floating_ip_association("floating_ip1_association", "floating_ip1", "port1")
- heat_template.add_servergroup("server_grp2", "affinity")
- heat_template.add_servergroup("server_grp3", "anti-affinity")
- heat_template.add_security_group("security_group")
- heat_template.add_server(name="server1", image="image1", flavor="flavor1", flavors=[])
- heat_template.add_server_group(name="servergroup", policies=["policy1","policy2"])
- heat_template.add_server_group(name="servergroup", policies="policy1")
- heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=[], ports=["port1", "port2"],
- networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
- key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
- additional_properties={"prop1": 1, "prop2": 2})
- heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor1", "flavor2"],
- ports=["port1", "port2"],
- networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
- key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
- additional_properties={"prop1": 1, "prop2": 2} )
- heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor3", "flavor4"],
- ports=["port1", "port2"],
- networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
- key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
- additional_properties={"prop1": 1, "prop2": 2})
- heat_template.add_flavor(name="flavor1", vcpus=1, ram=2048, disk=1,extra_specs={"cat": 1, "dog": 2})
- heat_template.add_flavor(name=None, vcpus=1, ram=2048)
- heat_template.add_server(name="server1",
- image="image1",
- flavor="flavor1",
- flavors=[],
- ports=["port1", "port2"],
- networks=["network1", "network2"],
- scheduler_hints="hints1",
- user="user1",
- key_name="foo-key",
- user_data="user",
- metadata={"cat": 1, "doc": 2},
- additional_properties= {"prop1": 1, "prop2": 2} )
- heat_template.add_network("network1")
-
- heat_template.add_flavor("test")
- self.assertEqual(heat_template.resources['test']['type'], 'OS::Nova::Flavor')
-
- @mock_patch_target_module('op_utils')
- @mock_patch_target_module('heatclient')
- def test_create_negative(self, mock_heat_client_class, mock_op_utils):
- self.template.HEAT_WAIT_LOOP_INTERVAL = 0
- mock_heat_client = mock_heat_client_class() # get the constructed mock
-
- # populate attributes of the constructed mock
- mock_heat_client.stacks.get().stack_status_reason = 'the reason'
-
- expected_status_calls = 0
- expected_constructor_calls = 1 # above, to get the instance
- expected_create_calls = 0
- expected_op_utils_usage = 0
-
- with mock.patch.object(self.template, 'status', return_value=None) as mock_status:
- # block with timeout hit
- timeout = 0
- with self.assertRaises(RuntimeError) as raised, timer() as time_data:
- self.template.create(block=True, timeout=timeout)
-
- # ensure op_utils was used
- expected_op_utils_usage += 1
- self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
-
- # ensure the constructor and instance were used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure that the status was used
- self.assertGreater(mock_status.call_count, expected_status_calls)
- expected_status_calls = mock_status.call_count # synchronize the value
-
- # ensure the expected exception was raised
- error_message = get_error_message(raised.exception)
- self.assertIn('timeout', error_message)
- self.assertNotIn('the reason', error_message)
-
- # block with create failed
- timeout = 10
- mock_status.side_effect = iter([None, None, u'CREATE_FAILED'])
- with self.assertRaises(RuntimeError) as raised, timer() as time_data:
- self.template.create(block=True, timeout=timeout)
-
- # ensure the existing heat_client was used and op_utils was used again
- self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
-
- # ensure the constructor was not used but the instance was used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure that the status was used three times
- expected_status_calls += 3
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
- @mock_patch_target_module('op_utils')
- @mock_patch_target_module('heatclient')
- def test_create(self, mock_heat_client_class, mock_op_utils):
- self.template.HEAT_WAIT_LOOP_INTERVAL = 0.2
- mock_heat_client = mock_heat_client_class()
-
- # populate attributes of the constructed mock
- mock_heat_client.stacks.get().outputs = [
- {'output_key': 'key1', 'output_value': 'value1'},
- {'output_key': 'key2', 'output_value': 'value2'},
- {'output_key': 'key3', 'output_value': 'value3'},
- ]
- expected_outputs = {
- 'key1': 'value1',
- 'key2': 'value2',
- 'key3': 'value3',
- }
-
- expected_status_calls = 0
- expected_constructor_calls = 1 # above, to get the instance
- expected_create_calls = 0
- expected_op_utils_usage = 0
-
- with mock.patch.object(self.template, 'status') as mock_status:
- self.template.name = 'no block test'
- mock_status.return_value = None
-
- # no block
- self.assertIsInstance(self.template.create(block=False, timeout=2), heat.HeatStack)
-
- # ensure op_utils was used
- expected_op_utils_usage += 1
- self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
- self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
-
- # ensure the constructor and instance were used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure that the status was not used
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
- # ensure no outputs because this requires blocking
- self.assertEqual(self.template.outputs, {})
-
- # block with immediate complete
- self.template.name = 'block, immediate complete test'
-
- mock_status.return_value = self.template.HEAT_CREATE_COMPLETE_STATUS
- self.assertIsInstance(self.template.create(block=True, timeout=2), heat.HeatStack)
-
- # ensure existing instance was re-used and op_utils was not used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure status was checked once
- expected_status_calls += 1
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
- # reset template outputs
- self.template.outputs = None
-
- # block with delayed complete
- self.template.name = 'block, delayed complete test'
-
- success_index = 2
- mock_status.side_effect = index_value_iter(success_index,
- self.template.HEAT_CREATE_COMPLETE_STATUS)
- self.assertIsInstance(self.template.create(block=True, timeout=2), heat.HeatStack)
-
- # ensure existing instance was re-used and op_utils was not used
- self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
- self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
-
- # ensure status was checked three more times
- expected_status_calls += 1 + success_index
- self.assertEqual(mock_status.call_count, expected_status_calls)
-
-
-class HeatStackTestCase(unittest.TestCase):
-
- def test_delete_calls__delete_multiple_times(self):
- stack = heat.HeatStack('test')
- stack.uuid = 1
- with mock.patch.object(stack, "_delete") as delete_mock:
- stack.delete()
- # call once and then call again if uuid is not none
- self.assertGreater(delete_mock.call_count, 1)
-
- @mock.patch('yardstick.orchestrator.heat.op_utils')
- def test_delete_all_calls_delete(self, mock_op):
- # we must patch the object before we create an instance
- # so we can override delete() in all the instances
- with mock.patch.object(heat.HeatStack, "delete") as delete_mock:
- stack = heat.HeatStack('test')
- stack.uuid = 1
- stack.delete_all()
- self.assertGreater(delete_mock.call_count, 0)
diff --git a/tests/unit/orchestrator/test_kubernetes.py b/tests/unit/orchestrator/test_kubernetes.py
deleted file mode 100644
index 1a3291c89..000000000
--- a/tests/unit/orchestrator/test_kubernetes.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2017 Intel Corporation
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.orchestrator.heat
-import unittest
-import mock
-
-from yardstick.orchestrator.kubernetes import KubernetesObject
-from yardstick.orchestrator.kubernetes import KubernetesTemplate
-
-
-class GetTemplateTestCase(unittest.TestCase):
-
- def test_get_template(self):
- output_t = {
- "apiVersion": "v1",
- "kind": "ReplicationController",
- "metadata": {
- "name": "host-k8s-86096c30"
- },
- "spec": {
- "replicas": 1,
- "template": {
- "metadata": {
- "labels": {
- "app": "host-k8s-86096c30"
- }
- },
- "spec": {
- "containers": [
- {
- "args": [
- "-c",
- "chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done"
- ],
- "command": [
- "/bin/bash"
- ],
- "image": "openretriever/yardstick",
- "name": "host-k8s-86096c30-container",
- "volumeMounts": [
- {
- "mountPath": "/root/.ssh/",
- "name": "k8s-86096c30-key"
- }
- ]
- }
- ],
- "volumes": [
- {
- "configMap": {
- "name": "k8s-86096c30-key"
- },
- "name": "k8s-86096c30-key"
- }
- ],
- "nodeSelector": {
- "kubernetes.io/hostname": "node-01"
- }
- }
- }
- }
- }
- input_s = {
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done'],
- 'ssh_key': 'k8s-86096c30-key',
- 'nodeSelector': { 'kubernetes.io/hostname': 'node-01'}
- }
- name = 'host-k8s-86096c30'
- output_r = KubernetesObject(name, **input_s).get_template()
- self.assertEqual(output_r, output_t)
-
-
-class GetRcPodsTestCase(unittest.TestCase):
-
- @mock.patch('yardstick.orchestrator.kubernetes.k8s_utils.get_pod_list')
- def test_get_rc_pods(self, mock_get_pod_list):
- servers = {
- 'host': {
- 'image': 'openretriever/yardstick',
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done']
- },
- 'target': {
- 'image': 'openretriever/yardstick',
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done']
- }
- }
- k8s_template = KubernetesTemplate('k8s-86096c30', servers)
- mock_get_pod_list.return_value.items = []
- pods = k8s_template.get_rc_pods()
- self.assertEqual(pods, [])
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/test_ssh.py b/tests/unit/test_ssh.py
deleted file mode 100644
index 88699fd85..000000000
--- a/tests/unit/test_ssh.py
+++ /dev/null
@@ -1,572 +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)
-
- @mock.patch('yardstick.ssh.SCPClient')
- def test_get(self, mock_scp_client_type):
- auto_connect_ssh = AutoConnectSSH('user1', 'host1')
- auto_connect_ssh._client = mock.Mock()
-
- auto_connect_ssh.get('a', 'z')
- with mock_scp_client_type() as mock_scp_client:
- self.assertEqual(mock_scp_client.get.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()