summaryrefslogtreecommitdiffstats
path: root/tests/unit/benchmark/contexts
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/benchmark/contexts')
-rw-r--r--tests/unit/benchmark/contexts/__init__.py0
-rw-r--r--tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml21
-rw-r--r--tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml32
-rw-r--r--tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml63
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample.yaml33
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_new.yaml96
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml82
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_ovs.yaml104
-rw-r--r--tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml104
-rw-r--r--tests/unit/benchmark/contexts/standalone/__init__.py0
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml37
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml40
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_sample.yaml33
-rw-r--r--tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml40
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_model.py435
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py370
-rw-r--r--tests/unit/benchmark/contexts/standalone/test_sriov.py318
-rw-r--r--tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml135
-rw-r--r--tests/unit/benchmark/contexts/standalone_sample.yaml112
-rw-r--r--tests/unit/benchmark/contexts/test_dummy.py32
-rw-r--r--tests/unit/benchmark/contexts/test_heat.py503
-rw-r--r--tests/unit/benchmark/contexts/test_kubernetes.py205
-rw-r--r--tests/unit/benchmark/contexts/test_model.py589
-rw-r--r--tests/unit/benchmark/contexts/test_node.py398
24 files changed, 0 insertions, 3782 deletions
diff --git a/tests/unit/benchmark/contexts/__init__.py b/tests/unit/benchmark/contexts/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/contexts/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml b/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml
deleted file mode 100644
index dbdd3700d..000000000
--- a/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node1
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml b/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml
deleted file mode 100644
index 306915ca1..000000000
--- a/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-nodes:
--
- name: sriov
- role: Sriov1
- ip: 10.123.123.122
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
--
- name: sriov
- role: Sriov1
- ip: 10.123.123.111
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml b/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml
deleted file mode 100644
index 65449c91c..000000000
--- a/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) 2016 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-nodes:
--
- name: ovs
- role: test
- ip: 10.223.197.222
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
--
- name: ovs
- role: test
- ip: 10.223.197.112
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
diff --git a/tests/unit/benchmark/contexts/nodes_sample.yaml b/tests/unit/benchmark/contexts/nodes_sample.yaml
deleted file mode 100644
index 8d50c3aea..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/nodes_sample_new.yaml b/tests/unit/benchmark/contexts/nodes_sample_new.yaml
deleted file mode 100644
index a400bec03..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_new.yaml
+++ /dev/null
@@ -1,96 +0,0 @@
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.123.123.123
- user: root
- auth_type: password
- password: password
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
--
- name: sriov
- role: Sriov
- ip: 10.123.123.122
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.123.123.121
- user: root
- auth_type: password
- password: password
- host: 10.123.123.121 #BM host == ip, SRIOV & ovs-dpdk host == compute node.
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- routing_table:
- - network: "152.16.100.20"
- netmask: "255.255.255.0"
- gateway: "152.16.100.20"
- if: "xe0"
- - network: "152.16.40.20"
- netmask: "255.255.255.0"
- gateway: "152.16.40.20"
- if: "xe1"
- nd_route_tbl:
- - network: "0064:ff9b:0:0:0:0:9810:6414"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:6414"
- if: "xe0"
- - network: "0064:ff9b:0:0:0:0:9810:2814"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:2814"
- if: "xe1"
-
diff --git a/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml b/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml
deleted file mode 100644
index 55ff2e778..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml
+++ /dev/null
@@ -1,82 +0,0 @@
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.123.123.123
- user: root
- auth_type: password
- password: password
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
--
- name: sriov
- role: Sriov1
- ip: 10.123.123.122
- user: root
- auth_type: password
- password: password
- vf_macs:
- - "00:00:00:00:00:00"
- - "00:00:00:00:00:00"
- phy_ports: # Physical ports to configure sriov
- - "0000:06:00.0"
- - "0000:06:00.1"
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.123.123.121
- user: root
- auth_type: password
- password: password
- host: 10.123.123.121 #BM host == ip, SRIOV & ovs-dpdk host == compute node.
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:06:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:00"
- routing_table:
- - network: "152.16.100.20"
- netmask: "255.255.255.0"
- gateway: "152.16.100.20"
- if: "xe0"
- - network: "152.16.40.20"
- netmask: "255.255.255.0"
- gateway: "152.16.40.20"
- if: "xe1"
- nd_route_tbl:
- - network: "0064:ff9b:0:0:0:0:9810:6414"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:6414"
- if: "xe0"
- - network: "0064:ff9b:0:0:0:0:9810:2814"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:2814"
- if: "xe1"
-
diff --git a/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml b/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml
deleted file mode 100644
index b1da1ea9f..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml
+++ /dev/null
@@ -1,104 +0,0 @@
-# Copyright (c) 2016 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.223.197.182
- user: root
- auth_type: password
- password: intel123
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:68"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:69"
--
- name: ovs
- role: Ovsdpdk
- ip: 10.223.197.222
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.223.197.155
- user: root
- auth_type: password
- password: intel123
- host: 10.223.197.140
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:03"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:04"
- routing_table:
- - network: "152.16.100.20"
- netmask: "255.255.255.0"
- gateway: "152.16.100.20"
- if: "xe0"
- - network: "152.16.40.20"
- netmask: "255.255.255.0"
- gateway: "152.16.40.20"
- if: "xe1"
- nd_route_tbl:
- - network: "0064:ff9b:0:0:0:0:9810:6414"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:6414"
- if: "xe0"
- - network: "0064:ff9b:0:0:0:0:9810:2814"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:2814"
- if: "xe1"
diff --git a/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml b/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml
deleted file mode 100644
index c02849a05..000000000
--- a/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml
+++ /dev/null
@@ -1,104 +0,0 @@
-# Copyright (c) 2016 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-nodes:
--
- name: trafficgen_1
- role: TrafficGen
- ip: 10.223.197.182
- user: root
- auth_type: password
- password: intel123
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.0"
- driver: ixgbe
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:68"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:03:00.1"
- driver: ixgbe
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "90:e2:ba:77:ce:69"
--
- name: ovs
- role: Ovsdpdk1
- ip: 10.223.197.222
- user: root
- auth_type: password
- password: intel123
- vpath: "/usr/local/"
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure ovs
- - "0000:06:00.0"
- - "0000:06:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu1.img"
-
--
- name: vnf
- role: vnf
- ip: 10.223.197.155
- user: root
- auth_type: password
- password: intel123
- host: 10.223.197.140
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:03"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:04"
- routing_table:
- - network: "152.16.100.20"
- netmask: "255.255.255.0"
- gateway: "152.16.100.20"
- if: "xe0"
- - network: "152.16.40.20"
- netmask: "255.255.255.0"
- gateway: "152.16.40.20"
- if: "xe1"
- nd_route_tbl:
- - network: "0064:ff9b:0:0:0:0:9810:6414"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:6414"
- if: "xe0"
- - network: "0064:ff9b:0:0:0:0:9810:2814"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:2814"
- if: "xe1"
diff --git a/tests/unit/benchmark/contexts/standalone/__init__.py b/tests/unit/benchmark/contexts/standalone/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/unit/benchmark/contexts/standalone/__init__.py
+++ /dev/null
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml
deleted file mode 100644
index 2e501a6af..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node1
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
-
--
- name: node5
- role: Sriov
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
-
--
- name: node5
- role: OvsDpdk
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml
deleted file mode 100644
index 0f51dbe63..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
--
- name: node5
- role: OvsDpdk
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml
deleted file mode 100644
index 8d50c3aea..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml b/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml
deleted file mode 100644
index 1c43b8725..000000000
--- a/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-nodes:
--
- name: node1
- role: Controller
- ip: 10.229.47.137
- user: root
- key_filename: /root/.yardstick_key
--
- name: node2
- role: Controller
- ip: 10.229.47.138
- user: root
- key_filename: /root/.yardstick_key
--
- name: node3
- role: Compute
- ip: 10.229.47.139
- user: root
- key_filename: /root/.yardstick_key
--
- name: node4
- role: Baremetal
- ip: 10.229.47.140
- user: root
- key_filename: /root/.yardstick_key
--
- name: node5
- role: Sriov
- ip: 10.229.47.140
- user: root
- password: password
- key_filename: /root/.yardstick_key
diff --git a/tests/unit/benchmark/contexts/standalone/test_model.py b/tests/unit/benchmark/contexts/standalone/test_model.py
deleted file mode 100644
index 6090356b6..000000000
--- a/tests/unit/benchmark/contexts/standalone/test_model.py
+++ /dev/null
@@ -1,435 +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.
-
-import copy
-import os
-import unittest
-import mock
-
-from xml.etree import ElementTree
-
-from yardstick.benchmark.contexts.standalone.model import Libvirt
-from yardstick.benchmark.contexts.standalone import model
-from yardstick.network_services import utils
-
-
-XML_SAMPLE = """<?xml version="1.0"?>
-<domain type="kvm">
- <devices>
- </devices>
-</domain>
-"""
-
-XML_SAMPLE_INTERFACE = """<?xml version="1.0"?>
-<domain type="kvm">
- <devices>
- <interface>
- </interface>
- </devices>
-</domain>
-"""
-
-class ModelLibvirtTestCase(unittest.TestCase):
-
- def setUp(self):
- self.xml = ElementTree.ElementTree(
- element=ElementTree.fromstring(XML_SAMPLE))
- self.pci_address_str = '0001:04:03.2'
- self.pci_address = utils.PciAddress(self.pci_address_str)
- self.mac = '00:00:00:00:00:01'
- self._mock_write_xml = mock.patch.object(ElementTree.ElementTree,
- 'write')
- self.mock_write_xml = self._mock_write_xml.start()
-
- self.addCleanup(self._cleanup)
-
- def _cleanup(self):
- self._mock_write_xml.stop()
-
- def test_check_if_vm_exists_and_delete(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution.
- model.Libvirt.check_if_vm_exists_and_delete("vm_0", ssh_mock)
-
- def test_virsh_create_vm(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution.
- model.Libvirt.virsh_create_vm(ssh_mock, "vm_0")
-
- def test_virsh_destroy_vm(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution.
- model.Libvirt.virsh_destroy_vm("vm_0", ssh_mock)
-
- def test_add_interface_address(self):
- xml = ElementTree.ElementTree(
- element=ElementTree.fromstring(XML_SAMPLE_INTERFACE))
- interface = xml.find('devices').find('interface')
- result = model.Libvirt._add_interface_address(interface, self.pci_address)
- self.assertEqual('pci', result.get('type'))
- self.assertEqual('0x{}'.format(self.pci_address.domain),
- result.get('domain'))
- self.assertEqual('0x{}'.format(self.pci_address.bus),
- result.get('bus'))
- self.assertEqual('0x{}'.format(self.pci_address.slot),
- result.get('slot'))
- self.assertEqual('0x{}'.format(self.pci_address.function),
- result.get('function'))
-
- def test_add_ovs_interfaces(self):
- xml_input = mock.Mock()
- with mock.patch.object(ElementTree, 'parse', return_value=self.xml) \
- as mock_parse:
- xml = copy.deepcopy(self.xml)
- mock_parse.return_value = xml
- model.Libvirt.add_ovs_interface(
- '/usr/local', 0, self.pci_address_str, self.mac, xml_input)
- mock_parse.assert_called_once_with(xml_input)
- self.mock_write_xml.assert_called_once_with(xml_input)
- interface = xml.find('devices').find('interface')
- self.assertEqual('vhostuser', interface.get('type'))
- mac = interface.find('mac')
- self.assertEqual(self.mac, mac.get('address'))
- source = interface.find('source')
- self.assertEqual('unix', source.get('type'))
- self.assertEqual('/usr/local/var/run/openvswitch/dpdkvhostuser0',
- source.get('path'))
- self.assertEqual('client', source.get('mode'))
- _model = interface.find('model')
- self.assertEqual('virtio', _model.get('type'))
- driver = interface.find('driver')
- self.assertEqual('4', driver.get('queues'))
- host = driver.find('host')
- self.assertEqual('off', host.get('mrg_rxbuf'))
- self.assertIsNotNone(interface.find('address'))
-
- def test_add_sriov_interfaces(self):
- xml_input = mock.Mock()
- with mock.patch.object(ElementTree, 'parse', return_value=self.xml) \
- as mock_parse:
- xml = copy.deepcopy(self.xml)
- mock_parse.return_value = xml
- vm_pci = '0001:05:04.2'
- model.Libvirt.add_sriov_interfaces(
- vm_pci, self.pci_address_str, self.mac, xml_input)
- mock_parse.assert_called_once_with(xml_input)
- self.mock_write_xml.assert_called_once_with(xml_input)
- interface = xml.find('devices').find('interface')
- self.assertEqual('yes', interface.get('managed'))
- self.assertEqual('hostdev', interface.get('type'))
- mac = interface.find('mac')
- self.assertEqual(self.mac, mac.get('address'))
- source = interface.find('source')
- source_address = source.find('address')
- self.assertIsNotNone(source.find('address'))
-
- self.assertEqual('pci', source_address.get('type'))
- self.assertEqual('0x' + self.pci_address_str.split(':')[0],
- source_address.get('domain'))
- self.assertEqual('0x' + self.pci_address_str.split(':')[1],
- source_address.get('bus'))
- self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[0],
- source_address.get('slot'))
- self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[1],
- source_address.get('function'))
-
- interface_address = interface.find('address')
- self.assertEqual('pci', interface_address.get('type'))
- self.assertEqual('0x' + vm_pci.split(':')[0],
- interface_address.get('domain'))
- self.assertEqual('0x' + vm_pci.split(':')[1],
- interface_address.get('bus'))
- self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[0],
- interface_address.get('slot'))
- self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[1],
- interface_address.get('function'))
-
- def test_create_snapshot_qemu(self):
- result = "/var/lib/libvirt/images/0.qcow2"
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- image = model.Libvirt.create_snapshot_qemu(ssh_mock, "0", "ubuntu.img")
- self.assertEqual(image, result)
-
- @mock.patch.object(model.Libvirt, 'pin_vcpu_for_perf')
- @mock.patch.object(model.Libvirt, 'create_snapshot_qemu')
- def test_build_vm_xml(self, mock_create_snapshot_qemu,
- *args):
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- cfg_file = 'test_config_file.cfg'
- self.addCleanup(os.remove, cfg_file)
- result = [4]
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- mock_create_snapshot_qemu.return_value = "0.img"
-
- status = model.Libvirt.build_vm_xml(ssh_mock, {}, cfg_file, 'vm_0', 0)
- self.assertEqual(status[0], result[0])
-
- def test_update_interrupts_hugepages_perf(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): 'update_interrupts_hugepages_perf' always return
- # None, this check is trivial.
- #status = Libvirt.update_interrupts_hugepages_perf(ssh_mock)
- #self.assertIsNone(status)
- Libvirt.update_interrupts_hugepages_perf(ssh_mock)
-
- @mock.patch("yardstick.benchmark.contexts.standalone.model.CpuSysCores")
- @mock.patch.object(model.Libvirt, 'update_interrupts_hugepages_perf')
- def test_pin_vcpu_for_perf(self, *args):
- # NOTE(ralonsoh): test mocked methods/variables.
- 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, 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 = model.StandaloneContextHelper()
-
- def test___init__(self):
- self.assertIsNone(self.helper.file_path)
-
- def test_install_req_libs(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "a", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.install_req_libs(ssh_mock)
-
- def test_get_kernel_module(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "i40e", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.get_kernel_module(
- ssh_mock, "05:00.0", None)
-
- @mock.patch.object(model.StandaloneContextHelper, 'get_kernel_module')
- def test_get_nic_details(self, mock_get_kernel_module):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(return_value=(1, "i40e ixgbe", ""))
- ssh.return_value = ssh_mock
- mock_get_kernel_module.return_value = "i40e"
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.get_nic_details(
- ssh_mock, self.NETWORKS, 'dpdk-devbind.py')
-
- def test_get_virtual_devices(self):
- pattern = "PCI_SLOT_NAME=0000:05:00.0"
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, pattern, ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.StandaloneContextHelper.get_virtual_devices(
- ssh_mock, '0000:00:05.0')
-
- def _get_file_abspath(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- file_path = os.path.join(curr_path, filename)
- return file_path
-
- def test_read_config_file(self):
- self.helper.file_path = self._get_file_abspath(self.NODE_SAMPLE)
- status = self.helper.read_config_file()
- self.assertIsNotNone(status)
-
- def test_parse_pod_file(self):
- self.helper.file_path = self._get_file_abspath("dummy")
- self.assertRaises(IOError, self.helper.parse_pod_file,
- self.helper.file_path)
-
- self.helper.file_path = self._get_file_abspath(self.NODE_SAMPLE)
- self.assertRaises(TypeError, self.helper.parse_pod_file,
- self.helper.file_path)
-
- self.helper.file_path = self._get_file_abspath(self.NODE_SRIOV_SAMPLE)
- self.assertIsNotNone(self.helper.parse_pod_file(self.helper.file_path))
-
- def test_get_mac_address(self):
- status = model.StandaloneContextHelper.get_mac_address()
- self.assertIsNotNone(status)
-
- @mock.patch('yardstick.ssh.SSH')
- def test_get_mgmt_ip(self, *args):
- # NOTE(ralonsoh): test mocked methods/variables.
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = mock.Mock(
- return_value=(1, "1.2.3.4 00:00:00:00:00:01", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- status = model.StandaloneContextHelper.get_mgmt_ip(
- ssh_mock, "00:00:00:00:00:01", "1.1.1.1/24", {})
- self.assertIsNotNone(status)
-
- @mock.patch('yardstick.ssh.SSH')
- def test_get_mgmt_ip_no(self, *args):
- # NOTE(ralonsoh): test mocked methods/variables.
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(1, "", ""))
- ssh.return_value = ssh_mock
- # NOTE(ralonsoh): this test doesn't cover function execution. This test
- # should also check mocked function calls.
- model.WAIT_FOR_BOOT = 0
- status = model.StandaloneContextHelper.get_mgmt_ip(
- ssh_mock, "99", "1.1.1.1/24", {})
- self.assertIsNone(status)
-
-
-class ServerTestCase(unittest.TestCase):
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.100.10/24',
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.40.10/24',
- 'gateway_ip': '152.16.100.20'}
- }
-
- def setUp(self):
- self.server = model.Server()
-
- def test___init__(self):
- self.assertIsNotNone(self.server)
-
- def test_build_vnf_interfaces(self):
- vnf = {
- "network_ports": {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0'],
- }
- }
- status = model.Server.build_vnf_interfaces(vnf, self.NETWORKS)
- self.assertIsNotNone(status)
-
- def test_generate_vnf_instance(self):
- vnf = {
- "network_ports": {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0'],
- }
- }
- status = self.server.generate_vnf_instance(
- {}, self.NETWORKS, '1.1.1.1/24', 'vm_0', vnf, '00:00:00:00:00:01')
- self.assertIsNotNone(status)
-
-class OvsDeployTestCase(unittest.TestCase):
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.100.10/24',
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'driver': 'i40e',
- 'mac': '',
- 'cidr': '152.16.40.10/24',
- 'gateway_ip': '152.16.100.20'}
- }
- @mock.patch('yardstick.ssh.SSH')
- def setUp(self, mock_ssh):
- self.ovs_deploy = model.OvsDeploy(mock_ssh, '/tmp/dpdk-devbind.py', {})
-
- def test___init__(self):
- self.assertIsNotNone(self.ovs_deploy.connection)
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.os')
- def test_prerequisite(self, *args):
- # NOTE(ralonsoh): this test should check mocked function calls.
- self.ovs_deploy.helper = mock.Mock()
- self.assertIsNone(self.ovs_deploy.prerequisite())
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.os')
- def test_prerequisite_2(self, *args):
- # NOTE(ralonsoh): this test should check mocked function calls. Rename
- # this test properly.
- self.ovs_deploy.helper = mock.Mock()
- self.ovs_deploy.connection.execute = mock.Mock(
- return_value=(1, '1.2.3.4 00:00:00:00:00:01', ''))
- self.ovs_deploy.prerequisite = mock.Mock()
- self.assertIsNone(self.ovs_deploy.ovs_deploy())
diff --git a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py b/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
deleted file mode 100644
index e39ecf4f2..000000000
--- a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
+++ /dev/null
@@ -1,370 +0,0 @@
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Unittest for yardstick.benchmark.contexts.standalone.standaloneovs
-
-from __future__ import absolute_import
-import os
-import unittest
-import mock
-
-from yardstick.benchmark.contexts.standalone import ovs_dpdk
-
-
-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.assertTrue(self.ovs_dpdk.first_run)
-
- 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, ssh_mock):
- ssh_mock.execute.return_value = (0, "a", "")
-
- 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={})
- # TODO(elfoley): This test should check states/sideeffects instead of
- # output.
- self.assertIsNone(self.ovs_dpdk.deploy())
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt')
- @mock.patch('yardstick.ssh.SSH')
- def test_undeploy(self, ssh_mock, _):
- ssh_mock.execute.return_value = (0, "a", "")
-
- self.ovs_dpdk.vm_deploy = False
- self.assertIsNone(self.ovs_dpdk.undeploy())
-
- self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.vm_names = ['vm_0', 'vm_1']
- self.ovs_dpdk.connection = ssh_mock
- 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.model.Libvirt.add_ovs_interface')
- def test__enable_interfaces(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.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_libvirt):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.ovs_dpdk.vm_deploy = True
- self.ovs_dpdk.connection = ssh_mock
- self.ovs_dpdk.vm_names = ['vm_0', 'vm_1']
- self.ovs_dpdk.drivers = []
- self.ovs_dpdk.servers = {
- 'vnf_0': {
- 'network_ports': {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0']
- }
- }
- }
- self.ovs_dpdk.networks = self.NETWORKS
- self.ovs_dpdk.host_mgmt = {}
- self.ovs_dpdk.flavor = {}
- self.ovs_dpdk.configure_nics_for_ovs_dpdk = mock.Mock(return_value="")
- mock_libvirt.check_if_vm_exists_and_delete = mock.Mock(return_value="")
- mock_libvirt.build_vm_xml = mock.Mock(return_value=[6, "00:00:00:00:00:01"])
- self.ovs_dpdk._enable_interfaces = mock.Mock(return_value="")
- mock_libvirt.virsh_create_vm = mock.Mock(return_value="")
- mock_libvirt.pin_vcpu_for_perf = mock.Mock(return_value="")
- self.ovs_dpdk.vnf_node.generate_vnf_instance = mock.Mock(return_value={})
- self.assertIsNotNone(self.ovs_dpdk.setup_ovs_dpdk_context())
diff --git a/tests/unit/benchmark/contexts/standalone/test_sriov.py b/tests/unit/benchmark/contexts/standalone/test_sriov.py
deleted file mode 100644
index 7f11a7d59..000000000
--- a/tests/unit/benchmark/contexts/standalone/test_sriov.py
+++ /dev/null
@@ -1,318 +0,0 @@
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Unittest for yardstick.benchmark.contexts.standalone.standalonesriov
-
-from __future__ import absolute_import
-import os
-import unittest
-import mock
-
-from yardstick import ssh
-from yardstick.benchmark.contexts.standalone import sriov
-
-
-class SriovContextTestCase(unittest.TestCase):
-
- NODES_SAMPLE = "nodes_sample.yaml"
- NODES_SRIOV_SAMPLE = "nodes_sriov_sample.yaml"
- NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample.yaml"
-
- ATTRS = {
- 'name': 'StandaloneSriov',
- 'file': 'pod',
- 'flavor': {},
- 'servers': {},
- 'networks': {},
- }
-
- NETWORKS = {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'private_0': {
- 'phy_port': "0000:05:00.0",
- 'vpci': "0000:00:07.0",
- 'cidr': '152.16.100.10/24',
- 'interface': 'if0',
- 'mac': "00:00:00:00:00:01",
- 'vf_pci': {'vf_pci': 0},
- 'gateway_ip': '152.16.100.20'},
- 'public_0': {
- 'phy_port': "0000:05:00.1",
- 'vpci': "0000:00:08.0",
- 'cidr': '152.16.40.10/24',
- 'interface': 'if0',
- 'vf_pci': {'vf_pci': 0},
- 'mac': "00:00:00:00:00:01",
- 'gateway_ip': '152.16.100.20'},
- }
-
- def setUp(self):
- self.sriov = sriov.SriovContext()
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper')
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
- def test___init__(self, mock_helper, mock_libvirt, mock_server):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): this test doesn't cover function execution.
- # The pylint exception should be removed.
- self.sriov.helper = mock_helper
- self.sriov.vnf_node = mock_server
- self.assertIsNone(self.sriov.file_path)
- self.assertTrue(self.sriov.first_run)
-
- def test_init(self):
- self.sriov.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
- self.assertIsNone(self.sriov.init(self.ATTRS))
-
- @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
- def test_deploy(self, mock_ssh):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): this test doesn't cover function execution.
- # The pylint exception should be removed.
- self.sriov.vm_deploy = False
- self.assertIsNone(self.sriov.deploy())
-
- self.sriov.vm_deploy = True
- self.sriov.host_mgmt = {}
- self.sriov.install_req_libs = mock.Mock()
- self.sriov.get_nic_details = mock.Mock(return_value={})
- self.sriov.setup_sriov_context = mock.Mock(return_value={})
- self.sriov.wait_for_vnfs_to_start = mock.Mock(return_value={})
- self.assertIsNone(self.sriov.deploy())
-
- @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- def test_undeploy(self, mock_libvirt, mock_ssh):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): the pylint exception should be removed.
- self.sriov.vm_deploy = False
- self.assertIsNone(self.sriov.undeploy())
-
- self.sriov.vm_deploy = True
- self.sriov.connection = mock_ssh
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = ['vm_0', 'vm_1']
- self.assertIsNone(self.sriov.undeploy())
-
- def _get_file_abspath(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- file_path = os.path.join(curr_path, filename)
- return file_path
-
- def test__get_server_with_dic_attr_name(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = {'name': 'foo.bar'}
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_not_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
- self.sriov.init(attrs)
-
- attr_name = 'bar.foo'
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_mismatch(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = 'bar.foo1'
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_duplicate(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = 'node1.foo'
- with self.assertRaises(ValueError):
- self.sriov._get_server(attr_name)
-
- def test__get_server_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SRIOV_SAMPLE)
- }
-
- self.sriov.init(attrs)
-
- attr_name = 'node1.foo'
- result = self.sriov._get_server(attr_name)
-
- self.assertEqual(result['ip'], '10.229.47.137')
- self.assertEqual(result['name'], 'node1.foo')
- self.assertEqual(result['user'], 'root')
- self.assertEqual(result['key_filename'], '/root/.yardstick_key')
-
- def test__get_network(self):
- network1 = {
- 'name': 'net_1',
- 'vld_id': 'vld111',
- 'segmentation_id': 'seg54',
- 'network_type': 'type_a',
- 'physical_network': 'phys',
- }
- network2 = {
- 'name': 'net_2',
- 'vld_id': 'vld999',
- }
- self.sriov.networks = {
- 'a': network1,
- 'b': network2,
- }
-
- attr_name = {}
- self.assertIsNone(self.sriov._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld777'}
- self.assertIsNone(self.sriov._get_network(attr_name))
-
- self.assertIsNone(self.sriov._get_network(None))
-
- attr_name = 'vld777'
- self.assertIsNone(self.sriov._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld999'}
- expected = {
- "name": 'net_2',
- "vld_id": 'vld999',
- "segmentation_id": None,
- "network_type": None,
- "physical_network": None,
- }
- result = self.sriov._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- attr_name = 'a'
- expected = network1
- result = self.sriov._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- def test_configure_nics_for_sriov(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.networks = self.NETWORKS
- self.sriov.helper.get_mac_address = mock.Mock(return_value="")
- self.sriov._get_vf_data = mock.Mock(return_value="")
- self.assertIsNone(self.sriov.configure_nics_for_sriov())
-
- @mock.patch.object(ssh, 'SSH', return_value=(0, "a", ""))
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- def test__enable_interfaces(self, mock_libvirt, mock_ssh):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): the pylint exception should be removed.
- self.sriov.vm_deploy = True
- self.sriov.connection = mock_ssh
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.networks = self.NETWORKS
- self.sriov._get_vf_data = mock.Mock(return_value="")
- self.assertIsNone(self.sriov._enable_interfaces(0, 0, ["private_0"], 'test'))
-
- @mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
- @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt')
- def test_setup_sriov_context(self, mock_libvirt, mock_server):
- # pylint: disable=unused-argument
- # NOTE(ralonsoh): the pylint exception should be removed.
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.servers = {
- 'vnf_0': {
- 'network_ports': {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0']
- }
- }
- }
- self.sriov.networks = self.NETWORKS
- self.sriov.host_mgmt = {}
- self.sriov.flavor = {}
- self.sriov.configure_nics_for_sriov = mock.Mock(return_value="")
- mock_libvirt.build_vm_xml = mock.Mock(return_value=[6, "00:00:00:00:00:01"])
- self.sriov._enable_interfaces = mock.Mock(return_value="")
- self.sriov.vnf_node.generate_vnf_instance = mock.Mock(return_value={})
- self.assertIsNotNone(self.sriov.setup_sriov_context())
-
- def test__get_vf_data(self):
- with mock.patch("yardstick.ssh.SSH") as ssh:
- ssh_mock = mock.Mock(autospec=ssh.SSH)
- ssh_mock.execute = \
- mock.Mock(return_value=(0, "a", ""))
- ssh_mock.put = \
- mock.Mock(return_value=(0, "a", ""))
- ssh.return_value = ssh_mock
- self.sriov.vm_deploy = True
- self.sriov.connection = ssh_mock
- self.sriov.vm_names = ['vm_0', 'vm_1']
- self.sriov.drivers = []
- self.sriov.servers = {
- 'vnf_0': {
- 'network_ports': {
- 'mgmt': {'cidr': '152.16.100.10/24'},
- 'xe0': ['private_0'],
- 'xe1': ['public_0']
- }
- }
- }
- self.sriov.networks = self.NETWORKS
- self.sriov.helper.get_virtual_devices = mock.Mock(
- return_value={'0000:00:01.0': ''})
- self.assertIsNotNone(self.sriov._get_vf_data(
- '0000:00:01.0', '00:00:00:00:00:01', 'if0'))
diff --git a/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml b/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml
deleted file mode 100644
index e468d0465..000000000
--- a/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
----
-# Sample config file about the POD information, including the
-# name/IP/user/ssh key of Bare Metal and Controllers/Computes
-#
-# The options of this config file include:
-# name: the name of this node
-# role: node's role, support role: Master/Controller/Comupte/BareMetal
-# ip: the node's IP address
-# user: the username for login
-# key_filename:the path of the private key file for login
-
-nodes:
--
- name: node1
- role: TrafficGen
- ip: 1.1.1.1
- user: root
- password: r00t
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:01"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:02"
--
- name: node2
- role: nfvi_node
- class: OvsDpdk
- ip: 1.1.1.2
- user: root
- password: r00t
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure sriov
- - "0000:05:00.0"
- - "0000:05:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu.qcow2"
--
- name: node2
- role: nfvi_node
- class: OvsDpdk
- ip: 1.1.1.5
- user: root
- password: r00t
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure sriov
- - "0000:05:00.0"
- - "0000:05:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu.qcow2"
-
--
- name: node3
- role: vnf
- ip: 1.1.1.3
- user: root
- password: r00t
- host: 1.1.1.1
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:05"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:06"
- routing_table:
- - network: "152.16.100.20"
- netmask: "255.255.255.0"
- gateway: "152.16.100.20"
- if: "xe0"
- - network: "152.16.40.20"
- netmask: "255.255.255.0"
- gateway: "152.16.40.20"
- if: "xe1"
- nd_route_tbl:
- - network: "0064:ff9b:0:0:0:0:9810:6414"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:6414"
- if: "xe0"
- - network: "0064:ff9b:0:0:0:0:9810:2814"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:2814"
- if: "xe1"
diff --git a/tests/unit/benchmark/contexts/standalone_sample.yaml b/tests/unit/benchmark/contexts/standalone_sample.yaml
deleted file mode 100644
index 95e12d62f..000000000
--- a/tests/unit/benchmark/contexts/standalone_sample.yaml
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
----
-# Sample config file about the POD information, including the
-# name/IP/user/ssh key of Bare Metal and Controllers/Computes
-#
-# The options of this config file include:
-# name: the name of this node
-# role: node's role, support role: Master/Controller/Comupte/BareMetal
-# ip: the node's IP address
-# user: the username for login
-# key_filename:the path of the private key file for login
-
-nodes:
--
- name: node1
- role: TrafficGen
- ip: 1.1.1.1
- user: root
- password: r00t
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.0"
- driver: i40e
- dpdk_port_num: 0
- local_ip: "152.16.100.20"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:01"
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:05:00.1"
- driver: i40e
- dpdk_port_num: 1
- local_ip: "152.16.100.21"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:02"
--
- name: node2
- role: nfvi_node
- class: OvsDpdk
- ip: 1.1.1.2
- user: root
- password: r00t
- vports:
- - dpdkvhostuser0
- - dpdkvhostuser1
- vports_mac:
- - "00:00:00:00:00:03"
- - "00:00:00:00:00:04"
- phy_ports: # Physical ports to configure sriov
- - "0000:05:00.0"
- - "0000:05:00.1"
- flow:
- - ovs-ofctl add-flow br0 in_port=1,action=output:3
- - ovs-ofctl add-flow br0 in_port=3,action=output:1
- - ovs-ofctl add-flow br0 in_port=4,action=output:2
- - ovs-ofctl add-flow br0 in_port=2,action=output:4
- phy_driver: i40e # kernel driver
- images: "/var/lib/libvirt/images/ubuntu.qcow2"
-
--
- name: node3
- role: vnf
- ip: 1.1.1.3
- user: root
- password: r00t
- host: 1.1.1.1
- interfaces:
- xe0: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:04.0"
- driver: virtio-pci
- dpdk_port_num: 0
- local_ip: "152.16.100.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:05"
-
- xe1: # logical name from topology.yaml and vnfd.yaml
- vpci: "0000:00:05.0"
- driver: virtio-pci
- dpdk_port_num: 1
- local_ip: "152.16.40.19"
- netmask: "255.255.255.0"
- local_mac: "00:00:00:00:00:06"
- routing_table:
- - network: "152.16.100.20"
- netmask: "255.255.255.0"
- gateway: "152.16.100.20"
- if: "xe0"
- - network: "152.16.40.20"
- netmask: "255.255.255.0"
- gateway: "152.16.40.20"
- if: "xe1"
- nd_route_tbl:
- - network: "0064:ff9b:0:0:0:0:9810:6414"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:6414"
- if: "xe0"
- - network: "0064:ff9b:0:0:0:0:9810:2814"
- netmask: "112"
- gateway: "0064:ff9b:0:0:0:0:9810:2814"
- if: "xe1"
diff --git a/tests/unit/benchmark/contexts/test_dummy.py b/tests/unit/benchmark/contexts/test_dummy.py
deleted file mode 100644
index 1a54035df..000000000
--- a/tests/unit/benchmark/contexts/test_dummy.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.contexts.dummy
-
-from __future__ import absolute_import
-import unittest
-
-from yardstick.benchmark.contexts import dummy
-
-
-class DummyContextTestCase(unittest.TestCase):
-
- def setUp(self):
- self.test_context = dummy.DummyContext()
-
- def test__get_server(self):
- self.test_context.init(None)
- self.test_context.deploy()
-
- result = self.test_context._get_server(None)
- self.assertEqual(result, None)
-
- self.test_context.undeploy()
diff --git a/tests/unit/benchmark/contexts/test_heat.py b/tests/unit/benchmark/contexts/test_heat.py
deleted file mode 100644
index f2e725df2..000000000
--- a/tests/unit/benchmark/contexts/test_heat.py
+++ /dev/null
@@ -1,503 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.contexts.heat
-
-from __future__ import absolute_import
-
-import logging
-import os
-import unittest
-import uuid
-from collections import OrderedDict
-
-import mock
-
-from itertools import count
-from yardstick.benchmark.contexts import heat
-from yardstick.benchmark.contexts import model
-
-LOG = logging.getLogger(__name__)
-
-
-class HeatContextTestCase(unittest.TestCase):
-
- def __init__(self, *args, **kwargs):
- super(HeatContextTestCase, self).__init__(*args, **kwargs)
- self.name_iter = ('vnf{:03}'.format(x) for x in count(0, step=3))
-
- def setUp(self):
- self.test_context = heat.HeatContext()
- self.mock_context = mock.Mock(spec=heat.HeatContext())
-
- def test___init__(self):
- self.assertIsNone(self.test_context.name)
- self.assertIsNone(self.test_context.stack)
- self.assertEqual(self.test_context.networks, OrderedDict())
- self.assertEqual(self.test_context.servers, [])
- self.assertEqual(self.test_context.placement_groups, [])
- self.assertEqual(self.test_context.server_groups, [])
- self.assertIsNone(self.test_context.keypair_name)
- self.assertIsNone(self.test_context.secgroup_name)
- self.assertEqual(self.test_context._server_map, {})
- self.assertIsNone(self.test_context._image)
- self.assertIsNone(self.test_context._flavor)
- self.assertIsNone(self.test_context._user)
- self.assertIsNone(self.test_context.template_file)
- self.assertIsNone(self.test_context.heat_parameters)
- self.assertIsNotNone(self.test_context.key_uuid)
- self.assertIsNotNone(self.test_context.key_filename)
-
- @mock.patch('yardstick.benchmark.contexts.heat.PlacementGroup')
- @mock.patch('yardstick.benchmark.contexts.heat.ServerGroup')
- @mock.patch('yardstick.benchmark.contexts.heat.Network')
- @mock.patch('yardstick.benchmark.contexts.heat.Server')
- def test_init(self, mock_server, mock_network, mock_sg, mock_pg):
-
- pgs = {'pgrp1': {'policy': 'availability'}}
- sgs = {'servergroup1': {'policy': 'affinity'}}
- networks = {'bar': {'cidr': '10.0.1.0/24'}}
- servers = {'baz': {'floating_ip': True, 'placement': 'pgrp1'}}
- attrs = {'name': 'foo',
- 'placement_groups': pgs,
- 'server_groups': sgs,
- 'networks': networks,
- 'servers': servers}
-
- self.test_context.init(attrs)
-
- self.assertEqual(self.test_context.name, "foo")
- self.assertEqual(self.test_context.keypair_name, "foo-key")
- self.assertEqual(self.test_context.secgroup_name, "foo-secgroup")
-
- mock_pg.assert_called_with('pgrp1', self.test_context,
- pgs['pgrp1']['policy'])
- mock_sg.assert_called_with('servergroup1', self.test_context,
- sgs['servergroup1']['policy'])
- self.assertTrue(len(self.test_context.placement_groups) == 1)
- self.assertTrue(len(self.test_context.server_groups) == 1)
-
- mock_network.assert_called_with(
- 'bar', self.test_context, networks['bar'])
- self.assertTrue(len(self.test_context.networks) == 1)
-
- mock_server.assert_called_with('baz', self.test_context,
- servers['baz'])
- self.assertTrue(len(self.test_context.servers) == 1)
-
- if os.path.exists(self.test_context.key_filename):
- try:
- os.remove(self.test_context.key_filename)
- os.remove(self.test_context.key_filename + ".pub")
- except OSError:
- LOG.exception("key_filename: %s",
- self.test_context.key_filename)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_resources_to_template_no_servers(self, mock_template):
-
- self.test_context.keypair_name = "foo-key"
- self.test_context.secgroup_name = "foo-secgroup"
- self.test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
- netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
- self.mock_context.name = 'bar'
- self.test_context.networks = OrderedDict(
- {"fool-network": model.Network("fool-network", self.mock_context,
- netattrs)})
-
- self.test_context._add_resources_to_template(mock_template)
- mock_template.add_keypair.assert_called_with(
- "foo-key",
- "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b")
- mock_template.add_security_group.assert_called_with("foo-secgroup")
-# mock_template.add_network.assert_called_with("bar-fool-network", 'physnet1', None)
- mock_template.add_router.assert_called_with("bar-fool-network-router",
- netattrs["external_network"],
- "bar-fool-network-subnet")
- mock_template.add_router_interface.assert_called_with("bar-fool-network-router-if0",
- "bar-fool-network-router",
- "bar-fool-network-subnet")
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_attrs_get(self, mock_template):
- image, flavor, user = expected_tuple = 'foo1', 'foo2', 'foo3'
- self.assertNotEqual(self.test_context.image, image)
- self.assertNotEqual(self.test_context.flavor, flavor)
- self.assertNotEqual(self.test_context.user, user)
- self.test_context._image = image
- self.test_context._flavor = flavor
- self.test_context._user = user
- attr_tuple = self.test_context.image, self.test_context.flavor, self.test_context.user
- self.assertEqual(attr_tuple, expected_tuple)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_attrs_set_negative(self, mock_template):
- with self.assertRaises(AttributeError):
- self.test_context.image = 'foo'
-
- with self.assertRaises(AttributeError):
- self.test_context.flavor = 'foo'
-
- with self.assertRaises(AttributeError):
- self.test_context.user = 'foo'
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_deploy(self, mock_template):
- self.test_context.name = 'foo'
- self.test_context.template_file = '/bar/baz/some-heat-file'
- self.test_context.heat_parameters = {'image': 'cirros'}
- self.test_context.get_neutron_info = mock.MagicMock()
- self.test_context.deploy()
-
- mock_template.assert_called_with('foo',
- '/bar/baz/some-heat-file',
- {'image': 'cirros'})
- self.assertIsNotNone(self.test_context.stack)
-
- def test_add_server_port(self):
- network1 = mock.MagicMock()
- network2 = mock.MagicMock()
- self.test_context.name = 'foo'
- self.test_context.stack = mock.MagicMock()
- self.test_context.networks = {
- 'a': network1,
- 'c': network2,
- }
- self.test_context.stack.outputs = {
- u'b': u'10.20.30.45',
- u'b-subnet_id': 1,
- u'foo-a-subnet-cidr': u'10.20.0.0/15',
- u'foo-a-subnet-gateway_ip': u'10.20.30.1',
- u'b-mac_address': u'00:01',
- u'b-device_id': u'dev21',
- u'b-network_id': u'net789',
- u'd': u'40.30.20.15',
- u'd-subnet_id': 2,
- u'foo-c-subnet-cidr': u'40.30.0.0/18',
- u'foo-c-subnet-gateway_ip': u'40.30.20.254',
- u'd-mac_address': u'00:10',
- u'd-device_id': u'dev43',
- u'd-network_id': u'net987',
- u'e': u'40.30.20.15',
- u'e-subnet_id': 2,
- u'e-mac_address': u'00:10',
- u'e-device_id': u'dev43',
- u'e-network_id': u'net987',
- }
- server = mock.MagicMock()
- server.ports = OrderedDict([
- ('a', [{'stack_name': 'b', 'port': 'port_a'}]),
- ('c', [{'stack_name': 'd', 'port': 'port_c'},
- {'stack_name': 'e', 'port': 'port_f'}]),
- ])
-
- expected = {
- "private_ip": '10.20.30.45',
- "subnet_id": 1,
- "subnet_cidr": '10.20.0.0/15',
- "network": '10.20.0.0',
- "netmask": '255.254.0.0',
- "name": "port_a",
- "gateway_ip": '10.20.30.1',
- "mac_address": '00:01',
- "device_id": 'dev21',
- "network_id": 'net789',
- "network_name": 'a',
- "local_mac": '00:01',
- "local_ip": '10.20.30.45',
- }
- self.test_context.add_server_port(server)
- self.assertEqual(server.private_ip, '10.20.30.45')
- self.assertEqual(len(server.interfaces), 3)
- self.assertDictEqual(server.interfaces['port_a'], expected)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test_undeploy(self, mock_template):
- self.test_context.stack = mock_template
- self.test_context.undeploy()
- self.assertTrue(mock_template.delete.called)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- @mock.patch('yardstick.benchmark.contexts.heat.os')
- def test_undeploy_key_filename(self, mock_template, mock_os):
- self.test_context.stack = mock_template
- mock_os.path.exists.return_value = True
- self.assertIsNone(self.test_context.undeploy())
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_found_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to get a server that matches
- based on a dictionary input.
- """
- foo2_server = mock.Mock()
- foo2_server.key_filename = None
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.key_filename = None
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = '127.0.0.3'
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar'
- self.test_context._user = 'bot'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = {
- 'name': 'foo.bar',
- 'private_ip_attr': 'private_ip',
- 'public_ip_attr': 'public_ip',
- }
- result = self.test_context._get_server(attr_name)
- self.assertEqual(result['user'], 'bot')
- self.assertEqual(result['ip'], '127.0.0.1')
- self.assertEqual(result['private_ip'], '10.0.0.1')
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_found_dict_no_attrs(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to get a server that matches
- based on a dictionary input.
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = '127.0.0.3'
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar'
- self.test_context._user = 'bot'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = {
- 'name': 'foo.bar',
- }
- result = self.test_context._get_server(attr_name)
- self.assertEqual(result['user'], 'bot')
- # no private ip attr mapping in the map results in None value in the result
- self.assertIsNone(result['private_ip'])
- # no public ip attr mapping in the map results in no value in the result
- self.assertNotIn('ip', result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_found_not_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to get a server that matches
- based on a non-dictionary input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context.generate_routing_table = mock.MagicMock(return_value=[])
-
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = 'baz3'
- result = self.test_context._get_server(attr_name)
- self.assertEqual(result['user'], 'zab')
- self.assertEqual(result['private_ip'], '10.0.0.3')
- # no public_ip on the server results in no value in the result
- self.assertNotIn('public_ip', result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_none_found_not_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to not get a server due to
- None value associated with the match to a non-dictionary
- input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- 'wow4': None,
- }
-
- attr_name = 'wow4'
- result = self.test_context._get_server(attr_name)
- self.assertIsNone(result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_not_found_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to not get a server for lack
- of a match to a dictionary input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.test_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.test_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.test_context.key_uuid = uuid.uuid4()
- self.test_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = {
- 'name': 'foo.wow4',
- 'private_ip_attr': 'private_ip',
- 'public_ip_attr': 'public_ip',
- }
- result = self.test_context._get_server(attr_name)
- self.assertIsNone(result)
-
- @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources")
- def test__get_server_not_found_not_dict(self, mock_pkg_resources):
- """
- Use HeatContext._get_server to not get a server for lack
- of a match to a non-dictionary input
- """
- foo2_server = mock.Mock()
- foo2_server.private_ip = '10.0.0.2'
- foo2_server.public_ip = '127.0.0.2'
- foo2_server.context.user = 'oof'
-
- baz3_server = mock.Mock()
- baz3_server.private_ip = '10.0.0.3'
- baz3_server.public_ip = None
- baz3_server.context.user = 'zab'
-
- self.mock_context.name = 'bar1'
- self.test_context.stack = mock.Mock()
- self.mock_context.stack.outputs = {
- 'private_ip': '10.0.0.1',
- 'public_ip': '127.0.0.1',
- }
- self.mock_context.key_uuid = uuid.uuid4()
- self.mock_context._server_map = {
- 'baz3': baz3_server,
- 'foo2': foo2_server,
- }
-
- attr_name = 'foo.wow4'
- result = self.test_context._get_server(attr_name)
- self.assertIsNone(result)
-
- def test__get_network(self):
- network1 = mock.MagicMock()
- network1.name = 'net_1'
- network1.vld_id = 'vld111'
- network1.segmentation_id = 'seg54'
- network1.network_type = 'type_a'
- network1.physical_network = 'phys'
-
- network2 = mock.MagicMock()
- network2.name = 'net_2'
- network2.segmentation_id = 'seg45'
- network2.network_type = 'type_b'
- network2.physical_network = 'virt'
-
- self.test_context.networks = {
- 'a': network1,
- 'b': network2,
- }
-
- attr_name = None
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'network_type': 'nosuch'}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = 'vld777'
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'segmentation_id': 'seg45'}
- expected = {
- "name": 'net_2',
- "segmentation_id": 'seg45',
- "network_type": 'type_b',
- "physical_network": 'virt',
- }
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- attr_name = 'a'
- expected = {
- "name": 'net_1',
- "segmentation_id": 'seg54',
- "network_type": 'type_a',
- "physical_network": 'phys',
- }
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
diff --git a/tests/unit/benchmark/contexts/test_kubernetes.py b/tests/unit/benchmark/contexts/test_kubernetes.py
deleted file mode 100644
index 3a926f85c..000000000
--- a/tests/unit/benchmark/contexts/test_kubernetes.py
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.contexts.kubernetes
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.benchmark.contexts.base import Context
-from yardstick.benchmark.contexts.kubernetes import KubernetesContext
-
-
-context_cfg = {
- 'type': 'Kubernetes',
- 'name': 'k8s',
- 'servers': {
- 'host': {
- 'image': 'openretriever/yardstick',
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done']
- },
- 'target': {
- 'image': 'openretriever/yardstick',
- 'command': '/bin/bash',
- 'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
-service ssh restart;while true ; do sleep 10000; done']
- }
- }
-}
-
-prefix = 'yardstick.benchmark.contexts.kubernetes'
-
-
-class KubernetesTestCase(unittest.TestCase):
-
- def tearDown(self):
- # clear kubernetes contexts from global list so we don't break other tests
- Context.list = []
-
- @mock.patch('{}.KubernetesContext._delete_services'.format(prefix))
- @mock.patch('{}.KubernetesContext._delete_ssh_key'.format(prefix))
- @mock.patch('{}.KubernetesContext._delete_rcs'.format(prefix))
- @mock.patch('{}.KubernetesContext._delete_pods'.format(prefix))
- def test_undeploy(self,
- mock_delete_pods,
- mock_delete_rcs,
- mock_delete_ssh,
- mock_delete_services):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context.undeploy()
- self.assertTrue(mock_delete_ssh.called)
- self.assertTrue(mock_delete_rcs.called)
- self.assertTrue(mock_delete_pods.called)
- self.assertTrue(mock_delete_services.called)
-
- @mock.patch('{}.KubernetesContext._create_services'.format(prefix))
- @mock.patch('{}.KubernetesContext._wait_until_running'.format(prefix))
- @mock.patch('{}.KubernetesTemplate.get_rc_pods'.format(prefix))
- @mock.patch('{}.KubernetesContext._create_rcs'.format(prefix))
- @mock.patch('{}.KubernetesContext._set_ssh_key'.format(prefix))
- def test_deploy(self,
- mock_set_ssh_key,
- mock_create_rcs,
- mock_get_rc_pods,
- mock_wait_until_running,
- mock_create_services):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- with mock.patch("yardstick.benchmark.contexts.kubernetes.time"):
- k8s_context.deploy()
- self.assertTrue(mock_set_ssh_key.called)
- self.assertTrue(mock_create_rcs.called)
- self.assertTrue(mock_create_services.called)
- self.assertTrue(mock_get_rc_pods.called)
- self.assertTrue(mock_wait_until_running.called)
-
- @mock.patch('{}.paramiko'.format(prefix), **{"resource_filename.return_value": ""})
- @mock.patch('{}.pkg_resources'.format(prefix), **{"resource_filename.return_value": ""})
- @mock.patch('{}.utils'.format(prefix))
- @mock.patch('{}.open'.format(prefix), create=True)
- @mock.patch('{}.k8s_utils.delete_config_map'.format(prefix))
- @mock.patch('{}.k8s_utils.create_config_map'.format(prefix))
- def test_ssh_key(self, mock_create, mock_delete, mock_open, mock_utils, mock_resources,
- mock_paramiko):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._set_ssh_key()
- k8s_context._delete_ssh_key()
- self.assertTrue(mock_create.called)
- self.assertTrue(mock_delete.called)
-
- @mock.patch('{}.k8s_utils.read_pod_status'.format(prefix))
- def test_wait_until_running(self, mock_read_pod_status):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context.template.pods = ['server']
- mock_read_pod_status.return_value = 'Running'
- k8s_context._wait_until_running()
-
- @mock.patch('{}.k8s_utils.get_pod_by_name'.format(prefix))
- @mock.patch('{}.KubernetesContext._get_node_ip'.format(prefix))
- @mock.patch('{}.k8s_utils.get_service_by_name'.format(prefix))
- def test_get_server(self,
- mock_get_service_by_name,
- mock_get_node_ip,
- mock_get_pod_by_name):
- class Service(object):
- def __init__(self):
- self.name = 'yardstick'
- self.node_port = 30000
-
- class Services(object):
- def __init__(self):
- self.ports = [Service()]
-
- class Status(object):
- def __init__(self):
- self.pod_ip = '172.16.10.131'
-
- class Pod(object):
- def __init__(self):
- self.status = Status()
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
-
- mock_get_service_by_name.return_value = Services()
- mock_get_pod_by_name.return_value = Pod()
- mock_get_node_ip.return_value = '172.16.10.131'
-
- server = k8s_context._get_server('server')
- self.assertIsNotNone(server)
-
- @mock.patch('{}.KubernetesContext._create_rc'.format(prefix))
- def test_create_rcs(self, mock_create_rc):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._create_rcs()
- self.assertTrue(mock_create_rc.called)
-
- @mock.patch('{}.k8s_utils.create_replication_controller'.format(prefix))
- def test_create_rc(self, mock_create_replication_controller):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._create_rc({})
- self.assertTrue(mock_create_replication_controller.called)
-
- @mock.patch('{}.KubernetesContext._delete_rc'.format(prefix))
- def test_delete_rcs(self, mock_delete_rc):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._delete_rcs()
- self.assertTrue(mock_delete_rc.called)
-
- @mock.patch('{}.k8s_utils.delete_replication_controller'.format(prefix))
- def test_delete_rc(self, mock_delete_replication_controller):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._delete_rc({})
- self.assertTrue(mock_delete_replication_controller.called)
-
- @mock.patch('{}.k8s_utils.get_node_list'.format(prefix))
- def test_get_node_ip(self, mock_get_node_list):
-
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._get_node_ip()
- self.assertTrue(mock_get_node_list.called)
-
- @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create')
- def test_create_services(self, mock_create):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._create_services()
- self.assertTrue(mock_create.called)
-
- @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete')
- def test_delete_services(self, mock_delete):
- k8s_context = KubernetesContext()
- k8s_context.init(context_cfg)
- k8s_context._delete_services()
- self.assertTrue(mock_delete.called)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()
diff --git a/tests/unit/benchmark/contexts/test_model.py b/tests/unit/benchmark/contexts/test_model.py
deleted file mode 100644
index 53b035b82..000000000
--- a/tests/unit/benchmark/contexts/test_model.py
+++ /dev/null
@@ -1,589 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.contexts.model
-
-from __future__ import absolute_import
-import unittest
-import mock
-
-from yardstick.benchmark.contexts import model
-
-
-class ObjectTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
-
- def test_construct(self):
-
- test_object = model.Object('foo', self.mock_context)
-
- self.assertEqual(test_object.name, 'foo')
- self.assertEqual(test_object._context, self.mock_context)
- self.assertIsNone(test_object.stack_name)
- self.assertIsNone(test_object.stack_id)
-
- def test_dn(self):
-
- self.mock_context.name = 'bar'
- test_object = model.Object('foo', self.mock_context)
-
- self.assertEqual('foo.bar', test_object.dn)
-
-
-class PlacementGroupTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
- self.mock_context.name = 'bar'
-
- def tearDown(self):
- model.PlacementGroup.map = {}
-
- def test_sucessful_construct(self):
-
- test_pg = model.PlacementGroup('foo', self.mock_context, 'affinity')
-
- self.assertEqual(test_pg.name, 'foo')
- self.assertEqual(test_pg.members, set())
- self.assertEqual(test_pg.stack_name, 'bar-foo')
- self.assertEqual(test_pg.policy, 'affinity')
-
- test_map = {'foo': test_pg}
- self.assertEqual(model.PlacementGroup.map, test_map)
-
- def test_wrong_policy_in_construct(self):
-
- self.assertRaises(ValueError, model.PlacementGroup, 'foo',
- self.mock_context, 'baz')
-
- def test_add_member(self):
-
- test_pg = model.PlacementGroup('foo', self.mock_context, 'affinity')
- test_pg.add_member('foo')
-
- self.assertEqual(test_pg.members, set(['foo']))
-
- def test_get_name_successful(self):
-
- model.PlacementGroup.map = {'foo': True}
- self.assertTrue(model.PlacementGroup.get('foo'))
-
- def test_get_name_unsuccessful(self):
-
- self.assertIsNone(model.PlacementGroup.get('foo'))
-
-
-class RouterTestCase(unittest.TestCase):
-
- def test_construct(self):
-
- mock_context = mock.Mock()
- mock_context.name = 'baz'
- test_router = model.Router('foo', 'bar', mock_context, 'qux')
-
- self.assertEqual(test_router.stack_name, 'baz-bar-foo')
- self.assertEqual(test_router.stack_if_name, 'baz-bar-foo-if0')
- self.assertEqual(test_router.external_gateway_info, 'qux')
-
-
-class NetworkTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
- self.mock_context.name = 'bar'
-
- def tearDown(self):
- model.Network.list = []
-
- def test_construct_no_external_network(self):
-
- attrs = {'cidr': '10.0.0.0/24'}
- test_network = model.Network('foo', self.mock_context, attrs)
-
- self.assertEqual(test_network.stack_name, 'bar-foo')
- self.assertEqual(test_network.subnet_stack_name, 'bar-foo-subnet')
- self.assertEqual(test_network.subnet_cidr, attrs['cidr'])
- self.assertIsNone(test_network.router)
- self.assertIn(test_network, model.Network.list)
-
- def test_construct_has_external_network(self):
-
- attrs = {'external_network': 'ext_net'}
- test_network = model.Network('foo', self.mock_context, attrs)
- exp_router = model.Router('router', 'foo', self.mock_context,
- 'ext_net')
-
- self.assertEqual(test_network.router.stack_name, exp_router.stack_name)
- self.assertEqual(test_network.router.stack_if_name,
- exp_router.stack_if_name)
- self.assertEqual(test_network.router.external_gateway_info,
- exp_router.external_gateway_info)
-
- def test_has_route_to(self):
-
- attrs = {'external_network': 'ext_net'}
- test_network = model.Network('foo', self.mock_context, attrs)
-
- self.assertTrue(test_network.has_route_to('ext_net'))
-
- def test_has_no_route_to(self):
-
- attrs = {}
- test_network = model.Network('foo', self.mock_context, attrs)
-
- self.assertFalse(test_network.has_route_to('ext_net'))
-
- @mock.patch('yardstick.benchmark.contexts.model.Network.has_route_to')
- def test_find_by_route_to(self, mock_has_route_to):
-
- mock_network = mock.Mock()
- model.Network.list = [mock_network]
- mock_has_route_to.return_value = True
-
- self.assertIs(mock_network, model.Network.find_by_route_to('foo'))
-
- def test_find_external_network(self):
-
- mock_network = mock.Mock()
- mock_network.router = mock.Mock()
- mock_network.router.external_gateway_info = 'ext_net'
- model.Network.list = [mock_network]
-
- self.assertEqual(model.Network.find_external_network(), 'ext_net')
-
- def test_construct_gateway_ip_is_null(self):
-
- attrs = {'gateway_ip': 'null'}
- test_network = model.Network('foo', self.mock_context, attrs)
- self.assertEqual(test_network.gateway_ip, 'null')
-
- def test_construct_gateway_ip_is_none(self):
-
- attrs = {'gateway_ip': None}
- test_network = model.Network('foo', self.mock_context, attrs)
- self.assertEqual(test_network.gateway_ip, 'null')
-
- def test_construct_gateway_ip_is_absent(self):
-
- attrs = {}
- test_network = model.Network('foo', self.mock_context, attrs)
- self.assertIsNone(test_network.gateway_ip)
-
-
-class ServerTestCase(unittest.TestCase):
-
- def setUp(self):
- self.mock_context = mock.Mock()
- self.mock_context.name = 'bar'
- self.mock_context.keypair_name = 'some-keys'
- self.mock_context.secgroup_name = 'some-secgroup'
- self.mock_context.user = "some-user"
- netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
- self.mock_context.networks = [model.Network("some-network", self.mock_context, netattrs)]
-
- def test_construct_defaults(self):
-
- attrs = None
- test_server = model.Server('foo', self.mock_context, attrs)
-
- self.assertEqual(test_server.stack_name, 'foo.bar')
- self.assertEqual(test_server.keypair_name, 'some-keys')
- self.assertEqual(test_server.secgroup_name, 'some-secgroup')
- self.assertEqual(test_server.placement_groups, [])
- self.assertIsNone(test_server.server_group)
- self.assertEqual(test_server.instances, 1)
- self.assertIsNone(test_server.floating_ip)
- self.assertIsNone(test_server._image)
- self.assertIsNone(test_server._flavor)
- self.assertIn(test_server, model.Server.list)
-
- @mock.patch('yardstick.benchmark.contexts.model.PlacementGroup')
- def test_construct_get_wrong_placement_group(self, mock_pg):
-
- attrs = {'placement': 'baz'}
- mock_pg.get.return_value = None
-
- self.assertRaises(ValueError, model.Server, 'foo',
- self.mock_context, attrs)
-
- @mock.patch('yardstick.benchmark.contexts.model.PlacementGroup')
- def test_construct_get_wrong_server_group(self, mock_sg):
-
- attrs = {'server_group': 'baz'}
- mock_sg.get.return_value = None
-
- self.assertRaises(ValueError, model.Server, 'foo',
- self.mock_context, attrs)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance(self, mock_template):
- attrs = {'image': 'some-image', 'flavor': 'some-flavor', 'floating_ip': '192.168.1.10',
- 'floating_ip_assoc': 'some-vm',
- 'availability_zone': 'zone'}
- test_server = model.Server('foo', self.mock_context, attrs)
-
- self.mock_context.flavors = ['flavor1', 'flavor2', 'some-flavor']
-
- mock_network = mock.Mock()
- mock_network.name = 'some-network'
- mock_network.stack_name = 'some-network-stack'
- mock_network.allowed_address_pairs = ["1", "2"]
- mock_network.vnic_type = 'normal'
- mock_network.subnet_stack_name = 'some-network-stack-subnet'
- mock_network.provider = 'sriov'
- mock_network.external_network = 'ext_net'
- mock_network.router = model.Router('some-router', 'some-network', self.mock_context,
- 'ext_net')
-
- test_server._add_instance(mock_template, 'some-server',
- [mock_network], 'hints')
-
- mock_template.add_port.assert_called_with(
- 'some-server-some-network-port',
- mock_network.stack_name,
- mock_network.subnet_stack_name,
- mock_network.vnic_type,
- sec_group_id=self.mock_context.secgroup_name,
- provider=mock_network.provider,
- allowed_address_pairs=mock_network.allowed_address_pairs)
-
- mock_template.add_floating_ip.assert_called_with(
- 'some-server-fip',
- mock_network.external_network,
- 'some-server-some-network-port',
- 'bar-some-network-some-router-if0',
- 'some-secgroup'
- )
-
- mock_template.add_floating_ip_association.assert_called_with(
- 'some-server-fip-assoc',
- 'some-server-fip',
- 'some-server-some-network-port'
- )
-
- mock_template.add_server.assert_called_with(
- 'some-server', 'some-image',
- flavor='some-flavor',
- flavors=['flavor1', 'flavor2', 'some-flavor'],
- ports=['some-server-some-network-port'],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data='',
- scheduler_hints='hints',
- availability_zone='zone')
-
- def test_override_ip(self):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.interfaces = {
- "xe0": {
- "local_ip": "1.2.3.4",
- "netmask": "255.255.255.0",
- },
- "xe1": {
- "local_ip": "1.2.3.5",
- "netmask": "255.255.255.0"
- }
- }
- test_server.network_ports = network_ports
-
- test_server.override_ip("uplink_0", {"port": "xe0"})
- self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][0]["xe0"])
-
- def test_override_ip_multiple(self):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.interfaces = {
- "xe0": {
- "local_ip": "1.2.3.4",
- "netmask": "255.255.255.0",
- },
- "xe1": {
- "local_ip": "1.2.3.5",
- "netmask": "255.255.255.0"
- }
- }
- test_server.network_ports = network_ports
- test_server.override_ip("uplink_0", {"port": "xe0"})
- self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][0]["xe0"])
-
- def test_override_ip_mixed(self):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- 'xe0',
- {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.interfaces = {
- "xe0": {
- "local_ip": "1.2.3.4",
- "netmask": "255.255.255.0",
- },
- "xe1": {
- "local_ip": "1.2.3.5",
- "netmask": "255.255.255.0"
- }
- }
- test_server.network_ports = network_ports
- test_server.override_ip("uplink_0", {"port": "xe0"})
- self.assertEqual(test_server.interfaces["xe0"], network_ports["uplink_0"][1]["xe0"])
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_ip_override_invalid_syntax(self, mock_template):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': 'xe0',
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.network_ports = network_ports
- context = type("Context", (object,), {})
- # can't use Mock because Mock.name is reserved
- context.name = "context"
- networks = [model.Network(n, context, {}) for n in network_ports]
-
- with self.assertRaises(SyntaxError):
- test_server._add_instance(mock_template, 'some-server',
- networks, 'hints')
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_ip_override(self, mock_template):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.network_ports = network_ports
- context = type("Context", (object,), {})
- # can't use Mock because Mock.name is reserved
- context.name = "context"
- networks = [model.Network(n, context, {}) for n in network_ports]
-
- test_server._add_instance(mock_template, 'some-server',
- networks, 'hints')
- self.assertEqual(test_server.ports, {
- 'downlink_0': [{'port': 'xe1', 'stack_name': 'some-server-xe1-port'}],
- 'mgmt': [{'port': 'mgmt', 'stack_name': 'some-server-mgmt-port'}],
- 'uplink_0': [{'port': 'xe0', 'stack_name': 'some-server-xe0-port'}]
- })
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_multiple_ip_override(self, mock_template):
- network_ports = {
- 'mgmt': ['mgmt'],
- 'uplink_0': [
- {'xe0': {'local_ip': '10.44.0.20', 'netmask': '255.255.255.0'}},
- {'xe0': {'local_ip': '10.44.0.21', 'netmask': '255.255.255.0'}},
- ],
- 'downlink_0': [
- {'xe1': {'local_ip': '10.44.0.30', 'netmask': '255.255.255.0'}},
- ],
- }
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
- test_server.network_ports = network_ports
- context = type("Context", (object,), {})
- # can't use Mock because Mock.name is reserved
- context.name = "context"
- networks = [model.Network(n, context, {}) for n in network_ports]
-
- test_server._add_instance(mock_template, 'some-server',
- networks, 'hints')
- self.assertEqual(test_server.ports, {
- 'downlink_0': [{'port': 'xe1', 'stack_name': 'some-server-xe1-port'}],
- 'mgmt': [{'port': 'mgmt', 'stack_name': 'some-server-mgmt-port'}],
- 'uplink_0': [{'port': 'xe0', 'stack_name': 'some-server-xe0-port'},
- # this is not an error, we can produce this, it is left to Heat
- # to detect duplicate ports and error
- {'port': 'xe0', 'stack_name': 'some-server-xe0-port'}]
- })
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_user_data(self, mock_template):
- user_data = "USER_DATA"
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- 'user_data': user_data,
- }
- test_server = model.Server('foo', self.mock_context, attrs)
-
- test_server._add_instance(mock_template, 'some-server',
- [], 'hints')
-
- mock_template.add_server.assert_called_with(
- 'some-server', 'some-image',
- flavor='some-flavor',
- flavors=self.mock_context.flavors,
- ports=[],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data=user_data,
- scheduler_hints='hints',
- availability_zone=None)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_with_availablity_zone(self, mock_template):
- attrs = {
- 'image': 'some-image', 'flavor': 'some-flavor',
- 'availability_zone': 'zone',
- }
- test_server = model.Server('foo', self.mock_context, attrs)
-
- test_server._add_instance(mock_template, 'some-server',
- [], 'hints')
-
- mock_template.add_server.assert_called_with(
- 'some-server', 'some-image',
- flavor='some-flavor',
- flavors=self.mock_context.flavors,
- ports=[],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data='',
- scheduler_hints='hints',
- availability_zone='zone')
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_plus_flavor(self, mock_template):
-
- user_data = ''
- attrs = {
- 'image': 'some-image', 'flavor': 'flavor1',
- 'flavors': ['flavor2'], 'user_data': user_data
- }
- test_server = model.Server('ServerFlavor-2', self.mock_context, attrs)
-
- self.mock_context.flavors = ['flavor2']
- mock_network = mock.Mock()
- mock_network.allowed_address_pairs = ["1", "2"]
- mock_network.vnic_type = 'normal'
- mock_network.configure_mock(name='some-network', stack_name='some-network-stack',
- subnet_stack_name='some-network-stack-subnet',
- provider='some-provider')
-
- test_server._add_instance(mock_template, 'ServerFlavor-2',
- [mock_network], 'hints')
-
- mock_template.add_port.assert_called_with(
- 'ServerFlavor-2-some-network-port',
- mock_network.stack_name,
- mock_network.subnet_stack_name,
- mock_network.vnic_type,
- provider=mock_network.provider,
- sec_group_id=self.mock_context.secgroup_name,
- allowed_address_pairs=mock_network.allowed_address_pairs)
-
- mock_template.add_server.assert_called_with(
- 'ServerFlavor-2', 'some-image',
- flavor='flavor1',
- flavors=['flavor2'],
- ports=['ServerFlavor-2-some-network-port'],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data=user_data,
- scheduler_hints='hints',
- availability_zone=None)
-
- @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
- def test__add_instance_misc(self, mock_template):
-
- user_data = ''
- attrs = {
- 'image': 'some-image', 'flavor': 'flavor1',
- 'flavors': ['flavor2'], 'user_data': user_data
- }
- test_server = model.Server('ServerFlavor-3', self.mock_context, attrs)
-
- self.mock_context.flavors = ['flavor2']
- self.mock_context.flavor = {'vcpus': 4}
- mock_network = mock.Mock()
- mock_network.name = 'some-network'
- mock_network.stack_name = 'some-network-stack'
- mock_network.subnet_stack_name = 'some-network-stack-subnet'
-
- test_server._add_instance(mock_template, 'ServerFlavor-3',
- [mock_network], 'hints')
-
- mock_template.add_port(
- 'ServerFlavor-3-some-network-port',
- mock_network.stack_name,
- mock_network.subnet_stack_name,
- sec_group_id=self.mock_context.secgroup_name)
-
- mock_template.add_flavor(
- vcpus=4,
- ram=2048,
- disk=1)
-
- mock_template.add_flavor(
- vcpus=4,
- ram=2048,
- disk=1,
- extra_specs={'cat': 1, 'dog': 2, 'dragon': 1000})
-
- mock_template.add_server.assert_called_with(
- 'ServerFlavor-3', 'some-image',
- flavor='flavor1',
- flavors=['flavor2'],
- ports=['ServerFlavor-3-some-network-port'],
- user=self.mock_context.user,
- key_name=self.mock_context.keypair_name,
- user_data=user_data,
- scheduler_hints='hints',
- availability_zone=None)
diff --git a/tests/unit/benchmark/contexts/test_node.py b/tests/unit/benchmark/contexts/test_node.py
deleted file mode 100644
index a2e2f7b9a..000000000
--- a/tests/unit/benchmark/contexts/test_node.py
+++ /dev/null
@@ -1,398 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# Copyright (c) 2015-2017 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Unittest for yardstick.benchmark.contexts.node
-
-from __future__ import absolute_import
-import os
-import unittest
-import errno
-import mock
-
-from yardstick.common import constants as consts
-from yardstick.benchmark.contexts import node
-
-
-class NodeContextTestCase(unittest.TestCase):
-
- PREFIX = 'yardstick.benchmark.contexts.node'
-
- NODES_SAMPLE = "nodes_sample.yaml"
- NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample.yaml"
-
- def setUp(self):
- self.test_context = node.NodeContext()
- self.os_path_join = os.path.join
-
- def _get_file_abspath(self, filename):
- curr_path = os.path.dirname(os.path.abspath(__file__))
- file_path = self.os_path_join(curr_path, filename)
- return file_path
-
- def test___init__(self):
- self.assertIsNone(self.test_context.name)
- self.assertIsNone(self.test_context.file_path)
- self.assertEqual(self.test_context.nodes, [])
- self.assertEqual(self.test_context.controllers, [])
- self.assertEqual(self.test_context.computes, [])
- self.assertEqual(self.test_context.baremetals, [])
- self.assertEqual(self.test_context.env, {})
- self.assertEqual(self.test_context.attrs, {})
-
- @mock.patch('{}.os.path.join'.format(PREFIX))
- def test_init_negative(self, mock_path_join):
- special_path = '/foo/bar/error_file'
- error_path = self._get_file_abspath("error_file")
-
- def path_join(*args):
- if args == (consts.YARDSTICK_ROOT_PATH, error_path):
- return special_path
- return self.os_path_join(*args)
-
- # we can't count mock_path_join calls because
- # it can catch join calls for .pyc files.
- mock_path_join.side_effect = path_join
- self.test_context.read_config_file = read_mock = mock.Mock()
- read_calls = 0
-
- with self.assertRaises(KeyError):
- self.test_context.init({})
-
- self.assertEqual(read_mock.call_count, read_calls)
-
- attrs = {
- 'name': 'foo',
- 'file': error_path,
- }
- read_mock.side_effect = IOError(errno.EBUSY, 'busy')
- with self.assertRaises(IOError) as raised:
- self.test_context.init(attrs)
-
- read_calls += 1
- self.assertEqual(read_mock.called, read_calls)
- self.assertIn(attrs['file'], self.test_context.file_path)
- self.assertEqual(raised.exception.errno, errno.EBUSY)
- self.assertEqual(str(raised.exception), str(read_mock.side_effect))
-
- read_mock.side_effect = IOError(errno.ENOENT, 'not found')
- with self.assertRaises(IOError) as raised:
- self.test_context.init(attrs)
-
- read_calls += 2
- self.assertEqual(read_mock.call_count, read_calls)
- self.assertEqual(self.test_context.file_path, special_path)
- self.assertEqual(raised.exception.errno, errno.ENOENT)
- self.assertEqual(str(raised.exception), str(read_mock.side_effect))
-
- def test_read_config_file(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.assertIsNotNone(self.test_context.read_config_file())
-
- def test__dispatch_script(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.test_context.env = {'bash': [{'script': 'dummy'}]}
- self.test_context._execute_script = mock.Mock()
- self.assertEqual(self.test_context._dispatch_script('bash'), None)
-
- def test__dispatch_ansible(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.test_context.env = {'ansible': [{'script': 'dummy'}]}
- self.test_context._do_ansible_job = mock.Mock()
- self.assertEqual(self.test_context._dispatch_ansible('ansible'), None)
- self.test_context.env = {}
- self.assertEqual(self.test_context._dispatch_ansible('ansible'), None)
-
- @mock.patch("{}.AnsibleCommon".format(PREFIX))
- def test__do_ansible_job(self, mock_ansible):
- self.assertEqual(None, self.test_context._do_ansible_job('dummy'))
-
- def test_successful_init(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- self.assertEqual(self.test_context.name, "foo")
- self.assertEqual(len(self.test_context.nodes), 4)
- self.assertEqual(len(self.test_context.controllers), 2)
- self.assertEqual(len(self.test_context.computes), 1)
- self.assertEqual(self.test_context.computes[0]["name"], "node3")
- self.assertEqual(len(self.test_context.baremetals), 1)
- self.assertEqual(self.test_context.baremetals[0]["name"], "node4")
-
- def test__get_server_with_dic_attr_name(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = {'name': 'foo.bar'}
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_not_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'bar.foo'
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_mismatch(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'bar.foo1'
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result, None)
-
- def test__get_server_duplicate(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'node1.foo'
- with self.assertRaises(ValueError):
- self.test_context._get_server(attr_name)
-
- def test__get_server_found(self):
-
- attrs = {
- 'name': 'foo',
- 'file': self._get_file_abspath(self.NODES_SAMPLE)
- }
-
- self.test_context.init(attrs)
-
- attr_name = 'node1.foo'
- result = self.test_context._get_server(attr_name)
-
- self.assertEqual(result['ip'], '10.229.47.137')
- self.assertEqual(result['name'], 'node1.foo')
- self.assertEqual(result['user'], 'root')
- self.assertEqual(result['key_filename'], '/root/.yardstick_key')
-
- @mock.patch('{}.NodeContext._dispatch_script'.format(PREFIX))
- def test_deploy(self, dispatch_script_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'script'
- }
- obj.deploy()
- self.assertTrue(dispatch_script_mock.called)
-
- @mock.patch('{}.NodeContext._dispatch_ansible'.format(PREFIX))
- def test_deploy_anisible(self, dispatch_ansible_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'ansible'
- }
- obj.deploy()
- self.assertTrue(dispatch_ansible_mock.called)
-
- @mock.patch('{}.NodeContext._dispatch_script'.format(PREFIX))
- def test_undeploy(self, dispatch_script_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'script'
- }
- obj.undeploy()
- self.assertTrue(dispatch_script_mock.called)
-
- @mock.patch('{}.NodeContext._dispatch_ansible'.format(PREFIX))
- def test_undeploy_anisble(self, dispatch_ansible_mock):
- obj = node.NodeContext()
- obj.env = {
- 'type': 'ansible'
- }
- obj.undeploy()
- self.assertTrue(dispatch_ansible_mock.called)
-
- @mock.patch('{}.ssh.SSH._put_file_shell'.format(PREFIX))
- @mock.patch('{}.ssh.SSH.execute'.format(PREFIX))
- def test_execute_remote_script(self, execute_mock, put_file_mock):
- obj = node.NodeContext()
- obj.env = {'prefix': 'yardstick.benchmark.scenarios.compute'}
- node_name_args = 'node5'
- obj.nodes = [{
- 'name': node_name_args,
- 'user': 'ubuntu',
- 'ip': '10.10.10.10',
- 'pwd': 'ubuntu',
- }]
-
- info = {'script': 'computecapacity.bash'}
- execute_mock.return_value = (0, '', '')
- obj._execute_remote_script('node5', info)
-
- self.assertTrue(put_file_mock.called)
- self.assertTrue(execute_mock.called)
-
- @mock.patch('{}.NodeContext._execute_local_script'.format(PREFIX))
- def test_execute_script_local(self, local_execute_mock):
- node_name = 'local'
- info = {}
- node.NodeContext()._execute_script(node_name, info)
- self.assertTrue(local_execute_mock.called)
-
- @mock.patch('{}.NodeContext._execute_remote_script'.format(PREFIX))
- def test_execute_script_remote(self, remote_execute_mock):
- node_name = 'node5'
- info = {}
- node.NodeContext()._execute_script(node_name, info)
- self.assertTrue(remote_execute_mock.called)
-
- def test_get_script(self):
- script_args = 'hello.bash'
- info_args = {
- 'script': script_args
- }
- script, options = node.NodeContext()._get_script(info_args)
- self.assertEqual(script_args, script)
- self.assertEqual('', options)
-
- def test_node_info(self):
- node_name_args = 'node5'
- obj = node.NodeContext()
- obj.nodes = [{'name': node_name_args, 'check': node_name_args}]
- node_info = obj._get_node_info(node_name_args)
- self.assertEqual(node_info.get('check'), node_name_args)
-
- @mock.patch('{}.ssh.SSH.wait'.format(PREFIX))
- def test_get_client(self, wait_mock):
- node_name_args = 'node5'
- obj = node.NodeContext()
- obj.nodes = [{
- 'name': node_name_args,
- 'user': 'ubuntu',
- 'ip': '10.10.10.10',
- 'pwd': 'ubuntu',
- }]
- obj._get_client(node_name_args)
- self.assertTrue(wait_mock.called)
-
- def test_get_server(self):
- self.test_context.name = 'vnf1'
- self.test_context.nodes = [{'name': 'my', 'value': 100}]
-
- with self.assertRaises(ValueError):
- self.test_context.get_server('my.vnf2')
-
- expected = {'name': 'my.vnf1', 'value': 100, 'interfaces': {}}
- result = self.test_context.get_server('my.vnf1')
- self.assertDictEqual(result, expected)
-
- def test_get_context_from_server(self):
- self.test_context.name = 'vnf1'
- self.test_context.nodes = [{'name': 'my', 'value': 100}]
- self.test_context.attrs = {'attr1': 200}
-
- with self.assertRaises(ValueError):
- self.test_context.get_context_from_server('my.vnf2')
-
- result = self.test_context.get_context_from_server('my.vnf1')
- self.assertIs(result, self.test_context)
-
- def test__get_network(self):
- network1 = {
- 'name': 'net_1',
- 'vld_id': 'vld111',
- 'segmentation_id': 'seg54',
- 'network_type': 'type_a',
- 'physical_network': 'phys',
- }
- network2 = {
- 'name': 'net_2',
- 'vld_id': 'vld999',
- }
- self.test_context.networks = {
- 'a': network1,
- 'b': network2,
- }
-
- attr_name = {}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld777'}
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- self.assertIsNone(self.test_context._get_network(None))
-
- attr_name = 'vld777'
- self.assertIsNone(self.test_context._get_network(attr_name))
-
- attr_name = {'vld_id': 'vld999'}
- expected = {
- "name": 'net_2',
- "vld_id": 'vld999',
- "segmentation_id": None,
- "network_type": None,
- "physical_network": None,
- }
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
- attr_name = 'a'
- expected = network1
- result = self.test_context._get_network(attr_name)
- self.assertDictEqual(result, expected)
-
-
-def main():
- unittest.main()
-
-
-if __name__ == '__main__':
- main()