diff options
Diffstat (limited to 'tests/unit')
208 files changed, 0 insertions, 30684 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/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 a8c54f193..000000000 --- a/tests/unit/benchmark/contexts/standalone/test_model.py +++ /dev/null @@ -1,435 +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 - vm_pci = '0001:05:04.2' - model.Libvirt.add_sriov_interfaces( - vm_pci, self.pci_address_str, self.mac, xml_input) - mock_parse.assert_called_once_with(xml_input) - self.mock_write_xml.assert_called_once_with(xml_input) - interface = xml.find('devices').find('interface') - self.assertEqual('yes', interface.get('managed')) - self.assertEqual('hostdev', interface.get('type')) - mac = interface.find('mac') - self.assertEqual(self.mac, mac.get('address')) - source = interface.find('source') - source_address = source.find('address') - self.assertIsNotNone(source.find('address')) - - self.assertEqual('pci', source_address.get('type')) - self.assertEqual('0x' + self.pci_address_str.split(':')[0], - source_address.get('domain')) - self.assertEqual('0x' + self.pci_address_str.split(':')[1], - source_address.get('bus')) - self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[0], - source_address.get('slot')) - self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[1], - source_address.get('function')) - - interface_address = interface.find('address') - self.assertEqual('pci', interface_address.get('type')) - self.assertEqual('0x' + vm_pci.split(':')[0], - interface_address.get('domain')) - self.assertEqual('0x' + vm_pci.split(':')[1], - interface_address.get('bus')) - self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[0], - interface_address.get('slot')) - self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[1], - interface_address.get('function')) - - def test_create_snapshot_qemu(self): - result = "/var/lib/libvirt/images/0.qcow2" - 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/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_cmd/__init__.py b/tests/unit/test_cmd/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/unit/test_cmd/__init__.py +++ /dev/null diff --git a/tests/unit/test_cmd/commands/__init__.py b/tests/unit/test_cmd/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/unit/test_cmd/commands/__init__.py +++ /dev/null diff --git a/tests/unit/test_cmd/commands/test_env.py b/tests/unit/test_cmd/commands/test_env.py deleted file mode 100644 index 13c3ed44a..000000000 --- a/tests/unit/test_cmd/commands/test_env.py +++ /dev/null @@ -1,73 +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): - # pylint: disable=unused-argument - # NOTE(ralonsoh): the pylint exception must be removed. The mocked - # command call must be tested. - task_id = str(uuid.uuid4()) - get_mock.return_value = {'status': 2, 'result': 'error'} - status = EnvCommand()._check_status(task_id, 'hello world') - self.assertEqual(status, 2) - - def test_print_status(self): - try: - EnvCommand()._print_status('hello', 'word') - except Exception as e: # pylint: disable=broad-except - # NOTE(ralonsoh): try to reduce the scope of this exception. - self.assertIsInstance(e, IndexError) - - -def main(): - unittest.main() - - -if __name__ == '__main__': - main() diff --git a/tests/unit/test_cmd/commands/test_testcase.py b/tests/unit/test_cmd/commands/test_testcase.py deleted file mode 100644 index 7ef157c19..000000000 --- a/tests/unit/test_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/test_cmd/test_NSBperf.py b/tests/unit/test_cmd/test_NSBperf.py deleted file mode 100644 index 19eb0afa0..000000000 --- a/tests/unit/test_cmd/test_NSBperf.py +++ /dev/null @@ -1,120 +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, *args): - 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) |