Merge "Add "img_property" when building Yardstick image"
authorRoss Brattain <ross.b.brattain@intel.com>
Thu, 1 Feb 2018 19:24:34 +0000 (19:24 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Thu, 1 Feb 2018 19:24:34 +0000 (19:24 +0000)
101 files changed:
INFO
ansible/infra_deploy.yml [new file with mode: 0644]
ansible/roles/download_civetweb/defaults/main.yml
ansible/roles/download_drivers/defaults/main.yml [new file with mode: 0644]
ansible/roles/download_drivers/tasks/i40evf.yml [new file with mode: 0644]
ansible/roles/download_drivers/tasks/main.yml [new file with mode: 0644]
ansible/roles/enable_iommu_on_boot/tasks/main.yml [new file with mode: 0644]
ansible/roles/enable_iommu_on_boot/tasks/manual_modify_grub.yml [moved from samples/vnf_samples/nsut/prox/ovs-dpdk/http_tests/tc_FileSize-1K_Requests-1M_Concurrency-100.yaml with 50% similarity]
ansible/roles/enable_iommu_on_boot/vars/main.yml [new file with mode: 0644]
ansible/roles/infra_check_requirements/tasks/main.yml [new file with mode: 0644]
ansible/roles/infra_check_requirements/vars/main.yml [new file with mode: 0644]
ansible/roles/install_drivers/tasks/Debian.yml [new file with mode: 0755]
ansible/roles/install_drivers/tasks/RedHat.yml [new file with mode: 0644]
ansible/roles/install_drivers/tasks/i40evf.yml [new file with mode: 0644]
ansible/roles/install_drivers/tasks/main.yml [new file with mode: 0644]
ansible/ubuntu_server_cloudimg_modify_samplevnfs.yml
docker/Dockerfile
docker/Dockerfile.aarch64.patch
docs/testing/user/userguide/04-installation.rst
docs/testing/user/userguide/opnfv_yardstick_tc081.rst
docs/testing/user/userguide/opnfv_yardstick_tc084.rst [new file with mode: 0644]
etc/infra/infra_deploy.yaml.sample [new file with mode: 0644]
etc/yardstick/nodes/fuel_baremetal/pod.yaml
nsb_setup.sh
requirements.txt
samples/vnf_samples/nsut/prox/baremetal/throughput/tc_ipv4_1flow_64B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_1518B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_64B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_IMIX_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_1518B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_64B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_IMIX_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/sriov/http_tests/tc_FileSize-1K_Requests-1M_Concurrency-100.yaml [deleted file]
samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_1518B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_64B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_IMIX_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_1518B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_64B_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_IMIX_packetsize.yaml [deleted file]
samples/vnf_samples/nsut/vfw/tc_heat_sriov_external_rfc2544_ipv4_1rule_1flow_64B_trex.yaml [new file with mode: 0644]
tests/ci/ansible_load_images.sh
tests/ci/load_images.sh
tests/ci/prepare_env.sh
tests/unit/benchmark/contexts/standalone/test_model.py
tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py
tests/unit/benchmark/contexts/standalone/test_sriov.py
tests/unit/benchmark/scenarios/availability/test_monitor_command.py
tests/unit/benchmark/scenarios/availability/test_serviceha.py
tests/unit/benchmark/scenarios/availability/test_util.py
tests/unit/benchmark/scenarios/compute/test_cyclictest.py
tests/unit/benchmark/scenarios/compute/test_qemumigrate.py
tests/unit/benchmark/scenarios/compute/test_unixbench.py
tests/unit/benchmark/scenarios/dummy/test_dummy.py
tests/unit/benchmark/scenarios/lib/test_check_numa_info.py
tests/unit/benchmark/scenarios/lib/test_create_volume.py
tests/unit/benchmark/scenarios/networking/test_netperf.py
tests/unit/benchmark/scenarios/networking/test_netperf_node.py
tests/unit/benchmark/scenarios/networking/test_nstat.py
tests/unit/benchmark/scenarios/networking/test_ping6.py
tests/unit/benchmark/scenarios/networking/test_pktgen.py
tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py
tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py
tests/unit/benchmark/scenarios/networking/test_vsperf.py
tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py
tests/unit/benchmark/scenarios/parser/test_parser.py
tests/unit/benchmark/scenarios/storage/test_fio.py
tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
tests/unit/network_services/nfvi/test_resource.py
tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py
tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
tests/unit/network_services/vnf_generic/vnf/test_tg_ping.py
tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py
tests/unit/network_services/vnf_generic/vnf/test_udp_replay.py
tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py
tools/run_tests.sh
tools/virt_ci_rampup.sh [new file with mode: 0755]
yardstick/benchmark/contexts/standalone/model.py
yardstick/benchmark/scenarios/lib/create_volume.py
yardstick/benchmark/scenarios/parser/parser.py
yardstick/common/utils.py
yardstick/network_services/collector/subscriber.py
yardstick/network_services/nfvi/resource.py
yardstick/network_services/vnf_generic/vnf/sample_vnf.py
yardstick/tests/functional/common/__init__.py [moved from tests/unit/dispatcher/__init__.py with 100% similarity]
yardstick/tests/functional/common/fake_module/__init__.py [moved from tests/unit/orchestrator/__init__.py with 100% similarity]
yardstick/tests/functional/common/fake_module/fake_library.py [new file with mode: 0644]
yardstick/tests/functional/common/test_utils.py [new file with mode: 0644]
yardstick/tests/unit/apiserver/resources/test_env_action.py
yardstick/tests/unit/common/test_utils.py
yardstick/tests/unit/common/test_yaml_loader.py
yardstick/tests/unit/dispatcher/__init__.py [moved from tests/unit/test_cmd/__init__.py with 100% similarity]
yardstick/tests/unit/dispatcher/test_influxdb.py [moved from tests/unit/dispatcher/test_influxdb.py with 97% similarity]
yardstick/tests/unit/dispatcher/test_influxdb_line_protocol.py [moved from tests/unit/dispatcher/test_influxdb_line_protocol.py with 98% similarity]
yardstick/tests/unit/orchestrator/__init__.py [moved from tests/unit/test_cmd/commands/__init__.py with 100% similarity]
yardstick/tests/unit/orchestrator/test_heat.py [moved from tests/unit/orchestrator/test_heat.py with 52% similarity]
yardstick/tests/unit/orchestrator/test_kubernetes.py [moved from tests/unit/orchestrator/test_kubernetes.py with 96% similarity]
yardstick/tests/unit/test_cmd/__init__.py [new file with mode: 0644]
yardstick/tests/unit/test_cmd/commands/__init__.py [new file with mode: 0644]
yardstick/tests/unit/test_cmd/commands/test_env.py [moved from tests/unit/test_cmd/commands/test_env.py with 100% similarity]
yardstick/tests/unit/test_cmd/commands/test_testcase.py [moved from tests/unit/test_cmd/commands/test_testcase.py with 100% similarity]
yardstick/tests/unit/test_cmd/test_NSBperf.py [moved from tests/unit/test_cmd/test_NSBperf.py with 99% similarity]

diff --git a/INFO b/INFO
index c19a9d5..35b2828 100644 (file)
--- a/INFO
+++ b/INFO
@@ -13,13 +13,15 @@ Repository: yardstick
 Committers:
 jorgen.w.karlsson@ericsson.com
 jean.gaoliang@huawei.com
-vincenzo.m.riccobene@intel.com
 lvjing5@huawei.com
 wu.zhihui1@zte.com.cn
 14_ykl@tongji.edu.cn
 limingjiang@huawei.com
 trevor.cooper@intel.com
 ross.b.brattain@intel.com
+chenjiankun1@huawei.com
+rodolfo.alonso.hernandez@intel.com
+emma.l.foley@intel.com
 
 Link to TSC approval: http://meetbot.opnfv.org/meetings/
 Link to approval of additional submitters:
diff --git a/ansible/infra_deploy.yml b/ansible/infra_deploy.yml
new file mode 100644 (file)
index 0000000..10f53fb
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (c) 2018 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.
+---
+- hosts: jumphost
+
+  roles:
+    - infra_check_requirements
index 5efc9bb..289e52c 100644 (file)
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ---
-civetweb_url: https://sourceforge.net/projects/civetweb/files/1.9/CivetWeb_V1.9.zip
+civetweb_url: https://iweb.dl.sourceforge.net/project/civetweb/1.9.1/CivetWeb_V1.9.1.zip
 civetweb_file: "{{ civetweb_url|basename }}"
 civetweb_dest: "{{ clone_dest }}/civetweb"
-civetweb_sha256s: "sha256:947a546bfccd733c79dff9565227fa74f4d17750650ff49312ef4b2d032fa8c8"
+civetweb_sha256s: "sha256:69a82f042eae0197fb50b09861a8e2c5fff2871c196a21edd122bb8ce34ca0f3"
diff --git a/ansible/roles/download_drivers/defaults/main.yml b/ansible/roles/download_drivers/defaults/main.yml
new file mode 100644 (file)
index 0000000..ff4c307
--- /dev/null
@@ -0,0 +1,21 @@
+# Copyright (c) 2018 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.
+---
+i40evf_version: "3.4.2"
+i40evf_gzfile: "i40evf-{{ i40evf_version }}.tar.gz"
+i40evf_url: "https://sourceforge.net/projects/e1000/files/i40evf%20stable/{{ i40evf_version }}/{{ i40evf_gzfile }}/download"
+i40evf_dest: "{{ clone_dest }}/"
+i40evf_path: "{{ i40evf_dest }}/{{ i40evf_gzfile|regex_replace('[.]tar[.]gz$', '') }}"
+i40evf_checksum:
+  "3.4.2": "sha256:a8e2a722fb2f8ac874cb39545a331761841f1724830ff1581d2012dd37314645"
diff --git a/ansible/roles/download_drivers/tasks/i40evf.yml b/ansible/roles/download_drivers/tasks/i40evf.yml
new file mode 100644 (file)
index 0000000..cb8a09d
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (c) 2018 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.
+---
+- name: Directory to store i40evf driver
+  file:
+    path: "{{ i40evf_dest }}"
+    state: directory
+
+- name: Fetch i40evf driver
+  get_url:
+    url: "{{ i40evf_url }}"
+    dest: "{{ i40evf_dest }}/{{ i40evf_gzfile }}"
+    validate_certs: False
+    checksum: "{{ i40evf_checksum[i40evf_version] }}"
+
+- name: Unarchive the i40evf file
+  unarchive:
+    src: "{{ i40evf_dest }}/{{ i40evf_gzfile }}"
+    dest: "{{ i40evf_dest }}"
+    copy: no
+
+- name: Cleanup the archive to save space
+  file:
+      path: "{{ i40evf_dest }}/{{ i40evf_gzfile }}"
+      state: absent
diff --git a/ansible/roles/download_drivers/tasks/main.yml b/ansible/roles/download_drivers/tasks/main.yml
new file mode 100644 (file)
index 0000000..b7c1e0f
--- /dev/null
@@ -0,0 +1,15 @@
+# Copyright (c) 2018 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.
+---
+- include: i40evf.yml
diff --git a/ansible/roles/enable_iommu_on_boot/tasks/main.yml b/ansible/roles/enable_iommu_on_boot/tasks/main.yml
new file mode 100644 (file)
index 0000000..1b98a50
--- /dev/null
@@ -0,0 +1,72 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+---
+- name: Set iommu_boot_params for Intel
+  set_fact:
+    iommu_boot_params: ' intel_iommu=on iommu=pt'
+  when: hostvars[inventory_hostname]['ansible_system_vendor'] == "Intel Corporation"
+
+- name: Set iommu_boot_params for AMD
+  set_fact:
+    iommu_boot_params: ' amd_iommu=on iommu=pt'
+  when: hostvars[inventory_hostname]['ansible_system_vendor'] == "AuthenticAMD"
+
+- name: Set facts for this role
+  set_fact:
+    hugepages_help_string: '  # added by hugepages role'
+    iommu_help_string: ', added by iommu role'
+    hugepages_params: " default_hugepagesz=1G hugepagesz=1G hugepages=8"
+    iommu_original_kernel_params: 'GRUB_CMDLINE_LINUX="\$GRUB_CMDLINE_LINUX{{ hugepages_params }}'
+    iommu_enabled_kernel_params: '{{ iommu_original_kernel_params }}{{ iommu_boot_params }}"'
+    iommu_enabled_kernel_params_with_help: '{{ iommu_original_kernel_params }}{{ iommu_boot_params }}"{{ hugepages_help_string }}{{ iommu_help_string }}'
+
+- name: check if iommu is set by this role in /etc/default/grub
+  lineinfile:
+    path: /etc/default/grub
+    line: '{{ iommu_enabled_kernel_params_with_help }}'
+  #changed_when: no
+  check_mode: yes
+  register: is_mine_iommu_etc_grub
+  ignore_errors: True
+
+- name: check if iommu is set by someone else
+  command: "grep -o 'iommu' /etc/default/grub"
+  register: is_iommu
+  ignore_errors: True
+
+- fail:
+    msg: "Iommu already set by someone else"
+  when: is_mine_iommu_etc_grub.changed == false and is_iommu.stdout != ""
+
+- name: 'Configure iommu in /etc/default/grub'
+# and /boot/grub/grub.cfg(when: ansible_distribution == "Ubuntu")'
+  lineinfile:
+    path: /etc/default/grub
+    regexp: '({{ iommu_original_kernel_params }})"{{ hugepages_help_string }}'
+    line: '\1{{ iommu_boot_params }}"{{ hugepages_help_string }}{{ iommu_help_string }}'
+    backrefs: yes
+  when: is_mine_iommu_etc_grub.changed == true
+
+- name: find boot grub.cfg
+  find:
+    paths: /boot
+    file_type: file
+    patterns: 'grub*.cfg'
+    recurse: yes
+  register: grub_files
+
+- include: manual_modify_grub.yml
+  # only tested on Ubuntu, kernel line is probably different on other distros
+  with_items: "{{ grub_files.files }}"
+  when: ansible_distribution == "Ubuntu"
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
 ---
-schema: "yardstick:task:0.1"
-
-scenarios:
--
-  type: NSPerf
-  traffic_profile: ../../../../traffic_profiles/http_tests/FileSize-1K_Requests-1M_Concurrency-100.yaml
-  topology: ../../acl-tg-topology-http.yaml
 
-  nodes:
-    vnf__0: vnf.yardstick
-    tg__0: trafficgen_1.yardstick
-    tg__1: trafficgen_2.yardstick
 
-  options:
-    acl:
-      rules: ../../acl_rules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
+- name: check if iommu is set by this role in /boot grub.cfg files
+  lineinfile:
+    path: "{{ item.path }}"
+    regexp: '{{ hugepages_params }}{{ iommu_boot_params }}'
+    line: ''
+  #changed_when: no
+  check_mode: yes
+  register: is_mine_iommu_boot_grub
+  ignore_errors: True
 
-  runner:
-    type: Duration
-    duration: 2
+- name: added iommu to grub manually because we can't run update-grub in chroot
+  replace:
+    path: "{{ item.path }}"
+    regexp: '(.*linux\s+/boot/vmlinuz.*)$'
+    replace: '\1{{ iommu_boot_params }}'
+  when: is_mine_iommu_boot_grub.msg != "line replaced"
 
-context:
-  type: Node-ovs
-  name: yardstick
-  nfvi_type: ovs
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_ovs.yaml
+- debug: var=ansible_kernel
diff --git a/ansible/roles/enable_iommu_on_boot/vars/main.yml b/ansible/roles/enable_iommu_on_boot/vars/main.yml
new file mode 100644 (file)
index 0000000..1b642dc
--- /dev/null
@@ -0,0 +1,17 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+---
+update_grub:
+  Debian: "update-grub2"
+  RedHat: "grub2-mkconfig -o /boot/grub2/grub.cfg"
diff --git a/ansible/roles/infra_check_requirements/tasks/main.yml b/ansible/roles/infra_check_requirements/tasks/main.yml
new file mode 100644 (file)
index 0000000..8d05bbd
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright (c) 2018 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.
+---
+- name: Include
+  include_vars:
+    file: "{{rs_file}}"
+    name: infra_deploy_vars
+
+- name: Store total CPU, RAM, Disk requested resources
+  set_fact:
+    vcpu_t: "{{item.vcpus|int + vcpu_t|int}}"
+    vram_t: "{{item.ram|int + vram_t|int}}"
+    disk_t: "{{item.disk|int + disk_t|int}}"
+  with_items: "{{infra_deploy_vars.nodes}}"
+
+- name: Fail if not enough RAM
+  fail:
+    msg: "Failed, not enough RAM, required: {{ vram_t }}, available {{ ansible_memory_mb.nocache.free }}"
+  when: ansible_memory_mb.nocache.free < vram_t|int
+
+- name: Fail if not enough CPU
+  fail:
+    msg: "Failed, not enough CPU, required: {{ vcpu_t }}, available {{ ansible_processor_vcpus }}"
+  when: ansible_processor_vcpus < vcpu_t|int
+
+
+- name: Fail if not enough Disk space
+  set_fact:
+    disk_avail: "{% for mount in ansible_mounts if mount.mount == '/' %}{{ (mount.size_available/1024/1024)|int }}{% endfor %}"
+- fail:
+    msg: "Failed, not enough disk space, required {{ disk_t }}, available: {{ disk_avail }}"
+  when: disk_avail|int < disk_t|int
diff --git a/ansible/roles/infra_check_requirements/vars/main.yml b/ansible/roles/infra_check_requirements/vars/main.yml
new file mode 100644 (file)
index 0000000..219c338
--- /dev/null
@@ -0,0 +1,17 @@
+# Copyright (c) 2018 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.
+---
+vcpu_t: 0
+vram_t: 0
+disk_t: 0
diff --git a/ansible/roles/install_drivers/tasks/Debian.yml b/ansible/roles/install_drivers/tasks/Debian.yml
new file mode 100755 (executable)
index 0000000..27f6b74
--- /dev/null
@@ -0,0 +1,16 @@
+# Copyright (c) 2018 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.
+---
+- name: Install kernel headers
+  action: "{{ ansible_pkg_mgr }} name=linux-headers-{{ chroot_kernel }} state=present"
diff --git a/ansible/roles/install_drivers/tasks/RedHat.yml b/ansible/roles/install_drivers/tasks/RedHat.yml
new file mode 100644 (file)
index 0000000..d2e2a37
--- /dev/null
@@ -0,0 +1,16 @@
+# Copyright (c) 2018 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.
+---
+- name: Install kernel headers
+  action: "{{ ansible_pkg_mgr }} name=kernel-headers-{{ chroot_kernel }} state=present"
diff --git a/ansible/roles/install_drivers/tasks/i40evf.yml b/ansible/roles/install_drivers/tasks/i40evf.yml
new file mode 100644 (file)
index 0000000..1cd95ce
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (c) 2018 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.
+---
+- name: Make i40evf
+  make:
+    chdir: "{{ i40evf_path }}/src"
+    params:
+      BUILD_KERNEL: "{{ chroot_kernel }}"
+
+- name: Make i40evf install
+  make:
+    chdir: "{{ i40evf_path }}/src"
+    target: install
+    params:
+      BUILD_KERNEL: "{{ chroot_kernel }}"
+
+- name: Configure i40evf to load on boot
+  copy:
+    content: i40evf
+    dest: /etc/modules-load.d/i40evf.conf
diff --git a/ansible/roles/install_drivers/tasks/main.yml b/ansible/roles/install_drivers/tasks/main.yml
new file mode 100644 (file)
index 0000000..72a432e
--- /dev/null
@@ -0,0 +1,28 @@
+# Copyright (c) 2018 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.
+---
+- name: Find kernel for image, (including chroot)
+  find_kernel:
+    kernel: "{{ ansible_kernel }}"
+  register: found_kernel
+
+# Do this before installing kernel headers
+- name: Set chroot_kernel to be the kernel we found
+  set_fact:
+    chroot_kernel: "{{ found_kernel.kernel }}"
+
+- include: "{{ ansible_os_family }}.yml"
+
+# Install drivers
+- include: i40evf.yml
index dff7f97..85afa2a 100644 (file)
@@ -62,3 +62,5 @@
     - install_pmu_tools
     - download_collectd
     - install_collectd
+    - download_drivers
+    - install_drivers
index 2ee5b4c..ddd8dfa 100644 (file)
@@ -26,7 +26,7 @@ ENV YARDSTICK_REPO_DIR="${REPOS_DIR}/yardstick" \
 
 RUN apt-get update && apt-get install -y git python-setuptools python-pip && apt-get -y autoremove && apt-get clean
 RUN easy_install -U setuptools==30.0.0
-RUN pip install appdirs==1.4.0 pyopenssl==17.5.0
+RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 python-openstackclient==3.11.0
 
 RUN mkdir -p ${REPOS_DIR}
 
index 33c352a..ca93351 100644 (file)
@@ -1,14 +1,15 @@
-From: Alexandru Nemes <alexandru.nemes@enea.com>
-Date: Mon, 19 Jun 2017 14:18:24 +0300
+From: Cristina Pauna <cristina.pauna@enea.com>
+Date: Thu, 11 Jan 2018 19:06:26 +0200
 Subject: [PATCH] Patch for Yardstick AARCH64 Docker file
 
+Signed-off-by: Cristina Pauna <cristina.pauna@enea.com>
 Signed-off-by: Alexandru Nemes <alexandru.nemes@enea.com>
 ---
- docker/Dockerfile | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
+ docker/Dockerfile | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
 
 diff --git a/docker/Dockerfile b/docker/Dockerfile
-index 96a5d77..03307a2 100644
+index 2ee5b4c..23e5ea5 100644
 --- a/docker/Dockerfile
 +++ b/docker/Dockerfile
 @@ -1,5 +1,5 @@
@@ -22,15 +23,25 @@ index 96a5d77..03307a2 100644
  # http://www.apache.org/licenses/LICENSE-2.0
  ##############################################################################
 
--FROM ubuntu:14.04
-+FROM aarch64/ubuntu:14.04
+-FROM ubuntu:16.04
++FROM arm64v8/ubuntu:16.04
 
 -LABEL image=opnfv/yardstick
 +LABEL image=opnfv/yardstick_aarch64
 
  ARG BRANCH=master
 
-@@ -40,8 +40,8 @@ RUN echo "daemon off;" >> /etc/nginx/nginx.conf
+@@ -24,7 +24,8 @@ ENV YARDSTICK_REPO_DIR="${REPOS_DIR}/yardstick" \
+     RELENG_REPO_DIR="${REPOS_DIR}/releng" \
+     STORPERF_REPO_DIR="${REPOS_DIR}/storperf"
+
+-RUN apt-get update && apt-get install -y git python-setuptools python-pip && apt-get -y autoremove && apt-get clean
++RUN apt-get update && apt-get install -y git python-setuptools python-pip && apt-get -y autoremove && \
++    apt-get install -y libssl-dev && apt-get -y install libffi-dev && apt-get clean
+ RUN easy_install -U setuptools==30.0.0
+ RUN pip install appdirs==1.4.0 pyopenssl==17.5.0
+
+@@ -43,8 +44,8 @@ RUN echo "daemon off;" >> /etc/nginx/nginx.conf
 
  EXPOSE 5000
 
@@ -39,4 +50,5 @@ index 96a5d77..03307a2 100644
 +ADD http://download.cirros-cloud.net/daily/20161201/cirros-d161201-aarch64-disk.img ${IMAGE_DIR}
 +ADD http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-arm64-disk1.img ${IMAGE_DIR}
 
- COPY ./exec_tests.sh /usr/local/bin/
\ No newline at end of file
+ COPY ./exec_tests.sh /usr/local/bin/
+
index 828c495..caebecc 100644 (file)
@@ -107,6 +107,12 @@ Run the Docker image to get a Yardstick container::
    ======================= ====================================================
    --name yardstick        The name for this container
 
+If the host is restarted
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+The yardstick container must be started if the host is rebooted::
+
+    docker start yardstick
 
 Configure the Yardstick container environment
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -301,12 +307,6 @@ Prerequisite preparation::
    sudo -EH pip install appdirs==1.4.0
    sudo -EH pip install virtualenv
 
-Create a virtual environment::
-
-   virtualenv ~/yardstick_venv
-   export YARDSTICK_VENV=~/yardstick_venv
-   source ~/yardstick_venv/bin/activate
-
 Download the source code and install Yardstick from it::
 
    git clone https://gerrit.opnfv.org/gerrit/yardstick
@@ -314,6 +314,10 @@ Download the source code and install Yardstick from it::
    cd ~/yardstick
    sudo -EH ./install.sh
 
+If the host is ever restarted, nginx and uwsgi need to be restarted::
+
+   service nginx restart
+   uwsgi -i /etc/yardstick/yardstick.ini
 
 Configure the Yardstick environment (**Todo**)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
index 90af8a3..793c3fd 100644 (file)
@@ -4,7 +4,7 @@
 .. (c) OPNFV, Huawei Technologies Co.,Ltd and others.
 
 *************************************
-Yardstick Test Case Description TC080
+Yardstick Test Case Description TC081
 *************************************
 
 .. _cirros-image: https://download.cirros-cloud.net
@@ -21,7 +21,7 @@ Yardstick Test Case Description TC080
 |metric        | RTT (Round Trip Time)                                        |
 |              |                                                              |
 +--------------+--------------------------------------------------------------+
-|test purpose  | The purpose of TC080 is to do a basic verification that      |
+|test purpose  | The purpose of TC081 is to do a basic verification that      |
 |              | network latency is within acceptable boundaries when packets |
 |              | travel between a containers and a VM.                        |
 |              |                                                              |
diff --git a/docs/testing/user/userguide/opnfv_yardstick_tc084.rst b/docs/testing/user/userguide/opnfv_yardstick_tc084.rst
new file mode 100644 (file)
index 0000000..2e7b28e
--- /dev/null
@@ -0,0 +1,140 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Technologies Co.,Ltd and others.
+
+*************************************
+Yardstick Test Case Description TC084
+*************************************
+
+.. _spec_cpu_2006: https://www.spec.org/cpu2006/
+
++-----------------------------------------------------------------------------+
+|Compute Performance                                                          |
+|                                                                             |
++--------------+--------------------------------------------------------------+
+|test case id  | OPNFV_YARDSTICK_TC084_SPEC CPU 2006 FOR VM                   |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|metric        | compute-intensive performance                                |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|test purpose  | The purpose of TC084 is to evaluate the IaaS compute         |
+|              | performance by using SPEC CPU 2006 benchmark. The SPEC CPU   |
+|              | 2006 benchmark has several different ways to measure         |
+|              | computer performance. One way is to measure how fast the     |
+|              | computer completes a single task; this is called a speed     |
+|              | measurement. Another way is to measure how many tasks        |
+|              | computer can accomplish in a certain amount of time; this is |
+|              | called a throughput, capacity or rate measurement.           |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|test tool     | SPEC CPU 2006                                                |
+|              |                                                              |
+|              | The SPEC CPU 2006 benchmark is SPEC's industry-standardized, |
+|              | CPU-intensive benchmark suite, stressing a system's          |
+|              | processor, memory subsystem and compiler. This benchmark     |
+|              | suite includes the SPECint benchmarks and the SPECfp         |
+|              | benchmarks. The SPECint 2006 benchmark contains 12 different |
+|              | benchmark tests and the SPECfp 2006 benchmark contains 19    |
+|              | different benchmark tests.                                   |
+|              |                                                              |
+|              | SPEC CPU 2006 is not always part of a Linux distribution.    |
+|              | SPEC requires that users purchase a license and agree with   |
+|              | their terms and conditions. For this test case, users must   |
+|              | manually download cpu2006-1.2.iso from the SPEC website and  |
+|              | save it under the yardstick/resources folder (e.g. /home/    |
+|              | opnfv/repos/yardstick/yardstick/resources/cpu2006-1.2.iso)   |
+|              | SPEC CPU® 2006 benchmark is available for purchase via the   |
+|              | SPEC order form (https://www.spec.org/order.html).           |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|test          | This test case uses SPEC CPU 2006 benchmark to measure       |
+|description   | compute-intensive performance of VMs.                        |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|configuration | file: opnfv_yardstick_tc084.yaml                             |
+|              |                                                              |
+|              | benchmark_subset is set to int.                              |
+|              |                                                              |
+|              | SLA is not available in this test case.                      |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|applicability | Test can be configured with different:                       |
+|              |                                                              |
+|              |  * benchmark_subset - a subset of SPEC CPU 2006 benchmarks   |
+|              |    to run;                                                   |
+|              |  * SPECint_benchmark - a SPECint benchmark to run;           |
+|              |  * SPECint_benchmark - a SPECfp benchmark to run;            |
+|              |  * output_format - desired report format;                    |
+|              |  * runspec_config - SPEC CPU 2006 config file provided to    |
+|              |    the runspec binary;                                       |
+|              |  * runspec_iterations - the number of benchmark iterations   |
+|              |    to execute. For a reportable run, must be 3;              |
+|              |  * runspec_tune - tuning to use (base, peak, or all). For a  |
+|              |    reportable run, must be either base or all. Reportable    |
+|              |    runs do base first, then (optionally) peak;               |
+|              |  * runspec_size - size of input data to run (test, train, or |
+|              |    ref). Reportable runs ensure that your binaries can       |
+|              |    produce correct results with the test and train workloads |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|usability     | This test case is used for executing SPEC CPU 2006 benchmark |
+|              | on virtual machines. The SPECint 2006 benchmark takes        |
+|              | approximately 5 hours. (The time may vary due to different   |
+|              | VM cpu configurations)                                       |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|references    | spec_cpu_2006_                                               |
+|              |                                                              |
+|              | ETSI-NFV-TST001                                              |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|pre-test      | To run and install SPEC CPU 2006, the following are          |
+|conditions    | required:                                                    |
+|              |  * For SPECint 2006: Both C99 and C++98 compilers are        |
+|              |    installed in VM images;                                   |
+|              |  * For SPECfp 2006: All three of C99, C++98 and Fortran-95   |
+|              |    compilers installed in VM images;                         |
+|              |  * At least 4GB of disk space availabile on VM.              |
+|              |                                                              |
+|              |  gcc 4.8.* and g++ 4.8.* version have been tested in Ubuntu  |
+|              |  14.04, Ubuntu 16.04 and Redhat Enterprise Linux 7.4 image.  |
+|              |  Higher gcc and g++ version may cause compiling error.       |
+|              |                                                              |
+|              |  For more SPEC CPU 2006 dependencies please visit            |
+|              |  (https://www.spec.org/cpu2006/Docs/techsupport.html)        |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|test sequence | description and expected result                              |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|step 1        | cpu2006-1.2.iso has been saved under the yardstick/resources |
+|              | folder (e.g. /home/opnfv/repos/yardstick/yardstick/resources |
+|              | /cpu2006-1.2.iso). Additionally, to use your custom runspec  |
+|              | config file you can save it under the yardstick/resources/   |
+|              | files folder and specify the config file name in the         |
+|              | runspec_config parameter.                                    |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|step 2        | Upload SPEC CPU 2006 ISO to the target VM using scp and      |
+|              | install SPEC CPU 2006.                                       |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|step 3        | Connect to the target server using SSH.                      |
+|              | If custom runspec config file is used, copy this file from   |
+|              | yardstick to the target VM via the SSH tunnel.               |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|step 4        | SPEC CPU 2006 benchmark is invoked and SPEC CPU 2006 metrics |
+|              | are generated.                                               |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|step 5        | Text, HTML, CSV, PDF, and Configuration file outputs for the |
+|              | SPEC CPU 2006 metrics are fetched from the VM and stored     |
+|              | under /tmp/result folder.                                    |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
+|test verdict  | None. SPEC CPU 2006 results are collected and stored.        |
+|              |                                                              |
++--------------+--------------------------------------------------------------+
diff --git a/etc/infra/infra_deploy.yaml.sample b/etc/infra/infra_deploy.yaml.sample
new file mode 100644 (file)
index 0000000..fb162d3
--- /dev/null
@@ -0,0 +1,34 @@
+nodes:
+  - name: Yardstick VM
+    hostname: yardstickvm
+    interfaces:
+      - network: management
+        ip: 192.168.1.10
+        netmask: 255.255.255.0
+    user: ubuntu
+    pasword: password
+    image: /tmp/image1.qcow
+    disk: 50000
+    ram: 8192
+    vcpus: 4
+
+  - name Controller_Compute VM
+    openstack_node: controller_compute
+    hostname: controller_compute
+    interfaces:
+      - network: management
+        ip: 192.168.1.20
+        netmask: 255.255.255.0
+      - network: traffic
+        ip: 192.20.1.20
+        netmask: 255.255.255.0
+    user: ubuntu
+    pasword: password
+    image: /tmp/image_2.qcow
+    disk: 40000
+    ram: 32768
+    vcpus: 4
+
+networks:
+  - name: management
+    host_ip: 192.168.1.1 # not mandatory
index acdb447..5ce5552 100644 (file)
@@ -23,29 +23,29 @@ nodes:
     name: node1
     role: Controller
     ip: ip1
-    user: root
-    key_filename: /root/.ssh/id_rsa
+    user: node_username
+    key_filename: node_keyfile
 -
     name: node2
     role: Controller
     ip: ip2
-    user: root
-    key_filename: /root/.ssh/id_rsa
+    user: node_username
+    key_filename: node_keyfile
 -
     name: node3
     role: Controller
     ip: ip3
-    user: root
-    key_filename: /root/.ssh/id_rsa
+    user: node_username
+    key_filename: node_keyfile
 -
     name: node4
     role: Compute
     ip: ip4
-    user: root
-    key_filename: /root/.ssh/id_rsa
+    user: node_username
+    key_filename: node_keyfile
 -
     name: node5
     role: Compute
     ip: ip5
-    user: root
-    key_filename: /root/.ssh/id_rsa
+    user: node_username
+    key_filename: node_keyfile
index a983f4d..4a8e4db 100755 (executable)
@@ -42,6 +42,16 @@ proxy_env:
   https_proxy: ${https_proxy}
   no_proxy: ${no_proxy}
 EOF
+
+    mkdir -p /etc/systemd/system/docker.service.d
+    cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf
+---
+[Service]
+Environment="HTTP_PROXY=${http_proxy}" "HTTPS_PROXY=${https_proxy}" "NO_PROXY=${no_proxy}"
+EOF
+
+    systemctl daemon-reload
+    systemctl restart docker
 fi
 
 apt-get update > /dev/null 2>&1
@@ -59,6 +69,6 @@ ANSIBLE_SCRIPTS="ansible"
 
 cd ${ANSIBLE_SCRIPTS} &&\
 ansible-playbook \
-         -e img_modify_playbook='ubuntu_server_cloudimg_modify_samplevnfs.yml' \
+         -e img_property="nsb" \
          -e YARD_IMG_ARCH='amd64' ${extra_args}\
          -i yardstick-install-inventory.ini nsb_setup.yml
index 7fdd8f0..88c0e65 100644 (file)
@@ -11,7 +11,7 @@ Babel==2.3.4            # BSD; OSI Approved  BSD License
 Jinja2==2.9.6           # BSD; OSI Approved  BSD License
 SQLAlchemy==1.1.12      # MIT License; OSI Approved  MIT License
 PTable==0.9.2           # BSD (3 clause); OSI Approved  BSD License
-ansible==2.3.2          # GPLv3; OSI Approved  GNU General Public License v3 or later (GPLv3+)
+ansible==2.4.2          # GPLv3; OSI Approved  GNU General Public License v3 or later (GPLv3+)
 backport-ipaddress==0.1; python_version <= "2.7"    # OSI Approved  Python Software Foundation License
 chainmap==1.0.2         # Python Software Foundation License; OSI Approved  Python Software Foundation License
 django==1.8.17          # BSD; OSI Approved  BSD License
diff --git a/samples/vnf_samples/nsut/prox/baremetal/throughput/tc_ipv4_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/prox/baremetal/throughput/tc_ipv4_1flow_64B_packetsize.yaml
deleted file mode 100644 (file)
index 1fe2ed9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: "../../prox-tg-topology.yaml"
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_voice.yaml"
-context:
-  type: Node
-  name: yardstick
-  nfvi_type: baremetal
-  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_1518B_packetsize.yaml b/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_1518B_packetsize.yaml
deleted file mode 100644 (file)
index 0ca0005..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_1rule.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_storage.yaml"
-context:
-  type: Node-ovs
-  name: yardstick
-  nfvi_type: ovs
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_ovs.yaml
diff --git a/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_64B_packetsize.yaml
deleted file mode 100644 (file)
index d51b42f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_1rule.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_voice.yaml"
-context:
-  type: Node-ovs
-  name: yardstick
-  nfvi_type: ovs
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_ovs.yaml
diff --git a/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_IMIX_packetsize.yaml b/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_1rule_1flow_IMIX_packetsize.yaml
deleted file mode 100644 (file)
index 37da8e6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_1rule.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_video.yaml"
-context:
-  type: Node-ovs
-  name: yardstick
-  nfvi_type: ovs
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_ovs.yaml
diff --git a/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_1518B_packetsize.yaml b/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_1518B_packetsize.yaml
deleted file mode 100644 (file)
index cbe3e97..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_worstcaserules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_storage.yaml"
-context:
-  type: Node-ovs
-  name: yardstick
-  nfvi_type: ovs
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_ovs.yaml
diff --git a/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_64B_packetsize.yaml
deleted file mode 100644 (file)
index 707b46e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_worstcaserules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_voice.yaml"
-context:
-  type: Node-ovs
-  name: yardstick
-  nfvi_type: ovs
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_ovs.yaml
diff --git a/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_IMIX_packetsize.yaml b/samples/vnf_samples/nsut/prox/ovs-dpdk/throughput/tc_ipv4_worstcaserules_1flow_IMIX_packetsize.yaml
deleted file mode 100644 (file)
index b1003df..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_worstcaserules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_video.yaml"
-context:
-  type: Node-ovs
-  name: yardstick
-  nfvi_type: ovs
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_ovs.yaml
diff --git a/samples/vnf_samples/nsut/prox/sriov/http_tests/tc_FileSize-1K_Requests-1M_Concurrency-100.yaml b/samples/vnf_samples/nsut/prox/sriov/http_tests/tc_FileSize-1K_Requests-1M_Concurrency-100.yaml
deleted file mode 100644 (file)
index 15892b8..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-##############################################################################
-# Copyright 2012 - 2016 Intel Corporation All Rights Reserved.
-# deepak.s@intel.com
-# 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
-##############################################################################
-
----
-schema: "yardstick:task:0.1"
-
-scenarios:
--
-  type: NSPerf
-  traffic_profile: ../../../../traffic_profiles/http_tests/FileSize-1K_Requests-1M_Concurrency-100.yaml
-  topology: ../../acl-tg-topology-http.yaml
-
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-
-  options:
-    acl:
-      rules: ../../acl_rules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-
-  runner:
-    type: Duration
-    duration: 2
-
-context:
-  type: Node-sriov
-  name: yardstick
-  nfvi_type: sriov
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_sriov.yaml
diff --git a/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_1518B_packetsize.yaml b/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_1518B_packetsize.yaml
deleted file mode 100644 (file)
index 1238ed4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright 2012 - 2016 Intel Corporation All Rights Reserved.
-# deepak.s@intel.com
-# 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
-##############################################################################
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_1rule.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_storage.yaml"
-context:
-  type: Node-sriov
-  name: yardstick
-  nfvi_type: sriov
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_sriov.yaml
diff --git a/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_64B_packetsize.yaml
deleted file mode 100644 (file)
index 059a650..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright 2012 - 2016 Intel Corporation All Rights Reserved.
-# deepak.s@intel.com
-# 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
-##############################################################################
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_1rule.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_voice.yaml"
-context:
-  type: Node-sriov
-  name: yardstick
-  nfvi_type: sriov
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_sriov.yaml
diff --git a/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_IMIX_packetsize.yaml b/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_1rule_1flow_IMIX_packetsize.yaml
deleted file mode 100644 (file)
index b6aa48a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright 2012 - 2016 Intel Corporation All Rights Reserved.
-# deepak.s@intel.com
-# 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
-##############################################################################
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_1rule.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_video.yaml"
-context:
-  type: Node-sriov
-  name: yardstick
-  nfvi_type: sriov
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_sriov.yaml
diff --git a/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_1518B_packetsize.yaml b/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_1518B_packetsize.yaml
deleted file mode 100644 (file)
index baa4b59..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright 2012 - 2016 Intel Corporation All Rights Reserved.
-# deepak.s@intel.com
-# 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
-##############################################################################
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_worstcaserules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_storage.yaml"
-context:
-  type: Node-sriov
-  name: yardstick
-  nfvi_type: sriov
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_sriov.yaml
diff --git a/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_64B_packetsize.yaml
deleted file mode 100644 (file)
index 5901506..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright 2012 - 2016 Intel Corporation All Rights Reserved.
-# deepak.s@intel.com
-# 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
-##############################################################################
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_worstcaserules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_voice.yaml"
-context:
-  type: Node-sriov
-  name: yardstick
-  nfvi_type: sriov
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_sriov.yaml
diff --git a/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_IMIX_packetsize.yaml b/samples/vnf_samples/nsut/prox/sriov/throughput/tc_ipv4_worstcaserules_1flow_IMIX_packetsize.yaml
deleted file mode 100644 (file)
index 517dd90..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-##############################################################################
-# Copyright 2012 - 2016 Intel Corporation All Rights Reserved.
-# deepak.s@intel.com
-# 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
-##############################################################################
-
----
-schema: yardstick:task:0.1
-scenarios:
-- type: NSPerf
-  traffic_profile: "../../../../traffic_profiles/ipv4_throughput.yaml"
-  topology: ../../acl-tg-topology.yaml
-  nodes:
-    tg__0: trafficgen_1.yardstick
-    vnf__0: vnf.yardstick
-    tg__1: trafficgen_2.yardstick
-  tc_options:
-    rfc2544:
-      allowed_drop_rate: 0.8 - 1
-  options:
-    acl:
-      rules: ../../acl_worstcaserules.yaml
-      cfg: "../../acl_config"
-      script: "../../acl_script"
-  runner:
-    type: Duration
-    duration: 400
-    interval: 35
-  traffic_options:
-    flow: "../../../../traffic_profiles/ipv4_1flow_Packets.yaml"
-    imix: "../../../../traffic_profiles/imix_video.yaml"
-context:
-  type: Node-sriov
-  name: yardstick
-  nfvi_type: sriov
-  vm_deploy: True
-  file: /etc/yardstick/nodes/pod_sriov.yaml
diff --git a/samples/vnf_samples/nsut/vfw/tc_heat_sriov_external_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_heat_sriov_external_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
new file mode 100644 (file)
index 0000000..4be8e9b
--- /dev/null
@@ -0,0 +1,88 @@
+# Copyright (c) 2016-2018 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: vfw-tg-topology.yaml
+  nodes:
+    tg__0: trafficgen_1.baremetal
+    vnf__0: vnf.yardstick
+  options:
+    framesize:
+      uplink: {64B: 100}
+      downlink: {64B: 100}
+    flow:
+      src_ip: [{'tg__0': 'xe0'}]
+      dst_ip: [{'tg__0': 'xe1'}]
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    vnf__0:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+contexts:
+  # put node context first, so we don't HEAT deploy if node has errors
+  - name: baremetal
+    type: Node
+    file: trex-baremetal.yml
+  - name: yardstick
+    image: yardstick-samplevnfs
+    flavor:
+      vcpus: 10
+      ram: 20480
+      disk: 6
+      extra_specs:
+        hw:cpu_sockets: 1
+        hw:cpu_cores: 10
+        hw:cpu_threads: 1
+    user: ubuntu
+    placement_groups:
+      pgrp1:
+        policy: "availability"
+    servers:
+      vnf:
+        floating_ip: true
+        placement: "pgrp1"
+        network_ports:
+          mgmt:
+            - mgmt
+          uplink_0:
+            - xe0
+          downlink_0:
+            - xe1
+    networks:
+      mgmt:
+        cidr: '10.0.1.0/24'
+      uplink_0:
+        cidr: '10.0.2.0/24'
+        gateway_ip: 'null'
+        provider: "sriov"
+        physical_network: physnet1
+        port_security_enabled: False
+        enable_dhcp: 'false'
+      downlink_0:
+        cidr: '10.0.3.0/24'
+        gateway_ip: 'null'
+        provider: "sriov"
+        physical_network: physnet2
+        port_security_enabled: False
+        enable_dhcp: 'false'
index 9a2d8ef..6e08e1a 100755 (executable)
@@ -21,7 +21,7 @@ ANSIBLE_SCRIPTS="${0%/*}/../../ansible"
 
 cd ${ANSIBLE_SCRIPTS} &&\
 ansible-playbook \
-         -e img_modify_playbook='ubuntu_server_cloudimg_modify.yml' \
+         -e img_property="normal" \
          -e target_os='Ubuntu' \
          -e YARD_IMG_ARCH='amd64' \
          -vvv -i inventory.ini load_images.yml
index 80caf07..caaba9e 100755 (executable)
@@ -133,7 +133,7 @@ load_cirros_image()
         CIRROS_IMAGE_PATH="/home/opnfv/images/cirros-d161201-aarch64-disk.img"
         EXTRA_PARAMS="--property hw_video_model=vga --property short_id=ubuntu16.04"
     else
-        CIRROS_IMAGE_VERSION="Cirros-0.3.5"
+        CIRROS_IMAGE_VERSION="cirros-0.3.5"
         CIRROS_IMAGE_PATH="/home/opnfv/images/cirros-0.3.5-x86_64-disk.img"
     fi
 
index 44e2694..262b74c 100755 (executable)
@@ -14,6 +14,8 @@
 : ${INSTALLER_TYPE:='unknown'}
 : ${NODE_NAME:='unknown'}
 : ${EXTERNAL_NETWORK:='admin_floating_net'}
+: ${USER_NAME:='ubuntu'}
+: ${SSH_KEY:='/root/.ssh/id_rsa'}
 
 # Extract network name from EXTERNAL_NETWORK
 #  e.g. EXTERNAL_NETWORK='ext-net;flat;192.168.0.2;192.168.0.253;192.168.0.1;192.168.0.0/24'
@@ -97,6 +99,9 @@ if [ "$INSTALLER_TYPE" == "fuel" ]; then
     node_line_num=($(grep -n node[1-5] $pod_yaml | awk -F: '{print $1}'))
     node_ID=0;
 
+    # update 'user' and 'key_filename' according to CI env
+    sed -i "s|node_username|${USER_NAME}|;s|node_keyfile|${SSH_KEY}|" $pod_yaml;
+
     if [[ ${controller_ips[0]} ]]; then
         sed -i "${node_line_num[0]}s/node1/node$((++node_ID))/;s/ip1/${controller_ips[0]}/" $pod_yaml;
     fi
index 31ec2b7..6090356 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
 # Copyright (c) 2016-2017 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,9 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Unittest for yardstick.benchmark.contexts.standalone.model
-
-from __future__ import absolute_import
 import copy
 import os
 import unittest
@@ -24,9 +19,9 @@ 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
-from yardstick.network_services.helpers import cpu
 
 
 XML_SAMPLE = """<?xml version="1.0"?>
@@ -134,9 +129,9 @@ class ModelLibvirtTestCase(unittest.TestCase):
                 as mock_parse:
             xml = copy.deepcopy(self.xml)
             mock_parse.return_value = xml
-            vf_pci = '0001:05:04.2'
+            vm_pci = '0001:05:04.2'
             model.Libvirt.add_sriov_interfaces(
-                self.pci_address_str, vf_pci, self.mac, xml_input)
+                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')
@@ -145,8 +140,29 @@ class ModelLibvirtTestCase(unittest.TestCase):
             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.assertIsNotNone(interface.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"
@@ -164,6 +180,8 @@ class ModelLibvirtTestCase(unittest.TestCase):
                           *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)
@@ -172,7 +190,7 @@ class ModelLibvirtTestCase(unittest.TestCase):
             ssh.return_value = ssh_mock
         mock_create_snapshot_qemu.return_value = "0.img"
 
-        status = model.Libvirt.build_vm_xml(ssh_mock, {}, "test", "vm_0", 0)
+        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):
@@ -181,21 +199,23 @@ class ModelLibvirtTestCase(unittest.TestCase):
             ssh_mock.execute = \
                 mock.Mock(return_value=(0, "a", ""))
             ssh.return_value = ssh_mock
-        # NOTE(ralonsoh): this test doesn't cover function execution. This test
-        # should also check mocked function calls.
-        model.Libvirt.update_interrupts_hugepages_perf(ssh_mock)
-
-    @mock.patch.object(cpu.CpuSysCores, 'get_core_socket')
-    def test_pin_vcpu_for_perf(self, mock_get_core_socket):
-        mock_get_core_socket.return_value = {
-            'cores_per_socket': 1,
-            'thread_per_core': 1,
-            '0': [1, 2]
-        }
-        # NOTE(ralonsoh): this test doesn't cover function execution. This
-        # function needs more tests.
-        model.Libvirt.pin_vcpu_for_perf(mock.Mock())
-
+        # 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):
 
@@ -247,8 +267,7 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
     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_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
@@ -296,6 +315,7 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
 
     @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(
@@ -309,6 +329,7 @@ class StandaloneContextHelperTestCase(unittest.TestCase):
 
     @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 = \
index 5d1b042..e39ecf4 100644 (file)
 from __future__ import absolute_import
 import os
 import unittest
-import errno
 import mock
 
-from yardstick.common import constants as consts
 from yardstick.benchmark.contexts.standalone import ovs_dpdk
-from yardstick.network_services.utils import PciAddress
 
 
 class OvsDpdkContextTestCase(unittest.TestCase):
@@ -68,7 +65,7 @@ class OvsDpdkContextTestCase(unittest.TestCase):
         self.ovs_dpdk.helper = mock_helper
         self.ovs_dpdk.vnf_node = mock_server
         self.assertIsNone(self.ovs_dpdk.file_path)
-        self.assertEqual(self.ovs_dpdk.first_run, True)
+        self.assertTrue(self.ovs_dpdk.first_run)
 
     def test_init(self):
         self.ovs_dpdk.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
@@ -149,12 +146,9 @@ class OvsDpdkContextTestCase(unittest.TestCase):
             self.assertRaises(Exception, self.ovs_dpdk.check_ovs_dpdk_env)
 
     @mock.patch('yardstick.ssh.SSH')
-    def test_deploy(self, mock_ssh):
-        with mock.patch("yardstick.ssh.SSH") as ssh:
-            ssh_mock = mock.Mock(autospec=ssh.SSH)
-            ssh_mock.execute = \
-                mock.Mock(return_value=(0, "a", ""))
-            ssh.return_value = ssh_mock
+    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())
 
@@ -168,22 +162,21 @@ class OvsDpdkContextTestCase(unittest.TestCase):
         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.ovs_dpdk.Libvirt')
+    @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt')
     @mock.patch('yardstick.ssh.SSH')
-    def test_undeploy(self, mock_ssh, mock_libvirt):
-        with mock.patch("yardstick.ssh.SSH") as ssh:
-            ssh_mock = mock.Mock(autospec=ssh.SSH)
-            ssh_mock.execute = \
-                mock.Mock(return_value=(0, "a", ""))
-            ssh.return_value = ssh_mock
+    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.connection = ssh_mock
         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
@@ -326,8 +319,8 @@ class OvsDpdkContextTestCase(unittest.TestCase):
         self.ovs_dpdk.get_vf_datas = mock.Mock(return_value="")
         self.assertIsNone(self.ovs_dpdk.configure_nics_for_ovs_dpdk())
 
-    @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
-    def test__enable_interfaces(self, mock_add_ovs_interface):
+    @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 = \
@@ -343,7 +336,7 @@ class OvsDpdkContextTestCase(unittest.TestCase):
 
     @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt')
     @mock.patch('yardstick.benchmark.contexts.standalone.model.Server')
-    def test_setup_ovs_dpdk_context(self, mock_server, mock_libvirt):
+    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 = \
@@ -372,6 +365,6 @@ class OvsDpdkContextTestCase(unittest.TestCase):
         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="")
+        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())
index 3ea673a..7f11a7d 100644 (file)
@@ -70,7 +70,7 @@ class SriovContextTestCase(unittest.TestCase):
         self.sriov.helper = mock_helper
         self.sriov.vnf_node = mock_server
         self.assertIsNone(self.sriov.file_path)
-        self.assertEqual(self.sriov.first_run, True)
+        self.assertTrue(self.sriov.first_run)
 
     def test_init(self):
         self.sriov.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}])
index 6a9b3b1..b84cef2 100644 (file)
@@ -19,30 +19,26 @@ import unittest
 from yardstick.benchmark.scenarios.availability.monitor import monitor_command
 
 
-@mock.patch(
-    'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
-    '.subprocess')
+@mock.patch('subprocess.check_output')
 class ExecuteShellTestCase(unittest.TestCase):
 
-    def test__fun_execute_shell_command_successful(self, mock_subprocess):
+    def test__fun_execute_shell_command_successful(self, mock_subprocess_check_output):
         cmd = "env"
-        mock_subprocess.check_output.return_value = (0, 'unittest')
-        exitcode, output = monitor_command._execute_shell_command(cmd)
+        mock_subprocess_check_output.return_value = (0, 'unittest')
+        exitcode, _ = monitor_command._execute_shell_command(cmd)
         self.assertEqual(exitcode, 0)
 
     @mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.LOG')
     def test__fun_execute_shell_command_fail_cmd_exception(self, mock_log,
-                                                           mock_subprocess):
+                                                           mock_subprocess_check_output):
         cmd = "env"
-        mock_subprocess.check_output.side_effect = RuntimeError
-        exitcode, output = monitor_command._execute_shell_command(cmd)
+        mock_subprocess_check_output.side_effect = RuntimeError
+        exitcode, _ = monitor_command._execute_shell_command(cmd)
         self.assertEqual(exitcode, -1)
         mock_log.error.assert_called_once()
 
 
-@mock.patch(
-    'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
-    '.subprocess')
+@mock.patch('subprocess.check_output')
 class MonitorOpenstackCmdTestCase(unittest.TestCase):
 
     def setUp(self):
@@ -59,24 +55,24 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase):
             'sla': {'max_outage_time': 5}
         }
 
-    def test__monitor_command_monitor_func_successful(self, mock_subprocess):
+    def test__monitor_command_monitor_func_successful(self, mock_subprocess_check_output):
 
         instance = monitor_command.MonitorOpenstackCmd(self.config, None, {"nova-api": 10})
         instance.setup()
-        mock_subprocess.check_output.return_value = (0, 'unittest')
+        mock_subprocess_check_output.return_value = (0, 'unittest')
         ret = instance.monitor_func()
-        self.assertEqual(ret, True)
+        self.assertTrue(ret)
         instance._result = {"outage_time": 0}
         instance.verify_SLA()
 
     @mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.LOG')
-    def test__monitor_command_monitor_func_failure(self, mock_log, mock_subprocess):
-        mock_subprocess.check_output.return_value = (1, 'unittest')
+    def test__monitor_command_monitor_func_failure(self, mock_log, mock_subprocess_check_output):
+        mock_subprocess_check_output.return_value = (1, 'unittest')
         instance = monitor_command.MonitorOpenstackCmd(self.config, None, {"nova-api": 10})
         instance.setup()
-        mock_subprocess.check_output.side_effect = RuntimeError
+        mock_subprocess_check_output.side_effect = RuntimeError
         ret = instance.monitor_func()
-        self.assertEqual(ret, False)
+        self.assertFalse(ret)
         mock_log.error.assert_called_once()
         instance._result = {"outage_time": 10}
         instance.verify_SLA()
@@ -84,12 +80,13 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase):
     @mock.patch(
         'yardstick.benchmark.scenarios.availability.monitor.monitor_command'
         '.ssh')
-    def test__monitor_command_ssh_monitor_successful(self, mock_ssh,
-                                                     mock_subprocess):
+    def test__monitor_command_ssh_monitor_successful(self, mock_ssh, mock_subprocess_check_output):
 
+        mock_subprocess_check_output.return_value = (0, 'unittest')
         self.config["host"] = "node1"
         instance = monitor_command.MonitorOpenstackCmd(
             self.config, self.context, {"nova-api": 10})
         instance.setup()
         mock_ssh.SSH.from_node().execute.return_value = (0, "0", '')
         ret = instance.monitor_func()
+        self.assertTrue(ret)
index 4ae5089..97d5348 100644 (file)
@@ -18,9 +18,6 @@ import unittest
 from yardstick.benchmark.scenarios.availability import serviceha
 
 
-@mock.patch('yardstick.benchmark.scenarios.availability.serviceha.basemonitor')
-@mock.patch(
-    'yardstick.benchmark.scenarios.availability.serviceha.baseattacker')
 class ServicehaTestCase(unittest.TestCase):
 
     def setUp(self):
@@ -51,27 +48,32 @@ class ServicehaTestCase(unittest.TestCase):
         sla = {"outage_time": 5}
         self.args = {"options": options, "sla": sla}
 
-    def test__serviceha_setup_run_successful(self, mock_attacker,
+    @mock.patch('yardstick.benchmark.scenarios.availability.serviceha.basemonitor')
+    @mock.patch(
+        'yardstick.benchmark.scenarios.availability.serviceha.baseattacker')
+    def test__serviceha_setup_run_successful(self, _,
                                              mock_monitor):
         p = serviceha.ServiceHA(self.args, self.ctx)
 
         p.setup()
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
         mock_monitor.MonitorMgr().verify_SLA.return_value = True
         ret = {}
         p.run(ret)
         p.teardown()
-"""
-    def test__serviceha_run_sla_error(self, mock_attacker, mock_monitor):
-        p = serviceha.ServiceHA(self.args, self.ctx)
 
         p.setup()
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
-        result = {}
-        result["outage_time"] = 10
-        mock_monitor.Monitor().get_result.return_value = result
+#     def test__serviceha_run_sla_error(self, mock_attacker, mock_monitor):
+#         p = serviceha.ServiceHA(self.args, self.ctx)
 
-        ret = {}
-        self.assertRaises(AssertionError, p.run, ret)
-"""
+#         p.setup()
+#         self.assertTrue(p.setup_done)
+#
+#         result = {}
+#         result["outage_time"] = 10
+#         mock_monitor.Monitor().get_result.return_value = result
+
+#         ret = {}
+#         self.assertRaises(AssertionError, p.run, ret)
index 0974f38..548efe9 100644 (file)
@@ -16,36 +16,43 @@ import unittest
 
 from yardstick.benchmark.scenarios.availability import util
 
-@mock.patch('yardstick.benchmark.scenarios.availability.util.subprocess')
+
 class ExecuteShellTestCase(unittest.TestCase):
 
     def setUp(self):
         self.param_config = {'serviceName': '@serviceName', 'value': 1}
         self.intermediate_variables = {'@serviceName': 'nova-api'}
         self.std_output = '| id       | 1                     |'
-        self.cmd_config = {'cmd':'ls','param':'-a'}
+        self.cmd_config = {'cmd': 'ls', 'param': '-a'}
+
+        self._mock_subprocess = mock.patch.object(util, 'subprocess')
+        self.mock_subprocess = self._mock_subprocess.start()
+        self.addCleanup(self._stop_mock)
+
+    def _stop_mock(self):
+        self._mock_subprocess.stop()
 
-    def test_util_build_command_shell(self,mock_subprocess):
+    def test_util_build_command_shell(self):
         result = util.build_shell_command(self.param_config, True,
                                           self.intermediate_variables)
-        self.assertEqual("nova-api" in result, True)
+        self.assertIn("nova-api", result)
 
-    def test_read_stdout_item(self,mock_subprocess):
-        result = util.read_stdout_item(self.std_output,'id')
-        self.assertEquals('1',result)
+    def test_read_stdout_item(self):
+        result = util.read_stdout_item(self.std_output, 'id')
+        self.assertEqual('1', result)
 
-    def test_buildshellparams(self,mock_subprocess):
-        result = util.buildshellparams(self.cmd_config,True)
-        self.assertEquals('/bin/bash -s {0} {1}', result)
+    def test_buildshellparams(self):
+        result = util.buildshellparams(self.cmd_config, True)
+        self.assertEqual('/bin/bash -s {0} {1}', result)
 
-    def test__fun_execute_shell_command_successful(self, mock_subprocess):
+    def test__fun_execute_shell_command_successful(self):
         cmd = "env"
-        mock_subprocess.check_output.return_value = (0, 'unittest')
-        exitcode, output = util.execute_shell_command(cmd)
+        self.mock_subprocess.check_output.return_value = (0, 'unittest')
+        exitcode, _ = util.execute_shell_command(cmd)
         self.assertEqual(exitcode, 0)
 
-    def test__fun_execute_shell_command_fail_cmd_exception(self, mock_subprocess):
+    def test__fun_execute_shell_command_fail_cmd_exception(self):
         cmd = "env"
-        mock_subprocess.check_output.side_effect = RuntimeError
-        exitcode, output = util.execute_shell_command(cmd)
+        self.mock_subprocess.check_output.side_effect = RuntimeError
+        exitcode, _ = util.execute_shell_command(cmd)
         self.assertEqual(exitcode, -1)
index dc52a80..51ffd24 100644 (file)
@@ -74,7 +74,7 @@ class CyclictestTestCase(unittest.TestCase):
         c.setup()
         self.assertIsNotNone(c.guest)
         self.assertIsNotNone(c.host)
-        self.assertEqual(c.setup_done, True)
+        self.assertTrue(c.setup_done)
 
     def test_cyclictest_successful_no_sla(self, mock_ssh):
         result = {}
index 1f0ff3c..fb55b80 100644 (file)
@@ -71,7 +71,7 @@ class QemuMigrateTestCase(unittest.TestCase):
 
         q.setup()
         self.assertIsNotNone(q.host)
-        self.assertEqual(q.setup_done, True)
+        self.assertTrue(q.setup_done)
 
     def test_qemu_migrate_successful_no_sla(self, mock_ssh):
         result = {}
index 7d071e9..fec355b 100644 (file)
@@ -40,7 +40,7 @@ class UnixbenchTestCase(unittest.TestCase):
 
         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         self.assertIsNotNone(u.client)
-        self.assertEqual(u.setup_done, True)
+        self.assertTrue(u.setup_done)
 
     def test_unixbench_successful_no_sla(self, mock_ssh):
 
index 560675d..bc51318 100644 (file)
@@ -24,11 +24,11 @@ class DummyTestCase(unittest.TestCase):
 
         self.assertIsNone(self.test_context.scenario_cfg)
         self.assertIsNone(self.test_context.context_cfg)
-        self.assertEqual(self.test_context.setup_done, False)
+        self.assertFalse(self.test_context.setup_done)
 
     def test_run(self):
         result = {}
         self.test_context.run(result)
 
         self.assertEqual(result["hello"], "yardstick")
-        self.assertEqual(self.test_context.setup_done, True)
+        self.assertTrue(self.test_context.setup_done)
index bdf1e66..1dd461d 100644 (file)
@@ -14,7 +14,8 @@ from yardstick.benchmark.scenarios.lib.check_numa_info import CheckNumaInfo
 
 class CheckNumaInfoTestCase(unittest.TestCase):
 
-    @mock.patch('yardstick.benchmark.scenarios.lib.check_numa_info.CheckNumaInfo._check_vm2_status')
+    @mock.patch(
+        'yardstick.benchmark.scenarios.lib.check_numa_info.CheckNumaInfo._check_vm2_status')
     def test_check_numa_info(self, mock_check_vm2):
         scenario_cfg = {'info1': {}, 'info2': {}}
         obj = CheckNumaInfo(scenario_cfg, {})
@@ -37,7 +38,7 @@ class CheckNumaInfoTestCase(unittest.TestCase):
         scenario_cfg = {'info1': info1, 'info2': info2}
         obj = CheckNumaInfo(scenario_cfg, {})
         status = obj._check_vm2_status(info1, info2)
-        self.assertEqual(status, True)
+        self.assertTrue(status)
 
     def test_check_vm2_status_length_gt_1(self):
         info1 = {
@@ -55,7 +56,7 @@ class CheckNumaInfoTestCase(unittest.TestCase):
         scenario_cfg = {'info1': info1, 'info2': info2}
         obj = CheckNumaInfo(scenario_cfg, {})
         status = obj._check_vm2_status(info1, info2)
-        self.assertEqual(status, False)
+        self.assertFalse(status)
 
     def test_check_vm2_status_length_not_in_set(self):
         info1 = {
@@ -73,7 +74,7 @@ class CheckNumaInfoTestCase(unittest.TestCase):
         scenario_cfg = {'info1': info1, 'info2': info2}
         obj = CheckNumaInfo(scenario_cfg, {})
         status = obj._check_vm2_status(info1, info2)
-        self.assertEqual(status, False)
+        self.assertFalse(status)
 
 
 def main():
index fc63313..ef2c0cc 100644 (file)
@@ -9,28 +9,79 @@
 import unittest
 import mock
 
-from yardstick.benchmark.scenarios.lib.create_volume import CreateVolume
+import yardstick.benchmark.scenarios.lib.create_volume
 
 
 class CreateVolumeTestCase(unittest.TestCase):
 
+    def setUp(self):
+        self._mock_cinder_client = mock.patch(
+            'yardstick.common.openstack_utils.get_cinder_client')
+        self.mock_cinder_client = self._mock_cinder_client.start()
+        self._mock_glance_client = mock.patch(
+            'yardstick.common.openstack_utils.get_glance_client')
+        self.mock_glance_client = self._mock_glance_client.start()
+        self.addCleanup(self._stop_mock)
+
+        self.scenario_cfg = {
+            "options" :
+                {
+                    'volume_name': 'yardstick_test_volume_01',
+                    'size': '256',
+                    'image': 'cirros-0.3.5'
+                }
+            }
+
+        self.scenario = (
+            yardstick.benchmark.scenarios.lib.create_volume.CreateVolume(
+                scenario_cfg=self.scenario_cfg,
+                context_cfg={}))
+
+    def _stop_mock(self):
+        self._mock_cinder_client.stop()
+        self._mock_glance_client.stop()
+
+    def test_init(self):
+        self.mock_cinder_client.return_value = "All volumes are equal"
+        self.mock_glance_client.return_value = "Images are more equal"
+
+        expected_vol_name = self.scenario_cfg["options"]["volume_name"]
+        expected_vol_size = self.scenario_cfg["options"]["size"]
+        expected_im_name = self.scenario_cfg["options"]["image"]
+        expected_im_id = None
+
+        scenario = (
+            yardstick.benchmark.scenarios.lib.create_volume.CreateVolume(
+                scenario_cfg=self.scenario_cfg,
+                context_cfg={}))
+
+        self.assertEqual(expected_vol_name, scenario.volume_name)
+        self.assertEqual(expected_vol_size, scenario.volume_size)
+        self.assertEqual(expected_im_name, scenario.image_name)
+        self.assertEqual(expected_im_id, scenario.image_id)
+        self.assertEqual("All volumes are equal", scenario.cinder_client)
+        self.assertEqual("Images are more equal", scenario.glance_client)
+
+    def test_setup(self):
+        self.assertFalse(self.scenario.setup_done)
+        self.scenario.setup()
+        self.assertTrue(self.scenario.setup_done)
+
     @mock.patch('yardstick.common.openstack_utils.create_volume')
     @mock.patch('yardstick.common.openstack_utils.get_image_id')
-    @mock.patch('yardstick.common.openstack_utils.get_cinder_client')
-    @mock.patch('yardstick.common.openstack_utils.get_glance_client')
-    def test_create_volume(self, mock_get_glance_client, mock_get_cinder_client, mock_image_id, mock_create_volume):
-        options = {
-                'volume_name': 'yardstick_test_volume_01',
-                'size': '256',
-                'image': 'cirros-0.3.5'
-        }
-        args = {"options": options}
-        obj = CreateVolume(args, {})
-        obj.run({})
-        self.assertTrue(mock_create_volume.called)
-        self.assertTrue(mock_image_id.called)
-        self.assertTrue(mock_get_glance_client.called)
-        self.assertTrue(mock_get_cinder_client.called)
+    def test_run(self, mock_image_id, mock_create_volume):
+        self.scenario.run()
+
+        mock_image_id.assert_called_once()
+        mock_create_volume.assert_called_once()
+
+    @mock.patch.object(
+        yardstick.benchmark.scenarios.lib.create_volume.CreateVolume, 'setup')
+    def test_run_no_setup(self, scenario_setup):
+        self.scenario.setup_done = False
+        self.scenario.run()
+        scenario_setup.assert_called_once()
+
 
 def main():
     unittest.main()
index d0f862f..d82a009 100755 (executable)
@@ -48,7 +48,7 @@ class NetperfTestCase(unittest.TestCase):
         p.setup()
         self.assertIsNotNone(p.server)
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
     def test_netperf_successful_no_sla(self, mock_ssh):
 
index 62874cc..8be9bb9 100755 (executable)
@@ -48,7 +48,7 @@ class NetperfNodeTestCase(unittest.TestCase):
         p.setup()
         self.assertIsNotNone(p.server)
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
     def test_netperf_node_successful_no_sla(self, mock_ssh):
 
index fe44cfd..4b58e06 100644 (file)
@@ -19,6 +19,7 @@ import mock
 
 from yardstick.benchmark.scenarios.networking import nstat
 
+
 @mock.patch('yardstick.benchmark.scenarios.networking.nstat.ssh')
 class NstatTestCase(unittest.TestCase):
 
@@ -38,7 +39,7 @@ class NstatTestCase(unittest.TestCase):
 
         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         self.assertIsNotNone(n.client)
-        self.assertEqual(n.setup_done, True)
+        self.assertTrue(n.setup_done)
 
     def test_nstat_successful_no_sla(self, mock_ssh):
 
@@ -51,17 +52,17 @@ class NstatTestCase(unittest.TestCase):
         n = nstat.Nstat(args, self.ctx)
         result = {}
 
-        sample_output = '#kernel\nIpInReceives                    1837               0.0\nIpInHdrErrors                   0                  0.0\nIpInAddrErrors                  2                  0.0\nIcmpInMsgs                      319                  0.0\nIcmpInErrors                    0                0.0\nTcpInSegs                       36               0.0\nTcpInErrs                       0                  0.0\nUdpInDatagrams                  1318                  0.0\nUdpInErrors                     0                  0.0\n'
+        sample_output = '#kernel\nIpInReceives                    1837               0.0\nIpInHdrErrors                   0                  0.0\nIpInAddrErrors                  2                  0.0\nIcmpInMsgs                      319                  0.0\nIcmpInErrors                    0                0.0\nTcpInSegs                       36               0.0\nTcpInErrs                       0                  0.0\nUdpInDatagrams                  1318                  0.0\nUdpInErrors                     0                  0.0\n'  # pylint: disable=line-too-long
 
         mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
 
         n.run(result)
         expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
-            "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
-            "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
-            "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
-            "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
-            "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
+                           "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
+                           "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
+                           "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
+                           "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
+                           "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
         self.assertEqual(result, expected_result)
 
     def test_nstat_successful_sla(self, mock_ssh):
@@ -79,17 +80,17 @@ class NstatTestCase(unittest.TestCase):
         n = nstat.Nstat(args, self.ctx)
         result = {}
 
-        sample_output = '#kernel\nIpInReceives                    1837               0.0\nIpInHdrErrors                   0                  0.0\nIpInAddrErrors                  2                  0.0\nIcmpInMsgs                      319                  0.0\nIcmpInErrors                    0                0.0\nTcpInSegs                       36               0.0\nTcpInErrs                       0                  0.0\nUdpInDatagrams                  1318                  0.0\nUdpInErrors                     0                  0.0\n'
+        sample_output = '#kernel\nIpInReceives                    1837               0.0\nIpInHdrErrors                   0                  0.0\nIpInAddrErrors                  2                  0.0\nIcmpInMsgs                      319                  0.0\nIcmpInErrors                    0                0.0\nTcpInSegs                       36               0.0\nTcpInErrs                       0                  0.0\nUdpInDatagrams                  1318                  0.0\nUdpInErrors                     0                  0.0\n'  # pylint: disable=line-too-long
 
         mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
 
         n.run(result)
         expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
-            "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
-            "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
-            "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
-            "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
-            "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
+                           "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
+                           "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
+                           "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
+                           "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
+                           "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
         self.assertEqual(result, expected_result)
 
     def test_nstat_unsuccessful_cmd_error(self, mock_ssh):
@@ -114,5 +115,6 @@ class NstatTestCase(unittest.TestCase):
 def main():
     unittest.main()
 
+
 if __name__ == '__main__':
     main()
index ecce7ce..d2be6f5 100644 (file)
@@ -59,7 +59,7 @@ class PingTestCase(unittest.TestCase):
         mock_ssh.SSH.from_node().execute.return_value = (0, '0', '')
         p.setup()
 
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
     @mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
     def test_ping_successful_no_sla(self, mock_ssh):
index 3928aac..005b531 100644 (file)
@@ -50,7 +50,7 @@ class PktgenTestCase(unittest.TestCase):
         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         self.assertIsNotNone(p.server)
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
     def test_pktgen_successful_iptables_setup(self, mock_ssh):
 
@@ -632,9 +632,13 @@ class PktgenTestCase(unittest.TestCase):
 
     def test_pktgen_run_with_setup_done(self, mock_ssh):
         args = {
-            'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
-            'sla': {'max_ppm': 1}
-        }
+            'options': {
+                'packetsize': 60,
+                'number_of_ports': 10,
+                'duration': 20,
+                'multiqueue': True},
+            'sla': {
+                'max_ppm': 1}}
         result = {}
         p = pktgen.Pktgen(args, self.ctx)
         p.server = mock_ssh.SSH.from_node()
@@ -659,9 +663,13 @@ class PktgenTestCase(unittest.TestCase):
 
     def test_pktgen_run_with_ovs_multiqueque(self, mock_ssh):
         args = {
-            'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
-            'sla': {'max_ppm': 1}
-        }
+            'options': {
+                'packetsize': 60,
+                'number_of_ports': 10,
+                'duration': 20,
+                'multiqueue': True},
+            'sla': {
+                'max_ppm': 1}}
         result = {}
 
         p = pktgen.Pktgen(args, self.ctx)
@@ -683,7 +691,7 @@ class PktgenTestCase(unittest.TestCase):
 
         mock_result3 = mock.Mock()
         mock_result3.return_value = 4
-        p._enable_ovs_multiqueue  = mock_result3
+        p._enable_ovs_multiqueue = mock_result3
 
         mock_result4 = mock.Mock()
         p._setup_irqmapping_ovs = mock_result4
@@ -704,9 +712,13 @@ class PktgenTestCase(unittest.TestCase):
 
     def test_pktgen_run_with_sriov_multiqueque(self, mock_ssh):
         args = {
-            'options': {'packetsize': 60, 'number_of_ports': 10, 'duration': 20, 'multiqueue': True},
-            'sla': {'max_ppm': 1}
-        }
+            'options': {
+                'packetsize': 60,
+                'number_of_ports': 10,
+                'duration': 20,
+                'multiqueue': True},
+            'sla': {
+                'max_ppm': 1}}
         result = {}
 
         p = pktgen.Pktgen(args, self.ctx)
@@ -739,8 +751,10 @@ class PktgenTestCase(unittest.TestCase):
         expected_result["packetsize"] = 60
         self.assertEqual(result, expected_result)
 
+
 def main():
     unittest.main()
 
+
 if __name__ == '__main__':
     main()
index b4b8752..c9eec4b 100644 (file)
@@ -20,8 +20,6 @@ import yardstick.common.utils as utils
 from yardstick.benchmark.scenarios.networking import pktgen_dpdk
 
 
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk.time')
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk.ssh')
 class PktgenDPDKLatencyTestCase(unittest.TestCase):
 
     def setUp(self):
@@ -39,7 +37,20 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
             }
         }
 
-    def test_pktgen_dpdk_successful_setup(self, mock_ssh, mock_time):
+        self._mock_ssh = mock.patch(
+            'yardstick.benchmark.scenarios.networking.pktgen_dpdk.ssh')
+        self.mock_ssh = self._mock_ssh.start()
+        self._mock_time = mock.patch(
+            'yardstick.benchmark.scenarios.networking.pktgen_dpdk.time')
+        self.mock_time = self._mock_time.start()
+
+        self.addCleanup(self._stop_mock)
+
+    def _stop_mock(self):
+        self._mock_ssh.stop()
+        self._mock_time.stop()
+
+    def test_pktgen_dpdk_successful_setup(self):
 
         args = {
             'options': {'packetsize': 60},
@@ -47,66 +58,66 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
         p.setup()
 
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         self.assertIsNotNone(p.server)
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
-    def test_pktgen_dpdk_successful_get_port_ip(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_successful_get_port_ip(self):
 
         args = {
             'options': {'packetsize': 60},
         }
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-        p.server = mock_ssh.SSH.from_node()
+        p.server = self.mock_ssh.SSH.from_node()
 
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
 
         utils.get_port_ip(p.server, "eth1")
 
-        mock_ssh.SSH.from_node().execute.assert_called_with(
+        self.mock_ssh.SSH.from_node().execute.assert_called_with(
             "ifconfig eth1 |grep 'inet addr' |awk '{print $2}' |cut -d ':' -f2 ")
 
-    def test_pktgen_dpdk_unsuccessful_get_port_ip(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_unsuccessful_get_port_ip(self):
 
         args = {
             'options': {'packetsize': 60},
         }
 
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-        p.server = mock_ssh.SSH.from_node()
+        p.server = self.mock_ssh.SSH.from_node()
 
-        mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+        self.mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
         self.assertRaises(RuntimeError, utils.get_port_ip, p.server, "eth1")
 
-    def test_pktgen_dpdk_successful_get_port_mac(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_successful_get_port_mac(self):
 
         args = {
             'options': {'packetsize': 60},
         }
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-        p.server = mock_ssh.SSH.from_node()
+        p.server = self.mock_ssh.SSH.from_node()
 
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
 
         utils.get_port_mac(p.server, "eth1")
 
-        mock_ssh.SSH.from_node().execute.assert_called_with(
+        self.mock_ssh.SSH.from_node().execute.assert_called_with(
             "ifconfig |grep HWaddr |grep eth1 |awk '{print $5}' ")
 
-    def test_pktgen_dpdk_unsuccessful_get_port_mac(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_unsuccessful_get_port_mac(self):
 
         args = {
             'options': {'packetsize': 60},
         }
 
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
-        p.server = mock_ssh.SSH.from_node()
+        p.server = self.mock_ssh.SSH.from_node()
 
-        mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+        self.mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
         self.assertRaises(RuntimeError, utils.get_port_mac, p.server, "eth1")
 
-    def test_pktgen_dpdk_successful_no_sla(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_successful_no_sla(self):
 
         args = {
             'options': {'packetsize': 60},
@@ -116,7 +127,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
 
         sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
-        mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
 
         p.run(result)
         # with python 3 we get float, might be due python division changes
@@ -125,7 +136,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
         delta = result['avg_latency'] - 132
         self.assertLessEqual(delta, 1)
 
-    def test_pktgen_dpdk_successful_sla(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_successful_sla(self):
 
         args = {
             'options': {'packetsize': 60},
@@ -136,13 +147,13 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
 
         sample_output = '100\n100\n100\n100\n100\n100\n100\n100\n100\n100\n'
-        mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
 
         p.run(result)
 
         self.assertEqual(result, {"avg_latency": 100})
 
-    def test_pktgen_dpdk_unsuccessful_sla(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_unsuccessful_sla(self):
 
         args = {
             'options': {'packetsize': 60},
@@ -152,14 +163,14 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
 
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
 
-        p.server = mock_ssh.SSH.from_node()
-        p.client = mock_ssh.SSH.from_node()
+        p.server = self.mock_ssh.SSH.from_node()
+        p.client = self.mock_ssh.SSH.from_node()
 
         sample_output = '100\n110\n112\n130\n149\n150\n90\n150\n200\n162\n'
-        mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
         self.assertRaises(AssertionError, p.run, result)
 
-    def test_pktgen_dpdk_unsuccessful_script_error(self, mock_ssh, mock_time):
+    def test_pktgen_dpdk_unsuccessful_script_error(self):
 
         args = {
             'options': {'packetsize': 60},
@@ -169,7 +180,7 @@ class PktgenDPDKLatencyTestCase(unittest.TestCase):
 
         p = pktgen_dpdk.PktgenDPDKLatency(args, self.ctx)
 
-        mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
+        self.mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
         self.assertRaises(RuntimeError, p.run, result)
 
 
index d340970..c2e35af 100644 (file)
@@ -20,7 +20,6 @@ from yardstick.benchmark.scenarios.networking import pktgen_dpdk_throughput
 
 
 @mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.ssh')
-@mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.time')
 class PktgenDPDKTestCase(unittest.TestCase):
 
     def setUp(self):
@@ -37,7 +36,16 @@ class PktgenDPDKTestCase(unittest.TestCase):
             }
         }
 
-    def test_pktgen_dpdk_throughput_successful_setup(self, mock__time, mock_ssh):
+        self._mock_time = mock.patch(
+            'yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.time')
+        self.mock_time = self._mock_time.start()
+
+        self.addCleanup(self._cleanup)
+
+    def _cleanup(self):
+        self._mock_time.stop()
+
+    def test_pktgen_dpdk_throughput_successful_setup(self, mock_ssh):
         args = {
             'options': {'packetsize': 60},
         }
@@ -47,9 +55,9 @@ class PktgenDPDKTestCase(unittest.TestCase):
         mock_ssh.SSH().execute.return_value = (0, '', '')
         self.assertIsNotNone(p.server)
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
-    def test_pktgen_dpdk_throughput_successful_no_sla(self, mock__time, mock_ssh):
+    def test_pktgen_dpdk_throughput_successful_no_sla(self, mock_ssh):
         args = {
             'options': {'packetsize': 60, 'number_of_ports': 10},
         }
@@ -75,7 +83,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
         expected_result["packetsize"] = 60
         self.assertEqual(result, expected_result)
 
-    def test_pktgen_dpdk_throughput_successful_sla(self, mock__time, mock_ssh):
+    def test_pktgen_dpdk_throughput_successful_sla(self, mock_ssh):
         args = {
             'options': {'packetsize': 60, 'number_of_ports': 10},
             'sla': {'max_ppm': 10000}
@@ -101,7 +109,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
         expected_result["packetsize"] = 60
         self.assertEqual(result, expected_result)
 
-    def test_pktgen_dpdk_throughput_unsuccessful_sla(self, mock__time, mock_ssh):
+    def test_pktgen_dpdk_throughput_unsuccessful_sla(self, mock_ssh):
         args = {
             'options': {'packetsize': 60, 'number_of_ports': 10},
             'sla': {'max_ppm': 1000}
@@ -122,7 +130,8 @@ class PktgenDPDKTestCase(unittest.TestCase):
         mock_ssh.SSH().execute.return_value = (0, sample_output, '')
         self.assertRaises(AssertionError, p.run, result)
 
-    def test_pktgen_dpdk_throughput_unsuccessful_script_error(self, mock__time, mock_ssh):
+    def test_pktgen_dpdk_throughput_unsuccessful_script_error(
+            self, mock_ssh):
         args = {
             'options': {'packetsize': 60, 'number_of_ports': 10},
             'sla': {'max_ppm': 1000}
@@ -137,7 +146,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
         mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
         self.assertRaises(RuntimeError, p.run, result)
 
-    def test_pktgen_dpdk_throughput_is_dpdk_setup(self, mock__time, mock_ssh):
+    def test_pktgen_dpdk_throughput_is_dpdk_setup(self, mock_ssh):
         args = {
             'options': {'packetsize': 60},
         }
@@ -151,7 +160,7 @@ class PktgenDPDKTestCase(unittest.TestCase):
         mock_ssh.SSH().execute.assert_called_with(
             "ip a | grep eth1 2>/dev/null")
 
-    def test_pktgen_dpdk_throughput_dpdk_setup(self, mock__time, mock_ssh):
+    def test_pktgen_dpdk_throughput_dpdk_setup(self, mock_ssh):
         args = {
             'options': {'packetsize': 60},
         }
@@ -163,9 +172,9 @@ class PktgenDPDKTestCase(unittest.TestCase):
 
         p.dpdk_setup()
 
-        self.assertEqual(p.dpdk_setup_done, True)
+        self.assertTrue(p.dpdk_setup_done)
 
-    def test_pktgen_dpdk_throughput_dpdk_get_result(self, mock__time, mock_ssh):
+    def test_pktgen_dpdk_throughput_dpdk_get_result(self, mock_ssh):
         args = {
             'options': {'packetsize': 60},
         }
@@ -180,8 +189,10 @@ class PktgenDPDKTestCase(unittest.TestCase):
         mock_ssh.SSH().execute.assert_called_with(
             "sudo /dpdk/destdir/bin/dpdk-procinfo -- --stats-reset > /dev/null 2>&1")
 
+
 def main():
     unittest.main()
 
+
 if __name__ == '__main__':
     main()
index cbbfc2b..be8ac55 100644 (file)
@@ -66,7 +66,7 @@ class VsperfTestCase(unittest.TestCase):
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
     def test_vsperf_teardown(self, mock_ssh, mock_subprocess):
         p = vsperf.Vsperf(self.args, self.ctx)
@@ -77,10 +77,10 @@ class VsperfTestCase(unittest.TestCase):
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         p.teardown()
-        self.assertEqual(p.setup_done, False)
+        self.assertFalse(p.setup_done)
 
     def test_vsperf_run_ok(self, mock_ssh, mock_subprocess):
         p = vsperf.Vsperf(self.args, self.ctx)
index 5759f0a..fbe3ed8 100644 (file)
@@ -27,7 +27,6 @@ from yardstick.benchmark.scenarios.networking import vsperf_dpdk
 
 
 @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.subprocess')
-@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
 class VsperfDPDKTestCase(unittest.TestCase):
 
     def setUp(self):
@@ -63,7 +62,16 @@ class VsperfDPDKTestCase(unittest.TestCase):
             }
         }
 
-    def test_vsperf_dpdk_setup(self, mock_ssh, mock_subprocess):
+        self._mock_ssh = mock.patch(
+            'yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
+        self.mock_ssh = self._mock_ssh.start()
+
+        self.addCleanup(self._cleanup)
+
+    def _cleanup(self):
+        self._mock_ssh.stop()
+
+    def test_vsperf_dpdk_setup(self, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
@@ -71,9 +79,9 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
-    def test_vsperf_dpdk_teardown(self, mock_ssh, mock_subprocess):
+    def test_vsperf_dpdk_teardown(self, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
@@ -81,12 +89,12 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         p.teardown()
-        self.assertEqual(p.setup_done, False)
+        self.assertFalse(p.setup_done)
 
-    def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_ssh, mock_subprocess):
+    def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
@@ -94,15 +102,15 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         # is_dpdk_setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
 
         result = p._is_dpdk_setup()
-        self.assertEqual(result, False)
+        self.assertFalse(result)
 
-    def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_ssh, mock_subprocess):
+    def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
@@ -110,16 +118,16 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         # is_dpdk_setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
 
         result = p._is_dpdk_setup()
-        self.assertEqual(result, True)
+        self.assertTrue(result)
 
-    @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
-    def test_vsperf_dpdk_dpdk_setup_first(self, mock_time, mock_ssh, mock_subprocess):
+    @mock.patch('time.sleep')
+    def test_vsperf_dpdk_dpdk_setup_first(self, _, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
@@ -127,61 +135,61 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         # is_dpdk_setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
 
         p.dpdk_setup()
-        self.assertEqual(p._is_dpdk_setup(), False)
-        self.assertEqual(p.dpdk_setup_done, True)
+        self.assertFalse(p._is_dpdk_setup())
+        self.assertTrue(p.dpdk_setup_done)
 
-    @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
-    def test_vsperf_dpdk_dpdk_setup_next(self, mock_time, mock_ssh, mock_subprocess):
+    @mock.patch('time.sleep')
+    def test_vsperf_dpdk_dpdk_setup_next(self, _, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         mock_subprocess.call().execute.return_value = None
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         p.dpdk_setup()
-        self.assertEqual(p._is_dpdk_setup(), True)
-        self.assertEqual(p.dpdk_setup_done, True)
+        self.assertTrue(p._is_dpdk_setup())
+        self.assertTrue(p.dpdk_setup_done)
 
-    @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
-    def test_vsperf_dpdk_dpdk_setup_fail(self, mock_time, mock_ssh, mock_subprocess):
+    @mock.patch('time.sleep')
+    def test_vsperf_dpdk_dpdk_setup_fail(self, _, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         mock_subprocess.call().execute.return_value = None
 
         p.setup()
         self.assertIsNotNone(p.client)
-        mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
-        self.assertEqual(p.setup_done, True)
+        self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
+        self.assertTrue(p.setup_done)
 
         self.assertRaises(RuntimeError, p.dpdk_setup)
 
-    @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.time')
-    def test_vsperf_dpdk_run_ok(self, mock_time, mock_ssh, mock_subprocess):
+    @mock.patch('time.sleep')
+    def test_vsperf_dpdk_run_ok(self, _, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         mock_subprocess.call().execute.return_value = None
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         # run() specific mocks
         mock_subprocess.call().execute.return_value = None
-        mock_ssh.SSH.from_node().execute.return_value = (
+        self.mock_ssh.SSH.from_node().execute.return_value = (
             0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
 
         result = {}
@@ -189,42 +197,41 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         self.assertEqual(result['throughput_rx_fps'], '14797660.000')
 
-    def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_ssh,
-                                                mock_subprocess):
+    def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         mock_subprocess.call().execute.return_value = None
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         # run() specific mocks
         mock_subprocess.call().execute.return_value = None
         mock_subprocess.call().execute.return_value = None
-        mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
 
         result = {}
         self.assertRaises(RuntimeError, p.run, result)
 
-    def test_vsperf_dpdk_run_falied_csv_report(self, mock_ssh, mock_subprocess):
+    def test_vsperf_dpdk_run_falied_csv_report(self, mock_subprocess):
         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
         # setup() specific mocks
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         mock_subprocess.call().execute.return_value = None
 
         p.setup()
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
         # run() specific mocks
         mock_subprocess.call().execute.return_value = None
         mock_subprocess.call().execute.return_value = None
-        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
-        mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
+        self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
 
         result = {}
         self.assertRaises(RuntimeError, p.run, result)
index 59b98a0..ee2bbc0 100644 (file)
@@ -9,50 +9,67 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-# Unittest for yardstick.benchmark.scenarios.parser.Parser
-
-from __future__ import absolute_import
+import subprocess
 
 import unittest
-
 import mock
+
 from oslo_serialization import jsonutils
 
 from yardstick.benchmark.scenarios.parser import parser
 
 
-@mock.patch('yardstick.benchmark.scenarios.parser.parser.subprocess')
 class ParserTestCase(unittest.TestCase):
 
     def setUp(self):
-        pass
-
-    def test_parser_successful_setup(self, mock_subprocess):
-
-        p = parser.Parser({}, {})
-        mock_subprocess.call().return_value = 0
-        p.setup()
-        self.assertEqual(p.setup_done, True)
-
-    def test_parser_successful(self, mock_subprocess):
         args = {
             'options': {'yangfile': '/root/yardstick/samples/yang.yaml',
                         'toscafile': '/root/yardstick/samples/tosca.yaml'},
         }
-        p = parser.Parser(args, {})
+        self.scenario = parser.Parser(scenario_cfg=args, context_cfg={})
+
+        self._mock_popen = mock.patch.object(subprocess, 'Popen')
+        self.mock_popen = self._mock_popen.start()
+        self._mock_call = mock.patch.object(subprocess, 'call')
+        self.mock_call = self._mock_call.start()
+
+        self.addCleanup(self._stop_mock)
+
+    def _stop_mock(self):
+        self._mock_popen.stop()
+        self._mock_call.stop()
+
+    def test_setup_successful(self):
+
+        self.mock_call.return_value = 0
+        self.scenario.setup()
+        self.assertTrue(self.scenario.setup_done)
+
+    def test_run_successful(self):
+
         result = {}
-        mock_subprocess.call().return_value = 0
-        sample_output = '{"yangtotosca": "success"}'
 
-        p.run(result)
-        expected_result = jsonutils.loads(sample_output)
+        self.mock_popen().returncode = 0
+
+        expected_result = jsonutils.loads('{"yangtotosca": "success"}')
+
+        self.scenario.run(result)
+        self.assertEqual(result, expected_result)
+
+    def test_run_fail(self):
+        result = {}
+
+        self.mock_popen().returncode = 1
+        expected_result = jsonutils.loads('{"yangtotosca": "fail"}')
+
+        self.scenario.run(result)
+        self.assertEqual(result, expected_result)
 
-    def test_parser_teardown_successful(self, mock_subprocess):
+    def test_teardown_successful(self):
 
-        p = parser.Parser({}, {})
-        mock_subprocess.call().return_value = 0
-        p.teardown()
-        self.assertEqual(p.teardown_done, True)
+        self.mock_call.return_value = 0
+        self.scenario.teardown()
+        self.assertTrue(self.scenario.teardown_done)
 
 
 def main():
index 17594b9..0cffea2 100644 (file)
@@ -53,7 +53,7 @@ class FioTestCase(unittest.TestCase):
 
         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
     def test_fio_job_file_successful_setup(self, mock_ssh):
 
@@ -67,7 +67,7 @@ class FioTestCase(unittest.TestCase):
 
         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
         self.assertIsNotNone(p.client)
-        self.assertEqual(p.setup_done, True)
+        self.assertTrue(p.setup_done)
 
     def test_fio_successful_no_sla(self, mock_ssh):
 
index 0f1cf7d..9bb5ed3 100644 (file)
@@ -25,8 +25,6 @@ from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_DPDK
 from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_OTHER
 from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_OTHER
 
-pass
-
 
 class TestDpdkBindHelper(unittest.TestCase):
     EXAMPLE_OUTPUT = """
@@ -116,8 +114,8 @@ Other crypto devices
 
         dpdk_bind_helper = DpdkBindHelper(conn)
 
-        self.assertEquals(conn, dpdk_bind_helper.ssh_helper)
-        self.assertEquals(self.CLEAN_STATUS, dpdk_bind_helper.dpdk_status)
+        self.assertEqual(conn, dpdk_bind_helper.ssh_helper)
+        self.assertEqual(self.CLEAN_STATUS, dpdk_bind_helper.dpdk_status)
         self.assertIsNone(dpdk_bind_helper.status_nic_row_re)
         self.assertIsNone(dpdk_bind_helper._dpdk_nic_bind_attr)
         self.assertIsNone(dpdk_bind_helper._status_cmd_attr)
@@ -127,7 +125,8 @@ Other crypto devices
         conn.execute = mock.Mock(return_value=(0, 'output', 'error'))
         conn.provision_tool = mock.Mock(return_value='tool_path')
         dpdk_bind_helper = DpdkBindHelper(conn)
-        self.assertEquals((0, 'output', 'error'), dpdk_bind_helper._dpdk_execute('command'))
+        self.assertEqual((0, 'output', 'error'),
+                         dpdk_bind_helper._dpdk_execute('command'))
 
     def test__dpdk_execute_failure(self):
         conn = mock.Mock()
@@ -145,7 +144,7 @@ Other crypto devices
         dpdk_bind_helper._addline(NETWORK_KERNEL, self.ONE_INPUT_LINE)
 
         self.assertIsNotNone(dpdk_bind_helper.dpdk_status)
-        self.assertEquals(self.ONE_INPUT_LINE_PARSED, dpdk_bind_helper.dpdk_status[NETWORK_KERNEL])
+        self.assertEqual(self.ONE_INPUT_LINE_PARSED, dpdk_bind_helper.dpdk_status[NETWORK_KERNEL])
 
     def test__switch_active_dict_by_header(self):
         line = "Crypto devices using DPDK-compatible driver"
@@ -165,7 +164,7 @@ Other crypto devices
         dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
 
         self.maxDiff = None
-        self.assertEquals(self.PARSED_EXAMPLE, dpdk_bind_helper.dpdk_status)
+        self.assertEqual(self.PARSED_EXAMPLE, dpdk_bind_helper.dpdk_status)
 
     def test_read_status(self):
         conn = mock.Mock()
@@ -174,7 +173,7 @@ Other crypto devices
 
         dpdk_bind_helper = DpdkBindHelper(conn)
 
-        self.assertEquals(self.PARSED_EXAMPLE, dpdk_bind_helper.read_status())
+        self.assertEqual(self.PARSED_EXAMPLE, dpdk_bind_helper.read_status())
 
     def test__get_bound_pci_addresses(self):
         conn = mock.Mock()
@@ -183,9 +182,9 @@ Other crypto devices
 
         dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
 
-        self.assertEquals(['0000:00:04.0', '0000:00:05.0'],
+        self.assertEqual(['0000:00:04.0', '0000:00:05.0'],
                           dpdk_bind_helper._get_bound_pci_addresses(NETWORK_DPDK))
-        self.assertEquals(['0000:00:03.0'],
+        self.assertEqual(['0000:00:03.0'],
                           dpdk_bind_helper._get_bound_pci_addresses(NETWORK_KERNEL))
 
     def test_interface_driver_map(self):
@@ -195,7 +194,7 @@ Other crypto devices
 
         dpdk_bind_helper.parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
 
-        self.assertEquals({'0000:00:04.0': 'igb_uio',
+        self.assertEqual({'0000:00:04.0': 'igb_uio',
                            '0000:00:03.0': 'virtio-pci',
                            '0000:00:05.0': 'igb_uio',
                            },
index 5c2f890..7ad1662 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import absolute_import
-import unittest
-
 import errno
+
 import mock
+import unittest
 
 from yardstick.network_services.nfvi.resource import ResourceProfile
 from yardstick.network_services.nfvi import resource, collectd
@@ -103,16 +102,18 @@ class TestResourceProfile(unittest.TestCase):
             self.resource_profile.connection = self.ssh_mock
 
     def test___init__(self):
-        self.assertEqual(True, self.resource_profile.enable)
+        self.assertTrue(self.resource_profile.enable)
 
-    def test_check_if_sa_running(self):
-        self.assertEqual(self.resource_profile.check_if_sa_running("collectd"),
+    def test_check_if_system_agent_running(self):
+        self.assertEqual(self.resource_profile.check_if_system_agent_running("collectd"),
                          (0, ""))
 
-    def test_check_if_sa_running_excetion(self):
+    def test_check_if_system_agent_running_excetion(self):
         with mock.patch.object(self.resource_profile.connection, "execute") as mock_execute:
             mock_execute.side_effect = OSError(errno.ECONNRESET, "error")
-            self.assertEqual(self.resource_profile.check_if_sa_running("collectd"), (1, None))
+            self.assertEqual(
+                self.resource_profile.check_if_system_agent_running("collectd"),
+                (1, None))
 
     def test_get_cpu_data(self):
         reskey = ["", "cpufreq", "cpufreq-0"]
@@ -135,12 +136,12 @@ class TestResourceProfile(unittest.TestCase):
                 self.resource_profile._prepare_collectd_conf("/opt/nsb_bin"))
 
     def test__setup_ovs_stats(self):
+        # TODO(elfoley): This method doesn't actually return anything, the side
+        # effects should be checked
         self.assertIsNone(
             self.resource_profile._setup_ovs_stats(self.ssh_mock))
 
-    @mock.patch("yardstick.network_services.nfvi.resource.open")
-    @mock.patch("yardstick.network_services.nfvi.resource.os")
-    def test__provide_config_file(self, mock_open, mock_os):
+    def test__provide_config_file(self,):
         loadplugin = range(5)
         port_names = range(5)
         kwargs = {
@@ -151,14 +152,12 @@ class TestResourceProfile(unittest.TestCase):
         self.resource_profile._provide_config_file("/opt/nsb_bin", "collectd.conf", kwargs)
         self.ssh_mock.execute.assert_called_once()
 
-    @mock.patch("yardstick.network_services.nfvi.resource.open")
-    def test_initiate_systemagent(self, mock_open):
+    def test_initiate_systemagent(self):
         self.resource_profile._start_collectd = mock.Mock()
         self.assertIsNone(
             self.resource_profile.initiate_systemagent("/opt/nsb_bin"))
 
-    @mock.patch("yardstick.network_services.nfvi.resource.open")
-    def test_initiate_systemagent_raise(self, mock_open):
+    def test_initiate_systemagent_raise(self):
         self.resource_profile._start_collectd = mock.Mock(side_effect=RuntimeError)
         with self.assertRaises(RuntimeError):
             self.resource_profile.initiate_systemagent("/opt/nsb_bin")
@@ -267,8 +266,10 @@ class TestResourceProfile(unittest.TestCase):
     def test_stop(self):
         self.assertIsNone(self.resource_profile.stop())
 
-    def test_stop(self):
+    def test_stop_amqp_not_running(self):
         self.resource_profile.amqp_client = mock.MagicMock()
+        # TODO(efoley): Fix this incorrect test.
+        # Should check that we don't try to stop amqp when it's not running
         self.assertIsNone(self.resource_profile.stop())
 
 if __name__ == '__main__':
index ed49c70..0ac46c6 100644 (file)
 #
 
 from itertools import repeat, chain
-import mock
 import os
 import socket
 import time
+
+import mock
 import unittest
 
 from tests.unit import STL_MOCKS
 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
 
+
 STLClient = mock.MagicMock()
 stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
 stl_patch.start()
@@ -1433,9 +1435,9 @@ class TestProxResourceHelper(unittest.TestCase):
         helper = ProxResourceHelper(mock.MagicMock())
         helper.resource = resource = mock.MagicMock()
 
-        resource.check_if_sa_running.return_value = 0, '1234'
+        resource.check_if_system_agent_running.return_value = 0, '1234'
         resource.amqp_collect_nfvi_kpi.return_value = 543
-        resource.check_if_sa_running.return_value = (0, None)
+        resource.check_if_system_agent_running.return_value = (0, None)
 
         expected = {'core': 543}
         result = helper.collect_collectd_kpi()
@@ -1447,9 +1449,9 @@ class TestProxResourceHelper(unittest.TestCase):
         helper._result = {'z': 123}
         helper.resource = resource = mock.MagicMock()
 
-        resource.check_if_sa_running.return_value = 0, '1234'
+        resource.check_if_system_agent_running.return_value = 0, '1234'
         resource.amqp_collect_nfvi_kpi.return_value = 543
-        resource.check_if_sa_running.return_value = (0, None)
+        resource.check_if_system_agent_running.return_value = (0, None)
 
         queue.empty.return_value = False
         queue.get.return_value = {'a': 789}
index beb4f8f..af941c0 100644 (file)
@@ -704,8 +704,8 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
 
         intf_0 = vnfd_helper.vdu[0]['external-interface'][0]['virtual-interface']
         intf_1 = vnfd_helper.vdu[0]['external-interface'][1]['virtual-interface']
-        self.assertEquals(0, intf_0['dpdk_port_num'])
-        self.assertEquals(1, intf_1['dpdk_port_num'])
+        self.assertEqual(0, intf_0['dpdk_port_num'])
+        self.assertEqual(1, intf_1['dpdk_port_num'])
 
     def test_tear_down(self):
         vnfd_helper = VnfdHelper(self.VNFD_0)
index 63b2ac4..fb26f20 100644 (file)
@@ -80,7 +80,7 @@ class TestPingParser(unittest.TestCase):
         ping_parser = PingParser(q_out)
         ping_parser.write(sample_out)
         ping_parser.clear()
-        self.assertEqual(True, q_out.empty())
+        self.assertTrue(q_out.empty())
 
     def test_close(self):
         q_out = Queue()
@@ -238,7 +238,7 @@ class TestPingTrafficGen(unittest.TestCase):
 
         self.assertIsInstance(ping_traffic_gen.setup_helper, PingSetupEnvHelper)
         self.assertIsInstance(ping_traffic_gen.resource_helper, PingResourceHelper)
-        self.assertEquals(ping_traffic_gen._result, {})
+        self.assertEqual(ping_traffic_gen._result, {})
 
     @mock.patch("yardstick.ssh.SSH")
     def test__bind_device_kernel_with_failure(self, ssh):
@@ -282,8 +282,7 @@ class TestPingTrafficGen(unittest.TestCase):
         self.assertEqual(self.CMD_KWARGS, ping_traffic_gen.resource_helper.cmd_kwargs)
         self.assertIsNotNone(ping_traffic_gen._result)
 
-    @mock.patch("yardstick.ssh.SSH")
-    def test_listen_traffic(self, *args):
+    def test_listen_traffic(self):
         ping_traffic_gen = PingTrafficGen('vnf1', self.VNFD_0)
         self.assertIsNone(ping_traffic_gen.listen_traffic({}))
 
index 7b4d79e..0104e7f 100644 (file)
@@ -330,7 +330,7 @@ class TestProxTrafficGen(unittest.TestCase):
 
         prox_traffic_gen = ProxTrafficGen(NAME, self.VNFD0)
         prox_traffic_gen._vnf_wrapper.resource_helper.resource = mock.MagicMock(
-            **{"check_if_sa_running.return_value": [False]})
+            **{"self.check_if_system_agent_running.return_value": [False]})
         prox_traffic_gen._vnf_wrapper.vnf_execute = mock.Mock(return_value="")
         self.assertEqual({}, prox_traffic_gen.collect_kpi())
 
index 635ce27..cda3852 100644 (file)
@@ -447,7 +447,7 @@ class TestUdpReplayApproxVnf(unittest.TestCase):
         udp_replay_approx_vnf._vnf_process.is_alive = mock.Mock(return_value=1)
         udp_replay_approx_vnf._vnf_process.exitcode = 0
 
-        self.assertEquals(udp_replay_approx_vnf.wait_for_instantiate(), 0)
+        self.assertEqual(udp_replay_approx_vnf.wait_for_instantiate(), 0)
 
     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
     @mock.patch('yardstick.ssh.SSH')
index 55cd4d2..1abc536 100644 (file)
 # limitations under the License.
 #
 
-import mock
 from multiprocessing import Process, Queue
 import os
-import six.moves.configparser as configparser
 import time
+
+import mock
+import six.moves.configparser as configparser
 import unittest
 
 from tests.unit import STL_MOCKS
@@ -543,9 +544,9 @@ class TestVpeApproxVnf(unittest.TestCase):
         mock_ssh(ssh)
 
         resource = mock.Mock(autospec=ResourceProfile)
-        resource.check_if_sa_running.return_value = 1, ''
+        resource.check_if_system_agent_running.return_value = 1, ''
         resource.amqp_collect_nfvi_kpi.return_value = {'foo': 234}
-        resource.check_if_sa_running.return_value = (1, None)
+        resource.check_if_system_agent_running.return_value = (1, None)
 
         vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
         vpe_approx_vnf.q_in = mock.MagicMock()
@@ -567,7 +568,7 @@ class TestVpeApproxVnf(unittest.TestCase):
         mock_ssh(ssh)
 
         resource = mock.Mock(autospec=ResourceProfile)
-        resource.check_if_sa_running.return_value = 0, '1234'
+        resource.check_if_system_agent_running.return_value = 0, '1234'
         resource.amqp_collect_nfvi_kpi.return_value = {'foo': 234}
 
         vpe_approx_vnf = VpeApproxVnf(NAME, self.VNFD_0)
index 633c938..32c4f19 100755 (executable)
@@ -29,9 +29,16 @@ run_tests() {
     echo "Running unittest ... "
     if [ $FILE_OPTION == "f" ]; then
         python -m unittest discover -v -s tests/unit > $logfile 2>&1
+        if [ $? -ne 0 ]; then
+            echo "FAILED, results in $logfile"
+            exit 1
+        fi
         python -m unittest discover -v -s yardstick/tests/unit >> $logfile 2>&1
     else
         python -m unittest discover -v -s tests/unit
+        if [ $? -ne 0 ]; then
+            exit 1
+        fi
         python -m unittest discover -v -s yardstick/tests/unit
     fi
 
diff --git a/tools/virt_ci_rampup.sh b/tools/virt_ci_rampup.sh
new file mode 100755 (executable)
index 0000000..210e6ed
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+# Copyright (c) 2018 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.
+
+ANSIBLE_SCRIPTS="${0%/*}/../ansible"
+
+cd ${ANSIBLE_SCRIPTS} &&\
+ansible-playbook \
+         -e rs_file='../etc/infra/infra_deploy.yaml' \
+         -i inventory.ini infra_deploy.yml
index 85ae14b..3017083 100644 (file)
@@ -35,7 +35,7 @@ LOG = logging.getLogger(__name__)
 
 VM_TEMPLATE = """
 <domain type="kvm">
- <name>{vm_name}</name>
 <name>{vm_name}</name>
   <uuid>{random_uuid}</uuid>
   <memory unit="MB">{memory}</memory>
   <currentMemory unit="MB">{memory}</currentMemory>
@@ -80,7 +80,13 @@ VM_TEMPLATE = """
       <source bridge="br-int" />
       <model type='virtio'/>
     </interface>
-   </devices>
+    <serial type='pty'>
+      <target port='0'/>
+    </serial>
+    <console type='pty'>
+      <target type='serial' port='0'/>
+    </console>
+  </devices>
 </domain>
 """
 WAIT_FOR_BOOT = 30
@@ -212,9 +218,8 @@ class Libvirt(object):
         mac.set('address', vf_mac)
 
         source = ET.SubElement(interface, 'source')
-        addr = ET.SubElement(source, 'address')
         pci_address = PciAddress(vf_pci.strip())
-        cls._add_interface_address(addr, pci_address)
+        cls._add_interface_address(source, pci_address)
 
         pci_vm_address = PciAddress(vm_pci.strip())
         cls._add_interface_address(interface, pci_vm_address)
@@ -287,7 +292,8 @@ class StandaloneContextHelper(object):
         super(StandaloneContextHelper, self).__init__()
 
     @staticmethod
-    def install_req_libs(connection, extra_pkgs=[]):
+    def install_req_libs(connection, extra_pkgs=None):
+        extra_pkgs = extra_pkgs or []
         pkgs = ["qemu-kvm", "libvirt-bin", "bridge-utils", "numactl", "fping"]
         pkgs.extend(extra_pkgs)
         cmd_template = "dpkg-query -W --showformat='${Status}\\n' \"%s\"|grep 'ok installed'"
index c7086d0..df523a5 100644 (file)
@@ -44,22 +44,21 @@ class CreateVolume(base.Scenario):
 
         self.setup_done = True
 
-    def run(self, result):
+    def run(self):
         """execute the test"""
 
         if not self.setup_done:
             self.setup()
 
-        if self.image_name:
-            self.image_id = op_utils.get_image_id(self.glance_client,
-                                                  self.image_name)
+        self.image_id = op_utils.get_image_id(self.glance_client,
+                                              self.image_name)
 
         volume = op_utils.create_volume(self.cinder_client, self.volume_name,
                                         self.volume_size, self.image_id)
 
         status = volume.status
         while(status == 'creating' or status == 'downloading'):
-            LOG.info("Volume status is: %s" % status)
+            LOG.info("Volume status is: %s", status)
             time.sleep(5)
             volume = op_utils.get_volume_by_name(self.volume_name)
             status = volume.status
index eb16833..5b2b49c 100644 (file)
@@ -6,13 +6,13 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-from __future__ import print_function
-from __future__ import absolute_import
+
 import pkg_resources
 import logging
 import subprocess
 from yardstick.benchmark.scenarios import base
 
+
 LOG = logging.getLogger(__name__)
 
 
@@ -63,7 +63,7 @@ class Parser(base.Scenario):
         p = subprocess.Popen(cmd1, shell=True, stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE)
         p.communicate()
-        print("yangtotosca finished")
+        LOG.info("yangtotosca finished")
 
         result['yangtotosca'] = "success" if p.returncode == 0 else "fail"
 
index 82e20be..8604e90 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-# yardstick comment: this is a modified copy of rally/rally/common/utils.py
-
-from __future__ import absolute_import
-from __future__ import print_function
-
+import collections
+from contextlib import closing
 import datetime
 import errno
+import importlib
+import ipaddress
 import logging
 import os
+import random
+import socket
 import subprocess
 import sys
-import collections
-import socket
-import random
-import ipaddress
-from contextlib import closing
 
 import six
 from flask import jsonify
 from six.moves import configparser
-from oslo_utils import importutils
 from oslo_serialization import jsonutils
 
 import yardstick
@@ -70,27 +65,28 @@ def itersubclasses(cls, _seen=None):
 
 
 def import_modules_from_package(package):
-    """Import modules from package and append into sys.modules
+    """Import modules given a package name
 
     :param: package - Full package name. For example: rally.deploy.engines
     """
     yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
-    path = os.path.join(yardstick_root, *package.split("."))
+    path = os.path.join(yardstick_root, *package.split('.'))
     for root, _, files in os.walk(path):
-        matches = (filename for filename in files if filename.endswith(".py") and
-                   not filename.startswith("__"))
-        new_package = os.path.relpath(root, yardstick_root).replace(os.sep, ".")
+        matches = (filename for filename in files if filename.endswith('.py')
+                   and not filename.startswith('__'))
+        new_package = os.path.relpath(root, yardstick_root).replace(os.sep,
+                                                                    '.')
         module_names = set(
-            ("{}.{}".format(new_package, filename.rsplit(".py", 1)[0]) for filename in matches))
-        # find modules which haven't already been imported
+            '{}.{}'.format(new_package, filename.rsplit('.py', 1)[0])
+            for filename in matches)
+        # Find modules which haven't already been imported
         missing_modules = module_names.difference(sys.modules)
-        logger.debug("importing %s", missing_modules)
-        # we have already checked for already imported modules, so we don't need to check again
+        logger.debug('Importing modules: %s', missing_modules)
         for module_name in missing_modules:
             try:
-                sys.modules[module_name] = importutils.import_module(module_name)
+                importlib.import_module(module_name)
             except (ImportError, SyntaxError):
-                logger.exception("unable to import %s", module_name)
+                logger.exception('Unable to import module %s', module_name)
 
 
 def makedirs(d):
index 4dc5a79..7e18302 100644 (file)
@@ -62,12 +62,13 @@ class Collector(object):
             # Result example:
             # {"VNF1: { "tput" : [1000, 999] }, "VNF2": { "latency": 100 }}
             LOG.debug("collect KPI for %s", node_name)
-            if resource.check_if_sa_running("collectd")[0] != 0:
+            if resource.check_if_system_agent_running("collectd")[0] != 0:
                 continue
 
             try:
                 results[node_name] = {"core": resource.amqp_collect_nfvi_kpi()}
                 LOG.debug("%s collect KPIs %s", node_name, results[node_name]['core'])
-            except Exception:
-                LOG.exception("")
+            # NOTE(elfoley): catch a more specific error
+            except Exception as exc:  # pylint: disable=broad-except
+                LOG.exception(exc)
         return results
index adf4d8a..dc5c46a 100644 (file)
 # limitations under the License.
 """ Resource collection definitions """
 
-from __future__ import absolute_import
-from __future__ import print_function
-
-import logging
-from itertools import chain
-
 import errno
-import jinja2
+from itertools import chain
+import logging
+import multiprocessing
 import os
 import os.path
 import re
-import multiprocessing
-import pkg_resources
 
+import jinja2
+import pkg_resources
 from oslo_config import cfg
 from oslo_utils.encodeutils import safe_decode
 
@@ -92,7 +88,7 @@ class ResourceProfile(object):
 
         return cls(node, plugins=plugins, interval=interval, timeout=timeout)
 
-    def check_if_sa_running(self, process):
+    def check_if_system_agent_running(self, process):
         """ verify if system agent is running """
         try:
             err, pid, _ = self.connection.execute("pgrep -f %s" % process)
@@ -101,7 +97,7 @@ class ResourceProfile(object):
         except OSError as e:
             if e.errno in {errno.ECONNRESET}:
                 # if we can't connect to check, then we won't be able to connect to stop it
-                LOG.exception("can't connect to host to check collectd status")
+                LOG.exception("Can't connect to host to check %s status", process)
                 return 1, None
             raise
 
@@ -327,7 +323,7 @@ class ResourceProfile(object):
             self.amqp_client.terminate()
 
         LOG.debug("Check if %s is running", agent)
-        status, pid = self.check_if_sa_running(agent)
+        status, pid = self.check_if_system_agent_running(agent)
         LOG.debug("status %s  pid %s", status, pid)
         if status != 0:
             return
index 5eeb6c8..fbaaa0c 100644 (file)
 # limitations under the License.
 """ Base class implementation for generic vnf implementation """
 
-from __future__ import absolute_import
-
-import posixpath
-import time
+from collections import Mapping
 import logging
+from multiprocessing import Queue, Value, Process
 import os
+import posixpath
 import re
-import subprocess
-from collections import Mapping
-from multiprocessing import Queue, Value, Process
-
 from six.moves import cStringIO
+import subprocess
+import time
 
+from trex_stl_lib.trex_stl_client import LoggerApi
+from trex_stl_lib.trex_stl_client import STLClient
+from trex_stl_lib.trex_stl_exceptions import STLError
 from yardstick.benchmark.contexts.base import Context
 from yardstick.benchmark.scenarios.networking.vnf_generic import find_relative_file
 from yardstick.common import exceptions as y_exceptions
 from yardstick.common.process import check_if_process_failed
+from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkBindHelper
 from yardstick.network_services.helpers.samplevnf_helper import PortPairs
 from yardstick.network_services.helpers.samplevnf_helper import MultiPortConfig
-from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkBindHelper
 from yardstick.network_services.nfvi.resource import ResourceProfile
+from yardstick.network_services.utils import get_nsb_option
 from yardstick.network_services.vnf_generic.vnf.base import GenericVNF
-from yardstick.network_services.vnf_generic.vnf.base import QueueFileWrapper
 from yardstick.network_services.vnf_generic.vnf.base import GenericTrafficGen
-from yardstick.network_services.utils import get_nsb_option
-
-from trex_stl_lib.trex_stl_client import STLClient
-from trex_stl_lib.trex_stl_client import LoggerApi
-from trex_stl_lib.trex_stl_exceptions import STLError
-
+from yardstick.network_services.vnf_generic.vnf.base import QueueFileWrapper
 from yardstick.ssh import AutoConnectSSH
 
+
 DPDK_VERSION = "dpdk-16.07"
 
 LOG = logging.getLogger(__name__)
@@ -346,7 +342,7 @@ class ResourceHelper(object):
 
     def _collect_resource_kpi(self):
         result = {}
-        status = self.resource.check_if_sa_running("collectd")[0]
+        status = self.resource.check_if_system_agent_running("collectd")[0]
         if status == 0:
             result = self.resource.amqp_collect_nfvi_kpi()
 
diff --git a/yardstick/tests/functional/common/fake_module/fake_library.py b/yardstick/tests/functional/common/fake_module/fake_library.py
new file mode 100644 (file)
index 0000000..28c7dc6
--- /dev/null
@@ -0,0 +1,17 @@
+# Copyright (c) 2018 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.
+
+
+class FakeClassToBeImported(object):
+    pass
diff --git a/yardstick/tests/functional/common/test_utils.py b/yardstick/tests/functional/common/test_utils.py
new file mode 100644 (file)
index 0000000..b5333bb
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (c) 2018 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import unittest
+import sys
+
+from yardstick.common import utils
+
+
+class ImportModulesFromPackageTestCase(unittest.TestCase):
+
+    def test_import_package(self):
+        module_name = 'yardstick.tests.functional.common.fake_module'
+        library_name = 'fake_library'
+        class_name = 'FakeClassToBeImported'
+        self.assertNotIn(module_name, sys.modules)
+
+        utils.import_modules_from_package(module_name)
+        self.assertIn(module_name, sys.modules)
+        module_obj = sys.modules[module_name]
+        library_obj = getattr(module_obj, library_name)
+        class_obj = getattr(library_obj, class_name)
+        self.assertEqual(class_name, class_obj().__class__.__name__)
index b7bfe29..cf646a2 100644 (file)
@@ -32,7 +32,7 @@ class EnvTestCase(APITestCase):
 
         time.sleep(0)
 
-        self.assertTrue(u'status' in resp)
+        self.assertIn(u'status', resp)
 
 
 def main():
index 452b93a..033bb02 100644 (file)
@@ -7,12 +7,9 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-# Unittest for yardstick.common.utils
-
-from __future__ import absolute_import
-
 from copy import deepcopy
 import errno
+import importlib
 import ipaddress
 from itertools import product, chain
 import mock
@@ -60,8 +57,8 @@ class ImportModulesFromPackageTestCase(unittest.TestCase):
         utils.import_modules_from_package('foo.bar')
 
     @mock.patch('yardstick.common.utils.os.walk')
-    @mock.patch('yardstick.common.utils.importutils')
-    def test_import_modules_from_package(self, mock_importutils, mock_walk):
+    @mock.patch.object(importlib, 'import_module')
+    def test_import_modules_from_package(self, mock_import_module, mock_walk):
 
         yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
         mock_walk.return_value = ([
@@ -69,7 +66,7 @@ class ImportModulesFromPackageTestCase(unittest.TestCase):
         ])
 
         utils.import_modules_from_package('foo.bar')
-        mock_importutils.import_module.assert_called_with('bar.baz')
+        mock_import_module.assert_called_once_with('bar.baz')
 
 
 class GetParaFromYaml(unittest.TestCase):
index 90cbb81..6c2beb4 100644 (file)
@@ -22,7 +22,7 @@ class TemplateFormatTestCase(unittest.TestCase):
 
     def test_parse_to_value_exception(self):
 
-        self.assertEquals(yaml_loader.yaml_load("string"), u"string")
+        self.assertEqual(yaml_loader.yaml_load("string"), u"string")
 
 
 def main():
similarity index 97%
rename from tests/unit/dispatcher/test_influxdb.py
rename to yardstick/tests/unit/dispatcher/test_influxdb.py
index 7ebe8c9..bca94e3 100644 (file)
 
 # Unittest for yardstick.dispatcher.influxdb
 
-from __future__ import absolute_import
+import mock
 import unittest
 
+from yardstick.dispatcher.influxdb import InfluxdbDispatcher
+from yardstick import _init_logging
 
-try:
-    from unittest import mock
-except ImportError:
-    import mock
 
-from yardstick import _init_logging
 _init_logging()
 
-from yardstick.dispatcher.influxdb import InfluxdbDispatcher
-
 
 class InfluxdbDispatcherTestCase(unittest.TestCase):
 
@@ -11,7 +11,6 @@
 # yardstick comment: this file is a modified copy of
 # influxdb-python/influxdb/tests/test_line_protocol.py
 
-from __future__ import absolute_import
 import unittest
 from third_party.influxdb.influxdb_line_protocol import make_lines
 
similarity index 52%
rename from tests/unit/orchestrator/test_heat.py
rename to yardstick/tests/unit/orchestrator/test_heat.py
index c34ea53..faf70cd 100644 (file)
 from contextlib import contextmanager
 from itertools import count
 from tempfile import NamedTemporaryFile
-import unittest
-import uuid
 import time
+import uuid
+
 import mock
+import unittest
 
 from yardstick.benchmark.contexts import node
 from yardstick.orchestrator import heat
@@ -65,6 +66,7 @@ class HeatContextTestCase(unittest.TestCase):
         self.assertEqual(heat.HEAT_KEY_UUID_LENGTH, len(k))
         self.assertIn(k, str(u))
 
+
 class HeatTemplateTestCase(unittest.TestCase):
 
     def setUp(self):
@@ -73,38 +75,63 @@ class HeatTemplateTestCase(unittest.TestCase):
     def test_add_tenant_network(self):
         self.template.add_network('some-network')
 
-        self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::Net')
+        self.assertEqual(
+            self.template.resources['some-network']['type'],
+            'OS::Neutron::Net')
 
     def test_add_provider_network(self):
         self.template.add_network('some-network', 'physnet2', 'sriov')
 
-        self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::ProviderNet')
-        self.assertEqual(self.template.resources['some-network']['properties']['physical_network'], 'physnet2')
+        self.assertEqual(
+            self.template.resources['some-network']['type'],
+            'OS::Neutron::ProviderNet')
+        self.assertEqual(
+            self.template.resources['some-network']['properties']['physical_network'],
+            'physnet2')
 
     def test_add_subnet(self):
-        netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
-        self.template.add_subnet('some-subnet', "some-network", netattrs['cidr'])
-
-        self.assertEqual(self.template.resources['some-subnet']['type'], 'OS::Neutron::Subnet')
-        self.assertEqual(self.template.resources['some-subnet']['properties']['cidr'], '10.0.0.0/24')
+        netattrs = {'cidr': '10.0.0.0/24',
+                    'provider': None, 'external_network': 'ext_net'}
+        self.template.add_subnet(
+            'some-subnet', "some-network", netattrs['cidr'])
+
+        self.assertEqual(
+            self.template.resources['some-subnet']['type'],
+            'OS::Neutron::Subnet')
+        self.assertEqual(
+            self.template.resources['some-subnet']['properties']['cidr'],
+            '10.0.0.0/24')
 
     def test_add_router(self):
         self.template.add_router('some-router', 'ext-net', 'some-subnet')
 
-        self.assertEqual(self.template.resources['some-router']['type'], 'OS::Neutron::Router')
-        self.assertIn('some-subnet', self.template.resources['some-router']['depends_on'])
+        self.assertEqual(
+            self.template.resources['some-router']['type'],
+            'OS::Neutron::Router')
+        self.assertIn(
+            'some-subnet',
+            self.template.resources['some-router']['depends_on'])
 
     def test_add_router_interface(self):
-        self.template.add_router_interface('some-router-if', 'some-router', 'some-subnet')
+        self.template.add_router_interface(
+            'some-router-if', 'some-router', 'some-subnet')
 
-        self.assertEqual(self.template.resources['some-router-if']['type'], 'OS::Neutron::RouterInterface')
-        self.assertIn('some-subnet', self.template.resources['some-router-if']['depends_on'])
+        self.assertEqual(
+            self.template.resources['some-router-if']['type'],
+            'OS::Neutron::RouterInterface')
+        self.assertIn(
+            'some-subnet',
+            self.template.resources['some-router-if']['depends_on'])
 
     def test_add_servergroup(self):
         self.template.add_servergroup('some-server-group', 'anti-affinity')
 
-        self.assertEqual(self.template.resources['some-server-group']['type'], 'OS::Nova::ServerGroup')
-        self.assertEqual(self.template.resources['some-server-group']['properties']['policies'], ['anti-affinity'])
+        self.assertEqual(
+            self.template.resources['some-server-group']['type'],
+            'OS::Nova::ServerGroup')
+        self.assertEqual(
+            self.template.resources['some-server-group']['properties']['policies'],
+            ['anti-affinity'])
 
     def test__add_resources_to_template_raw(self):
         test_context = node.NodeContext()
@@ -136,49 +163,136 @@ class HeatTemplateTestCase(unittest.TestCase):
         heat_template.add_router("router1", "gw1", "subnet1")
         heat_template.add_router_interface("router_if1", "router1", "subnet1")
         heat_template.add_port("port1", "network1", "subnet1", "normal")
-        heat_template.add_port("port2", "network2", "subnet2", "normal", sec_group_id="sec_group1",provider="not-sriov")
-        heat_template.add_port("port3", "network2", "subnet2", "normal", sec_group_id="sec_group1",provider="sriov")
-        heat_template.add_floating_ip("floating_ip1", "network1", "port1", "router_if1")
-        heat_template.add_floating_ip("floating_ip2", "network2", "port2", "router_if2", "foo-secgroup")
-        heat_template.add_floating_ip_association("floating_ip1_association", "floating_ip1", "port1")
+        heat_template.add_port(
+            "port2",
+            "network2",
+            "subnet2",
+            "normal",
+            sec_group_id="sec_group1",
+            provider="not-sriov")
+        heat_template.add_port(
+            "port3",
+            "network2",
+            "subnet2",
+            "normal",
+            sec_group_id="sec_group1",
+            provider="sriov")
+        heat_template.add_floating_ip(
+            "floating_ip1", "network1", "port1", "router_if1")
+        heat_template.add_floating_ip(
+            "floating_ip2", "network2", "port2", "router_if2", "foo-secgroup")
+        heat_template.add_floating_ip_association(
+            "floating_ip1_association", "floating_ip1", "port1")
         heat_template.add_servergroup("server_grp2", "affinity")
         heat_template.add_servergroup("server_grp3", "anti-affinity")
         heat_template.add_security_group("security_group")
-        heat_template.add_server(name="server1", image="image1", flavor="flavor1", flavors=[])
-        heat_template.add_server_group(name="servergroup", policies=["policy1","policy2"])
+        heat_template.add_server(
+            name="server1", image="image1", flavor="flavor1", flavors=[])
+        heat_template.add_server_group(
+            name="servergroup", policies=["policy1", "policy2"])
         heat_template.add_server_group(name="servergroup", policies="policy1")
-        heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=[], ports=["port1", "port2"],
-                                 networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
-                                 key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
-                                 additional_properties={"prop1": 1, "prop2": 2})
-        heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor1", "flavor2"],
-                                 ports=["port1", "port2"],
-                                 networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
-                                 key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
-                                 additional_properties={"prop1": 1, "prop2": 2} )
-        heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor3", "flavor4"],
-                                 ports=["port1", "port2"],
-                                 networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
-                                 key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
-                                 additional_properties={"prop1": 1, "prop2": 2})
-        heat_template.add_flavor(name="flavor1", vcpus=1, ram=2048, disk=1,extra_specs={"cat": 1, "dog": 2})
+        heat_template.add_server(
+            name="server2",
+            image="image1",
+            flavor="flavor1",
+            flavors=[],
+            ports=[
+                "port1",
+                "port2"],
+            networks=[
+                "network1",
+                "network2"],
+            scheduler_hints="hints1",
+            user="user1",
+            key_name="foo-key",
+            user_data="user",
+            metadata={
+                "cat": 1,
+                "doc": 2},
+            additional_properties={
+                "prop1": 1,
+                "prop2": 2})
+        heat_template.add_server(
+            name="server2",
+            image="image1",
+            flavor="flavor1",
+            flavors=[
+                "flavor1",
+                "flavor2"],
+            ports=[
+                "port1",
+                "port2"],
+            networks=[
+                "network1",
+                "network2"],
+            scheduler_hints="hints1",
+            user="user1",
+            key_name="foo-key",
+            user_data="user",
+            metadata={
+                "cat": 1,
+                "doc": 2},
+            additional_properties={
+                "prop1": 1,
+                "prop2": 2})
+        heat_template.add_server(
+            name="server2",
+            image="image1",
+            flavor="flavor1",
+            flavors=[
+                "flavor3",
+                "flavor4"],
+            ports=[
+                "port1",
+                "port2"],
+            networks=[
+                "network1",
+                "network2"],
+            scheduler_hints="hints1",
+            user="user1",
+            key_name="foo-key",
+            user_data="user",
+            metadata={
+                "cat": 1,
+                "doc": 2},
+            additional_properties={
+                "prop1": 1,
+                "prop2": 2})
+        heat_template.add_flavor(
+            name="flavor1",
+            vcpus=1,
+            ram=2048,
+            disk=1,
+            extra_specs={
+                "cat": 1,
+                "dog": 2})
         heat_template.add_flavor(name=None, vcpus=1, ram=2048)
-        heat_template.add_server(name="server1",
-                                 image="image1",
-                                 flavor="flavor1",
-                                 flavors=[],
-                                 ports=["port1", "port2"],
-                                 networks=["network1", "network2"],
-                                 scheduler_hints="hints1",
-                                 user="user1",
-                                 key_name="foo-key",
-                                 user_data="user",
-                                 metadata={"cat": 1, "doc": 2},
-                                 additional_properties= {"prop1": 1, "prop2": 2} )
+        heat_template.add_server(
+            name="server1",
+            image="image1",
+            flavor="flavor1",
+            flavors=[],
+            ports=[
+                "port1",
+                "port2"],
+            networks=[
+                "network1",
+                "network2"],
+            scheduler_hints="hints1",
+            user="user1",
+            key_name="foo-key",
+            user_data="user",
+            metadata={
+                "cat": 1,
+                "doc": 2},
+            additional_properties={
+                "prop1": 1,
+                "prop2": 2})
         heat_template.add_network("network1")
 
         heat_template.add_flavor("test")
-        self.assertEqual(heat_template.resources['test']['type'], 'OS::Nova::Flavor')
+        self.assertEqual(
+            heat_template.resources['test']['type'], 'OS::Nova::Flavor')
 
     @mock_patch_target_module('op_utils')
     @mock_patch_target_module('heatclient')
@@ -197,18 +311,25 @@ class HeatTemplateTestCase(unittest.TestCase):
         with mock.patch.object(self.template, 'status', return_value=None) as mock_status:
             # block with timeout hit
             timeout = 0
-            with self.assertRaises(RuntimeError) as raised, timer() as time_data:
+            with self.assertRaises(RuntimeError) as raised, timer():
                 self.template.create(block=True, timeout=timeout)
 
             # ensure op_utils was used
             expected_op_utils_usage += 1
-            self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
-            self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
-            self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_session.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_heat_api_version.call_count,
+                expected_op_utils_usage)
 
             # ensure the constructor and instance were used
-            self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
-            self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
+            self.assertEqual(mock_heat_client_class.call_count,
+                             expected_constructor_calls)
+            self.assertEqual(
+                mock_heat_client.stacks.create.call_count,
+                expected_create_calls)
 
             # ensure that the status was used
             self.assertGreater(mock_status.call_count, expected_status_calls)
@@ -222,22 +343,33 @@ class HeatTemplateTestCase(unittest.TestCase):
             # block with create failed
             timeout = 10
             mock_status.side_effect = iter([None, None, u'CREATE_FAILED'])
-            with self.assertRaises(RuntimeError) as raised, timer() as time_data:
+            with self.assertRaises(RuntimeError) as raised, timer():
                 self.template.create(block=True, timeout=timeout)
 
-            # ensure the existing heat_client was used and op_utils was used again
-            self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
-            self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
-            self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
+            # ensure the existing heat_client was used and op_utils was used
+            # again
+            self.assertEqual(
+                mock_op_utils.get_session.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_heat_api_version.call_count,
+                expected_op_utils_usage)
 
             # ensure the constructor was not used but the instance was used
-            self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
-            self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
+            self.assertEqual(mock_heat_client_class.call_count,
+                             expected_constructor_calls)
+            self.assertEqual(
+                mock_heat_client.stacks.create.call_count,
+                expected_create_calls)
 
             # ensure that the status was used three times
             expected_status_calls += 3
             self.assertEqual(mock_status.call_count, expected_status_calls)
 
+    # NOTE(elfoley): This needs to be split into multiple tests.
+    # The lines where the template is reset should serve as a guide for where
+    # to split.
     @mock_patch_target_module('op_utils')
     @mock_patch_target_module('heatclient')
     def test_create(self, mock_heat_client_class, mock_op_utils):
@@ -250,7 +382,7 @@ class HeatTemplateTestCase(unittest.TestCase):
             {'output_key': 'key2', 'output_value': 'value2'},
             {'output_key': 'key3', 'output_value': 'value3'},
         ]
-        expected_outputs = {
+        expected_outputs = {  # pylint: disable=unused-variable
             'key1': 'value1',
             'key2': 'value2',
             'key3': 'value3',
@@ -266,17 +398,25 @@ class HeatTemplateTestCase(unittest.TestCase):
             mock_status.return_value = None
 
             # no block
-            self.assertIsInstance(self.template.create(block=False, timeout=2), heat.HeatStack)
+            self.assertIsInstance(self.template.create(
+                block=False, timeout=2), heat.HeatStack)
 
             # ensure op_utils was used
             expected_op_utils_usage += 1
-            self.assertEqual(mock_op_utils.get_session.call_count, expected_op_utils_usage)
-            self.assertEqual(mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
-            self.assertEqual(mock_op_utils.get_heat_api_version.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_session.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_endpoint.call_count, expected_op_utils_usage)
+            self.assertEqual(
+                mock_op_utils.get_heat_api_version.call_count,
+                expected_op_utils_usage)
 
             # ensure the constructor and instance were used
-            self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
-            self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
+            self.assertEqual(mock_heat_client_class.call_count,
+                             expected_constructor_calls)
+            self.assertEqual(
+                mock_heat_client.stacks.create.call_count,
+                expected_create_calls)
 
             # ensure that the status was not used
             self.assertEqual(mock_status.call_count, expected_status_calls)
@@ -288,11 +428,15 @@ class HeatTemplateTestCase(unittest.TestCase):
             self.template.name = 'block, immediate complete test'
 
             mock_status.return_value = self.template.HEAT_CREATE_COMPLETE_STATUS
-            self.assertIsInstance(self.template.create(block=True, timeout=2), heat.HeatStack)
+            self.assertIsInstance(self.template.create(
+                block=True, timeout=2), heat.HeatStack)
 
             # ensure existing instance was re-used and op_utils was not used
-            self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
-            self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
+            self.assertEqual(mock_heat_client_class.call_count,
+                             expected_constructor_calls)
+            self.assertEqual(
+                mock_heat_client.stacks.create.call_count,
+                expected_create_calls)
 
             # ensure status was checked once
             expected_status_calls += 1
@@ -305,13 +449,17 @@ class HeatTemplateTestCase(unittest.TestCase):
             self.template.name = 'block, delayed complete test'
 
             success_index = 2
-            mock_status.side_effect = index_value_iter(success_index,
-                                                       self.template.HEAT_CREATE_COMPLETE_STATUS)
-            self.assertIsInstance(self.template.create(block=True, timeout=2), heat.HeatStack)
+            mock_status.side_effect = index_value_iter(
+                success_index, self.template.HEAT_CREATE_COMPLETE_STATUS)
+            self.assertIsInstance(self.template.create(
+                block=True, timeout=2), heat.HeatStack)
 
             # ensure existing instance was re-used and op_utils was not used
-            self.assertEqual(mock_heat_client_class.call_count, expected_constructor_calls)
-            self.assertEqual(mock_heat_client.stacks.create.call_count, expected_create_calls)
+            self.assertEqual(mock_heat_client_class.call_count,
+                             expected_constructor_calls)
+            self.assertEqual(
+                mock_heat_client.stacks.create.call_count,
+                expected_create_calls)
 
             # ensure status was checked three more times
             expected_status_calls += 1 + success_index
@@ -328,8 +476,7 @@ class HeatStackTestCase(unittest.TestCase):
         # call once and then call again if uuid is not none
         self.assertGreater(delete_mock.call_count, 1)
 
-    @mock.patch('yardstick.orchestrator.heat.op_utils')
-    def test_delete_all_calls_delete(self, mock_op):
+    def test_delete_all_calls_delete(self):
         # we must patch the object before we create an instance
         # so we can override delete() in all the instances
         with mock.patch.object(heat.HeatStack, "delete") as delete_mock:
@@ -64,7 +64,7 @@ service ssh restart;while true ; do sleep 10000; done"
                             }
                         ],
                         "nodeSelector": {
-                           "kubernetes.io/hostname": "node-01"
+                            "kubernetes.io/hostname": "node-01"
                         }
                     }
                 }
@@ -75,7 +75,7 @@ service ssh restart;while true ; do sleep 10000; done"
             'args': ['-c', 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*; \
 service ssh restart;while true ; do sleep 10000; done'],
             'ssh_key': 'k8s-86096c30-key',
-            'nodeSelector': { 'kubernetes.io/hostname': 'node-01'}
+            'nodeSelector': {'kubernetes.io/hostname': 'node-01'}
         }
         name = 'host-k8s-86096c30'
         output_r = KubernetesObject(name, **input_s).get_template()
diff --git a/yardstick/tests/unit/test_cmd/__init__.py b/yardstick/tests/unit/test_cmd/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/yardstick/tests/unit/test_cmd/commands/__init__.py b/yardstick/tests/unit/test_cmd/commands/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
similarity index 99%
rename from tests/unit/test_cmd/test_NSBperf.py
rename to yardstick/tests/unit/test_cmd/test_NSBperf.py
index 19eb0af..483e82a 100644 (file)
@@ -59,7 +59,7 @@ class TestYardstickNSCli(unittest.TestCase):
     def test_handle_list_options(self):
         yardstick_ns_cli = YardstickNSCli()
         CLI_PATH = os.path.dirname(os.path.realpath(__file__))
-        repo_dir = CLI_PATH + "/../../"
+        repo_dir = CLI_PATH + "/../../../"
         test_path = os.path.join(repo_dir, "../samples/vnf_samples/nsut/")
         args = {"list_vnfs": True, "list": False}
         self.assertRaises(SystemExit, yardstick_ns_cli.handle_list_options,