aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/benchmark
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/benchmark')
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml37
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml40
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_sample.yaml33
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml40
-rw-r--r--tests/unit/benchmark/contexts/standalone/ovs_sample_password.yaml104
-rw-r--r--tests/unit/benchmark/contexts/standalone/ovs_sample_ssh_key.yaml69
-rw-r--r--tests/unit/benchmark/contexts/standalone/ovs_sample_write_to_file.txt1
-rw-r--r--tests/unit/benchmark/contexts/standalone/sriov_sample_password.yaml52
-rw-r--r--tests/unit/benchmark/contexts/standalone/sriov_sample_ssh_key.yaml54
-rw-r--r--tests/unit/benchmark/contexts/standalone/sriov_sample_write_to_file.txt1
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_model.py325
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py377
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_ovsdpdk.py327
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_sriov.py643
-rw-r--r--tests/unit/benchmark/contexts/test_heat.py72
-rw-r--r--tests/unit/benchmark/contexts/test_kubernetes.py72
-rw-r--r--tests/unit/benchmark/contexts/test_model.py48
-rw-r--r--tests/unit/benchmark/contexts/test_standalone.py682
-rw-r--r--tests/unit/benchmark/core/test_task.py75
-rw-r--r--tests/unit/benchmark/runner/test_base.py43
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_basemonitor.py45
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_util.py4
-rw-r--r--tests/unit/benchmark/scenarios/compute/test_qemumigrate.py21
-rw-r--r--tests/unit/benchmark/scenarios/lib/test_check_connectivity.py84
-rw-r--r--tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml28
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_iperf3.py22
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_pktgen.py14
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vnf_generic.py96
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py25
-rw-r--r--tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml4
-rw-r--r--tests/unit/benchmark/scenarios/test_base.py53
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())