diff options
Diffstat (limited to 'tests/unit/benchmark')
31 files changed, 1656 insertions, 1835 deletions
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml new file mode 100644 index 000000000..2e501a6af --- /dev/null +++ b/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml @@ -0,0 +1,37 @@ +############################################################################## +# 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 new file mode 100644 index 000000000..0f51dbe63 --- /dev/null +++ b/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml @@ -0,0 +1,40 @@ +############################################################################## +# 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 new file mode 100644 index 000000000..8d50c3aea --- /dev/null +++ b/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml @@ -0,0 +1,33 @@ +############################################################################## +# 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 new file mode 100644 index 000000000..1c43b8725 --- /dev/null +++ b/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml @@ -0,0 +1,40 @@ +############################################################################## +# 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/ovs_sample_password.yaml b/tests/unit/benchmark/contexts/standalone/ovs_sample_password.yaml deleted file mode 100644 index b1da1ea9f..000000000 --- a/tests/unit/benchmark/contexts/standalone/ovs_sample_password.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/standalone/ovs_sample_ssh_key.yaml b/tests/unit/benchmark/contexts/standalone/ovs_sample_ssh_key.yaml deleted file mode 100644 index 896ec33bb..000000000 --- a/tests/unit/benchmark/contexts/standalone/ovs_sample_ssh_key.yaml +++ /dev/null @@ -1,69 +0,0 @@ -############################################################################## -# 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 -############################################################################## ---- -# 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: trafficgen_1 - role: TrafficGen - ip: 10.10.10.10 - auth_type: ssh_key - user: root - ssh_port: 22 - key_filename: /root/.ssh/id_rsa - 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 - auth_type: ssh_key - user: root - ssh_port: 22 - key_filename: /root/.ssh/id_rsa - 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/standalone/ovs_sample_write_to_file.txt b/tests/unit/benchmark/contexts/standalone/ovs_sample_write_to_file.txt deleted file mode 100644 index f0eec86f6..000000000 --- a/tests/unit/benchmark/contexts/standalone/ovs_sample_write_to_file.txt +++ /dev/null @@ -1 +0,0 @@ -some content
\ No newline at end of file diff --git a/tests/unit/benchmark/contexts/standalone/sriov_sample_password.yaml b/tests/unit/benchmark/contexts/standalone/sriov_sample_password.yaml deleted file mode 100644 index 4f60e46d5..000000000 --- a/tests/unit/benchmark/contexts/standalone/sriov_sample_password.yaml +++ /dev/null @@ -1,52 +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.10.10.10 - auth_type: password - user: root - 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: "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: sriov - role: Sriov - ip: 10.10.10.11 - auth_type: password - user: root - password: password - vf_macs: - - "00:00:00:71:7d:25" - - "00:00:00:71:7d:26" - 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/standalone/sriov_sample_ssh_key.yaml b/tests/unit/benchmark/contexts/standalone/sriov_sample_ssh_key.yaml deleted file mode 100644 index faa496771..000000000 --- a/tests/unit/benchmark/contexts/standalone/sriov_sample_ssh_key.yaml +++ /dev/null @@ -1,54 +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.10.10.10 - auth_type: ssh_key - user: root - ssh_port: 22 - key_filename: /root/.ssh/id_rsa - 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: sriov - role: Sriov - ip: 10.10.10.11 - auth_type: ssh_key - user: root - ssh_port: 22 - key_filename: /root/.ssh/id_rsa - vf_macs: - - "00:00:00:71:7d:25" - - "00:00:00:71:7d:26" - 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/standalone/sriov_sample_write_to_file.txt b/tests/unit/benchmark/contexts/standalone/sriov_sample_write_to_file.txt deleted file mode 100644 index f0eec86f6..000000000 --- a/tests/unit/benchmark/contexts/standalone/sriov_sample_write_to_file.txt +++ /dev/null @@ -1 +0,0 @@ -some content
\ No newline at end of file diff --git a/tests/unit/benchmark/contexts/standalone/test_model.py b/tests/unit/benchmark/contexts/standalone/test_model.py new file mode 100644 index 000000000..6899a0af6 --- /dev/null +++ b/tests/unit/benchmark/contexts/standalone/test_model.py @@ -0,0 +1,325 @@ +#!/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 os +import unittest +import errno +import mock + +from yardstick.common import constants as consts +from yardstick.benchmark.contexts.standalone.model import Libvirt +from yardstick.benchmark.contexts.standalone.model import StandaloneContextHelper +from yardstick.benchmark.contexts.standalone import model +from yardstick.network_services.utils import PciAddress + + +class ModelLibvirtTestCase(unittest.TestCase): + + 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 + result = Libvirt.check_if_vm_exists_and_delete("vm_0", ssh_mock) + self.assertIsNone(result) + + 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 + result = Libvirt.virsh_create_vm(ssh_mock, "vm_0") + self.assertIsNone(result) + + 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 + result = Libvirt.virsh_destroy_vm("vm_0", ssh_mock) + self.assertIsNone(result) + + @mock.patch('yardstick.benchmark.contexts.standalone.model.ET') + def test_add_interface_address(self, mock_et): + pci_address = PciAddress.parse_address("0000:00:04.0", multi_line=True) + result = Libvirt.add_interface_address("<interface/>", pci_address) + self.assertIsNotNone(result) + + @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt.add_interface_address') + @mock.patch('yardstick.benchmark.contexts.standalone.model.ET') + def test_add_ovs_interfaces(self, mock_et, mock_add_interface_address): + pci_address = PciAddress.parse_address("0000:00:04.0", multi_line=True) + result = Libvirt.add_ovs_interface("/usr/local", 0, "0000:00:04.0", + "00:00:00:00:00:01", "xml") + self.assertIsNone(result) + + @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt.add_interface_address') + @mock.patch('yardstick.benchmark.contexts.standalone.model.ET') + def test_add_sriov_interfaces(self, mock_et, mock_add_interface_address): + pci_address = PciAddress.parse_address("0000:00:04.0", multi_line=True) + result = Libvirt.add_sriov_interfaces("0000:00:05.0", "0000:00:04.0", + "00:00:00:00:00:01", "xml") + self.assertIsNone(result) + + 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 = Libvirt.create_snapshot_qemu(ssh_mock, "0", "ubuntu.img") + self.assertEqual(image, result) + + @mock.patch("yardstick.benchmark.contexts.standalone.model.Libvirt.pin_vcpu_for_perf") + @mock.patch("yardstick.benchmark.contexts.standalone.model.Libvirt.create_snapshot_qemu") + @mock.patch('yardstick.benchmark.contexts.standalone.model.open') + @mock.patch('yardstick.benchmark.contexts.standalone.model.write_file') + def test_build_vm_xml(self, mock_open, mock_write_file, mock_create_snapshot_qemu, + mock_pin_vcpu_for_perf): + 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 = 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 + status = Libvirt.update_interrupts_hugepages_perf(ssh_mock) + self.assertIsNone(status) + + @mock.patch("yardstick.benchmark.contexts.standalone.model.CpuSysCores") + @mock.patch("yardstick.benchmark.contexts.standalone.model.Libvirt.update_interrupts_hugepages_perf") + def test_pin_vcpu_for_perf(self, mock_update_interrupts_hugepages_perf, mock_CpuSysCores): + with mock.patch("yardstick.ssh.SSH") as ssh: + ssh_mock = mock.Mock(autospec=ssh.SSH) + ssh_mock.execute = \ + mock.Mock(return_value=(0, "a", "")) + ssh.return_value = ssh_mock + status = Libvirt.pin_vcpu_for_perf(ssh_mock, "vm_0", 4) + self.assertIsNotNone(status) + +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 = 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 + status = StandaloneContextHelper.install_req_libs(ssh_mock) + self.assertIsNone(status) + + 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 + status = StandaloneContextHelper.get_kernel_module(ssh_mock, "05:00.0", None) + self.assertEqual(status, "i40e") + + @mock.patch('yardstick.benchmark.contexts.standalone.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" + status = StandaloneContextHelper.get_nic_details(ssh_mock, self.NETWORKS, "dpdk-devbind.py") + self.assertIsNotNone(status) + + 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 + status = StandaloneContextHelper.get_virtual_devices(ssh_mock, "0000:00:05.0") + self.assertIsNotNone(status) + + 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 = StandaloneContextHelper.get_mac_address() + self.assertIsNotNone(status) + + @mock.patch('yardstick.ssh.SSH') + def test_get_mgmt_ip(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=(1, "1.2.3.4 00:00:00:00:00:01", "")) + ssh.return_value = ssh_mock + status = StandaloneContextHelper.get_mgmt_ip(ssh_mock, "00:00:00:00:00:01", "1.1.1.1/24", {}) + self.assertIsNotNone(status) + + @mock.patch('yardstick.ssh.SSH') + def test_get_mgmt_ip_no(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=(1, "", "")) + ssh.return_value = ssh_mock + + model.WAIT_FOR_BOOT = 0 + status = 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, mock_ssh): + self.ovs_deploy.helper = mock.Mock() + self.assertIsNone(self.ovs_deploy.prerequisite()) + + @mock.patch('yardstick.benchmark.contexts.standalone.model.os') + def test_prerequisite(self, mock_ssh): + 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 new file mode 100644 index 000000000..5d1b0421c --- /dev/null +++ b/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py @@ -0,0 +1,377 @@ +# 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_ovsdpdk.py b/tests/unit/benchmark/contexts/standalone/test_ovsdpdk.py deleted file mode 100644 index 1d68384c9..000000000 --- a/tests/unit/benchmark/contexts/standalone/test_ovsdpdk.py +++ /dev/null @@ -1,327 +0,0 @@ -# Copyright (c) 2016-2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import os -import unittest - -import mock - -from yardstick.benchmark.contexts.standalone import ovsdpdk - -NIC_INPUT = { - 'interface': {}, - 'vports_mac': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} -DRIVER = "i40e" -NIC_DETAILS = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vports_mac': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} - -CORRECT_FILE_PATH = "/etc/yardstick/nodes/pod_ovs.yaml" -WRONG_FILE_PATH = "/etc/yardstick/wrong.yaml" -SAMPLE_FILE = "ovs_sample_write_to_file.txt" - -OVS = [{ - 'auth_type': 'ssh_key', - 'name': 'ovs', - 'ssh_port': 22, - 'ip': '10.10.10.11', - 'key_filename': '/root/.ssh/id_rsa', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'vpath': '/usr/local/', - 'role': 'Ovsdpdk', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - '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', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - -OVS_PASSWORD = [{ - 'auth_type': 'password', - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.10.10.11', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - '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', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - -#vfnic = "i40evf" -PCIS = ['0000:06:00.0', '0000:06:00.1'] - - -class OvsdpdkTestCase(unittest.TestCase): - - NODES_SAMPLE_SSH = "ovs_sample_ssh_key.yaml" - NODES_SAMPLE_PASSWORD = "ovs_sample_password.yaml" - - def setUp(self): - self.test_context = ovsdpdk.Ovsdpdk() - - def test_construct(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.ovs, []) - self.assertFalse(self.test_context.vm_deploy) - self.assertTrue(self.test_context.first_run) - self.assertEqual(self.test_context.user, "") - self.assertEqual(self.test_context.ssh_ip, "") - self.assertEqual(self.test_context.passwd, "") - self.assertEqual(self.test_context.ssh_port, "") - self.assertEqual(self.test_context.auth_type, "") - - def test_init(self): - self.test_context.parse_pod_and_get_data = mock.Mock() - self.test_context.file_path = CORRECT_FILE_PATH - self.test_context.init() - self.assertIsNone(self.test_context.init()) - - def test_successful_init_with_ssh(self): - CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_SSH) - self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH) - - def test_successful_init_with_password(self): - CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD) - self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH) - - def test_unsuccessful_init(self): - self.assertRaises( - IOError, - lambda: self.test_context.parse_pod_and_get_data(WRONG_FILE_PATH)) - - def test_ssh_connection(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.return_value = ssh_mock - - @mock.patch('yardstick.network_services.utils.provision_tool', return_value="b") - def test_ssh_connection(self, mock_prov): - with mock.patch("yardstick.ssh.SSH") as ssh: - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(1, "b", "")) - ssh.return_value = ssh_mock - mock_prov.provision_tool = mock.Mock() - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS_PASSWORD - self.assertIsNone(ovs_obj.ssh_remote_machine()) - - @mock.patch('yardstick.network_services.utils.provision_tool', return_value="b") - def test_ssh_connection_ssh_key(self, mock_prov): - with mock.patch("yardstick.ssh.SSH") as ssh: - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(1, "b", "")) - ssh.return_value = ssh_mock - mock_prov.provision_tool = mock.Mock() - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - ovs_obj.key_filename = '/root/.ssh/id_rsa' - self.assertIsNone(ovs_obj.ssh_remote_machine()) - - def test_get_nic_details(self): - with mock.patch("yardstick.ssh.SSH") as ssh: - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(0, "eth0 eth1", "")) - ssh.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.ovs = OVS - ovs_obj.connection = ssh_mock - self.assertIsNotNone(ovs_obj.get_nic_details()) - - 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=(0, {}, "")) - ssh.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.first_run = True - ovs_obj.connection = ssh_mock - self.assertIsNone(ovs_obj.install_req_libs()) - - 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, {}, "")) - ssh.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - self.assertIsNone(ovs_obj.setup_ovs({"eth0 eth1"})) - - 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, {}, "")) - ssh.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - self.assertIsNone(ovs_obj.start_ovs_serverswitch()) - - def test_setup_ovs_bridge(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.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - self.assertIsNone(ovs_obj.setup_ovs_bridge()) - - def test_add_oflows(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.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - self.assertIsNone(ovs_obj.add_oflows()) - - def test_setup_ovs_context_vm_already_present(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.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - mock_ovs = mock.Mock() - ssh_mock.put = mock.Mock() - ovs_obj.check_output = mock.Mock(return_value=(0, "vm1")) - with mock.patch("yardstick.benchmark.contexts.standalone.ovsdpdk.time"): - self.assertIsNone(ovs_obj.setup_ovs_context(PCIS, NIC_DETAILS, DRIVER)) - - @mock.patch( - 'yardstick.benchmark.contexts.standalone.ovsdpdk', - return_value="Domain vm1 created from /tmp/vm_ovs.xml") - def test_is_vm_created(self, NIC_INPUT): - 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.put = \ - mock.Mock(return_value=(0, {}, "")) - ssh.return_value = ssh_mock - mock_ovs = mock.Mock() - ret_create = mock.Mock() - pcis = NIC_DETAILS['pci'] - driver = NIC_DETAILS['phy_driver'] - self.assertIsNotNone( - mock_ovs.ovs_obj.setup_ovs_context( - pcis, - NIC_DETAILS, - driver)) - - def test_check_output(self): - with mock.patch("yardstick.ssh.SSH") as ssh: - cmd = "command" - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - self.assertIsNotNone(ovs_obj.check_output(cmd, None)) - - def test_split_cpu_list_available(self): - with mock.patch("itertools.chain") as iter1: - iter1 = mock.Mock() - print("{0}".format(iter1)) - ovs_obj = ovsdpdk.Ovsdpdk() - self.assertIsNotNone(ovs_obj.split_cpu_list('0,5')) - - def test_split_cpu_list_null(self): - with mock.patch("itertools.chain") as iter1: - iter1 = mock.Mock() - print("{0}".format(iter1)) - ovs_obj = ovsdpdk.Ovsdpdk() - self.assertEqual(ovs_obj.split_cpu_list([]), []) - - def test_destroy_vm_successful(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.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - ovs_obj.check_output = mock.Mock(return_value=(0, "vm1")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, "0 i40e")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, "0 i40e")) - self.assertIsNone(ovs_obj.destroy_vm()) - - def test_destroy_vm_unsuccessful(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.return_value = ssh_mock - ovs_obj = ovsdpdk.Ovsdpdk() - ovs_obj.connection = ssh_mock - ovs_obj.ovs = OVS - ovs_obj.check_output = mock.Mock(return_value=(1, {})) - self.assertIsNone(ovs_obj.destroy_vm()) - - def test_read_from_file(self): - CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD) - ovs_obj = ovsdpdk.Ovsdpdk() - self.assertIsNotNone(ovs_obj.read_from_file(CORRECT_FILE_PATH)) - - def test_write_to_file(self): - ovs_obj = ovsdpdk.Ovsdpdk() - self.assertIsNone(ovs_obj.write_to_file(SAMPLE_FILE, "some content")) - - 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 - -if __name__ == '__main__': - unittest.main() diff --git a/tests/unit/benchmark/contexts/standalone/test_sriov.py b/tests/unit/benchmark/contexts/standalone/test_sriov.py index ea72e1bab..50ae5fe13 100644 --- a/tests/unit/benchmark/contexts/standalone/test_sriov.py +++ b/tests/unit/benchmark/contexts/standalone/test_sriov.py @@ -12,412 +12,311 @@ # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import absolute_import +# Unittest for yardstick.benchmark.contexts.standalone.standalonesriov +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 sriov - -NIC_INPUT = { - 'interface': {}, - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} -DRIVER = "i40e" -NIC_DETAILS = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} - -CORRECT_FILE_PATH = "/etc/yardstick/nodes/pod_sriov.yaml" -WRONG_FILE_PATH = "/etc/yardstick/wrong.yaml" -SAMPLE_FILE = "sriov_sample_write_to_file.txt" - -SRIOV = [{ - 'auth_type': 'ssh_key', - 'name': 'sriov', - 'ssh_port': 22, - 'ip': '10.10.10.11', - 'key_filename': '/root/.ssh/id_rsa', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - -SRIOV_PASSWORD = [{ - 'auth_type': 'password', - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.10.10.11', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - -vfnic = "i40evf" -PCIS = ['0000:06:00.0', '0000:06:00.1'] - - -class SriovTestCase(unittest.TestCase): - - NODES_SAMPLE_SSH = "sriov_sample_ssh_key.yaml" - NODES_SAMPLE_PASSWORD = "sriov_sample_password.yaml" +from yardstick.network_services.utils import PciAddress + + +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.test_context = sriov.Sriov() - - def test_construct(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.sriov, []) - self.assertFalse(self.test_context.vm_deploy) - self.assertTrue(self.test_context.first_run) - self.assertEqual(self.test_context.user, "") - self.assertEqual(self.test_context.ssh_ip, "") - self.assertEqual(self.test_context.passwd, "") - self.assertEqual(self.test_context.ssh_port, "") - self.assertEqual(self.test_context.auth_type, "") + 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): + 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.test_context.parse_pod_and_get_data = mock.Mock() - self.test_context.file_path = CORRECT_FILE_PATH - self.test_context.init() - self.assertIsNone(self.test_context.init()) - - def test_successful_init_with_ssh(self): - CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_SSH) - self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH) - - def test_successful_init_with_password(self): - CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD) - self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH) - - def test_unsuccessful_init(self): - self.assertRaises( - IOError, - lambda: self.test_context.parse_pod_and_get_data(WRONG_FILE_PATH)) - - @mock.patch('yardstick.network_services.utils.provision_tool', return_value="a") - def test_ssh_connection(self, mock_prov): - 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 - mock_prov.provision_tool = mock.Mock() - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - sriov_obj.sriov = SRIOV_PASSWORD - self.assertIsNone(sriov_obj.ssh_remote_machine()) - - @mock.patch('yardstick.network_services.utils.provision_tool', return_value="a") - def test_ssh_connection_ssh_key(self, mock_prov): - 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 - mock_prov.provision_tool = mock.Mock() - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - sriov_obj.sriov = SRIOV - sriov_obj.key_filename = '/root/.ssh/id_rsa' - self.assertIsNone(sriov_obj.ssh_remote_machine()) - - def test_get_nic_details(self): - with mock.patch("yardstick.ssh.SSH") as ssh: - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(0, "eth0 eth1", "")) - ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.sriov = SRIOV - sriov_obj.connection = ssh_mock - self.assertIsNotNone(sriov_obj.get_nic_details()) + self.sriov.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}]) + self.assertIsNone(self.sriov.init(self.ATTRS)) - def test_install_req_libs(self): + @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, {}, "")) + mock.Mock(return_value=(0, "a", "")) ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.first_run = True - sriov_obj.connection = ssh_mock - self.assertIsNone(sriov_obj.install_req_libs()) - def test_configure_nics_for_sriov(self): - with mock.patch("yardstick.ssh.SSH") as ssh: - nic_details = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e', - 'vf_pci': [{}, {}]} - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock((DRIVER), return_value=(0, "0 driver", "")) - ssh.return_value = ssh_mock - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh.return_value = ssh_mock - for i in range(len(NIC_DETAILS['pci'])): - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - ssh_mock.execute = \ - mock.Mock(return_value=( - 0, - "{'0':'06:02:00','1':'06:06:00'}", - "")) - sriov_obj.get_vf_datas = mock.Mock(return_value={ - '0000:06:00.0': '0000:06:02.0'}) - nic_details['vf_pci'][i] = sriov_obj.get_vf_datas.return_value - vf_pci = [[], []] - vf_pci[i] = sriov_obj.get_vf_datas.return_value - with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"): - self.assertIsNotNone(sriov_obj.configure_nics_for_sriov(DRIVER, NIC_DETAILS)) - - def test_setup_sriov_context(self): - with mock.patch("yardstick.ssh.SSH") as ssh: - nic_details = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e', - 'vf_pci': [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}]} - vf = [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}] - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - sriov_obj.sriov = SRIOV - blacklist = "/etc/modprobe.d/blacklist.conf" - self.assertEqual(vfnic, "i40evf") - mock_sriov = mock.Mock() - mock_sriov.sriov_obj.read_from_file(blacklist) - sriov_obj.read_from_file = mock.Mock( - return_value="some random text") - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - sriov_obj.configure_nics_for_sriov = mock.Mock( - return_value=nic_details) - nic_details = sriov_obj.configure_nics_for_sriov.return_value - self.assertEqual(vf, nic_details['vf_pci']) - vf = [ - {'vf_pci': '06:02.00', 'mac': '00:00:00:00:00:0a'}, - {'vf_pci': '06:06.00', 'mac': '00:00:00:00:00:0b'}] - sriov_obj.add_sriov_interface = mock.Mock() - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh_mock.put = mock.Mock() - sriov_obj.check_output = mock.Mock(return_value=(1, {})) - with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"): - self.assertIsNone(sriov_obj.setup_sriov_context(PCIS, nic_details, DRIVER)) + self.sriov.vm_deploy = False + self.assertIsNone(self.sriov.deploy()) - def test_setup_sriov_context_vm_already_present(self): - with mock.patch("yardstick.ssh.SSH") as ssh: - nic_details = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e', - 'vf_pci': [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}]} - vf = [{'vf_pci': '06:02.00'}, {'vf_pci': '06:06.00'}] - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - sriov_obj.sriov = SRIOV - blacklist = "/etc/modprobe.d/blacklist.conf" - self.assertEqual(vfnic, "i40evf") - mock_sriov = mock.Mock() - mock_sriov.sriov_obj.read_from_file(blacklist) - sriov_obj.read_from_file = mock.Mock( - return_value="some random text") - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - sriov_obj.configure_nics_for_sriov = mock.Mock( - return_value=nic_details) - nic_details = sriov_obj.configure_nics_for_sriov.return_value - self.assertEqual(vf, nic_details['vf_pci']) - vf = [ - {'vf_pci': '06:02.00', 'mac': '00:00:00:00:00:0a'}, - {'vf_pci': '06:06.00', 'mac': '00:00:00:00:00:0b'}] - sriov_obj.add_sriov_interface = mock.Mock() - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh_mock.put = mock.Mock() - sriov_obj.check_output = mock.Mock(return_value=(0, "vm1")) - with mock.patch("yardstick.benchmark.contexts.standalone.sriov.time"): - self.assertIsNone(sriov_obj.setup_sriov_context(PCIS, nic_details, DRIVER)) - - @mock.patch( - 'yardstick.benchmark.contexts.standalone.sriov', - return_value="Domain vm1 created from /tmp/vm_sriov.xml") - def test_is_vm_created(self, NIC_INPUT): - with mock.patch("yardstick.ssh.SSH") as ssh: - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh.return_value = ssh_mock - mock_sriov = mock.Mock() - pcis = NIC_DETAILS['pci'] - driver = NIC_DETAILS['phy_driver'] - self.assertIsNotNone( - mock_sriov.sriov_obj.setup_sriov_context( - pcis, - NIC_DETAILS, - driver)) - - def test_add_sriov_interface(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.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - with mock.patch("xml.etree.ElementTree.parse") as parse: - with mock.patch("re.search") as re: - with mock.patch("xml.etree.ElementTree.SubElement") \ - as elem: - parse = mock.Mock(return_value="root") - re = mock.Mock() - elem = mock.Mock() - print("{0} {1} {2}".format(parse, re, elem)) - self.assertIsNone(sriov_obj.add_sriov_interface( - 0, - "0000:06:02.0", - "00:00:00:00:00:0a", - "/tmp/vm_sriov.xml")) - - def test_get_virtual_devices(self): + 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('yardstick.ssh.SSH') + @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt') + def test_undeploy(self, mock_libvirt, mock_ssh): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) + mock.Mock(return_value=(0, "a", "")) ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - pci_out = " \ - PCI_CLASS=20000 \ - PCI_ID=8086:154C \ - PCI_SUBSYS_ID=8086:0000 \ - PCI_SLOT_NAME=0000:06:02.0 \ - MODALIAS= \ - pci:v00008086d0000154Csv00008086sd00000000bc02sc00i00" - pci = "0000:06:00.0" - sriov_obj.check_output = mock.Mock(return_value=(0, pci_out)) - with mock.patch("re.search") as re: - re = mock.Mock(return_value="a") - print("{0}".format(re)) - self.assertIsNotNone(sriov_obj.get_virtual_devices(pci)) - - def test_get_vf_datas(self): + + self.sriov.vm_deploy = False + self.assertIsNone(self.sriov.undeploy()) + + self.sriov.vm_deploy = True + self.sriov.connection = ssh_mock + 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, {}, "")) + mock.Mock(return_value=(0, "a", "")) ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - sriov_obj.get_virtual_devices = mock.Mock( - return_value={'0000:06:00.0': '0000:06:02.0'}) - with mock.patch("re.search") as re: - re = mock.Mock() - print("{0}".format(re)) - self.assertIsNotNone(sriov_obj.get_vf_datas( - 'vf_pci', - {'0000:06:00.0': '0000:06:02.0'}, - "00:00:00:00:00:0a")) - - def test_check_output(self): + 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('yardstick.benchmark.contexts.standalone.sriov.Libvirt') + def test__enable_interfaces(self, mock_libvirt): with mock.patch("yardstick.ssh.SSH") as ssh: - cmd = "command" ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) + mock.Mock(return_value=(0, "a", "")) ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - self.assertIsNotNone(sriov_obj.check_output(cmd, None)) - - def test_split_cpu_list_available(self): - with mock.patch("itertools.chain") as iter1: - iter1 = mock.Mock() - print("{0}".format(iter1)) - sriov_obj = sriov.Sriov() - self.assertIsNotNone(sriov_obj.split_cpu_list('0,5')) - - def test_split_cpu_list_null(self): - with mock.patch("itertools.chain") as iter1: - iter1 = mock.Mock() - print("{0}".format(iter1)) - sriov_obj = sriov.Sriov() - self.assertEqual(sriov_obj.split_cpu_list([]), []) - - def test_destroy_vm_successful(self): + 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.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): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) + mock.Mock(return_value=(0, "a", "")) + ssh_mock.put = \ + mock.Mock(return_value=(0, "a", "")) ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - sriov_obj.sriov = SRIOV - sriov_obj.check_output = mock.Mock(return_value=(0, "vm1")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, {}, "")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, "0 i40e")) - ssh_mock.execute = \ - mock.Mock(return_value=(0, "0 i40e")) - self.assertIsNone(sriov_obj.destroy_vm()) - - def test_destroy_vm_unsuccessful(self): + 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, {}, "")) + mock.Mock(return_value=(0, "a", "")) + ssh_mock.put = \ + mock.Mock(return_value=(0, "a", "")) ssh.return_value = ssh_mock - sriov_obj = sriov.Sriov() - sriov_obj.connection = ssh_mock - sriov_obj.sriov = SRIOV - sriov_obj.check_output = mock.Mock(return_value=(1, {})) - self.assertIsNone(sriov_obj.destroy_vm()) - - def test_read_from_file(self): - CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD) - sriov_obj = sriov.Sriov() - self.assertIsNotNone(sriov_obj.read_from_file(CORRECT_FILE_PATH)) - - def test_write_to_file(self): - sriov_obj = sriov.Sriov() - self.assertIsNone(sriov_obj.write_to_file(SAMPLE_FILE, "some content")) - - 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 - -if __name__ == '__main__': - unittest.main() + 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/test_heat.py b/tests/unit/benchmark/contexts/test_heat.py index cc0c7bc8e..223d64060 100644 --- a/tests/unit/benchmark/contexts/test_heat.py +++ b/tests/unit/benchmark/contexts/test_heat.py @@ -13,7 +13,6 @@ from __future__ import absolute_import -import ipaddress import logging import os import unittest @@ -147,30 +146,6 @@ class HeatContextTestCase(unittest.TestCase): self.test_context.user = 'foo' @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate') - @mock.patch('yardstick.benchmark.contexts.heat.get_neutron_client') - def test_attrs_get(self, mock_neutron, 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' @@ -207,11 +182,17 @@ class HeatContextTestCase(unittest.TestCase): 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'}), - ('c', {'stack_name': 'd'}), + ('a', [{'stack_name': 'b', 'port': 'port_a'}]), + ('c', [{'stack_name': 'd', 'port': 'port_c'}, + {'stack_name': 'e', 'port': 'port_f'}]), ]) expected = { @@ -220,6 +201,7 @@ class HeatContextTestCase(unittest.TestCase): "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', @@ -230,8 +212,8 @@ class HeatContextTestCase(unittest.TestCase): } self.test_context.add_server_port(server) self.assertEqual(server.private_ip, '10.20.30.45') - self.assertEqual(len(server.interfaces), 2) - self.assertDictEqual(server.interfaces['a'], expected) + 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): @@ -246,19 +228,20 @@ class HeatContextTestCase(unittest.TestCase): mock_os.path.exists.return_value = True self.assertIsNone(self.test_context.undeploy()) - def test__get_server_found_dict(self): + @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 = 'key_file' + 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 = 'key_filename' + 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' @@ -283,11 +266,11 @@ class HeatContextTestCase(unittest.TestCase): } result = self.test_context._get_server(attr_name) self.assertEqual(result['user'], 'bot') - self.assertIsNotNone(result['key_filename']) self.assertEqual(result['ip'], '127.0.0.1') self.assertEqual(result['private_ip'], '10.0.0.1') - def test__get_server_found_dict_no_attrs(self): + @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. @@ -320,13 +303,13 @@ class HeatContextTestCase(unittest.TestCase): } result = self.test_context._get_server(attr_name) self.assertEqual(result['user'], 'bot') - self.assertIsNotNone(result['key_filename']) # 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) - def test__get_server_found_not_dict(self): + @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 @@ -358,12 +341,12 @@ class HeatContextTestCase(unittest.TestCase): attr_name = 'baz3' result = self.test_context._get_server(attr_name) self.assertEqual(result['user'], 'zab') - self.assertIsNotNone(result['key_filename']) 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) - def test__get_server_none_found_not_dict(self): + @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 @@ -396,7 +379,8 @@ class HeatContextTestCase(unittest.TestCase): result = self.test_context._get_server(attr_name) self.assertIsNone(result) - def test__get_server_not_found_dict(self): + @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 @@ -431,7 +415,8 @@ class HeatContextTestCase(unittest.TestCase): result = self.test_context._get_server(attr_name) self.assertIsNone(result) - def test__get_server_not_found_not_dict(self): + @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 @@ -472,7 +457,6 @@ class HeatContextTestCase(unittest.TestCase): network2 = mock.MagicMock() network2.name = 'net_2' - network2.vld_id = 'vld999' network2.segmentation_id = 'seg45' network2.network_type = 'type_b' network2.physical_network = 'virt' @@ -488,16 +472,15 @@ class HeatContextTestCase(unittest.TestCase): attr_name = {} self.assertIsNone(self.test_context._get_network(attr_name)) - attr_name = {'vld_id': 'vld777'} + 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 = {'vld_id': 'vld999'} + attr_name = {'segmentation_id': 'seg45'} expected = { "name": 'net_2', - "vld_id": 'vld999', "segmentation_id": 'seg45', "network_type": 'type_b', "physical_network": 'virt', @@ -508,7 +491,6 @@ class HeatContextTestCase(unittest.TestCase): attr_name = 'a' expected = { "name": 'net_1', - "vld_id": 'vld111', "segmentation_id": 'seg54', "network_type": 'type_a', "physical_network": 'phys', diff --git a/tests/unit/benchmark/contexts/test_kubernetes.py b/tests/unit/benchmark/contexts/test_kubernetes.py index b0ee792db..3a926f85c 100644 --- a/tests/unit/benchmark/contexts/test_kubernetes.py +++ b/tests/unit/benchmark/contexts/test_kubernetes.py @@ -47,13 +47,15 @@ class KubernetesTestCase(unittest.TestCase): # 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_ssh, + mock_delete_services): k8s_context = KubernetesContext() k8s_context.init(context_cfg) @@ -61,7 +63,9 @@ class KubernetesTestCase(unittest.TestCase): 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)) @@ -70,7 +74,8 @@ class KubernetesTestCase(unittest.TestCase): mock_set_ssh_key, mock_create_rcs, mock_get_rc_pods, - mock_wait_until_running): + mock_wait_until_running, + mock_create_services): k8s_context = KubernetesContext() k8s_context.init(context_cfg) @@ -78,12 +83,18 @@ class KubernetesTestCase(unittest.TestCase): 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): + 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) @@ -101,14 +112,39 @@ class KubernetesTestCase(unittest.TestCase): mock_read_pod_status.return_value = 'Running' k8s_context._wait_until_running() - @mock.patch('{}.k8s_utils.get_pod_list'.format(prefix)) - def test_get_server(self, mock_get_pod_list): + @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_pod_list.return_value.items = [] + 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.assertIsNone(server) + self.assertIsNotNone(server) @mock.patch('{}.KubernetesContext._create_rc'.format(prefix)) def test_create_rcs(self, mock_create_rc): @@ -138,6 +174,28 @@ class KubernetesTestCase(unittest.TestCase): 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() diff --git a/tests/unit/benchmark/contexts/test_model.py b/tests/unit/benchmark/contexts/test_model.py index 5444c2bc8..48ee01cf0 100644 --- a/tests/unit/benchmark/contexts/test_model.py +++ b/tests/unit/benchmark/contexts/test_model.py @@ -179,6 +179,7 @@ class NetworkTestCase(unittest.TestCase): test_network = model.Network('foo', self.mock_context, attrs) self.assertIsNone(test_network.gateway_ip) + class ServerTestCase(unittest.TestCase): def setUp(self): @@ -190,7 +191,6 @@ class ServerTestCase(unittest.TestCase): 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 @@ -227,8 +227,9 @@ class ServerTestCase(unittest.TestCase): @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'} + 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'] @@ -241,7 +242,8 @@ class ServerTestCase(unittest.TestCase): 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') + 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') @@ -277,7 +279,8 @@ class ServerTestCase(unittest.TestCase): user=self.mock_context.user, key_name=self.mock_context.keypair_name, user_data='', - scheduler_hints='hints') + scheduler_hints='hints', + availability_zone='zone') @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate') def test__add_instance_with_user_data(self, mock_template): @@ -299,7 +302,30 @@ class ServerTestCase(unittest.TestCase): user=self.mock_context.user, key_name=self.mock_context.keypair_name, user_data=user_data, - scheduler_hints='hints') + 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): @@ -339,7 +365,8 @@ class ServerTestCase(unittest.TestCase): user=self.mock_context.user, key_name=self.mock_context.keypair_name, user_data=user_data, - scheduler_hints='hints') + scheduler_hints='hints', + availability_zone=None) @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate') def test__add_instance_misc(self, mock_template): @@ -351,7 +378,7 @@ class ServerTestCase(unittest.TestCase): } test_server = model.Server('ServerFlavor-3', self.mock_context, attrs) - self.mock_context.flavors = ['flavor2'] + self.mock_context.flavors = ['flavor2'] self.mock_context.flavor = {'vcpus': 4} mock_network = mock.Mock() mock_network.name = 'some-network' @@ -361,7 +388,6 @@ class ServerTestCase(unittest.TestCase): test_server._add_instance(mock_template, 'ServerFlavor-3', [mock_network], 'hints') - mock_template.add_port( 'ServerFlavor-3-some-network-port', mock_network.stack_name, @@ -387,5 +413,5 @@ class ServerTestCase(unittest.TestCase): user=self.mock_context.user, key_name=self.mock_context.keypair_name, user_data=user_data, - scheduler_hints='hints') - + scheduler_hints='hints', + availability_zone=None) diff --git a/tests/unit/benchmark/contexts/test_standalone.py b/tests/unit/benchmark/contexts/test_standalone.py deleted file mode 100644 index b1402a1c9..000000000 --- a/tests/unit/benchmark/contexts/test_standalone.py +++ /dev/null @@ -1,682 +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 - -from __future__ import absolute_import - -import os -import unittest - -import mock - -from yardstick.benchmark.contexts import standalone -from yardstick.benchmark.contexts.standalone import ovsdpdk, sriov - -MOCKS = { - 'yardstick.benchmark.contexts': mock.MagicMock(), - 'yardstick.benchmark.contexts.standalone.sriov': mock.MagicMock(), - 'yardstick.benchmark.contexts.standalone.ovsdpdk': mock.MagicMock(), - 'yardstick.benchmark.contexts.standalone': mock.MagicMock(), -} - - -@mock.patch('yardstick.benchmark.contexts.standalone.ovsdpdk.time') -@mock.patch('yardstick.benchmark.contexts.standalone.time') -@mock.patch('yardstick.benchmark.contexts.standalone.sriov.time') -class StandaloneContextTestCase(unittest.TestCase): - NODES_SAMPLE = "nodes_sample_new.yaml" - NODES_SAMPLE_SRIOV = "nodes_sample_new_sriov.yaml" - NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample_new.yaml" - - NODES_SAMPLE_OVSDPDK = "nodes_sample_ovs.yaml" - NODES_SAMPLE_OVSDPDK_ROLE = "nodes_sample_ovsdpdk.yaml" - NODES_DUPLICATE_OVSDPDK = "nodes_duplicate_sample_ovs.yaml" - - def setUp(self): - self.test_context = standalone.StandaloneContext() - - def test_construct(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - self.assertIsNone(self.test_context.name) - self.assertIsNone(self.test_context.file_path) - self.assertEqual(self.test_context.nodes, []) - self.assertEqual(self.test_context.nfvi_node, []) - - def test_unsuccessful_init(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath("error_file") - } - self.assertRaises(IOError, self.test_context.init, attrs) - - def test_successful_init_sriov(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs_sriov = { - 'name': 'sriov', - 'file': self._get_file_abspath(self.NODES_SAMPLE) - } - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.get_nfvi_obj = mock.Mock() - self.test_context.init(attrs_sriov) - self.assertEqual(self.test_context.name, "sriov") - self.assertEqual(len(self.test_context.nodes), 2) - self.assertEqual(len(self.test_context.nfvi_node), 2) - self.assertEqual(self.test_context.nfvi_node[0]["name"], "sriov") - - def test_successful_init_ovs(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - attrs_ovs = { - 'name': 'ovs', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK) - } - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.get_nfvi_obj = mock.Mock() - self.test_context.init(attrs_ovs) - self.assertEqual(self.test_context.name, "ovs") - self.assertEqual(len(self.test_context.nodes), 2) - self.assertEqual(len(self.test_context.nfvi_node), 2) - self.assertEqual(self.test_context.nfvi_node[0]["name"], "ovs") - - def test__get_server_with_dic_attr_name_sriov(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs_sriov = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE) - } - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.init(attrs_sriov) - attr_name = {'name': 'foo.bar'} - result = self.test_context._get_server(attr_name) - self.assertEqual(result, None) - - def test__get_server_with_dic_attr_name_ovs(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs_ovs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK) - } - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.init(attrs_ovs) - attr_name = {'name': 'foo.bar'} - result = self.test_context._get_server(attr_name) - self.assertEqual(result, None) - - def test__get_server_not_found_sriov(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE) - } - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - 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_not_found_ovs(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK) - } - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - 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_duplicate_sriov(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE) - } - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.get_nfvi_obj = mock.Mock(return_value="sriov") - self.test_context.init(attrs) - attr_name = 'sriov.foo' - # self.test_context.name = "sriov" - self.assertRaises(ValueError, self.test_context._get_server, attr_name) - - def test__get_server_duplicate_ovs(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_DUPLICATE_OVSDPDK) - } - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - self.test_context.get_nfvi_obj = mock.Mock(return_value="OvsDpdk") - self.test_context.init(attrs) - - attr_name = 'ovs.foo' - self.assertRaises( - ValueError, - self.test_context._get_server, - attr_name) - - def test__get_server_found_sriov(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE_SRIOV) - } - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - self.test_context.get_nfvi_obj = mock.Mock(return_value="OvsDpdk") - self.test_context.init(attrs) - attr_name = 'sriov.foo' - result = self.test_context._get_server(attr_name) - self.assertEqual(result['ip'], '10.123.123.122') - self.assertEqual(result['name'], 'sriov.foo') - self.assertEqual(result['user'], 'root') - - def test__get_server_found_ovs(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK_ROLE) - } - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.get_nfvi_obj = mock.Mock(return_value="OvsDpdk") - self.test_context.init(attrs) - attr_name = 'ovs.foo' - result = self.test_context._get_server(attr_name) - self.assertEqual(result['ip'], '10.223.197.222') - self.assertEqual(result['name'], 'ovs.foo') - self.assertEqual(result['user'], 'root') - - def test__deploy_unsuccessful(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - self.test_context.vm_deploy = False - - def test__deploy_sriov_firsttime(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE) - } - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - MYSRIOV = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - self.test_context.vm_deploy = True - - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.nfvi_obj.sriov = MYSRIOV - self.test_context.nfvi_obj.ssh_remote_machine = mock.Mock() - self.test_context.nfvi_obj.first_run = True - self.test_context.nfvi_obj.install_req_libs() - self.test_context.nfvi_obj.get_nic_details = mock.Mock() - PORTS = ['0000:06:00.0', '0000:06:00.1'] - NIC_DETAILS = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} - DRIVER = 'i40e' - result = self.test_context.nfvi_obj.setup_sriov_context( - PORTS, - NIC_DETAILS, - DRIVER) - print("{0}".format(result)) - self.assertIsNone(self.test_context.deploy()) - - def test__deploy_sriov_notfirsttime(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE) - } - - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - MYSRIOV = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - self.test_context.vm_deploy = True - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.nfvi_obj.sriov = MYSRIOV - self.test_context.nfvi_obj.ssh_remote_machine = mock.Mock() - self.test_context.nfvi_obj.first_run = False - self.test_context.nfvi_obj.get_nic_details = mock.Mock() - PORTS = ['0000:06:00.0', '0000:06:00.1'] - NIC_DETAILS = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} - DRIVER = 'i40e' - result = self.test_context.nfvi_obj.setup_sriov_context( - PORTS, - NIC_DETAILS, - DRIVER) - print("{0}".format(result)) - self.assertIsNone(self.test_context.deploy()) - - def test__deploy_ovs_firsttime(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK) - } - - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - MYOVS = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - '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_ports': ['0000:06:00.0', '0000:06:00.1']}] - - self.test_context.vm_deploy = True - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.ovs = MYOVS - self.test_context.nfvi_obj.ssh_remote_machine = mock.Mock() - self.test_context.nfvi_obj.first_run = True - self.test_context.nfvi_obj.install_req_libs() - self.test_context.nfvi_obj.get_nic_details = mock.Mock() - PORTS = ['0000:06:00.0', '0000:06:00.1'] - NIC_DETAILS = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vports_mac': ['00:00:00:00:00:05', '00:00:00:00:00:06'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} - DRIVER = 'i40e' - - self.test_context.nfvi_obj.setup_ovs = mock.Mock() - self.test_context.nfvi_obj.start_ovs_serverswitch = mock.Mock() - self.test_context.nfvi_obj.setup_ovs_bridge = mock.Mock() - self.test_context.nfvi_obj.add_oflows = mock.Mock() - - result = self.test_context.nfvi_obj.setup_ovs_context( - PORTS, - NIC_DETAILS, - DRIVER) - print("{0}".format(result)) - self.assertIsNone(self.test_context.deploy()) - - def test__deploy_ovs_notfirsttime(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK) - } - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - MYOVS = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - '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_ports': ['0000:06:00.0', '0000:06:00.1']}] - - self.test_context.vm_deploy = True - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.ovs = MYOVS - self.test_context.nfvi_obj.ssh_remote_machine = mock.Mock() - self.test_context.nfvi_obj.first_run = False - self.test_context.nfvi_obj.get_nic_details = mock.Mock() - PORTS = ['0000:06:00.0', '0000:06:00.1'] - NIC_DETAILS = { - 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'}, - 'vports_mac': ['00:00:00:00:00:05', '00:00:00:00:00:06'], - 'pci': ['0000:06:00.0', '0000:06:00.1'], - 'phy_driver': 'i40e'} - DRIVER = 'i40e' - - self.test_context.nfvi_obj.setup_ovs(PORTS) - self.test_context.nfvi_obj.start_ovs_serverswitch() - self.test_context.nfvi_obj.setup_ovs_bridge() - self.test_context.nfvi_obj.add_oflows() - - result = self.test_context.nfvi_obj.setup_ovs_context( - PORTS, - NIC_DETAILS, - DRIVER) - print("{0}".format(result)) - self.assertIsNone(self.test_context.deploy()) - - def test_undeploy_sriov(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE) - } - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.nfvi_obj.destroy_vm = mock.Mock() - self.assertIsNone(self.test_context.undeploy()) - - def test_undeploy_ovs(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - attrs = { - 'name': 'foo', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK) - } - - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.nfvi_obj.destroy_vm = mock.Mock() - self.assertIsNone(self.test_context.undeploy()) - - def test_get_nfvi_obj_sriov(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - with mock.patch('yardstick.benchmark.contexts.standalone.sriov'): - attrs = { - 'name': 'sriov', - 'file': self._get_file_abspath(self.NODES_SAMPLE) - } - self.test_context.init(attrs) - self.test_context.nfvi_obj.file_path = self._get_file_abspath( - self.NODES_SAMPLE) - self.test_context.nfvi_node = [{ - 'name': 'sriov', - 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'], - 'ip': '10.223.197.140', - 'role': 'Sriov', - 'user': 'root', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'intel123', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.get_context_impl = mock.Mock( - return_value=sriov.Sriov) - self.assertIsNotNone(self.test_context.get_nfvi_obj()) - - def test_get_nfvi_obj_ovs(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - with mock.patch('yardstick.benchmark.contexts.standalone.ovsdpdk'): - attrs = { - 'name': 'ovs', - 'file': self._get_file_abspath(self.NODES_SAMPLE_OVSDPDK) - } - self.test_context.init(attrs) - self.test_context.nfvi_obj.file_path = self._get_file_abspath( - self.NODES_SAMPLE) - self.test_context.nfvi_node = [{ - 'name': 'ovs', - 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'], - 'ip': '10.223.197.140', - 'role': 'Ovsdpdk', - 'user': 'root', - 'vpath': '/usr/local/', - 'images': '/var/lib/libvirt/images/ubuntu1.img', - 'phy_driver': 'i40e', - 'password': 'password', - 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}] - self.test_context.get_nfvi_obj = mock.MagicMock() - self.test_context.init(attrs) - self.test_context.get_context_impl = mock.Mock( - return_value=ovsdpdk.Ovsdpdk) - self.assertIsNotNone(self.test_context.get_nfvi_obj()) - - def test_get_context_impl_correct_obj(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - with mock.patch.dict("sys.modules", MOCKS): - self.assertIsNotNone(self.test_context.get_context_impl('Sriov')) - - def test_get_context_impl_wrong_obj(self, mock_sriov_time, mock_standlalone_time, - mock_ovsdpdk_time): - with mock.patch.dict("sys.modules", MOCKS): - self.assertRaises( - ValueError, - lambda: self.test_context.get_context_impl('wrong_object')) - - 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_network(self, mock_sriov_time, mock_standlalone_time, mock_ovsdpdk_time): - 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 = None - self.assertIsNone(self.test_context._get_network(attr_name)) - - 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)) - - 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) - -if __name__ == '__main__': - unittest.main() - diff --git a/tests/unit/benchmark/core/test_task.py b/tests/unit/benchmark/core/test_task.py index 14027e43c..bed0bb6d8 100644 --- a/tests/unit/benchmark/core/test_task.py +++ b/tests/unit/benchmark/core/test_task.py @@ -66,31 +66,27 @@ class TaskTestCase(unittest.TestCase): nodes = { 'node1': { 'interfaces': { - 'eth0': { - 'name': 'mgmt', + 'mgmt': { + 'network_name': 'mgmt', }, - 'eth1': { - 'name': 'external', - 'vld_id': '23', + 'xe0': { + 'network_name': 'uplink_0', }, - 'eth10': { - 'name': 'internal', - 'vld_id': '55', + 'xe1': { + 'network_name': 'downlink_0', }, }, }, 'node2': { 'interfaces': { - 'eth4': { - 'name': 'mgmt', + 'mgmt': { + 'network_name': 'mgmt', }, - 'eth2': { - 'name': 'external', - 'vld_id': '32', + 'uplink_0': { + 'network_name': 'uplink_0', }, - 'eth11': { - 'name': 'internal', - 'vld_id': '55', + 'downlink_0': { + 'network_name': 'downlink_0', }, }, }, @@ -99,30 +95,30 @@ class TaskTestCase(unittest.TestCase): mock_context.get_network.side_effect = iter([ None, { - 'name': 'a', - 'network_type': 'private', + 'name': 'mgmt', + 'network_type': 'flat', }, {}, { - 'name': 'b', - 'vld_id': 'y', + 'name': 'uplink_0', 'subnet_cidr': '10.20.0.0/16', }, { - 'name': 'c', - 'vld_id': 'x', + 'name': 'downlink_0', + 'segmentation_id': '1001', }, { - 'name': 'd', - 'vld_id': 'w', + 'name': 'uplink_1', }, ]) - # once for each vld_id in the nodes dict - expected_get_network_calls = 4 + # one for each interface + expected_get_network_calls = 6 expected = { - 'a': {'name': 'a', 'network_type': 'private'}, - 'b': {'name': 'b', 'vld_id': 'y', 'subnet_cidr': '10.20.0.0/16'}, + '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) @@ -169,12 +165,12 @@ class TaskTestCase(unittest.TestCase): result = t._check_precondition(cfg) self.assertTrue(result) - @mock.patch('yardstick.benchmark.core.task.os.environ') - def test_parse_suite_no_constraint_no_args(self, mock_environ): + 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)) - mock_environ.get.side_effect = ['huawei-pod1', 'compass'] - task_files, task_args, task_args_fnames = t.parse_suite() + 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( @@ -190,8 +186,9 @@ class TaskTestCase(unittest.TestCase): 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)) - mock_environ.get.side_effect = ['huawei-pod1', 'compass'] - task_files, task_args, task_args_fnames = t.parse_suite() + 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( @@ -208,8 +205,9 @@ class TaskTestCase(unittest.TestCase): 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)) - mock_environ.get.side_effect = ['huawei-pod1', 'compass'] - task_files, task_args, task_args_fnames = t.parse_suite() + 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( @@ -225,8 +223,9 @@ class TaskTestCase(unittest.TestCase): 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)) - mock_environ.get.side_effect = ['huawei-pod1', 'compass'] - task_files, task_args, task_args_fnames = t.parse_suite() + 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( diff --git a/tests/unit/benchmark/runner/test_base.py b/tests/unit/benchmark/runner/test_base.py index 956762c40..f47b88e95 100644 --- a/tests/unit/benchmark/runner/test_base.py +++ b/tests/unit/benchmark/runner/test_base.py @@ -17,10 +17,31 @@ import time from mock import mock -from yardstick.benchmark.runners.base import Runner +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") @@ -41,8 +62,26 @@ class RunnerTestCase(unittest.TestCase): 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 = Runner(mock.Mock()) + runner = base.Runner(mock.Mock()) with self.assertRaises(NotImplementedError): runner._run_benchmark(mock.Mock(), mock.Mock(), mock.Mock(), mock.Mock()) diff --git a/tests/unit/benchmark/scenarios/availability/test_basemonitor.py b/tests/unit/benchmark/scenarios/availability/test_basemonitor.py index 3b7e07376..92ae8aa88 100644 --- a/tests/unit/benchmark/scenarios/availability/test_basemonitor.py +++ b/tests/unit/benchmark/scenarios/availability/test_basemonitor.py @@ -25,13 +25,32 @@ from yardstick.benchmark.scenarios.availability.monitor import basemonitor class MonitorMgrTestCase(unittest.TestCase): def setUp(self): - config = { - 'monitor_type': 'openstack-api', - 'key': 'service-status' - } - - self.monitor_configs = [] - self.monitor_configs.append(config) + 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}) @@ -44,7 +63,13 @@ class MonitorMgrTestCase(unittest.TestCase): def test_MonitorMgr_getitem(self, mock_monitor): monitorMgr = basemonitor.MonitorMgr({"nova-api": 10}) monitorMgr.init_monitors(self.monitor_configs, None) - monitorIns = monitorMgr['service-status'] + + 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): @@ -94,3 +119,7 @@ class BaseMonitorTestCase(unittest.TestCase): except Exception: pass self.assertIsNone(cls) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unit/benchmark/scenarios/availability/test_util.py b/tests/unit/benchmark/scenarios/availability/test_util.py index 2e4fff417..0974f385a 100644 --- a/tests/unit/benchmark/scenarios/availability/test_util.py +++ b/tests/unit/benchmark/scenarios/availability/test_util.py @@ -20,8 +20,8 @@ from yardstick.benchmark.scenarios.availability import util class ExecuteShellTestCase(unittest.TestCase): def setUp(self): - self.param_config = {'serviceName': '$serviceName', 'value': 1} - self.intermediate_variables = {'$serviceName': 'nova-api'} + 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'} diff --git a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py b/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py index 9514729ba..f163f1914 100644 --- a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py +++ b/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py @@ -16,7 +16,6 @@ from __future__ import absolute_import import unittest import mock -from oslo_serialization import jsonutils from yardstick.benchmark.scenarios.compute import qemu_migrate @@ -84,7 +83,7 @@ class QemuMigrateTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '') q.run(result) - expected_result = jsonutils.loads(sample_output) + expected_result = {} self.assertEqual(result, expected_result) def test_qemu_migrate_successful_sla(self, mock_ssh): @@ -104,7 +103,7 @@ class QemuMigrateTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '') q.run(result) - expected_result = jsonutils.loads(sample_output) + expected_result = {} self.assertEqual(result, expected_result) def test_qemu_migrate_unsuccessful_sla_totaltime(self, mock_ssh): @@ -118,7 +117,8 @@ class QemuMigrateTestCase(unittest.TestCase): 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) + with self.assertRaises(AssertionError): + q.run(result) def test_qemu_migrate_unsuccessful_sla_downtime(self, mock_ssh): @@ -131,7 +131,8 @@ class QemuMigrateTestCase(unittest.TestCase): 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) + with self.assertRaises(AssertionError): + q.run(result) def test_qemu_migrate_unsuccessful_sla_setuptime(self, mock_ssh): @@ -142,9 +143,10 @@ class QemuMigrateTestCase(unittest.TestCase): 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) + with self.assertRaises(AssertionError): + q.run(result) def test_qemu_migrate_unsuccessful_script_error(self, mock_ssh): @@ -154,10 +156,9 @@ class QemuMigrateTestCase(unittest.TestCase): 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) - + with self.assertRaises(RuntimeError): + q.run(result) def main(): unittest.main() diff --git a/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py b/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py new file mode 100644 index 000000000..1fb2f89ca --- /dev/null +++ b/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py @@ -0,0 +1,84 @@ +############################################################################## +# 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/networking/ipv4_throughput_vpe.yaml b/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml index cfa166a74..2123e4705 100644 --- a/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml +++ b/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml @@ -49,13 +49,13 @@ private: ipv4: outer_l2: framesize: - 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}" - 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}" - 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}" - 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}" - 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}" - 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}" - 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}" + 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: @@ -81,13 +81,13 @@ public: ipv4: outer_l2: framesize: - 64B: "{{ get(imix, 'imix.private.imix_small', '0') }}" - 128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}" - 256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}" - 373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}" - 570B: "{{get(imix, 'imix.private.imix_570B', '0') }}" - 1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}" - 1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}" + 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" diff --git a/tests/unit/benchmark/scenarios/networking/test_iperf3.py b/tests/unit/benchmark/scenarios/networking/test_iperf3.py index 331245357..4d3745230 100644 --- a/tests/unit/benchmark/scenarios/networking/test_iperf3.py +++ b/tests/unit/benchmark/scenarios/networking/test_iperf3.py @@ -123,7 +123,7 @@ class IperfTestCase(unittest.TestCase): self.assertRaises(AssertionError, p.run, result) def test_iperf_successful_sla_jitter(self, mock_ssh): - options = {"udp": "udp", "bandwidth": "20m"} + options = {"protocol": "udp", "bandwidth": "20m"} args = { 'options': options, 'sla': {'jitter': 10} @@ -141,7 +141,7 @@ class IperfTestCase(unittest.TestCase): self.assertEqual(result, expected_result) def test_iperf_unsuccessful_sla_jitter(self, mock_ssh): - options = {"udp": "udp", "bandwidth": "20m"} + options = {"protocol": "udp", "bandwidth": "20m"} args = { 'options': options, 'sla': {'jitter': 0.0001} @@ -156,6 +156,24 @@ class IperfTestCase(unittest.TestCase): 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 = {} diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen.py b/tests/unit/benchmark/scenarios/networking/test_pktgen.py index 0ca31d484..3928aacde 100644 --- a/tests/unit/benchmark/scenarios/networking/test_pktgen.py +++ b/tests/unit/benchmark/scenarios/networking/test_pktgen.py @@ -264,7 +264,7 @@ class PktgenTestCase(unittest.TestCase): p._get_available_queue_number() mock_ssh.SSH.from_node().execute.assert_called_with( - "sudo ethtool -l eth0 | grep Combined | head -1 |" \ + "sudo ethtool -l eth0 | grep Combined | head -1 |" "awk '{printf $2}'") def test_pktgen_unsuccessful_get_available_queue_number(self, mock_ssh): @@ -290,7 +290,7 @@ class PktgenTestCase(unittest.TestCase): p._get_usable_queue_number() mock_ssh.SSH.from_node().execute.assert_called_with( - "sudo ethtool -l eth0 | grep Combined | tail -1 |" \ + "sudo ethtool -l eth0 | grep Combined | tail -1 |" "awk '{printf $2}'") def test_pktgen_unsuccessful_get_usable_queue_number(self, mock_ssh): @@ -541,7 +541,7 @@ class PktgenTestCase(unittest.TestCase): p._is_irqbalance_disabled = mock_result1 mock_result2 = mock.Mock() - mock_result2.return_value = "virtio_net" + mock_result2.return_value = "virtio_net" p._get_vnic_driver_name = mock_result2 mock_result3 = mock.Mock() @@ -571,7 +571,7 @@ class PktgenTestCase(unittest.TestCase): p._is_irqbalance_disabled = mock_result1 mock_result2 = mock.Mock() - mock_result2.return_value = "virtio_net" + mock_result2.return_value = "virtio_net" p._get_vnic_driver_name = mock_result2 mock_result3 = mock.Mock() @@ -601,7 +601,7 @@ class PktgenTestCase(unittest.TestCase): p._is_irqbalance_disabled = mock_result1 mock_result2 = mock.Mock() - mock_result2.return_value = "ixgbevf" + mock_result2.return_value = "ixgbevf" p._get_vnic_driver_name = mock_result2 p.multiqueue_setup() @@ -623,7 +623,7 @@ class PktgenTestCase(unittest.TestCase): p._is_irqbalance_disabled = mock_result1 mock_result2 = mock.Mock() - mock_result2.return_value = "ixgbevf" + mock_result2.return_value = "ixgbevf" p._get_vnic_driver_name = mock_result2 p.multiqueue_setup() @@ -670,7 +670,7 @@ class PktgenTestCase(unittest.TestCase): p.client = mock_ssh.SSH.from_node() mock_result = mock.Mock() - mock_result.return_value = "virtio_net" + mock_result.return_value = "virtio_net" p._get_vnic_driver_name = mock_result mock_result1 = mock.Mock() diff --git a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py index 58244b8f5..016608a21 100644 --- a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py +++ b/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py @@ -24,6 +24,8 @@ 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, \ @@ -240,11 +242,11 @@ class TestNetworkServiceTestCase(unittest.TestCase): 'vnf__1': self.vnf__1, }, 'networks': { - 'private': { - 'vld_id': 'private', + GenericVNF.UPLINK: { + 'vld_id': GenericVNF.UPLINK, }, - 'public': { - 'vld_id': 'public', + GenericVNF.DOWNLINK: { + 'vld_id': GenericVNF.DOWNLINK, }, }, } @@ -263,7 +265,7 @@ class TestNetworkServiceTestCase(unittest.TestCase): } ], 'type': 'ELAN', - 'id': 'private', + 'id': GenericVNF.UPLINK, 'name': 'tg__1 to vnf__1 link 1' } @@ -281,7 +283,7 @@ class TestNetworkServiceTestCase(unittest.TestCase): } ], 'type': 'ELAN', - 'id': 'public', + 'id': GenericVNF.DOWNLINK, 'name': 'vnf__1 to tg__1 link 2' } @@ -359,12 +361,36 @@ class TestNetworkServiceTestCase(unittest.TestCase): 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") @@ -419,6 +445,13 @@ class TestNetworkServiceTestCase(unittest.TestCase): 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) @@ -542,6 +575,35 @@ class TestNetworkServiceTestCase(unittest.TestCase): 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") @@ -568,8 +630,8 @@ class TestNetworkServiceTestCase(unittest.TestCase): def test_teardown(self): vnf = mock.Mock(autospec=GenericVNF) - vnf.terminate = \ - mock.Mock(return_value=True) + 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) @@ -577,6 +639,18 @@ class TestNetworkServiceTestCase(unittest.TestCase): 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', @@ -653,12 +727,6 @@ class TestNetworkServiceTestCase(unittest.TestCase): res = NetworkServiceTestCase.parse_netdev_info(output) assert res == self.SAMPLE_VM_NETDEVS - def test_sort_dpdk_port_num(self): - netdevs = self.SAMPLE_NETDEVS.copy() - NetworkServiceTestCase._sort_dpdk_port_num(netdevs) - assert netdevs['lan']['dpdk_port_num'] == 0 - assert netdevs['enp11s0']['dpdk_port_num'] == 1 - def test_probe_missing_values(self): netdevs = self.SAMPLE_NETDEVS.copy() network = {'local_mac': '0a:de:ad:be:ef:f5'} diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py index de5bae2f3..5759f0a90 100644 --- a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py +++ b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py @@ -118,7 +118,8 @@ class VsperfDPDKTestCase(unittest.TestCase): result = p._is_dpdk_setup() self.assertEqual(result, True) - def test_vsperf_dpdk_dpdk_setup_first(self, mock_ssh, mock_subprocess): + @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 @@ -135,42 +136,43 @@ class VsperfDPDKTestCase(unittest.TestCase): self.assertEqual(p._is_dpdk_setup(), False) self.assertEqual(p.dpdk_setup_done, True) - def test_vsperf_dpdk_dpdk_setup_next(self, mock_ssh, mock_subprocess): + @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) - # dpdk_setup() specific mocks - mock_ssh.SSH.from_node().execute.return_value = (0, '', '') - p.dpdk_setup() self.assertEqual(p._is_dpdk_setup(), True) self.assertEqual(p.dpdk_setup_done, True) - def test_vsperf_dpdk_dpdk_setup_fail(self, mock_ssh, mock_subprocess): + @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) - self.assertEqual(p.setup_done, True) - - # dpdk_setup() specific mocks mock_ssh.SSH.from_node().execute.return_value = (1, '', '') + self.assertEqual(p.setup_done, True) self.assertRaises(RuntimeError, p.dpdk_setup) - def test_vsperf_dpdk_run_ok(self, mock_ssh, mock_subprocess): + @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() @@ -179,7 +181,6 @@ class VsperfDPDKTestCase(unittest.TestCase): # 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, 'throughput_rx_fps\r\n14797660.000\r\n', '') @@ -193,6 +194,7 @@ class VsperfDPDKTestCase(unittest.TestCase): 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() @@ -211,6 +213,7 @@ class VsperfDPDKTestCase(unittest.TestCase): 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() diff --git a/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml b/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml index 0de4b6e79..1ac6c1f89 100644 --- a/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml +++ b/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml @@ -27,7 +27,7 @@ nsd:nsd-catalog: VNF model: ../../vnf_descriptors/vpe_vnf.yaml #tg_l3fwd.yaml #tg_trex_tpl.yaml #TREX vld: - - id: private + - id: uplink name: tg__1 to vnf__1 link 1 type: ELAN vnfd-connection-point-ref: @@ -38,7 +38,7 @@ nsd:nsd-catalog: vnfd-connection-point-ref: xe0 vnfd-id-ref: vnf__1 #VNF - - id: public + - id: downlink name: vnf__1 to tg__1 link 2 type: ELAN vnfd-connection-point-ref: diff --git a/tests/unit/benchmark/scenarios/test_base.py b/tests/unit/benchmark/scenarios/test_base.py new file mode 100644 index 000000000..78e342978 --- /dev/null +++ b/tests/unit/benchmark/scenarios/test_base.py @@ -0,0 +1,53 @@ +# 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()) |