diff options
-rw-r--r-- | ansible/infra_deploy.yml | 2 | ||||
-rw-r--r-- | ansible/roles/infra_create_network/tasks/create_xml.yaml | 106 | ||||
-rw-r--r-- | ansible/roles/infra_create_network/tasks/main.yml | 22 | ||||
-rw-r--r-- | ansible/roles/infra_create_vms/tasks/configure_vm.yml | 342 | ||||
-rw-r--r-- | ansible/roles/infra_create_vms/tasks/create_interfaces.yml | 65 | ||||
-rw-r--r-- | ansible/roles/infra_create_vms/tasks/main.yml | 28 | ||||
-rw-r--r-- | docker/Dockerfile.aarch64.patch | 2 | ||||
-rw-r--r-- | docs/testing/user/userguide/04-installation.rst | 6 | ||||
-rw-r--r-- | etc/infra/infra_deploy.yaml.sample | 7 | ||||
-rwxr-xr-x | nsb_setup.sh | 2 | ||||
-rw-r--r-- | samples/vnf_samples/nsut/prox/tc_prox_baremetal_lw_aftr-4.yaml | 2 | ||||
-rw-r--r-- | samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml | 18 | ||||
-rw-r--r-- | tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py | 34 | ||||
-rw-r--r-- | tests/unit/benchmark/scenarios/lib/test_delete_network.py | 36 | ||||
-rw-r--r-- | tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py | 244 | ||||
-rw-r--r-- | tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py | 58 | ||||
-rw-r--r-- | tests/unit/network_services/traffic_profile/test_traffic_profile.py | 192 | ||||
-rw-r--r-- | tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py | 53 | ||||
-rw-r--r-- | tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py | 11 | ||||
-rw-r--r-- | tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py | 7 | ||||
-rw-r--r-- | yardstick/benchmark/scenarios/lib/create_floating_ip.py | 26 | ||||
-rw-r--r-- | yardstick/benchmark/scenarios/lib/delete_network.py | 9 | ||||
-rw-r--r-- | yardstick/common/constants.py | 10 | ||||
-rw-r--r-- | yardstick/common/exceptions.py | 4 | ||||
-rw-r--r-- | yardstick/common/openstack_utils.py | 193 | ||||
-rw-r--r-- | yardstick/network_services/traffic_profile/ixia_rfc2544.py | 27 | ||||
-rw-r--r-- | yardstick/network_services/traffic_profile/traffic_profile.py | 6 | ||||
-rw-r--r-- | yardstick/network_services/vnf_generic/vnf/sample_vnf.py | 18 | ||||
-rw-r--r-- | yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py | 2 | ||||
-rw-r--r-- | yardstick/network_services/vnf_generic/vnf/vpe_vnf.py | 39 | ||||
-rw-r--r-- | yardstick/orchestrator/heat.py | 11 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/__init__.py (renamed from tests/unit/benchmark/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/__init__.py (renamed from tests/unit/benchmark/contexts/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml (renamed from tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml (renamed from tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml (renamed from tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_sample.yaml (renamed from tests/unit/benchmark/contexts/nodes_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_sample_new.yaml (renamed from tests/unit/benchmark/contexts/nodes_sample_new.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml (renamed from tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml (renamed from tests/unit/benchmark/contexts/nodes_sample_ovs.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml (renamed from tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/__init__.py (renamed from tests/unit/benchmark/contexts/standalone/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml (renamed from tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml (renamed from tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml (renamed from tests/unit/benchmark/contexts/standalone/nodes_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml (renamed from tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/test_model.py (renamed from tests/unit/benchmark/contexts/standalone/test_model.py) | 83 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py (renamed from tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py) | 105 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone/test_sriov.py (renamed from tests/unit/benchmark/contexts/standalone/test_sriov.py) | 72 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml (renamed from tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/standalone_sample.yaml (renamed from tests/unit/benchmark/contexts/standalone_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/test_dummy.py (renamed from tests/unit/benchmark/contexts/test_dummy.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/test_heat.py (renamed from tests/unit/benchmark/contexts/test_heat.py) | 52 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/test_kubernetes.py (renamed from tests/unit/benchmark/contexts/test_kubernetes.py) | 121 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/test_model.py (renamed from tests/unit/benchmark/contexts/test_model.py) | 2 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/contexts/test_node.py (renamed from tests/unit/benchmark/contexts/test_node.py) | 5 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/__init__.py (renamed from tests/unit/benchmark/core/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml (renamed from tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml (renamed from tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/test_plugin.py (renamed from tests/unit/benchmark/core/test_plugin.py) | 2 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/test_report.py (renamed from tests/unit/benchmark/core/test_report.py) | 4 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/test_task.py (renamed from tests/unit/benchmark/core/test_task.py) | 4 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/test_testcase.py (renamed from tests/unit/benchmark/core/test_testcase.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml (renamed from tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml (renamed from tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/runner/__init__.py (renamed from tests/unit/benchmark/runner/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/runner/test_base.py (renamed from tests/unit/benchmark/runner/test_base.py) | 40 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/runner/test_search.py (renamed from tests/unit/benchmark/runner/test_search.py) | 31 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/__init__.py (renamed from tests/unit/benchmark/scenarios/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/__init__.py (renamed from tests/unit/benchmark/scenarios/availability/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py (renamed from tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py) | 8 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_general.py (renamed from tests/unit/benchmark/scenarios/availability/test_attacker_general.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_process.py (renamed from tests/unit/benchmark/scenarios/availability/test_attacker_process.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_basemonitor.py (renamed from tests/unit/benchmark/scenarios/availability/test_basemonitor.py) | 28 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_baseoperation.py (renamed from tests/unit/benchmark/scenarios/availability/test_baseoperation.py) | 38 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py (renamed from tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py) | 54 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_director.py (renamed from tests/unit/benchmark/scenarios/availability/test_director.py) | 4 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_command.py (renamed from tests/unit/benchmark/scenarios/availability/test_monitor_command.py) | 55 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_general.py (renamed from tests/unit/benchmark/scenarios/availability/test_monitor_general.py) | 4 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py (renamed from tests/unit/benchmark/scenarios/availability/test_monitor_multi.py) | 12 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_process.py (renamed from tests/unit/benchmark/scenarios/availability/test_monitor_process.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_operation_general.py (renamed from tests/unit/benchmark/scenarios/availability/test_operation_general.py) | 4 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py (renamed from tests/unit/benchmark/scenarios/availability/test_result_checker_general.py) | 4 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_scenario_general.py (renamed from tests/unit/benchmark/scenarios/availability/test_scenario_general.py) | 52 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_serviceha.py (renamed from tests/unit/benchmark/scenarios/availability/test_serviceha.py) | 35 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/availability/test_util.py (renamed from tests/unit/benchmark/scenarios/availability/test_util.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/__init__.py (renamed from tests/unit/benchmark/scenarios/compute/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt (renamed from tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt (renamed from tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt (renamed from tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt (renamed from tests/unit/benchmark/scenarios/compute/memload_sample_output.txt) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_cachestat.py (renamed from tests/unit/benchmark/scenarios/compute/test_cachestat.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_computecapacity.py (renamed from tests/unit/benchmark/scenarios/compute/test_computecapacity.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_cpuload.py (renamed from tests/unit/benchmark/scenarios/compute/test_cpuload.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_cyclictest.py (renamed from tests/unit/benchmark/scenarios/compute/test_cyclictest.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_lmbench.py (renamed from tests/unit/benchmark/scenarios/compute/test_lmbench.py) | 4 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_memload.py (renamed from tests/unit/benchmark/scenarios/compute/test_memload.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_plugintest.py (renamed from tests/unit/benchmark/scenarios/compute/test_plugintest.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py (renamed from tests/unit/benchmark/scenarios/compute/test_qemumigrate.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_ramspeed.py (renamed from tests/unit/benchmark/scenarios/compute/test_ramspeed.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py (renamed from tests/unit/benchmark/scenarios/compute/test_spec_cpu.py) | 5 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py (renamed from tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/compute/test_unixbench.py (renamed from tests/unit/benchmark/scenarios/compute/test_unixbench.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/dummy/__init__.py (renamed from tests/unit/benchmark/scenarios/dummy/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/dummy/test_dummy.py (renamed from tests/unit/benchmark/scenarios/dummy/test_dummy.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/__init__.py (renamed from tests/unit/benchmark/scenarios/lib/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py (renamed from tests/unit/benchmark/scenarios/lib/test_add_memory_load.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_attach_volume.py (renamed from tests/unit/benchmark/scenarios/lib/test_attach_volume.py) | 5 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py (renamed from tests/unit/benchmark/scenarios/lib/test_check_connectivity.py) | 14 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py (renamed from tests/unit/benchmark/scenarios/lib/test_check_numa_info.py) | 7 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_check_value.py (renamed from tests/unit/benchmark/scenarios/lib/test_check_value.py) | 24 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_flavor.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_flavor.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py | 58 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_image.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_image.py) | 30 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_keypair.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_keypair.py) | 17 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_network.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_network.py) | 9 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_port.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_port.py) | 7 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_router.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_router.py) | 9 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_sec_group.py) | 9 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_server.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_server.py) | 8 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_subnet.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_subnet.py) | 13 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_create_volume.py (renamed from tests/unit/benchmark/scenarios/lib/test_create_volume.py) | 41 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_flavor.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_image.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_image.py) | 3 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_keypair.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_network.py | 49 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_port.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_port.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_router.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_server.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_server.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_delete_volume.py (renamed from tests/unit/benchmark/scenarios/lib/test_delete_volume.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_detach_volume.py (renamed from tests/unit/benchmark/scenarios/lib/test_detach_volume.py) | 1 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_get_flavor.py (renamed from tests/unit/benchmark/scenarios/lib/test_get_flavor.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py (renamed from tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py (renamed from tests/unit/benchmark/scenarios/lib/test_get_numa_info.py) | 5 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_get_server.py (renamed from tests/unit/benchmark/scenarios/lib/test_get_server.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py (renamed from tests/unit/benchmark/scenarios/lib/test_get_server_ip.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/__init__.py (renamed from tests/unit/benchmark/scenarios/networking/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/imix_voice.yaml (renamed from tests/unit/benchmark/scenarios/networking/imix_voice.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json (renamed from tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json (renamed from tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml (renamed from tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml (renamed from tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml) | 0 | ||||
-rwxr-xr-x | yardstick/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json (renamed from tests/unit/benchmark/scenarios/networking/netperf_sample_output.json) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt (renamed from tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt (renamed from tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_iperf3.py (renamed from tests/unit/benchmark/scenarios/networking/test_iperf3.py) | 0 | ||||
-rwxr-xr-x | yardstick/tests/unit/benchmark/scenarios/networking/test_netperf.py (renamed from tests/unit/benchmark/scenarios/networking/test_netperf.py) | 0 | ||||
-rwxr-xr-x | yardstick/tests/unit/benchmark/scenarios/networking/test_netperf_node.py (renamed from tests/unit/benchmark/scenarios/networking/test_netperf_node.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_netutilization.py (renamed from tests/unit/benchmark/scenarios/networking/test_netutilization.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py (renamed from tests/unit/benchmark/scenarios/networking/test_networkcapacity.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_nstat.py (renamed from tests/unit/benchmark/scenarios/networking/test_nstat.py) | 9 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_ping.py (renamed from tests/unit/benchmark/scenarios/networking/test_ping.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_ping6.py (renamed from tests/unit/benchmark/scenarios/networking/test_ping6.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen.py (renamed from tests/unit/benchmark/scenarios/networking/test_pktgen.py) | 149 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py (renamed from tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py) | 8 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py (renamed from tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py) | 6 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_sfc.py (renamed from tests/unit/benchmark/scenarios/networking/test_sfc.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py (renamed from tests/unit/benchmark/scenarios/networking/test_vnf_generic.py) | 63 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_vsperf.py (renamed from tests/unit/benchmark/scenarios/networking/test_vsperf.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py | 221 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml (renamed from tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml (renamed from tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/parser/__init__.py (renamed from tests/unit/benchmark/scenarios/parser/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/parser/test_parser.py (renamed from tests/unit/benchmark/scenarios/parser/test_parser.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/__init__.py (renamed from tests/unit/benchmark/scenarios/storage/__init__.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json (renamed from tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json (renamed from tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json (renamed from tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/test_bonnie.py (renamed from tests/unit/benchmark/scenarios/storage/test_bonnie.py) | 3 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/test_fio.py (renamed from tests/unit/benchmark/scenarios/storage/test_fio.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py (renamed from tests/unit/benchmark/scenarios/storage/test_storagecapacity.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/storage/test_storperf.py (renamed from tests/unit/benchmark/scenarios/storage/test_storperf.py) | 18 | ||||
-rw-r--r-- | yardstick/tests/unit/benchmark/scenarios/test_base.py (renamed from tests/unit/benchmark/scenarios/test_base.py) | 0 | ||||
-rw-r--r-- | yardstick/tests/unit/common/test_openstack_utils.py | 57 | ||||
-rw-r--r-- | yardstick/tests/unit/orchestrator/test_heat.py | 14 |
178 files changed, 1948 insertions, 1327 deletions
diff --git a/ansible/infra_deploy.yml b/ansible/infra_deploy.yml index 948dd338a..4ad21af00 100644 --- a/ansible/infra_deploy.yml +++ b/ansible/infra_deploy.yml @@ -17,3 +17,5 @@ roles: - infra_check_requirements - infra_destroy_previous_configuration + - infra_create_network + - infra_create_vms diff --git a/ansible/roles/infra_create_network/tasks/create_xml.yaml b/ansible/roles/infra_create_network/tasks/create_xml.yaml new file mode 100644 index 000000000..a01c7974a --- /dev/null +++ b/ansible/roles/infra_create_network/tasks/create_xml.yaml @@ -0,0 +1,106 @@ +# Copyright (c) 2017-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: Define XML file name + set_fact: + xml_file: "{{ '/tmp/'+item.name+'.xml' }}" + +- name: Delete the file, if exists + file: + path: "{{ xml_file }}" + state: absent + +- name: Create a new empty file + file: + path: "{{ xml_file }}" + state: touch + +- name: Add root "network" node + blockinfile: + path: "{{ xml_file }}" + marker: "" + content: | + <network> + </network> + +- name: Add new children nodes to "network" node + xml: + path: "{{ xml_file }}" + xpath: /network + add_children: + - name: "{{ item.name }}" + - bridge + - ip + pretty_print: yes + +- name: Add "name" attribute to "bridge" node + xml: + path: "{{ xml_file }}" + xpath: /network/bridge + attribute: name + value: "{{ item.name }}" + pretty_print: yes + +- name: Add "stp" attribute to "bridge" node + xml: + path: "{{ xml_file }}" + xpath: /network/bridge + attribute: stp + value: "on" + pretty_print: yes + +- name: Add "delay" attribute to "bridge" node + xml: + path: "{{ xml_file }}" + xpath: /network/bridge + attribute: delay + value: "0" + pretty_print: yes + +- name: Add "address" attribute to "ip" node + xml: + path: "{{ xml_file }}" + xpath: /network/ip + attribute: address + value: "{{ item.host_ip }}" + pretty_print: yes + +- name: Add "netmask" attribute to "ip" node + xml: + path: "{{ xml_file }}" + xpath: /network/ip + attribute: netmask + value: "{{ item.netmask }}" + pretty_print: yes + +- name: Define the networks + virt_net: + command: define + name: "{{ item.name }}" + xml: "{{ lookup('file', xml_file) }}" + +- name: Set autostart to yes + virt_net: + autostart: yes + name: "{{ item.name }}" + +- name: Start the networks + virt_net: + command: start + name: "{{ item.name }}" + +- name: Remove XML file + file: + path: "{{ xml_file }}" + state: absent diff --git a/ansible/roles/infra_create_network/tasks/main.yml b/ansible/roles/infra_create_network/tasks/main.yml new file mode 100644 index 000000000..eba4a3a49 --- /dev/null +++ b/ansible/roles/infra_create_network/tasks/main.yml @@ -0,0 +1,22 @@ +# Copyright (c) 2017-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: Create XML file + include_tasks: create_xml.yaml + with_items: "{{ infra_deploy_vars.networks }}" diff --git a/ansible/roles/infra_create_vms/tasks/configure_vm.yml b/ansible/roles/infra_create_vms/tasks/configure_vm.yml new file mode 100644 index 000000000..10201cf2a --- /dev/null +++ b/ansible/roles/infra_create_vms/tasks/configure_vm.yml @@ -0,0 +1,342 @@ +# Copyright (c) 2017-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: Remove directory + file: + path: "{{ '/tmp/'+node_item.hostname }}" + state: absent + +- name: Create directory + file: + path: "{{ '/tmp/'+node_item.hostname }}" + state: directory + mode: 0755 + +- name: Define user-data file name + set_fact: + user_data: "{{ '/tmp/'+node_item.hostname+'/user-data' }}" + +- name: Define image-dir + set_fact: + image_dir: "{{ '/var/lib/libvirt/images/' }}" + +- name: Create a new empty file for user-data + file: + path: "{{ user_data }}" + state: touch + +- name: Add user-data + blockinfile: + path: "{{ user_data }}" + marker: "MARKER" + content: | + #cloud-config + preserve_hostname: False + hostname: {{ node_item.hostname }} + output: + all: ">> /var/log/cloud-init.log" + ssh_pwauth: True + bootcmd: + - echo 127.0.0.1 {{ node_item.hostname }} >> /etc/hosts + users: + - name: {{ node_item.user }} + lock-passwd: False + plain_text_passwd: {{ node_item.password }} + chpasswd: { expire: False } + sudo: ALL=(ALL) NOPASSWD:ALL + ssh_pwauth: True + +- name: Remove the marker + lineinfile: + dest: "{{ user_data }}" + state: absent + regexp: "MARKER" + +- name: Define network-config file name + set_fact: + network_config: "{{ '/tmp/'+node_item.hostname+'/network-config' }}" + +- name: Create a new empty file for network-config + file: + path: "{{ network_config }}" + state: touch + +- name: Add network-data + blockinfile: + path: "{{ network_config }}" + marker: "MARKER" + content: | + version: 2 + ethernets: + +- name: Define meta-data file name + set_fact: + meta_data: "{{ '/tmp/'+node_item.hostname+'/meta-data' }}" + +- name: Create a new empty file for meta-data + file: + path: "{{ meta_data }}" + state: touch + +- name: Add meta-data + blockinfile: + path: "{{ meta_data }}" + marker: "MARKER" + content: | + instance-id: {{ node_item.hostname }} + local-hostname: {{ node_item.hostname }} + +- name: Remove the marker + lineinfile: + dest: "{{ meta_data }}" + state: absent + regexp: "MARKER" + +- name: Define xml file name + set_fact: + xml_file: "{{ '/tmp/'+node_item.hostname+'/'+node_item.hostname+'.xml' }}" + +- name: Create a new empty file for xml file + file: + path: "{{ xml_file }}" + state: touch + +- name: Add root "domain" node + blockinfile: + path: "{{ xml_file }}" + marker: "" + content: | + <domain> + </domain> + +- name: Add "type" attribute to "domain" node + xml: + path: "{{ xml_file }}" + xpath: /domain + attribute: type + value: "kvm" + pretty_print: yes + +- name: Add new children nodes to "domain" node + xml: + path: "{{ xml_file }}" + xpath: /domain + add_children: + - name: "{{ node_item.hostname }}" + - memory: "{{ node_item.ram }}" + - vcpu: "{{ node_item.vcpus }}" + - os + - cpu + - devices + pretty_print: yes + +- name: Add "unit" attribute to "memory" node + xml: + path: "{{ xml_file }}" + xpath: /domain/memory + attribute: unit + value: "MB" + pretty_print: yes + +- name: Add "placement" attribute to "vcpu" node + xml: + path: "{{ xml_file }}" + xpath: /domain/vcpu + attribute: placement + value: "static" + pretty_print: yes + +- name: Add new children nodes to "os" node + xml: + path: "{{ xml_file }}" + xpath: /domain/os + add_children: + - type: "hvm" + - boot + pretty_print: yes + +- name: Add "arch" attribute to "type" node + xml: + path: "{{ xml_file }}" + xpath: /domain/os/type + attribute: arch + value: "x86_64" + pretty_print: yes + +- name: Add "dev" attribute to "boot" node + xml: + path: "{{ xml_file }}" + xpath: /domain/os/boot + attribute: dev + value: "hd" + pretty_print: yes + +- name: Add new children nodes to "cpu" node + xml: + path: "{{ xml_file }}" + xpath: /domain/cpu + add_children: + - cache + pretty_print: yes + +- name: Add "mode" attribute to "cpu" node + xml: + path: "{{ xml_file }}" + xpath: /domain/cpu + attribute: mode + value: "host-passthrough" + pretty_print: yes + +- name: Add "mode" attribute to "cache" node + xml: + path: "{{ xml_file }}" + xpath: /domain/cpu/cache + attribute: mode + value: "passthrough" + pretty_print: yes + +- name: Add new children nodes to "devices" node + xml: + path: "{{ xml_file }}" + xpath: /domain/devices + add_children: + - disk: + type: file + device: disk + - controller: + type: virtio-serial + index: '0' + - serial: + type: pty + - console: + type: pty + tty: '/dev/pts/14' + pretty_print: yes + +- name: Add new children nodes to "disk" node + xml: + path: "{{ xml_file }}" + xpath: /domain/devices/disk + add_children: + - driver: + name: qemu + type: qcow2 + - source: + file: "{{ '/var/lib/libvirt/images/'+node_item.hostname+'.qcow2' }}" + - target: + dev: vda + bus: virtio + - alias: + name: virtio-disk0 + pretty_print: yes + +- name: Add new children nodes to "devices" node + xml: + path: "{{ xml_file }}" + xpath: /domain/devices + add_children: + - disk: + type: file + device: cdrom + pretty_print: yes + +- name: Add new children nodes to "disk" node + xml: + path: "{{ xml_file }}" + xpath: /domain/devices/disk + add_children: + - source: + file: "{{ '/var/lib/libvirt/images/'+node_item.hostname+'-ci-data.img' }}" + - target: + dev: hdb + bus: ide + - readonly + pretty_print: yes + +- name: Configure controller + xml: + path: "{{ xml_file }}" + xpath: /domain/devices/controller + add_children: + - alias: + name: virtio-serial0 + pretty_print: yes + +- name: Configure serial + xml: + path: "{{ xml_file }}" + xpath: /domain/devices/serial + add_children: + - source: + path: '/dev/pts/14' + - target: + port: '0' + - alias: + name: 'serial0' + pretty_print: yes + +- name: Configure console + xml: + path: "{{ xml_file }}" + xpath: /domain/devices/console + add_children: + - source: + path: '/dev/pts/14' + - target: + port: '0' + type: 'serial' + - alias: + name: 'serial0' + pretty_print: yes + +- set_fact: + slot_address: 5 + +- name: Populate network-config and add interface to xml file + include_tasks: create_interfaces.yml + extra_vars: "{{ network_config, xml_file , slot_address, mac_address_counter }}" + loop_control: + loop_var: interface_item + with_items: "{{ node_item.interfaces }}" + +- name: Create directory + file: + path: "{{ '/tmp/'+node_item.hostname }}" + state: directory + mode: 0755 + +- name: Generate iso image + shell: > + genisoimage -output {{ image_dir+node_item.hostname+'-ci-data.img' }} -volid cidata -joliet + -r {{ '/tmp/'+node_item.hostname+'/network-config' }} {{ '/tmp/'+node_item.hostname+'/user-data' }} {{ '/tmp/'+node_item.hostname+'/meta-data' }} + &>> {{ '/tmp/'+node_item.hostname+'/hostname.log' }} + +- name: Copy and convert the ubuntu image + shell: > + qemu-img convert -O qcow2 {{ node_item.image }} {{ image_dir+node_item.hostname+'.qcow2' }} + +- name: Copy and convert the ubuntu image + shell: > + qemu-img resize {{ image_dir+node_item.hostname+'.qcow2' }} {{ node_item.disk }}MB + +- name: Define the VMs + virt: + command: define + name: "{{ node_item.hostname }}" + xml: "{{ lookup('file', '/tmp/'+node_item.hostname+'/'+node_item.hostname+'.xml') }}" + +- name: Start the VMs + virt: + command: create + name: "{{ node_item.hostname }}" diff --git a/ansible/roles/infra_create_vms/tasks/create_interfaces.yml b/ansible/roles/infra_create_vms/tasks/create_interfaces.yml new file mode 100644 index 000000000..124421b56 --- /dev/null +++ b/ansible/roles/infra_create_vms/tasks/create_interfaces.yml @@ -0,0 +1,65 @@ +# Copyright (c) 2017-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: Add network-data + blockinfile: + path: "{{ network_config }}" + insertafter: 'ethernets:' + marker: "MARKER" + block: |2 + {{ 'enp0s%d:'| format( slot_address | int) }} + match: + mac_address: {{ '52:54:00:5d:7d:%02x'| format( mac_address_counter | int) }} + addresses: + - {{ interface_item.ip }}/{{ interface_item.netmask }} + + +- name: Remove the marker introduced in network-data + lineinfile: + dest: "{{ network_config }}" + state: absent + regexp: "MARKER" + +- name: Add new children nodes to "domain" node + xml: + path: "{{ xml_file }}" + xpath: /domain/devices + add_children: + - interface: + type: 'bridge' + pretty_print: yes + +- name: Add new children nodes to "domain" node + xml: + path: "{{ xml_file }}" + xpath: /domain/devices/interface + add_children: + - source: + bridge: "{{ interface_item.network }}" + - model: + type: 'virtio' + - address: + type: 'pci' + domain: '0x0000' + bus: '0x00' + slot: "{{ '0x%02x'| format( slot_address | int) }}" + function: '0x0' + - mac: + address: "{{ '52:54:00:5d:7d:%02x'| format( mac_address_counter | int) }}" + pretty_print: yes + +- set_fact: + slot_address: "{{ slot_address | int + 1 }}" +- set_fact: + mac_address_counter: "{{ mac_address_counter | int + 1 }}" diff --git a/ansible/roles/infra_create_vms/tasks/main.yml b/ansible/roles/infra_create_vms/tasks/main.yml new file mode 100644 index 000000000..62a023e7e --- /dev/null +++ b/ansible/roles/infra_create_vms/tasks/main.yml @@ -0,0 +1,28 @@ +# Copyright (c) 2017-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 + +- set_fact: + mac_address_counter: 0 + +- name: Create XML file + include_tasks: configure_vm.yml + extra_vars: "{{ mac_address_counter }}" + loop_control: + loop_var: node_item + with_items: "{{ infra_deploy_vars.nodes }}" diff --git a/docker/Dockerfile.aarch64.patch b/docker/Dockerfile.aarch64.patch index ca933514a..24e3952fb 100644 --- a/docker/Dockerfile.aarch64.patch +++ b/docker/Dockerfile.aarch64.patch @@ -39,7 +39,7 @@ index 2ee5b4c..23e5ea5 100644 +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 + RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 python-openstackclient==3.11.0 @@ -43,8 +44,8 @@ RUN echo "daemon off;" >> /etc/nginx/nginx.conf diff --git a/docs/testing/user/userguide/04-installation.rst b/docs/testing/user/userguide/04-installation.rst index caebecc09..5bb64e3bb 100644 --- a/docs/testing/user/userguide/04-installation.rst +++ b/docs/testing/user/userguide/04-installation.rst @@ -464,7 +464,7 @@ Thirdly, create and configure Grafana container:: yardstick env grafana -Then you can run a test case and visit http://host_ip:3000 +Then you can run a test case and visit http://host_ip:1948 (``admin``/``admin``) to see the results. .. note:: Executing ``yardstick env`` command to deploy InfluxDB and Grafana @@ -502,9 +502,9 @@ Configure influxDB:: Run Grafana:: - sudo -EH docker run -d --name grafana -p 3000:3000 grafana/grafana + sudo -EH docker run -d --name grafana -p 1948:3000 grafana/grafana -Log on http://{YOUR_IP_HERE}:3000 using ``admin``/``admin`` and configure +Log on http://{YOUR_IP_HERE}:1948 using ``admin``/``admin`` and configure database resource to be ``{YOUR_IP_HERE}:8086``. .. image:: images/Grafana_config.png diff --git a/etc/infra/infra_deploy.yaml.sample b/etc/infra/infra_deploy.yaml.sample index df682ac3b..bf07a01bc 100644 --- a/etc/infra/infra_deploy.yaml.sample +++ b/etc/infra/infra_deploy.yaml.sample @@ -6,7 +6,7 @@ nodes: ip: 192.168.1.10 netmask: 255.255.255.0 user: ubuntu - pasword: password + password: password image: /tmp/image1.qcow disk: 50000 ram: 8192 @@ -23,7 +23,7 @@ nodes: ip: 192.20.1.20 netmask: 255.255.255.0 user: ubuntu - pasword: password + password: password image: /tmp/image_2.qcow disk: 40000 ram: 32768 @@ -31,4 +31,5 @@ nodes: networks: - name: management - host_ip: 192.168.1.1 # not mandatory + host_ip: 192.168.1.1 + netmask: 255.255.255.0 diff --git a/nsb_setup.sh b/nsb_setup.sh index 4a8e4db93..50fc017d1 100755 --- a/nsb_setup.sh +++ b/nsb_setup.sh @@ -63,7 +63,7 @@ for i in "${pkg[@]}"; do fi done -pip install ansible==2.3.2 shade==1.17.0 docker-py==1.10.6 +pip install ansible==2.4.2 shade==1.22.2 docker-py==1.10.6 ANSIBLE_SCRIPTS="ansible" diff --git a/samples/vnf_samples/nsut/prox/tc_prox_baremetal_lw_aftr-4.yaml b/samples/vnf_samples/nsut/prox/tc_prox_baremetal_lw_aftr-4.yaml index 37af37dcc..c190910c9 100644 --- a/samples/vnf_samples/nsut/prox/tc_prox_baremetal_lw_aftr-4.yaml +++ b/samples/vnf_samples/nsut/prox/tc_prox_baremetal_lw_aftr-4.yaml @@ -50,5 +50,5 @@ context: type: Node name: yardstick nfvi_type: baremetal - file: /etc/yardstick/nodes/prox-baremetal-4.yml + file: prox-baremetal-4.yaml diff --git a/samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml index 2799a7ee9..2e096a126 100644 --- a/samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml +++ b/samples/vnf_samples/nsut/vfw/tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml @@ -13,6 +13,10 @@ # limitations under the License. --- +{% set provider = provider or none %} +{% set physical_networks = physical_networks or ['physnet1', 'physnet2'] %} +{% set segmentation_id = segmentation_id or none %} + schema: yardstick:task:0.1 scenarios: - type: NSPerf @@ -68,10 +72,24 @@ context: xe0: cidr: '10.0.2.0/24' gateway_ip: 'null' + {% if provider %} + provider: {{ provider }} + physical_network: {{ physical_networks[0] }} + {% if segmentation_id %} + segmentation_id: {{ segmentation_id }} + {% endif %} + {% endif %} port_security_enabled: False enable_dhcp: 'false' xe1: cidr: '10.0.3.0/24' gateway_ip: 'null' + {% if provider %} + provider: {{ provider }} + physical_network: {{ physical_networks[1] }} + {% if segmentation_id %} + segmentation_id: {{ segmentation_id }} + {% endif %} + {% endif %} port_security_enabled: False enable_dhcp: 'false' diff --git a/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py b/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py deleted file mode 100644 index 72dbcd7cd..000000000 --- a/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py +++ /dev/null @@ -1,34 +0,0 @@ -############################################################################## -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## -import unittest -import mock - -from yardstick.benchmark.scenarios.lib.create_floating_ip import CreateFloatingIp - - -class CreateFloatingIpTestCase(unittest.TestCase): - - @mock.patch('yardstick.common.openstack_utils.create_floating_ip') - @mock.patch('yardstick.common.openstack_utils.get_network_id') - @mock.patch('yardstick.common.openstack_utils.get_neutron_client') - def test_create_floating_ip(self, mock_create_floating_ip, mock_get_network_id, mock_get_neutron_client): - options = {} - args = {"options": options} - obj = CreateFloatingIp(args, {}) - obj.run({}) - self.assertTrue(mock_create_floating_ip.called) - self.assertTrue(mock_get_network_id.called) - self.assertTrue(mock_get_neutron_client.called) - -def main(): - unittest.main() - - -if __name__ == '__main__': - main() diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_network.py b/tests/unit/benchmark/scenarios/lib/test_delete_network.py deleted file mode 100644 index 9ccaa8232..000000000 --- a/tests/unit/benchmark/scenarios/lib/test_delete_network.py +++ /dev/null @@ -1,36 +0,0 @@ -############################################################################## -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## -import unittest -import mock -import paramiko - -from yardstick.benchmark.scenarios.lib.delete_network import DeleteNetwork - - -class DeleteNetworkTestCase(unittest.TestCase): - - @mock.patch('yardstick.common.openstack_utils.get_neutron_client') - @mock.patch('yardstick.common.openstack_utils.delete_neutron_net') - def test_delete_network(self, mock_get_neutron_client, mock_delete_neutron_net): - options = { - 'network_id': '123-123-123' - } - args = {"options": options} - obj = DeleteNetwork(args, {}) - obj.run({}) - self.assertTrue(mock_get_neutron_client.called) - self.assertTrue(mock_delete_neutron_net.called) - - -def main(): - unittest.main() - - -if __name__ == '__main__': - main() diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py b/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py deleted file mode 100644 index fbe3ed804..000000000 --- a/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py +++ /dev/null @@ -1,244 +0,0 @@ -#!/usr/bin/env python - -# Copyright 2017 Nokia -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Unittest for yardstick.benchmark.scenarios.networking.vsperf.VsperfDPDK - -from __future__ import absolute_import -try: - from unittest import mock -except ImportError: - import mock -import unittest - -from yardstick.benchmark.scenarios.networking import vsperf_dpdk - - -@mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.subprocess') -class VsperfDPDKTestCase(unittest.TestCase): - - def setUp(self): - self.ctx = { - "host": { - "ip": "10.229.47.137", - "user": "ubuntu", - "password": "ubuntu", - }, - } - self.args = { - 'task_id': "1234-5678", - 'options': { - 'testname': 'pvp_tput', - 'traffic_type': 'rfc2544_throughput', - 'frame_size': '64', - 'test_params': 'TRAFFICGEN_DURATION=30;', - 'trafficgen_port1': 'ens4', - 'trafficgen_port2': 'ens5', - 'conf_file': 'vsperf-yardstick.conf', - 'setup_script': 'setup_yardstick.sh', - 'moongen_helper_file': '~/moongen.py', - 'moongen_host_ip': '10.5.201.151', - 'moongen_port1_mac': '8c:dc:d4:ae:7c:5c', - 'moongen_port2_mac': '8c:dc:d4:ae:7c:5d', - 'trafficgen_port1_nw': 'test2', - 'trafficgen_port2_nw': 'test3', - }, - 'sla': { - 'metrics': 'throughput_rx_fps', - 'throughput_rx_fps': 500000, - 'action': 'monitor', - } - } - - 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 - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - def test_vsperf_dpdk_teardown(self, mock_subprocess): - p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx) - - # setup() specific mocks - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - p.teardown() - self.assertFalse(p.setup_done) - - def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_subprocess): - p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx) - - # setup() specific mocks - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - # is_dpdk_setup() specific mocks - self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '') - - result = p._is_dpdk_setup() - self.assertFalse(result) - - def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_subprocess): - p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx) - - # setup() specific mocks - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - # is_dpdk_setup() specific mocks - self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') - - result = p._is_dpdk_setup() - self.assertTrue(result) - - @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 - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - # is_dpdk_setup() specific mocks - self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '') - - p.dpdk_setup() - self.assertFalse(p._is_dpdk_setup()) - self.assertTrue(p.dpdk_setup_done) - - @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 - self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - p.dpdk_setup() - self.assertTrue(p._is_dpdk_setup()) - self.assertTrue(p.dpdk_setup_done) - - @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 - self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '') - self.assertTrue(p.setup_done) - - self.assertRaises(RuntimeError, p.dpdk_setup) - - @mock.patch('time.sleep') - def test_vsperf_dpdk_run_ok(self, _, mock_subprocess): - p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx) - - # setup() specific mocks - self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - # run() specific mocks - mock_subprocess.call().execute.return_value = None - self.mock_ssh.SSH.from_node().execute.return_value = ( - 0, 'throughput_rx_fps\r\n14797660.000\r\n', '') - - result = {} - p.run(result) - - self.assertEqual(result['throughput_rx_fps'], '14797660.000') - - def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_subprocess): - p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx) - - # setup() specific mocks - self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - # run() specific mocks - mock_subprocess.call().execute.return_value = None - mock_subprocess.call().execute.return_value = None - 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_subprocess): - p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx) - - # setup() specific mocks - self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') - mock_subprocess.call().execute.return_value = None - - p.setup() - self.assertIsNotNone(p.client) - self.assertTrue(p.setup_done) - - # run() specific mocks - mock_subprocess.call().execute.return_value = None - mock_subprocess.call().execute.return_value = None - 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) - -def main(): - unittest.main() - - -if __name__ == '__main__': - main() diff --git a/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py b/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py index 616921e33..f13945abf 100644 --- a/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py +++ b/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py @@ -179,9 +179,7 @@ class TestIXIARFC2544Profile(unittest.TestCase): "dst_mac_0": "00:00:00:00:00:03", "dst_mac_1": "00:00:00:00:00:04", "dst_mac_2": "00:00:00:00:00:04"} - result = r_f_c2544_profile._get_ixia_traffic_profile( - self.PROFILE, mac, xfile="tmp", - static_traffic=STATIC_TRAFFIC) + result = r_f_c2544_profile._get_ixia_traffic_profile(self.PROFILE, mac) self.assertIsNotNone(result) def test_get_ixia_traffic_profile(self): @@ -225,7 +223,6 @@ class TestIXIARFC2544Profile(unittest.TestCase): "proto": "udp", "srcip4": "152.16.40.20", "ttl": 32, - "count": "1" }, "outer_l4": { "dstport": "2001", @@ -260,7 +257,6 @@ class TestIXIARFC2544Profile(unittest.TestCase): "proto": "udp", "srcip4": "152.16.40.20", "ttl": 32, - "count": "1" }, "outer_l3v6": { "count": 1024, @@ -269,7 +265,6 @@ class TestIXIARFC2544Profile(unittest.TestCase): "proto": "udp", "srcip4": "152.16.40.20", "ttl": 32, - "count": "1" }, "outer_l4": { "dstport": "1234", @@ -289,12 +284,11 @@ class TestIXIARFC2544Profile(unittest.TestCase): "dst_mac_0": "00:00:00:00:00:03", "dst_mac_1": "00:00:00:00:00:04", "dst_mac_2": "00:00:00:00:00:04"} - result = r_f_c2544_profile._get_ixia_traffic_profile( - self.PROFILE, mac, xfile="tmp", static_traffic=STATIC_TRAFFIC) + result = r_f_c2544_profile._get_ixia_traffic_profile(self.PROFILE, mac) self.assertIsNotNone(result) @mock.patch("yardstick.network_services.traffic_profile.ixia_rfc2544.open") - def test_get_ixia_traffic_profile_v6(self, mock_open): + def test_get_ixia_traffic_profile_v6(self, *args): traffic_generator = mock.Mock(autospec=TrexProfile) traffic_generator.my_ports = [0, 1] traffic_generator.uplink_ports = [-1] @@ -435,8 +429,7 @@ class TestIXIARFC2544Profile(unittest.TestCase): 'outer_l4': {'dstport': '2001', 'srcport': '1234'}}}, 'schema': 'isb:traffic_profile:0.1'} - result = r_f_c2544_profile._get_ixia_traffic_profile( - profile_data, mac, static_traffic=STATIC_TRAFFIC) + result = r_f_c2544_profile._get_ixia_traffic_profile(profile_data, mac) self.assertIsNotNone(result) def test__get_ixia_traffic_profile_default_args(self): @@ -459,8 +452,7 @@ class TestIXIARFC2544Profile(unittest.TestCase): ixia_obj = mock.MagicMock() r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE) r_f_c2544_profile.rate = 100 - result = r_f_c2544_profile._ixia_traffic_generate(traffic_generator, - traffic, ixia_obj) + result = r_f_c2544_profile._ixia_traffic_generate(traffic, ixia_obj) self.assertIsNone(result) def test_execute(self): @@ -511,13 +503,6 @@ class TestIXIARFC2544Profile(unittest.TestCase): self.assertEqual(r_f_c2544_profile.ports, ports_expected) def test_get_drop_percentage(self): - traffic_generator = mock.Mock(autospec=TrexProfile) - traffic_generator.networks = { - "uplink_0": ["xe0"], - "downlink_0": ["xe1"], - } - traffic_generator.client = \ - mock.Mock(return_value=True) r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE) r_f_c2544_profile.params = self.PROFILE ixia_obj = mock.MagicMock() @@ -541,17 +526,11 @@ class TestIXIARFC2544Profile(unittest.TestCase): "out_packets": 1000} tol_min = 100.0 tolerance = 0.0 - self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage( - traffic_generator, samples, - tol_min, tolerance, ixia_obj)) + self.assertIsNotNone( + r_f_c2544_profile.get_drop_percentage(samples, tol_min, tolerance, + ixia_obj)) def test_get_drop_percentage_update(self): - traffic_generator = mock.Mock(autospec=TrexProfile) - traffic_generator.my_ports = [0, 1] - traffic_generator.uplink_ports = [0] - traffic_generator.downlink_ports = [1] - traffic_generator.client = \ - mock.Mock(return_value=True) r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE) r_f_c2544_profile.params = self.PROFILE ixia_obj = mock.MagicMock() @@ -575,17 +554,11 @@ class TestIXIARFC2544Profile(unittest.TestCase): "out_packets": 1002} tol_min = 0.0 tolerance = 1.0 - self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage( - traffic_generator, samples, - tol_min, tolerance, ixia_obj)) + self.assertIsNotNone( + r_f_c2544_profile.get_drop_percentage(samples, tol_min, tolerance, + ixia_obj)) def test_get_drop_percentage_div_zero(self): - traffic_generator = mock.Mock(autospec=TrexProfile) - traffic_generator.my_ports = [0, 1] - traffic_generator.uplink_ports = [0] - traffic_generator.downlink_ports = [1] - traffic_generator.client = \ - mock.Mock(return_value=True) r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE) r_f_c2544_profile.params = self.PROFILE ixia_obj = mock.MagicMock() @@ -610,9 +583,9 @@ class TestIXIARFC2544Profile(unittest.TestCase): tol_min = 0.0 tolerance = 0.0 r_f_c2544_profile.tmp_throughput = 0 - self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage( - traffic_generator, samples, - tol_min, tolerance, ixia_obj)) + self.assertIsNotNone( + r_f_c2544_profile.get_drop_percentage(samples, tol_min, tolerance, + ixia_obj)) def test_get_multiplier(self): r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE) @@ -638,8 +611,7 @@ class TestIXIARFC2544Profile(unittest.TestCase): r_f_c2544_profile._ixia_traffic_generate = mock.Mock() self.assertEqual( None, - r_f_c2544_profile.start_ixia_latency(traffic_generator, - ixia_obj)) + r_f_c2544_profile.start_ixia_latency(traffic_generator, ixia_obj)) if __name__ == '__main__': diff --git a/tests/unit/network_services/traffic_profile/test_traffic_profile.py b/tests/unit/network_services/traffic_profile/test_traffic_profile.py index 8355c85b6..0bb0a88a6 100644 --- a/tests/unit/network_services/traffic_profile/test_traffic_profile.py +++ b/tests/unit/network_services/traffic_profile/test_traffic_profile.py @@ -22,7 +22,6 @@ import mock from tests.unit import STL_MOCKS - STLClient = mock.MagicMock() stl_patch = mock.patch.dict("sys.modules", STL_MOCKS) stl_patch.start() @@ -56,79 +55,90 @@ class TestTrexProfile(unittest.TestCase): EXAMPLE_IP_ADDR = "10.0.0.1" EXAMPLE_IPv6_ADDR = "0064:ff9b:0:0:0:0:9810:6414" - PROFILE = {'description': 'Traffic profile to run RFC2544 latency', - 'name': 'rfc2544', - 'traffic_profile': {'traffic_type': 'RFC2544Profile', - 'frame_rate': 100}, - TrafficProfile.DOWNLINK: {'ipv4': {'outer_l2': {'framesize': {'64B': '100', - '1518B': '0', - '128B': '0', - '1400B': '0', - '256B': '0', - '373b': '0', - '570B': '0'}, - "srcmac": "00:00:00:00:00:02", - "dstmac": "00:00:00:00:00:01"}, - 'outer_l3v4': {'dstip4': '1.1.1.1-1.1.2.2', - 'proto': 'udp', - 'srcip4': '9.9.1.1-90.1.2.2', - 'dscp': 0, 'ttl': 32, - 'count': 1}, - 'outer_l4': {'srcport': '2001', - 'dsrport': '1234', - 'count': 1}}}, - TrafficProfile.UPLINK: {'ipv4': - {'outer_l2': {'framesize': - {'64B': '100', '1518B': '0', - '128B': '0', '1400B': '0', - '256B': '0', '373b': '0', - '570B': '0'}, - "srcmac": "00:00:00:00:00:01", - "dstmac": "00:00:00:00:00:02"}, - 'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255', - 'proto': 'udp', - 'srcip4': '1.1.1.1-1.15.255.255', - 'dscp': 0, 'ttl': 32, 'count': 1}, - 'outer_l4': {'dstport': '2001', - 'srcport': '1234', - 'count': 1}}}, - 'schema': 'isb:traffic_profile:0.1'} - PROFILE_v6 = {'description': 'Traffic profile to run RFC2544 latency', - 'name': 'rfc2544', - 'traffic_profile': {'traffic_type': 'RFC2544Profile', - 'frame_rate': 100}, - TrafficProfile.DOWNLINK: {'ipv6': {'outer_l2': {'framesize': - {'64B': '100', '1518B': '0', - '128B': '0', '1400B': '0', - '256B': '0', '373b': '0', - '570B': '0'}, - "srcmac": "00:00:00:00:00:02", - "dstmac": "00:00:00:00:00:01"}, - 'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420', - 'proto': 'udp', - 'srcip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820', - 'dscp': 0, 'ttl': 32, - 'count': 1}, - 'outer_l4': {'srcport': '2001', - 'dsrport': '1234', - 'count': 1}}}, - TrafficProfile.UPLINK: - {'ipv6': {'outer_l2': {'framesize': - {'64B': '100', '1518B': '0', - '128B': '0', '1400B': '0', - '256B': '0', '373b': '0', - '570B': '0'}, - "srcmac": "00:00:00:00:00:01", - "dstmac": "00:00:00:00:00:02"}, - 'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820', - 'proto': 'udp', - 'srcip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420', - 'dscp': 0, 'ttl': 32, - 'count': 1}, - 'outer_l4': {'dstport': '2001', - 'srcport': '1234', - 'count': 1}}}, - 'schema': 'isb:traffic_profile:0.1'} + PROFILE = { + 'description': 'Traffic profile to run RFC2544 latency', + 'name': 'rfc2544', + 'traffic_profile': {'traffic_type': 'RFC2544Profile', + 'frame_rate': 100}, + TrafficProfile.DOWNLINK: { + 'ipv4': {'outer_l2': {'framesize': {'64B': '100', + '1518B': '0', + '128B': '0', + '1400B': '0', + '256B': '0', + '373b': '0', + '570B': '0'}, + "srcmac": "00:00:00:00:00:02", + "dstmac": "00:00:00:00:00:01"}, + 'outer_l3v4': {'dstip4': '1.1.1.1-1.1.2.2', + 'proto': 'udp', + 'srcip4': '9.9.1.1-90.1.2.2', + 'dscp': 0, 'ttl': 32, + 'count': 1}, + 'outer_l4': {'srcport': '2001', + 'dsrport': '1234', + 'count': 1}}}, + TrafficProfile.UPLINK: { + 'ipv4': + {'outer_l2': {'framesize': + {'64B': '100', '1518B': '0', + '128B': '0', '1400B': '0', + '256B': '0', '373b': '0', + '570B': '0'}, + "srcmac": "00:00:00:00:00:01", + "dstmac": "00:00:00:00:00:02"}, + 'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255', + 'proto': 'udp', + 'srcip4': '1.1.1.1-1.15.255.255', + 'dscp': 0, 'ttl': 32, 'count': 1}, + 'outer_l4': {'dstport': '2001', + 'srcport': '1234', + 'count': 1}}}, + 'schema': 'isb:traffic_profile:0.1'} + PROFILE_v6 = { + 'description': 'Traffic profile to run RFC2544 latency', + 'name': 'rfc2544', + 'traffic_profile': {'traffic_type': 'RFC2544Profile', + 'frame_rate': 100}, + TrafficProfile.DOWNLINK: { + 'ipv6': {'outer_l2': {'framesize': + {'64B': '100', '1518B': '0', + '128B': '0', '1400B': '0', + '256B': '0', '373b': '0', + '570B': '0'}, + "srcmac": "00:00:00:00:00:02", + "dstmac": "00:00:00:00:00:01"}, + 'outer_l3v4': { + 'dstip6': + '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420', + 'proto': 'udp', + 'srcip6': + '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820', + 'dscp': 0, 'ttl': 32, + 'count': 1}, + 'outer_l4': {'srcport': '2001', + 'dsrport': '1234', + 'count': 1}}}, + TrafficProfile.UPLINK: { + 'ipv6': {'outer_l2': {'framesize': + {'64B': '100', '1518B': '0', + '128B': '0', '1400B': '0', + '256B': '0', '373b': '0', + '570B': '0'}, + "srcmac": "00:00:00:00:00:01", + "dstmac": "00:00:00:00:00:02"}, + 'outer_l3v4': { + 'dstip6': + '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820', + 'proto': 'udp', + 'srcip6': + '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420', + 'dscp': 0, 'ttl': 32, + 'count': 1}, + 'outer_l4': {'dstport': '2001', + 'srcport': '1234', + 'count': 1}}}, + 'schema': 'isb:traffic_profile:0.1'} def test___init__(self): TrafficProfile.params = self.PROFILE @@ -211,6 +221,40 @@ class TestTrexProfile(unittest.TestCase): self.assertRaises(SystemExit, trex_profile._get_start_end_ipv6, "1.1.1.3", "1.1.1.1") + def test__dscp_range_action_partial_actual_count_zero(self): + traffic_profile = TrexProfile(TrafficProfile) + dscp_partial = traffic_profile._dscp_range_action_partial() + + flow_vars_initial_length = len(traffic_profile.vm_flow_vars) + dscp_partial('1', '1', 'unneeded') + self.assertEqual(len(traffic_profile.vm_flow_vars), flow_vars_initial_length + 2) + + def test__dscp_range_action_partial_count_greater_than_actual(self): + traffic_profile = TrexProfile(TrafficProfile) + dscp_partial = traffic_profile._dscp_range_action_partial() + + flow_vars_initial_length = len(traffic_profile.vm_flow_vars) + dscp_partial('1', '10', '100') + self.assertEqual(len(traffic_profile.vm_flow_vars), flow_vars_initial_length + 2) + + def test__udp_range_action_partial_actual_count_zero(self): + traffic_profile = TrexProfile(TrafficProfile) + traffic_profile.udp['field1'] = 'value1' + udp_partial = traffic_profile._udp_range_action_partial('field1') + + flow_vars_initial_length = len(traffic_profile.vm_flow_vars) + udp_partial('1', '1', 'unneeded') + self.assertEqual(len(traffic_profile.vm_flow_vars), flow_vars_initial_length + 2) + + def test__udp_range_action_partial_count_greater_than_actual(self): + traffic_profile = TrexProfile(TrafficProfile) + traffic_profile.udp['field1'] = 'value1' + udp_partial = traffic_profile._udp_range_action_partial('field1', 'not_used_count') + + flow_vars_initial_length = len(traffic_profile.vm_flow_vars) + udp_partial('1', '10', '100') + self.assertEqual(len(traffic_profile.vm_flow_vars), flow_vars_initial_length + 2) + def test__general_single_action_partial(self): trex_profile = TrexProfile(TrafficProfile) diff --git a/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py index af941c04f..25633384e 100644 --- a/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py +++ b/tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py @@ -624,37 +624,34 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase): self.assertIsInstance(dpdk_vnf_setup_env_helper.setup_vnf_environment(), ResourceProfile) - def test__setup_dpdk_early_success(self): - vnfd_helper = VnfdHelper(self.VNFD_0) + def test__setup_dpdk(self): ssh_helper = mock.Mock() - ssh_helper.execute.return_value = 0, 'output', '' - ssh_helper.join_bin_path.return_value = 'joined_path' - ssh_helper.provision_tool.return_value = 'provision string' - scenario_helper = mock.Mock() - dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) - dpdk_setup_helper._setup_hugepages = mock.Mock() - - self.assertIsNone(dpdk_setup_helper._setup_dpdk()) - self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 2) - - @mock.patch('yardstick.ssh.SSH') - def test__setup_dpdk_short(self, _): - def execute_side(cmd): - if 'joined_path' in cmd: - return 0, 'output', '' - return 1, 'bad output', 'error output' + ssh_helper.execute = mock.Mock() + ssh_helper.execute.return_value = (0, 0, 0) + dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper, mock.ANY) + with mock.patch.object(dpdk_setup_helper, '_setup_hugepages') as \ + mock_setup_hp: + dpdk_setup_helper._setup_dpdk() + mock_setup_hp.assert_called_once() + ssh_helper.execute.assert_has_calls([ + mock.call('sudo modprobe uio && sudo modprobe igb_uio'), + mock.call('lsmod | grep -i igb_uio') + ]) - vnfd_helper = VnfdHelper(self.VNFD_0) + def test__setup_dpdk_igb_uio_not_loaded(self): ssh_helper = mock.Mock() - ssh_helper.execute.side_effect = execute_side - ssh_helper.join_bin_path.return_value = 'joined_path' - ssh_helper.provision_tool.return_value = 'provision string' - scenario_helper = mock.Mock() - dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper) - dpdk_setup_helper._setup_hugepages = mock.Mock() - - self.assertIsNone(dpdk_setup_helper._setup_dpdk()) - self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 3) + ssh_helper.execute = mock.Mock() + ssh_helper.execute.side_effect = [(0, 0, 0), (1, 0, 0)] + dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper, mock.ANY) + with mock.patch.object(dpdk_setup_helper, '_setup_hugepages') as \ + mock_setup_hp: + with self.assertRaises(y_exceptions.DPDKSetupDriverError): + dpdk_setup_helper._setup_dpdk() + mock_setup_hp.assert_called_once() + ssh_helper.execute.assert_has_calls([ + mock.call('sudo modprobe uio && sudo modprobe igb_uio'), + mock.call('lsmod | grep -i igb_uio') + ]) @mock.patch('yardstick.ssh.SSH') def test__setup_resources(self, _): diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py index e6e4b882e..d77068137 100644 --- a/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py +++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py @@ -151,6 +151,7 @@ class TestIxLoadTrafficGen(unittest.TestCase): @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call") @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil") def test_instantiate(self, call, shutil, mock_makedirs): + # pylint: disable=unused-argument with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ @@ -174,7 +175,8 @@ class TestIxLoadTrafficGen(unittest.TestCase): '1C/1T', 'worker_threads': 1}} }}) - with mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', create=True) as mock_open: + with mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', + create=True) as mock_open: mock_open.return_value = mock.MagicMock() ixload_traffic_gen.instantiate(scenario_cfg, {}) @@ -185,6 +187,7 @@ class TestIxLoadTrafficGen(unittest.TestCase): @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max") @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len") def test_run_traffic(self, call, shutil, main_open, min, max, len): + # pylint: disable=unused-argument mock_traffic_profile = mock.Mock(autospec=TrafficProfile) mock_traffic_profile.get_traffic_definition.return_value = "64" mock_traffic_profile.params = self.TRAFFIC_PROFILE @@ -216,6 +219,7 @@ class TestIxLoadTrafficGen(unittest.TestCase): @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max") @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len") def test_run_traffic_csv(self, call, shutil, main_open, min, max, len): + # pylint: disable=unused-argument mock_traffic_profile = mock.Mock(autospec=TrafficProfile) mock_traffic_profile.get_traffic_definition.return_value = "64" mock_traffic_profile.params = self.TRAFFIC_PROFILE @@ -243,7 +247,7 @@ class TestIxLoadTrafficGen(unittest.TestCase): self.assertIsNone(result) @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call") - def test_terminate(self, call): + def test_terminate(self, *args): with mock.patch("yardstick.ssh.SSH") as ssh: vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0] ssh_mock = mock.Mock(autospec=ssh.SSH) @@ -256,6 +260,7 @@ class TestIxLoadTrafficGen(unittest.TestCase): @mock.patch("yardstick.ssh.SSH") @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call") def test_parse_csv_read(self, mock_call, mock_ssh): + # pylint: disable=unused-argument vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0] kpi_data = { 'HTTP Total Throughput (Kbps)': 1, @@ -280,6 +285,7 @@ class TestIxLoadTrafficGen(unittest.TestCase): @mock.patch("yardstick.ssh.SSH") @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call") def test_parse_csv_read_value_error(self, mock_call, mock_ssh): + # pylint: disable=unused-argument vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0] http_reader = [{ 'HTTP Total Throughput (Kbps)': 1, @@ -302,6 +308,7 @@ class TestIxLoadTrafficGen(unittest.TestCase): @mock.patch("yardstick.ssh.SSH") @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call") def test_parse_csv_read_error(self, mock_call, mock_ssh): + # pylint: disable=unused-argument vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0] http_reader = [{ 'HTTP Total Throughput (Kbps)': 1, diff --git a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py index 1abc53688..c074dfb4c 100644 --- a/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py +++ b/tests/unit/network_services/vnf_generic/vnf/test_vpe_vnf.py @@ -163,6 +163,11 @@ class TestConfigCreate(unittest.TestCase): self.assertEqual(config_create.downlink_ports, ['xe1']) self.assertEqual(config_create.socket, 2) + def test_dpdk_port_to_link_id(self): + vnfd_helper = VnfdHelper(self.VNFD_0) + config_create = ConfigCreate(vnfd_helper, 2) + self.assertEqual(config_create.dpdk_port_to_link_id_map, {'xe0': 0, 'xe1': 1}) + def test_vpe_initialize(self): vnfd_helper = VnfdHelper(self.VNFD_0) config_create = ConfigCreate(vnfd_helper, 2) @@ -633,7 +638,7 @@ class TestVpeApproxVnf(unittest.TestCase): def test_build_config(self, ssh, *args): mock_ssh(ssh) vpe_approx_vnf = VpeApproxSetupEnvHelper(mock.MagicMock(), - mock.MagicMock, mock.MagicMock) + mock.MagicMock(), mock.MagicMock()) vpe_approx_vnf.tc_file_name = get_file_abspath(TEST_FILE_YAML) vpe_approx_vnf.generate_port_pairs = mock.Mock() vpe_approx_vnf.vnf_cfg = { diff --git a/yardstick/benchmark/scenarios/lib/create_floating_ip.py b/yardstick/benchmark/scenarios/lib/create_floating_ip.py index 328566d48..7108722af 100644 --- a/yardstick/benchmark/scenarios/lib/create_floating_ip.py +++ b/yardstick/benchmark/scenarios/lib/create_floating_ip.py @@ -7,15 +7,13 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from __future__ import print_function -from __future__ import absolute_import - import logging import os from yardstick.benchmark.scenarios import base import yardstick.common.openstack_utils as op_utils + LOG = logging.getLogger(__name__) @@ -30,6 +28,7 @@ class CreateFloatingIp(base.Scenario): self.ext_net_id = os.getenv("EXTERNAL_NETWORK", "external") self.neutron_client = op_utils.get_neutron_client() + self.shade_client = op_utils.get_shade_client() self.setup_done = False def setup(self): @@ -37,24 +36,21 @@ class CreateFloatingIp(base.Scenario): self.setup_done = True - def run(self, result): + def run(self, *args): """execute the test""" if not self.setup_done: self.setup() - net_id = op_utils.get_network_id(self.neutron_client, self.ext_net_id) + net_id = op_utils.get_network_id(self.shade_client, self.ext_net_id) floating_info = op_utils.create_floating_ip(self.neutron_client, extnet_id=net_id) - if floating_info: - LOG.info("Creating floating ip successful!") - else: + + if not floating_info: LOG.error("Creating floating ip failed!") + return - try: - keys = self.scenario_cfg.get('output', '').split() - except KeyError: - pass - else: - values = [floating_info["fip_id"], floating_info["fip_addr"]] - return self._push_to_outputs(keys, values) + LOG.info("Creating floating ip successful!") + keys = self.scenario_cfg.get('output', '').split() + values = [floating_info["fip_id"], floating_info["fip_addr"]] + return self._push_to_outputs(keys, values) diff --git a/yardstick/benchmark/scenarios/lib/delete_network.py b/yardstick/benchmark/scenarios/lib/delete_network.py index e8796bf82..2e8b595f9 100644 --- a/yardstick/benchmark/scenarios/lib/delete_network.py +++ b/yardstick/benchmark/scenarios/lib/delete_network.py @@ -7,14 +7,12 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from __future__ import print_function -from __future__ import absolute_import - import logging from yardstick.benchmark.scenarios import base import yardstick.common.openstack_utils as op_utils + LOG = logging.getLogger(__name__) @@ -30,7 +28,7 @@ class DeleteNetwork(base.Scenario): self.network_id = self.options.get("network_id", None) - self.neutron_client = op_utils.get_neutron_client() + self.shade_client = op_utils.get_shade_client() self.setup_done = False @@ -45,7 +43,7 @@ class DeleteNetwork(base.Scenario): if not self.setup_done: self.setup() - status = op_utils.delete_neutron_net(self.neutron_client, + status = op_utils.delete_neutron_net(self.shade_client, network_id=self.network_id) if status: result.update({"delete_network": 1}) @@ -53,3 +51,4 @@ class DeleteNetwork(base.Scenario): else: result.update({"delete_network": 0}) LOG.error("Delete network failed!") + return status diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py index 32ed746df..646a1f2ca 100644 --- a/yardstick/common/constants.py +++ b/yardstick/common/constants.py @@ -7,9 +7,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## from __future__ import absolute_import -import os -import errno +import errno +import os from functools import reduce import pkg_resources @@ -40,10 +40,8 @@ def get_param(key, default=''): try: with open(conf_file) as f: value = yaml_load(f) - except IOError: - pass - except OSError as e: - if e.errno != errno.EEXIST: + except (IOError, OSError) as e: + if e.errno != errno.ENOENT: raise else: CONF.update(value) diff --git a/yardstick/common/exceptions.py b/yardstick/common/exceptions.py index e38dd246c..a86d863db 100644 --- a/yardstick/common/exceptions.py +++ b/yardstick/common/exceptions.py @@ -63,3 +63,7 @@ class HeatTemplateError(YardstickException): """Error in Heat during the stack deployment""" message = ('Error in Heat during the creation of the OpenStack stack ' '"%(stack_name)"') + + +class DPDKSetupDriverError(YardstickException): + message = '"igb_uio" driver is not loaded' diff --git a/yardstick/common/openstack_utils.py b/yardstick/common/openstack_utils.py index d1223edd2..8f666e268 100644 --- a/yardstick/common/openstack_utils.py +++ b/yardstick/common/openstack_utils.py @@ -7,8 +7,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from __future__ import absolute_import - import os import time import sys @@ -16,11 +14,15 @@ import logging from keystoneauth1 import loading from keystoneauth1 import session +import shade +from shade import exc + from cinderclient import client as cinderclient from novaclient import client as novaclient from glanceclient import client as glanceclient from neutronclient.neutron import client as neutronclient + log = logging.getLogger(__name__) DEFAULT_HEAT_API_VERSION = '1' @@ -170,27 +172,31 @@ def get_glance_client(): # pragma: no cover return glanceclient.Client(get_glance_client_version(), session=sess) +def get_shade_client(): + return shade.openstack_cloud() + + # ********************************************* # NOVA # ********************************************* -def get_instances(nova_client): # pragma: no cover +def get_instances(nova_client): try: return nova_client.servers.list(search_opts={'all_tenants': 1}) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [get_instances(nova_client)]") def get_instance_status(nova_client, instance): # pragma: no cover try: return nova_client.servers.get(instance.id).status - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [get_instance_status(nova_client)]") def get_instance_by_name(nova_client, instance_name): # pragma: no cover try: return nova_client.servers.find(name=instance_name) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [get_instance_by_name(nova_client, '%s')]", instance_name) @@ -198,28 +204,28 @@ def get_instance_by_name(nova_client, instance_name): # pragma: no cover def get_aggregates(nova_client): # pragma: no cover try: return nova_client.aggregates.list() - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [get_aggregates(nova_client)]") def get_availability_zones(nova_client): # pragma: no cover try: return nova_client.availability_zones.list() - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [get_availability_zones(nova_client)]") def get_availability_zone_names(nova_client): # pragma: no cover try: return [az.zoneName for az in get_availability_zones(nova_client)] - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [get_availability_zone_names(nova_client)]") def create_aggregate(nova_client, aggregate_name, av_zone): # pragma: no cover try: nova_client.aggregates.create(aggregate_name, av_zone) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [create_aggregate(nova_client, %s, %s)]", aggregate_name, av_zone) return False @@ -231,7 +237,7 @@ def get_aggregate_id(nova_client, aggregate_name): # pragma: no cover try: aggregates = get_aggregates(nova_client) _id = next((ag.id for ag in aggregates if ag.name == aggregate_name)) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [get_aggregate_id(nova_client, %s)]", aggregate_name) else: @@ -243,7 +249,7 @@ def add_host_to_aggregate(nova_client, aggregate_name, try: aggregate_id = get_aggregate_id(nova_client, aggregate_name) nova_client.aggregates.add_host(aggregate_id, compute_host) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [add_host_to_aggregate(nova_client, %s, %s)]", aggregate_name, compute_host) return False @@ -256,7 +262,7 @@ def create_aggregate_with_host(nova_client, aggregate_name, av_zone, try: create_aggregate(nova_client, aggregate_name, av_zone) add_host_to_aggregate(nova_client, aggregate_name, compute_host) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [create_aggregate_with_host(" "nova_client, %s, %s, %s)]", aggregate_name, av_zone, compute_host) @@ -265,19 +271,20 @@ def create_aggregate_with_host(nova_client, aggregate_name, av_zone, return True -def create_keypair(nova_client, name, key_path=None): # pragma: no cover +def create_keypair(name, key_path=None): # pragma: no cover try: with open(key_path) as fpubkey: - keypair = get_nova_client().keypairs.create(name=name, public_key=fpubkey.read()) + keypair = get_nova_client().keypairs.create( + name=name, public_key=fpubkey.read()) return keypair - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [create_keypair(nova_client)]") def create_instance(json_body): # pragma: no cover try: return get_nova_client().servers.create(**json_body) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error create instance failed") return None @@ -288,7 +295,7 @@ def create_instance_and_wait_for_active(json_body): # pragma: no cover nova_client = get_nova_client() instance = create_instance(json_body) count = VM_BOOT_TIMEOUT / SLEEP - for n in range(count, -1, -1): + for _ in range(count, -1, -1): status = get_instance_status(nova_client, instance) if status.lower() == "active": return instance @@ -300,10 +307,12 @@ def create_instance_and_wait_for_active(json_body): # pragma: no cover return None -def attach_server_volume(server_id, volume_id, device=None): # pragma: no cover +def attach_server_volume(server_id, volume_id, + device=None): # pragma: no cover try: - get_nova_client().volumes.create_server_volume(server_id, volume_id, device) - except Exception: + get_nova_client().volumes.create_server_volume(server_id, + volume_id, device) + except Exception: # pylint: disable=broad-except log.exception("Error [attach_server_volume(nova_client, '%s', '%s')]", server_id, volume_id) return False @@ -314,7 +323,7 @@ def attach_server_volume(server_id, volume_id, device=None): # pragma: no cov def delete_instance(nova_client, instance_id): # pragma: no cover try: nova_client.servers.force_delete(instance_id) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [delete_instance(nova_client, '%s')]", instance_id) return False @@ -327,7 +336,7 @@ def remove_host_from_aggregate(nova_client, aggregate_name, try: aggregate_id = get_aggregate_id(nova_client, aggregate_name) nova_client.aggregates.remove_host(aggregate_id, compute_host) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error remove_host_from_aggregate(nova_client, %s, %s)", aggregate_name, compute_host) return False @@ -348,7 +357,7 @@ def delete_aggregate(nova_client, aggregate_name): # pragma: no cover try: remove_hosts_from_aggregate(nova_client, aggregate_name) nova_client.aggregates.delete(aggregate_name) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [delete_aggregate(nova_client, %s)]", aggregate_name) return False @@ -366,8 +375,9 @@ def get_server_by_name(name): # pragma: no cover def create_flavor(name, ram, vcpus, disk, **kwargs): # pragma: no cover try: - return get_nova_client().flavors.create(name, ram, vcpus, disk, **kwargs) - except Exception: + return get_nova_client().flavors.create(name, ram, vcpus, + disk, **kwargs) + except Exception: # pylint: disable=broad-except log.exception("Error [create_flavor(nova_client, %s, %s, %s, %s, %s)]", name, ram, disk, vcpus, kwargs['is_public']) return None @@ -400,7 +410,7 @@ def get_flavor_by_name(name): # pragma: no cover def check_status(status, name, iterations, interval): # pragma: no cover - for i in range(iterations): + for _ in range(iterations): try: server = get_server_by_name(name) except IndexError: @@ -417,7 +427,7 @@ def check_status(status, name, iterations, interval): # pragma: no cover def delete_flavor(flavor_id): # pragma: no cover try: get_nova_client().flavors.delete(flavor_id) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [delete_flavor(nova_client, %s)]", flavor_id) return False else: @@ -428,7 +438,7 @@ def delete_keypair(nova_client, key): # pragma: no cover try: nova_client.keypairs.delete(key=key) return True - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [delete_keypair(nova_client)]") return False @@ -436,33 +446,26 @@ def delete_keypair(nova_client, key): # pragma: no cover # ********************************************* # NEUTRON # ********************************************* -def get_network_id(neutron_client, network_name): # pragma: no cover - networks = neutron_client.list_networks()['networks'] - return next((n['id'] for n in networks if n['name'] == network_name), None) - - -def get_port_id_by_ip(neutron_client, ip_address): # pragma: no cover - ports = neutron_client.list_ports()['ports'] - return next((i['id'] for i in ports for j in i.get( - 'fixed_ips') if j['ip_address'] == ip_address), None) +def get_network_id(shade_client, network_name): + networks = shade_client.list_networks({'name': network_name}) + if networks: + return networks[0]['id'] def create_neutron_net(neutron_client, json_body): # pragma: no cover try: network = neutron_client.create_network(body=json_body) return network['network']['id'] - except Exception: + except Exception: # pylint: disable=broad-except log.error("Error [create_neutron_net(neutron_client)]") raise Exception("operation error") - return None -def delete_neutron_net(neutron_client, network_id): # pragma: no cover +def delete_neutron_net(shade_client, network_id): try: - neutron_client.delete_network(network_id) - return True - except Exception: - log.error("Error [delete_neutron_net(neutron_client, '%s')]" % network_id) + return shade_client.delete_network(network_id) + except exc.OpenStackCloudException: + log.error("Error [delete_neutron_net(shade_client, '%s')]", network_id) return False @@ -470,28 +473,27 @@ def create_neutron_subnet(neutron_client, json_body): # pragma: no cover try: subnet = neutron_client.create_subnet(body=json_body) return subnet['subnets'][0]['id'] - except Exception: + except Exception: # pylint: disable=broad-except log.error("Error [create_neutron_subnet") raise Exception("operation error") - return None def create_neutron_router(neutron_client, json_body): # pragma: no cover try: router = neutron_client.create_router(json_body) return router['router']['id'] - except Exception: + except Exception: # pylint: disable=broad-except log.error("Error [create_neutron_router(neutron_client)]") raise Exception("operation error") - return None def delete_neutron_router(neutron_client, router_id): # pragma: no cover try: neutron_client.delete_router(router=router_id) return True - except Exception: - log.error("Error [delete_neutron_router(neutron_client, '%s')]" % router_id) + except Exception: # pylint: disable=broad-except + log.error("Error [delete_neutron_router(neutron_client, '%s')]", + router_id) return False @@ -499,8 +501,9 @@ def remove_gateway_router(neutron_client, router_id): # pragma: no cover try: neutron_client.remove_gateway_router(router_id) return True - except Exception: - log.error("Error [remove_gateway_router(neutron_client, '%s')]" % router_id) + except Exception: # pylint: disable=broad-except + log.error("Error [remove_gateway_router(neutron_client, '%s')]", + router_id) return False @@ -511,9 +514,9 @@ def remove_interface_router(neutron_client, router_id, subnet_id, neutron_client.remove_interface_router(router=router_id, body=json_body) return True - except Exception: + except Exception: # pylint: disable=broad-except log.error("Error [remove_interface_router(neutron_client, '%s', " - "'%s')]" % (router_id, subnet_id)) + "'%s')]", router_id, subnet_id) return False @@ -523,7 +526,7 @@ def create_floating_ip(neutron_client, extnet_id): # pragma: no cover ip_json = neutron_client.create_floatingip({'floatingip': props}) fip_addr = ip_json['floatingip']['floating_ip_address'] fip_id = ip_json['floatingip']['id'] - except Exception: + except Exception: # pylint: disable=broad-except log.error("Error [create_floating_ip(neutron_client)]") return None return {'fip_addr': fip_addr, 'fip_id': fip_id} @@ -533,8 +536,9 @@ def delete_floating_ip(nova_client, floatingip_id): # pragma: no cover try: nova_client.floating_ips.delete(floatingip_id) return True - except Exception: - log.error("Error [delete_floating_ip(nova_client, '%s')]" % floatingip_id) + except Exception: # pylint: disable=broad-except + log.error("Error [delete_floating_ip(nova_client, '%s')]", + floatingip_id) return False @@ -543,7 +547,7 @@ def get_security_groups(neutron_client): # pragma: no cover security_groups = neutron_client.list_security_groups()[ 'security_groups'] return security_groups - except Exception: + except Exception: # pylint: disable=broad-except log.error("Error [get_security_groups(neutron_client)]") return None @@ -558,15 +562,16 @@ def get_security_group_id(neutron_client, sg_name): # pragma: no cover return id -def create_security_group(neutron_client, sg_name, sg_description): # pragma: no cover +def create_security_group(neutron_client, sg_name, + sg_description): # pragma: no cover json_body = {'security_group': {'name': sg_name, 'description': sg_description}} try: secgroup = neutron_client.create_security_group(json_body) return secgroup['security_group'] - except Exception: + except Exception: # pylint: disable=broad-except log.error("Error [create_security_group(neutron_client, '%s', " - "'%s')]" % (sg_name, sg_description)) + "'%s')]", sg_name, sg_description) return None @@ -597,28 +602,27 @@ def create_secgroup_rule(neutron_client, sg_id, direction, protocol, else: log.error("Bad security group format." "One of the port range is not properly set:" - "range min: {}," - "range max: {}".format(port_range_min, - port_range_max)) + "range min: %s, range max: %s", port_range_min, + port_range_max) return False # Create security group using neutron client try: neutron_client.create_security_group_rule(json_body) return True - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Impossible to create_security_group_rule," "security group rule probably already exists") return False -def create_security_group_full(neutron_client, - sg_name, sg_description): # pragma: no cover +def create_security_group_full(neutron_client, sg_name, + sg_description): # pragma: no cover sg_id = get_security_group_id(neutron_client, sg_name) if sg_id != '': - log.info("Using existing security group '%s'..." % sg_name) + log.info("Using existing security group '%s'...", sg_name) else: - log.info("Creating security group '%s'..." % sg_name) + log.info("Creating security group '%s'...", sg_name) SECGROUP = create_security_group(neutron_client, sg_name, sg_description) @@ -628,18 +632,16 @@ def create_security_group_full(neutron_client, sg_id = SECGROUP['id'] - log.debug("Security group '%s' with ID=%s created successfully." - % (SECGROUP['name'], sg_id)) + log.debug("Security group '%s' with ID=%s created successfully.", + SECGROUP['name'], sg_id) - log.debug("Adding ICMP rules in security group '%s'..." - % sg_name) + log.debug("Adding ICMP rules in security group '%s'...", sg_name) if not create_secgroup_rule(neutron_client, sg_id, 'ingress', 'icmp'): log.error("Failed to create the security group rule...") return None - log.debug("Adding SSH rules in security group '%s'..." - % sg_name) + log.debug("Adding SSH rules in security group '%s'...", sg_name) if not create_secgroup_rule( neutron_client, sg_id, 'ingress', 'tcp', '22', '22'): log.error("Failed to create the security group rule...") @@ -664,31 +666,27 @@ def create_image(glance_client, image_name, file_path, disk_format, container_format, min_disk, min_ram, protected, tag, public, **kwargs): # pragma: no cover if not os.path.isfile(file_path): - log.error("Error: file %s does not exist." % file_path) + log.error("Error: file %s does not exist.", file_path) return None try: image_id = get_image_id(glance_client, image_name) if image_id is not None: - log.info("Image %s already exists." % image_name) + log.info("Image %s already exists.", image_name) else: log.info("Creating image '%s' from '%s'...", image_name, file_path) - image = glance_client.images.create(name=image_name, - visibility=public, - disk_format=disk_format, - container_format=container_format, - min_disk=min_disk, - min_ram=min_ram, - tags=tag, - protected=protected, - **kwargs) + image = glance_client.images.create( + name=image_name, visibility=public, disk_format=disk_format, + container_format=container_format, min_disk=min_disk, + min_ram=min_ram, tags=tag, protected=protected, **kwargs) image_id = image.id with open(file_path) as image_data: glance_client.images.upload(image_id, image_data) return image_id - except Exception: - log.error("Error [create_glance_image(glance_client, '%s', '%s', '%s')]", - image_name, file_path, public) + except Exception: # pylint: disable=broad-except + log.error( + "Error [create_glance_image(glance_client, '%s', '%s', '%s')]", + image_name, file_path, public) return None @@ -696,7 +694,7 @@ def delete_image(glance_client, image_id): # pragma: no cover try: glance_client.images.delete(image_id) - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [delete_flavor(glance_client, %s)]", image_id) return False else: @@ -722,18 +720,19 @@ def create_volume(cinder_client, volume_name, volume_size, volume = cinder_client.volumes.create(name=volume_name, size=volume_size) return volume - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [create_volume(cinder_client, %s)]", (volume_name, volume_size)) return None -def delete_volume(cinder_client, volume_id, forced=False): # pragma: no cover +def delete_volume(cinder_client, volume_id, + forced=False): # pragma: no cover try: if forced: try: cinder_client.volumes.detach(volume_id) - except: + except Exception: # pylint: disable=broad-except log.error(sys.exc_info()[0]) cinder_client.volumes.force_delete(volume_id) else: @@ -743,8 +742,8 @@ def delete_volume(cinder_client, volume_id, forced=False): # pragma: no cov break cinder_client.volumes.delete(volume_id) return True - except Exception: - log.exception("Error [delete_volume(cinder_client, '%s')]" % volume_id) + except Exception: # pylint: disable=broad-except + log.exception("Error [delete_volume(cinder_client, '%s')]", volume_id) return False @@ -752,7 +751,7 @@ def detach_volume(server_id, volume_id): # pragma: no cover try: get_nova_client().volumes.delete_server_volume(server_id, volume_id) return True - except Exception: + except Exception: # pylint: disable=broad-except log.exception("Error [detach_server_volume(nova_client, '%s', '%s')]", server_id, volume_id) return False diff --git a/yardstick/network_services/traffic_profile/ixia_rfc2544.py b/yardstick/network_services/traffic_profile/ixia_rfc2544.py index 7881131a7..3ab157dc7 100644 --- a/yardstick/network_services/traffic_profile/ixia_rfc2544.py +++ b/yardstick/network_services/traffic_profile/ixia_rfc2544.py @@ -26,7 +26,7 @@ class IXIARFC2544Profile(TrexProfile): UPLINK = 'uplink' DOWNLINK = 'downlink' - def _get_ixia_traffic_profile(self, profile_data, mac=None, xfile=None, static_traffic=None): + def _get_ixia_traffic_profile(self, profile_data, mac=None): if mac is None: mac = {} @@ -74,12 +74,12 @@ class IXIARFC2544Profile(TrexProfile): }, 'outer_l4': value['outer_l4'], } - except Exception: + except KeyError: continue return result - def _ixia_traffic_generate(self, traffic_generator, traffic, ixia_obj): + def _ixia_traffic_generate(self, traffic, ixia_obj): for key, value in traffic.items(): if key.startswith((self.UPLINK, self.DOWNLINK)): value["iload"] = str(self.rate) @@ -106,7 +106,7 @@ class IXIARFC2544Profile(TrexProfile): self.ports = [port for port in port_generator()] - def execute_traffic(self, traffic_generator, ixia_obj, mac=None, xfile=None): + def execute_traffic(self, traffic_generator, ixia_obj, mac=None): if mac is None: mac = {} if self.first_run: @@ -114,28 +114,27 @@ class IXIARFC2544Profile(TrexProfile): self.pg_id = 0 self.update_traffic_profile(traffic_generator) traffic = \ - self._get_ixia_traffic_profile(self.full_profile, mac, xfile) + self._get_ixia_traffic_profile(self.full_profile, mac) self.max_rate = self.rate self.min_rate = 0 self.get_multiplier() - self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj) + self._ixia_traffic_generate(traffic, ixia_obj) def get_multiplier(self): self.rate = round((self.max_rate + self.min_rate) / 2.0, 2) multiplier = round(self.rate / self.pps, 2) return str(multiplier) - def start_ixia_latency(self, traffic_generator, ixia_obj, - mac=None, xfile=None): + def start_ixia_latency(self, traffic_generator, ixia_obj, mac=None): if mac is None: mac = {} self.update_traffic_profile(traffic_generator) traffic = \ - self._get_ixia_traffic_profile(self.full_profile, mac, xfile) - self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj) + self._get_ixia_traffic_profile(self.full_profile, mac) + self._ixia_traffic_generate(traffic, ixia_obj) - def get_drop_percentage(self, traffic_generator, samples, tol_min, - tolerance, ixia_obj, mac=None, xfile=None): + def get_drop_percentage(self, samples, tol_min, tolerance, ixia_obj, + mac=None): if mac is None: mac = {} status = 'Running' @@ -179,6 +178,6 @@ class IXIARFC2544Profile(TrexProfile): samples['DropPercentage'] = drop_percent return status, samples self.get_multiplier() - traffic = self._get_ixia_traffic_profile(self.full_profile, mac, xfile) - self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj) + traffic = self._get_ixia_traffic_profile(self.full_profile, mac) + self._ixia_traffic_generate(traffic, ixia_obj) return status, samples diff --git a/yardstick/network_services/traffic_profile/traffic_profile.py b/yardstick/network_services/traffic_profile/traffic_profile.py index 2f97945c0..3b19ff9be 100644 --- a/yardstick/network_services/traffic_profile/traffic_profile.py +++ b/yardstick/network_services/traffic_profile/traffic_profile.py @@ -70,6 +70,7 @@ class TrexProfile(TrafficProfile): def _ethernet_range_action_partial(self, direction, _): def partial(min_value, max_value, count): + # pylint: disable=unused-argument stl_vm_flow_var = STLVmFlowVar(name="mac_{}".format(direction), min_value=1, max_value=30, @@ -83,6 +84,7 @@ class TrexProfile(TrafficProfile): return partial def _ip_range_action_partial(self, direction, count=1): + # pylint: disable=unused-argument def partial(min_value, max_value, count): ip1 = int(ipaddress.IPv4Address(min_value)) ip2 = int(ipaddress.IPv4Address(max_value)) @@ -108,6 +110,7 @@ class TrexProfile(TrafficProfile): def _ip6_range_action_partial(self, direction, _): def partial(min_value, max_value, count): + # pylint: disable=unused-argument min_value, max_value = self._get_start_end_ipv6(min_value, max_value) stl_vm_flow_var = STLVmFlowVar(name="ip6_{}".format(direction), min_value=min_value, @@ -124,6 +127,7 @@ class TrexProfile(TrafficProfile): def _dscp_range_action_partial(self, *_): def partial(min_value, max_value, count): + # pylint: disable=unused-argument stl_vm_flow_var = STLVmFlowVar(name="dscp", min_value=min_value, max_value=max_value, @@ -134,8 +138,10 @@ class TrexProfile(TrafficProfile): stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='dscp', pkt_offset='IP.tos') self.vm_flow_vars.append(stl_vm_wr_flow_var) + return partial def _udp_range_action_partial(self, field, count=1): + # pylint: disable=unused-argument def partial(min_value, max_value, count): actual_count = int(max_value) - int(min_value) if not actual_count: diff --git a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py index fbaaa0ca8..d57d7e601 100644 --- a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py @@ -250,20 +250,12 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper): self.ssh_helper.execute("sudo killall %s" % self.APP_NAME) def _setup_dpdk(self): - """ setup dpdk environment needed for vnf to run """ - + """Setup DPDK environment needed for VNF to run""" self._setup_hugepages() - self.ssh_helper.execute("sudo modprobe uio && sudo modprobe igb_uio") - - exit_status = self.ssh_helper.execute("lsmod | grep -i igb_uio")[0] - if exit_status == 0: - return - - dpdk = self.ssh_helper.join_bin_path(DPDK_VERSION) - dpdk_setup = self.ssh_helper.provision_tool(tool_file="nsb_setup.sh") - exit_status = self.ssh_helper.execute("which {} >/dev/null 2>&1".format(dpdk))[0] - if exit_status != 0: - self.ssh_helper.execute("bash %s dpdk >/dev/null 2>&1" % dpdk_setup) + self.ssh_helper.execute('sudo modprobe uio && sudo modprobe igb_uio') + exit_status = self.ssh_helper.execute('lsmod | grep -i igb_uio')[0] + if exit_status: + raise y_exceptions.DPDKSetupDriverError() def get_collectd_options(self): options = self.scenario_helper.all_options.get("collectd", {}) diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py index 630c8b9c0..12510db96 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py @@ -149,7 +149,7 @@ class IxiaResourceHelper(ClientResourceHelper): self.client.ix_stop_traffic() samples = self.generate_samples(traffic_profile.ports) self._queue.put(samples) - status, samples = traffic_profile.get_drop_percentage(self, samples, min_tol, + status, samples = traffic_profile.get_drop_percentage(samples, min_tol, max_tol, self.client, mac) current = samples['CurrentDropPercentage'] diff --git a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py index c02c0eb27..077ce2385 100644 --- a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py @@ -34,9 +34,9 @@ LOG = logging.getLogger(__name__) VPE_PIPELINE_COMMAND = """sudo {tool_path} -p {port_mask_hex} -f {cfg_file} -s {script}""" VPE_COLLECT_KPI = """\ -Pkts in:\s(\d+)\r\n\ -\tPkts dropped by AH:\s(\d+)\r\n\ -\tPkts dropped by other:\s(\d+)\ +Pkts in:\\s(\\d+)\r\n\ +\tPkts dropped by AH:\\s(\\d+)\r\n\ +\tPkts dropped by other:\\s(\\d+)\ """ @@ -61,6 +61,25 @@ class ConfigCreate(object): self.downlink_ports = self.vnfd_helper.port_pairs.downlink_ports self.pipeline_per_port = 9 self.socket = socket + self._dpdk_port_to_link_id_map = None + + @property + def dpdk_port_to_link_id_map(self): + # we need interface name -> DPDK port num (PMD ID) -> LINK ID + # LINK ID -> PMD ID is governed by the port mask + # LINK instances are created implicitly based on the PORT_MASK application startup + # argument. LINK0 is the first port enabled in the PORT_MASK, port 1 is the next one, + # etc. The LINK ID is different than the DPDK PMD-level NIC port ID, which is the actual + # position in the bitmask mentioned above. For example, if bit 5 is the first bit set + # in the bitmask, then LINK0 is having the PMD ID of 5. This mechanism creates a + # contiguous LINK ID space and isolates the configuration file against changes in the + # board PCIe slots where NICs are plugged in. + if self._dpdk_port_to_link_id_map is None: + self._dpdk_port_to_link_id_map = {} + for link_id, port_name in enumerate(sorted(self.vnfd_helper.port_pairs.all_ports, + key=self.vnfd_helper.port_num)): + self._dpdk_port_to_link_id_map[port_name] = link_id + return self._dpdk_port_to_link_id_map def vpe_initialize(self, config): config.add_section('EAL') @@ -79,7 +98,7 @@ class ConfigCreate(object): def vpe_rxq(self, config): for port in self.downlink_ports: - new_section = 'RXQ{0}.0'.format(self.vnfd_helper.port_num(port)) + new_section = 'RXQ{0}.0'.format(self.dpdk_port_to_link_id_map[port]) config.add_section(new_section) config.set(new_section, 'mempool', 'MEMPOOL1') @@ -104,7 +123,7 @@ class ConfigCreate(object): for k, v in parser.items(pipeline): if k == "pktq_in": if "RXQ" in v: - port = self.vnfd_helper.port_num(self.uplink_ports[index]) + port = self.dpdk_port_to_link_id_map[self.uplink_ports[index]] value = "RXQ{0}.0".format(port) else: value = self.get_sink_swq(parser, pipeline, k, index) @@ -113,7 +132,7 @@ class ConfigCreate(object): elif k == "pktq_out": if "TXQ" in v: - port = self.vnfd_helper.port_num(self.downlink_ports[index]) + port = self.dpdk_port_to_link_id_map[self.downlink_ports[index]] value = "TXQ{0}.0".format(port) else: self.sw_q += 1 @@ -135,7 +154,7 @@ class ConfigCreate(object): for k, v in parser.items(pipeline): if k == "pktq_in": - port = self.vnfd_helper.port_num(self.downlink_ports[index]) + port = self.dpdk_port_to_link_id_map[self.downlink_ports[index]] if "RXQ" not in v: value = self.get_sink_swq(parser, pipeline, k, index) elif "TM" in v: @@ -146,7 +165,7 @@ class ConfigCreate(object): parser.set(pipeline, k, value) if k == "pktq_out": - port = self.vnfd_helper.port_num(self.uplink_ports[index]) + port = self.dpdk_port_to_link_id_map[self.uplink_ports[index]] if "TXQ" not in v: self.sw_q += 1 value = self.get_sink_swq(parser, pipeline, k, index) @@ -171,7 +190,7 @@ class ConfigCreate(object): config = self.vpe_initialize(config) config = self.vpe_rxq(config) config.write(cfg_file) - for index in range(0, len(self.uplink_ports)): + for index, _ in enumerate(self.uplink_ports): config = self.vpe_upstream(vnf_cfg, index) config.write(cfg_file) config = self.vpe_downstream(vnf_cfg, index) @@ -209,7 +228,7 @@ class ConfigCreate(object): return rules.get_string() - def generate_tm_cfg(self, vnf_cfg, index=0): + def generate_tm_cfg(self, vnf_cfg): vnf_cfg = os.path.join(vnf_cfg, "full_tm_profile_10G.cfg") if os.path.exists(vnf_cfg): return open(vnf_cfg).read() diff --git a/yardstick/orchestrator/heat.py b/yardstick/orchestrator/heat.py index 1a8beaeb6..558b5d2a6 100644 --- a/yardstick/orchestrator/heat.py +++ b/yardstick/orchestrator/heat.py @@ -53,7 +53,7 @@ class HeatStack(object): def create(self, template, heat_parameters, wait, timeout): """Creates an OpenStack stack from a template""" with tempfile.NamedTemporaryFile('wb', delete=False) as template_file: - template_file.write(jsonutils.dumps(template)) + template_file.write(jsonutils.dump_as_bytes(template)) template_file.close() self._stack = self._cloud.create_stack( self.name, template_file=template_file.name, wait=wait, @@ -74,7 +74,14 @@ class HeatStack(object): if self.uuid is None: return - ret = self._cloud.delete_stack(self.uuid, wait=wait) + try: + ret = self._cloud.delete_stack(self.uuid, wait=wait) + except TypeError: + # NOTE(ralonsoh): this exception catch solves a bug in Shade, which + # tries to retrieve and read the stack status when it's already + # deleted. + ret = True + _DEPLOYED_STACKS.pop(self.uuid) self._stack = None return ret diff --git a/tests/unit/benchmark/__init__.py b/yardstick/tests/unit/benchmark/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/__init__.py +++ b/yardstick/tests/unit/benchmark/__init__.py diff --git a/tests/unit/benchmark/contexts/__init__.py b/yardstick/tests/unit/benchmark/contexts/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/contexts/__init__.py +++ b/yardstick/tests/unit/benchmark/contexts/__init__.py diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml index dbdd3700d..dbdd3700d 100644 --- a/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample.yaml diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml index 306915ca1..306915ca1 100644 --- a/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample_new.yaml diff --git a/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml index 65449c91c..65449c91c 100644 --- a/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_duplicate_sample_ovs.yaml diff --git a/tests/unit/benchmark/contexts/nodes_sample.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_sample.yaml index 8d50c3aea..8d50c3aea 100644 --- a/tests/unit/benchmark/contexts/nodes_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_sample.yaml diff --git a/tests/unit/benchmark/contexts/nodes_sample_new.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_sample_new.yaml index a400bec03..a400bec03 100644 --- a/tests/unit/benchmark/contexts/nodes_sample_new.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_sample_new.yaml diff --git a/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml index 55ff2e778..55ff2e778 100644 --- a/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_sample_new_sriov.yaml diff --git a/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml index b1da1ea9f..b1da1ea9f 100644 --- a/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_sample_ovs.yaml diff --git a/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml b/yardstick/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml index c02849a05..c02849a05 100644 --- a/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml +++ b/yardstick/tests/unit/benchmark/contexts/nodes_sample_ovsdpdk.yaml diff --git a/tests/unit/benchmark/contexts/standalone/__init__.py b/yardstick/tests/unit/benchmark/contexts/standalone/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/contexts/standalone/__init__.py +++ b/yardstick/tests/unit/benchmark/contexts/standalone/__init__.py diff --git a/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml index 2e501a6af..2e501a6af 100644 --- a/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_duplicate_sample.yaml diff --git a/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml index 0f51dbe63..0f51dbe63 100644 --- a/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_ovs_dpdk_sample.yaml diff --git a/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml index 8d50c3aea..8d50c3aea 100644 --- a/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_sample.yaml diff --git a/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml index 1c43b8725..1c43b8725 100644 --- a/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/standalone/nodes_sriov_sample.yaml diff --git a/tests/unit/benchmark/contexts/standalone/test_model.py b/yardstick/tests/unit/benchmark/contexts/standalone/test_model.py index 6090356b6..18ea3c4e6 100644 --- a/tests/unit/benchmark/contexts/standalone/test_model.py +++ b/yardstick/tests/unit/benchmark/contexts/standalone/test_model.py @@ -18,8 +18,6 @@ import unittest import mock from xml.etree import ElementTree - -from yardstick.benchmark.contexts.standalone.model import Libvirt from yardstick.benchmark.contexts.standalone import model from yardstick.network_services import utils @@ -57,6 +55,9 @@ class ModelLibvirtTestCase(unittest.TestCase): def _cleanup(self): self._mock_write_xml.stop() + # TODO: Remove mocking of yardstick.ssh.SSH (here and elsewhere) + # In this case, we are mocking a param to be passed into other methods + # It can be a generic Mock() with return values set for the right methods def test_check_if_vm_exists_and_delete(self): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) @@ -193,6 +194,8 @@ class ModelLibvirtTestCase(unittest.TestCase): status = model.Libvirt.build_vm_xml(ssh_mock, {}, cfg_file, 'vm_0', 0) self.assertEqual(status[0], result[0]) + # TODO: Edit this test to test state instead of output + # update_interrupts_hugepages_perf does not return anything def test_update_interrupts_hugepages_perf(self): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) @@ -203,9 +206,9 @@ class ModelLibvirtTestCase(unittest.TestCase): # None, this check is trivial. #status = Libvirt.update_interrupts_hugepages_perf(ssh_mock) #self.assertIsNone(status) - Libvirt.update_interrupts_hugepages_perf(ssh_mock) + model.Libvirt.update_interrupts_hugepages_perf(ssh_mock) - @mock.patch("yardstick.benchmark.contexts.standalone.model.CpuSysCores") + @mock.patch.object(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. @@ -214,7 +217,7 @@ class ModelLibvirtTestCase(unittest.TestCase): ssh_mock.execute = \ mock.Mock(return_value=(0, "a", "")) ssh.return_value = ssh_mock - status = Libvirt.pin_vcpu_for_perf(ssh_mock, 4) + status = model.Libvirt.pin_vcpu_for_perf(ssh_mock, 4) self.assertIsNotNone(status) class StandaloneContextHelperTestCase(unittest.TestCase): @@ -225,15 +228,15 @@ class StandaloneContextHelperTestCase(unittest.TestCase): NETWORKS = { 'mgmt': {'cidr': '152.16.100.10/24'}, 'private_0': { - 'phy_port': "0000:05:00.0", - 'vpci': "0000:00:07.0", - 'cidr': '152.16.100.10/24', - 'gateway_ip': '152.16.100.20'}, + 'phy_port': "0000:05:00.0", + 'vpci': "0000:00:07.0", + 'cidr': '152.16.100.10/24', + 'gateway_ip': '152.16.100.20'}, 'public_0': { - 'phy_port': "0000:05:00.1", - 'vpci': "0000:00:08.0", - 'cidr': '152.16.40.10/24', - 'gateway_ip': '152.16.100.20'} + 'phy_port': "0000:05:00.1", + 'vpci': "0000:00:08.0", + 'cidr': '152.16.40.10/24', + 'gateway_ip': '152.16.100.20'} } def setUp(self): @@ -280,7 +283,7 @@ class StandaloneContextHelperTestCase(unittest.TestCase): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ - mock.Mock(return_value=(1, pattern, "")) + mock.Mock(return_value=(1, pattern, "")) ssh.return_value = ssh_mock # NOTE(ralonsoh): this test doesn't cover function execution. This test # should also check mocked function calls. @@ -333,7 +336,7 @@ class StandaloneContextHelperTestCase(unittest.TestCase): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ - mock.Mock(return_value=(1, "", "")) + mock.Mock(return_value=(1, "", "")) ssh.return_value = ssh_mock # NOTE(ralonsoh): this test doesn't cover function execution. This test # should also check mocked function calls. @@ -348,19 +351,19 @@ class ServerTestCase(unittest.TestCase): NETWORKS = { 'mgmt': {'cidr': '152.16.100.10/24'}, 'private_0': { - 'phy_port': "0000:05:00.0", - 'vpci': "0000:00:07.0", - 'driver': 'i40e', - 'mac': '', - 'cidr': '152.16.100.10/24', - 'gateway_ip': '152.16.100.20'}, + 'phy_port': "0000:05:00.0", + 'vpci': "0000:00:07.0", + 'driver': 'i40e', + 'mac': '', + 'cidr': '152.16.100.10/24', + 'gateway_ip': '152.16.100.20'}, 'public_0': { - 'phy_port': "0000:05:00.1", - 'vpci': "0000:00:08.0", - 'driver': 'i40e', - 'mac': '', - 'cidr': '152.16.40.10/24', - 'gateway_ip': '152.16.100.20'} + 'phy_port': "0000:05:00.1", + 'vpci': "0000:00:08.0", + 'driver': 'i40e', + 'mac': '', + 'cidr': '152.16.40.10/24', + 'gateway_ip': '152.16.100.20'} } def setUp(self): @@ -392,25 +395,27 @@ class ServerTestCase(unittest.TestCase): {}, self.NETWORKS, '1.1.1.1/24', 'vm_0', vnf, '00:00:00:00:00:01') self.assertIsNotNone(status) + class OvsDeployTestCase(unittest.TestCase): NETWORKS = { 'mgmt': {'cidr': '152.16.100.10/24'}, 'private_0': { - 'phy_port': "0000:05:00.0", - 'vpci': "0000:00:07.0", - 'driver': 'i40e', - 'mac': '', - 'cidr': '152.16.100.10/24', - 'gateway_ip': '152.16.100.20'}, + 'phy_port': "0000:05:00.0", + 'vpci': "0000:00:07.0", + 'driver': 'i40e', + 'mac': '', + 'cidr': '152.16.100.10/24', + 'gateway_ip': '152.16.100.20'}, 'public_0': { - 'phy_port': "0000:05:00.1", - 'vpci': "0000:00:08.0", - 'driver': 'i40e', - 'mac': '', - 'cidr': '152.16.40.10/24', - 'gateway_ip': '152.16.100.20'} + 'phy_port': "0000:05:00.1", + 'vpci': "0000:00:08.0", + 'driver': 'i40e', + 'mac': '', + 'cidr': '152.16.40.10/24', + 'gateway_ip': '152.16.100.20'} } + @mock.patch('yardstick.ssh.SSH') def setUp(self, mock_ssh): self.ovs_deploy = model.OvsDeploy(mock_ssh, '/tmp/dpdk-devbind.py', {}) diff --git a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py b/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py index e39ecf4f2..02a85525a 100644 --- a/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py +++ b/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py @@ -12,12 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Unittest for yardstick.benchmark.contexts.standalone.standaloneovs - -from __future__ import absolute_import import os -import unittest + import mock +import unittest from yardstick.benchmark.contexts.standalone import ovs_dpdk @@ -39,28 +37,28 @@ class OvsDpdkContextTestCase(unittest.TestCase): NETWORKS = { 'mgmt': {'cidr': '152.16.100.10/24'}, 'private_0': { - 'phy_port': "0000:05:00.0", - 'vpci': "0000:00:07.0", - 'cidr': '152.16.100.10/24', - 'interface': 'if0', - 'mac': "00:00:00:00:00:01", - 'vf_pci': {'vf_pci': 0}, - 'gateway_ip': '152.16.100.20'}, + 'phy_port': "0000:05:00.0", + 'vpci': "0000:00:07.0", + 'cidr': '152.16.100.10/24', + 'interface': 'if0', + 'mac': "00:00:00:00:00:01", + 'vf_pci': {'vf_pci': 0}, + 'gateway_ip': '152.16.100.20'}, 'public_0': { - 'phy_port': "0000:05:00.1", - 'vpci': "0000:00:08.0", - 'cidr': '152.16.40.10/24', - 'interface': 'if0', - 'vf_pci': {'vf_pci': 0}, - 'mac': "00:00:00:00:00:01", - 'gateway_ip': '152.16.100.20'}, + 'phy_port': "0000:05:00.1", + 'vpci': "0000:00:08.0", + 'cidr': '152.16.40.10/24', + 'interface': 'if0', + 'vf_pci': {'vf_pci': 0}, + 'mac': "00:00:00:00:00:01", + 'gateway_ip': '152.16.100.20'}, } def setUp(self): self.ovs_dpdk = ovs_dpdk.OvsDpdkContext() - @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper') @mock.patch('yardstick.benchmark.contexts.standalone.model.Server') + @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper') def test___init__(self, mock_helper, mock_server): self.ovs_dpdk.helper = mock_helper self.ovs_dpdk.vnf_node = mock_server @@ -68,7 +66,8 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.assertTrue(self.ovs_dpdk.first_run) def test_init(self): - self.ovs_dpdk.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}]) + self.ovs_dpdk.helper.parse_pod_file = mock.Mock( + return_value=[{}, {}, {}]) self.assertIsNone(self.ovs_dpdk.init(self.ATTRS)) def test_setup_ovs(self): @@ -108,19 +107,16 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.ovs_dpdk.wait_for_vswitchd = 0 self.assertIsNone(self.ovs_dpdk.setup_ovs_bridge_add_flows()) - def test_cleanup_ovs_dpdk_env(self): - with mock.patch("yardstick.ssh.SSH") as ssh: - ssh_mock = mock.Mock(autospec=ssh.SSH) - ssh_mock.execute = \ - mock.Mock(return_value=(0, "a", "")) - ssh.return_value = ssh_mock - self.ovs_dpdk.connection = ssh_mock - self.ovs_dpdk.networks = self.NETWORKS - self.ovs_dpdk.ovs_properties = { - 'version': {'ovs': '2.7.0'} - } - self.ovs_dpdk.wait_for_vswitchd = 0 - self.assertIsNone(self.ovs_dpdk.cleanup_ovs_dpdk_env()) + @mock.patch("yardstick.ssh.SSH") + def test_cleanup_ovs_dpdk_env(self, mock_ssh): + mock_ssh.execute.return_value = 0, "a", "" + self.ovs_dpdk.connection = mock_ssh + self.ovs_dpdk.networks = self.NETWORKS + self.ovs_dpdk.ovs_properties = { + 'version': {'ovs': '2.7.0'} + } + self.ovs_dpdk.wait_for_vswitchd = 0 + self.assertIsNone(self.ovs_dpdk.cleanup_ovs_dpdk_env()) @mock.patch('yardstick.benchmark.contexts.standalone.model.OvsDeploy') def test_check_ovs_dpdk_env(self, mock_ovs): @@ -132,7 +128,7 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.ovs_dpdk.connection = ssh_mock self.ovs_dpdk.networks = self.NETWORKS self.ovs_dpdk.ovs_properties = { - 'version': {'ovs': '2.7.0', 'dpdk': '16.11.1'} + 'version': {'ovs': '2.7.0', 'dpdk': '16.11.1'} } self.ovs_dpdk.wait_for_vswitchd = 0 self.ovs_dpdk.cleanup_ovs_dpdk_env = mock.Mock() @@ -143,11 +139,12 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.ovs_dpdk.wait_for_vswitchd = 0 self.cleanup_ovs_dpdk_env = mock.Mock() mock_ovs.deploy = mock.Mock() + # NOTE(elfoley): Check for a specific Exception self.assertRaises(Exception, self.ovs_dpdk.check_ovs_dpdk_env) @mock.patch('yardstick.ssh.SSH') - def test_deploy(self, ssh_mock): - ssh_mock.execute.return_value = (0, "a", "") + def test_deploy(self, mock_ssh): + mock_ssh.execute.return_value = 0, "a", "" self.ovs_dpdk.vm_deploy = False self.assertIsNone(self.ovs_dpdk.deploy()) @@ -168,15 +165,15 @@ class OvsDpdkContextTestCase(unittest.TestCase): @mock.patch('yardstick.benchmark.contexts.standalone.model.Libvirt') @mock.patch('yardstick.ssh.SSH') - def test_undeploy(self, ssh_mock, _): - ssh_mock.execute.return_value = (0, "a", "") + def test_undeploy(self, mock_ssh, *args): + mock_ssh.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 = mock_ssh 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 @@ -208,7 +205,8 @@ class OvsDpdkContextTestCase(unittest.TestCase): 'file': self._get_file_abspath(self.NODES_ovs_dpdk_SAMPLE) } - self.ovs_dpdk.helper.parse_pod_file = mock.Mock(return_value=[{}, {}, {}]) + self.ovs_dpdk.helper.parse_pod_file = mock.Mock( + return_value=[{}, {}, {}]) self.ovs_dpdk.init(attrs) attr_name = 'bar.foo' @@ -260,6 +258,8 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.assertEqual(result['user'], 'root') self.assertEqual(result['key_filename'], '/root/.yardstick_key') + # TODO(elfoley): Split this test for networks that exist and networks that + # don't def test__get_network(self): network1 = { 'name': 'net_1', @@ -277,6 +277,7 @@ class OvsDpdkContextTestCase(unittest.TestCase): 'b': network2, } + # Tests for networks that do not exist attr_name = {} self.assertIsNone(self.ovs_dpdk._get_network(attr_name)) @@ -285,9 +286,11 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.assertIsNone(self.ovs_dpdk._get_network(None)) + # TODO(elfoley): Split this test attr_name = 'vld777' self.assertIsNone(self.ovs_dpdk._get_network(attr_name)) + # Tests for networks that exist attr_name = {'vld_id': 'vld999'} expected = { "name": 'net_2', @@ -319,8 +322,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.model.Libvirt.add_ovs_interface') - def test__enable_interfaces(self, _): + @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt') + def test__enable_interfaces(self, *args): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ @@ -332,11 +335,12 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.ovs_dpdk.drivers = [] self.ovs_dpdk.networks = self.NETWORKS self.ovs_dpdk.get_vf_datas = mock.Mock(return_value="") - self.assertIsNone(self.ovs_dpdk._enable_interfaces(0, ["private_0"], 'test')) + self.assertIsNone(self.ovs_dpdk._enable_interfaces( + 0, ["private_0"], 'test')) - @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt') @mock.patch('yardstick.benchmark.contexts.standalone.model.Server') - def test_setup_ovs_dpdk_context(self, _, mock_libvirt): + @mock.patch('yardstick.benchmark.contexts.standalone.ovs_dpdk.Libvirt') + def test_setup_ovs_dpdk_context(self, mock_libvirt, *args): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ @@ -361,10 +365,11 @@ class OvsDpdkContextTestCase(unittest.TestCase): self.ovs_dpdk.host_mgmt = {} self.ovs_dpdk.flavor = {} self.ovs_dpdk.configure_nics_for_ovs_dpdk = mock.Mock(return_value="") - mock_libvirt.check_if_vm_exists_and_delete = mock.Mock(return_value="") - mock_libvirt.build_vm_xml = mock.Mock(return_value=[6, "00:00:00:00:00:01"]) + mock_libvirt.build_vm_xml.return_value = [6, "00:00:00:00:00:01"] self.ovs_dpdk._enable_interfaces = mock.Mock(return_value="") - mock_libvirt.virsh_create_vm = mock.Mock(return_value="") - mock_libvirt.pin_vcpu_for_perf = mock.Mock(return_value="") - self.ovs_dpdk.vnf_node.generate_vnf_instance = mock.Mock(return_value={}) + mock_libvirt.virsh_create_vm.return_value = "" + mock_libvirt.pin_vcpu_for_perf.return_value = "" + self.ovs_dpdk.vnf_node.generate_vnf_instance = mock.Mock( + return_value={}) + self.assertIsNotNone(self.ovs_dpdk.setup_ovs_dpdk_context()) diff --git a/tests/unit/benchmark/contexts/standalone/test_sriov.py b/yardstick/tests/unit/benchmark/contexts/standalone/test_sriov.py index 7f11a7d59..f323fcd3c 100644 --- a/tests/unit/benchmark/contexts/standalone/test_sriov.py +++ b/yardstick/tests/unit/benchmark/contexts/standalone/test_sriov.py @@ -12,12 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Unittest for yardstick.benchmark.contexts.standalone.standalonesriov - -from __future__ import absolute_import import os -import unittest + import mock +import unittest from yardstick import ssh from yardstick.benchmark.contexts.standalone import sriov @@ -40,33 +38,31 @@ class SriovContextTestCase(unittest.TestCase): NETWORKS = { 'mgmt': {'cidr': '152.16.100.10/24'}, 'private_0': { - 'phy_port': "0000:05:00.0", - 'vpci': "0000:00:07.0", - 'cidr': '152.16.100.10/24', - 'interface': 'if0', - 'mac': "00:00:00:00:00:01", - 'vf_pci': {'vf_pci': 0}, - 'gateway_ip': '152.16.100.20'}, + 'phy_port': "0000:05:00.0", + 'vpci': "0000:00:07.0", + 'cidr': '152.16.100.10/24', + 'interface': 'if0', + 'mac': "00:00:00:00:00:01", + 'vf_pci': {'vf_pci': 0}, + 'gateway_ip': '152.16.100.20'}, 'public_0': { - 'phy_port': "0000:05:00.1", - 'vpci': "0000:00:08.0", - 'cidr': '152.16.40.10/24', - 'interface': 'if0', - 'vf_pci': {'vf_pci': 0}, - 'mac': "00:00:00:00:00:01", - 'gateway_ip': '152.16.100.20'}, + 'phy_port': "0000:05:00.1", + 'vpci': "0000:00:08.0", + 'cidr': '152.16.40.10/24', + 'interface': 'if0', + 'vf_pci': {'vf_pci': 0}, + 'mac': "00:00:00:00:00:01", + 'gateway_ip': '152.16.100.20'}, } def setUp(self): self.sriov = sriov.SriovContext() - @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper') @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt') + @mock.patch('yardstick.benchmark.contexts.standalone.model.StandaloneContextHelper') @mock.patch('yardstick.benchmark.contexts.standalone.model.Server') - def test___init__(self, mock_helper, mock_libvirt, mock_server): - # pylint: disable=unused-argument + def test___init__(self, mock_helper, mock_server, *args): # NOTE(ralonsoh): this test doesn't cover function execution. - # The pylint exception should be removed. self.sriov.helper = mock_helper self.sriov.vnf_node = mock_server self.assertIsNone(self.sriov.file_path) @@ -77,10 +73,8 @@ class SriovContextTestCase(unittest.TestCase): self.assertIsNone(self.sriov.init(self.ATTRS)) @mock.patch.object(ssh, 'SSH', return_value=(0, "a", "")) - def test_deploy(self, mock_ssh): - # pylint: disable=unused-argument + def test_deploy(self, *args): # NOTE(ralonsoh): this test doesn't cover function execution. - # The pylint exception should be removed. self.sriov.vm_deploy = False self.assertIsNone(self.sriov.deploy()) @@ -92,11 +86,9 @@ class SriovContextTestCase(unittest.TestCase): self.sriov.wait_for_vnfs_to_start = mock.Mock(return_value={}) self.assertIsNone(self.sriov.deploy()) - @mock.patch.object(ssh, 'SSH', return_value=(0, "a", "")) @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt') - def test_undeploy(self, mock_libvirt, mock_ssh): - # pylint: disable=unused-argument - # NOTE(ralonsoh): the pylint exception should be removed. + @mock.patch.object(ssh, 'SSH', return_value=(0, "a", "")) + def test_undeploy(self, mock_ssh, *args): self.sriov.vm_deploy = False self.assertIsNone(self.sriov.undeploy()) @@ -184,6 +176,8 @@ class SriovContextTestCase(unittest.TestCase): self.assertEqual(result['user'], 'root') self.assertEqual(result['key_filename'], '/root/.yardstick_key') + # TODO(elfoley): Split this test + # There are at least two sets of inputs/outputs def test__get_network(self): network1 = { 'name': 'net_1', @@ -243,24 +237,23 @@ class SriovContextTestCase(unittest.TestCase): self.sriov._get_vf_data = mock.Mock(return_value="") self.assertIsNone(self.sriov.configure_nics_for_sriov()) - @mock.patch.object(ssh, 'SSH', return_value=(0, "a", "")) @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt') - def test__enable_interfaces(self, mock_libvirt, mock_ssh): - # pylint: disable=unused-argument - # NOTE(ralonsoh): the pylint exception should be removed. + @mock.patch.object(ssh, 'SSH') + def test__enable_interfaces(self, mock_ssh, *args): + mock_ssh.return_value = 0, "a", "" + self.sriov.vm_deploy = True self.sriov.connection = mock_ssh self.sriov.vm_names = ['vm_0', 'vm_1'] self.sriov.drivers = [] self.sriov.networks = self.NETWORKS - self.sriov._get_vf_data = mock.Mock(return_value="") - self.assertIsNone(self.sriov._enable_interfaces(0, 0, ["private_0"], 'test')) + self.sriov.get_vf_data = mock.Mock(return_value="") + self.assertIsNone(self.sriov._enable_interfaces( + 0, 0, ["private_0"], 'test')) @mock.patch('yardstick.benchmark.contexts.standalone.model.Server') @mock.patch('yardstick.benchmark.contexts.standalone.sriov.Libvirt') - def test_setup_sriov_context(self, mock_libvirt, mock_server): - # pylint: disable=unused-argument - # NOTE(ralonsoh): the pylint exception should be removed. + def test_setup_sriov_context(self, mock_libvirt, *args): with mock.patch("yardstick.ssh.SSH") as ssh: ssh_mock = mock.Mock(autospec=ssh.SSH) ssh_mock.execute = \ @@ -285,7 +278,8 @@ class SriovContextTestCase(unittest.TestCase): self.sriov.host_mgmt = {} self.sriov.flavor = {} self.sriov.configure_nics_for_sriov = mock.Mock(return_value="") - mock_libvirt.build_vm_xml = mock.Mock(return_value=[6, "00:00:00:00:00:01"]) + mock_libvirt.build_vm_xml = mock.Mock( + return_value=[6, "00:00:00:00:00:01"]) self.sriov._enable_interfaces = mock.Mock(return_value="") self.sriov.vnf_node.generate_vnf_instance = mock.Mock(return_value={}) self.assertIsNotNone(self.sriov.setup_sriov_context()) diff --git a/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml b/yardstick/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml index e468d0465..e468d0465 100644 --- a/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/standalone_duplicate_sample.yaml diff --git a/tests/unit/benchmark/contexts/standalone_sample.yaml b/yardstick/tests/unit/benchmark/contexts/standalone_sample.yaml index 95e12d62f..95e12d62f 100644 --- a/tests/unit/benchmark/contexts/standalone_sample.yaml +++ b/yardstick/tests/unit/benchmark/contexts/standalone_sample.yaml diff --git a/tests/unit/benchmark/contexts/test_dummy.py b/yardstick/tests/unit/benchmark/contexts/test_dummy.py index 1a54035df..1a54035df 100644 --- a/tests/unit/benchmark/contexts/test_dummy.py +++ b/yardstick/tests/unit/benchmark/contexts/test_dummy.py diff --git a/tests/unit/benchmark/contexts/test_heat.py b/yardstick/tests/unit/benchmark/contexts/test_heat.py index f2e725df2..4348bb052 100644 --- a/tests/unit/benchmark/contexts/test_heat.py +++ b/yardstick/tests/unit/benchmark/contexts/test_heat.py @@ -9,22 +9,19 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.contexts.heat - -from __future__ import absolute_import - +from collections import OrderedDict +from itertools import count import logging import os -import unittest import uuid -from collections import OrderedDict import mock +import unittest -from itertools import count from yardstick.benchmark.contexts import heat from yardstick.benchmark.contexts import model + LOG = logging.getLogger(__name__) @@ -82,16 +79,16 @@ class HeatContextTestCase(unittest.TestCase): pgs['pgrp1']['policy']) mock_sg.assert_called_with('servergroup1', self.test_context, sgs['servergroup1']['policy']) - self.assertTrue(len(self.test_context.placement_groups) == 1) - self.assertTrue(len(self.test_context.server_groups) == 1) + self.assertEqual(len(self.test_context.placement_groups), 1) + self.assertEqual(len(self.test_context.server_groups), 1) mock_network.assert_called_with( 'bar', self.test_context, networks['bar']) - self.assertTrue(len(self.test_context.networks) == 1) + self.assertEqual(len(self.test_context.networks), 1) mock_server.assert_called_with('baz', self.test_context, servers['baz']) - self.assertTrue(len(self.test_context.servers) == 1) + self.assertEqual(len(self.test_context.servers), 1) if os.path.exists(self.test_context.key_filename): try: @@ -119,15 +116,17 @@ class HeatContextTestCase(unittest.TestCase): "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b") mock_template.add_security_group.assert_called_with("foo-secgroup") # mock_template.add_network.assert_called_with("bar-fool-network", 'physnet1', None) - mock_template.add_router.assert_called_with("bar-fool-network-router", - netattrs["external_network"], - "bar-fool-network-subnet") - mock_template.add_router_interface.assert_called_with("bar-fool-network-router-if0", - "bar-fool-network-router", - "bar-fool-network-subnet") + mock_template.add_router.assert_called_with( + "bar-fool-network-router", + netattrs["external_network"], + "bar-fool-network-subnet") + mock_template.add_router_interface.assert_called_with( + "bar-fool-network-router-if0", + "bar-fool-network-router", + "bar-fool-network-subnet") @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate') - def test_attrs_get(self, mock_template): + def test_attrs_get(self, *args): image, flavor, user = expected_tuple = 'foo1', 'foo2', 'foo3' self.assertNotEqual(self.test_context.image, image) self.assertNotEqual(self.test_context.flavor, flavor) @@ -139,7 +138,7 @@ class HeatContextTestCase(unittest.TestCase): self.assertEqual(attr_tuple, expected_tuple) @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate') - def test_attrs_set_negative(self, mock_template): + def test_attrs_set_negative(self, *args): with self.assertRaises(AttributeError): self.test_context.image = 'foo' @@ -227,13 +226,13 @@ class HeatContextTestCase(unittest.TestCase): @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate') @mock.patch('yardstick.benchmark.contexts.heat.os') - def test_undeploy_key_filename(self, mock_template, mock_os): + def test_undeploy_key_filename(self, mock_os, mock_template): self.test_context.stack = mock_template mock_os.path.exists.return_value = True self.assertIsNone(self.test_context.undeploy()) @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources") - def test__get_server_found_dict(self, mock_pkg_resources): + def test__get_server_found_dict(self, *args): """ Use HeatContext._get_server to get a server that matches based on a dictionary input. @@ -274,7 +273,7 @@ class HeatContextTestCase(unittest.TestCase): self.assertEqual(result['private_ip'], '10.0.0.1') @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources") - def test__get_server_found_dict_no_attrs(self, mock_pkg_resources): + def test__get_server_found_dict_no_attrs(self, *args): """ Use HeatContext._get_server to get a server that matches based on a dictionary input. @@ -313,7 +312,7 @@ class HeatContextTestCase(unittest.TestCase): self.assertNotIn('ip', result) @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources") - def test__get_server_found_not_dict(self, mock_pkg_resources): + def test__get_server_found_not_dict(self, *args): """ Use HeatContext._get_server to get a server that matches based on a non-dictionary input @@ -350,7 +349,7 @@ class HeatContextTestCase(unittest.TestCase): self.assertNotIn('public_ip', result) @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources") - def test__get_server_none_found_not_dict(self, mock_pkg_resources): + def test__get_server_none_found_not_dict(self, *args): """ Use HeatContext._get_server to not get a server due to None value associated with the match to a non-dictionary @@ -384,7 +383,7 @@ class HeatContextTestCase(unittest.TestCase): self.assertIsNone(result) @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources") - def test__get_server_not_found_dict(self, mock_pkg_resources): + def test__get_server_not_found_dict(self, *args): """ Use HeatContext._get_server to not get a server for lack of a match to a dictionary input @@ -420,7 +419,7 @@ class HeatContextTestCase(unittest.TestCase): self.assertIsNone(result) @mock.patch("yardstick.benchmark.contexts.heat.pkg_resources") - def test__get_server_not_found_not_dict(self, mock_pkg_resources): + def test__get_server_not_found_not_dict(self, *args): """ Use HeatContext._get_server to not get a server for lack of a match to a non-dictionary input @@ -451,6 +450,7 @@ class HeatContextTestCase(unittest.TestCase): result = self.test_context._get_server(attr_name) self.assertIsNone(result) + # TODO: Split this into more granular tests def test__get_network(self): network1 = mock.MagicMock() network1.name = 'net_1' diff --git a/tests/unit/benchmark/contexts/test_kubernetes.py b/yardstick/tests/unit/benchmark/contexts/test_kubernetes.py index 3a926f85c..e149e0d18 100644 --- a/tests/unit/benchmark/contexts/test_kubernetes.py +++ b/yardstick/tests/unit/benchmark/contexts/test_kubernetes.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. # @@ -9,14 +7,11 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.contexts.kubernetes - -from __future__ import absolute_import -import unittest import mock +import unittest from yardstick.benchmark.contexts.base import Context -from yardstick.benchmark.contexts.kubernetes import KubernetesContext +from yardstick.benchmark.contexts import kubernetes context_cfg = { @@ -43,33 +38,35 @@ prefix = 'yardstick.benchmark.contexts.kubernetes' class KubernetesTestCase(unittest.TestCase): + def setUp(self): + self.k8s_context = kubernetes.KubernetesContext() + self.k8s_context.init(context_cfg) + def tearDown(self): # clear kubernetes contexts from global list so we don't break other tests Context.list = [] - @mock.patch('{}.KubernetesContext._delete_services'.format(prefix)) - @mock.patch('{}.KubernetesContext._delete_ssh_key'.format(prefix)) - @mock.patch('{}.KubernetesContext._delete_rcs'.format(prefix)) - @mock.patch('{}.KubernetesContext._delete_pods'.format(prefix)) + @mock.patch.object(kubernetes.KubernetesContext, '_delete_services') + @mock.patch.object(kubernetes.KubernetesContext, '_delete_ssh_key') + @mock.patch.object(kubernetes.KubernetesContext, '_delete_rcs') + @mock.patch.object(kubernetes.KubernetesContext, '_delete_pods') def test_undeploy(self, mock_delete_pods, mock_delete_rcs, mock_delete_ssh, mock_delete_services): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context.undeploy() + self.k8s_context.undeploy() self.assertTrue(mock_delete_ssh.called) self.assertTrue(mock_delete_rcs.called) self.assertTrue(mock_delete_pods.called) self.assertTrue(mock_delete_services.called) - @mock.patch('{}.KubernetesContext._create_services'.format(prefix)) - @mock.patch('{}.KubernetesContext._wait_until_running'.format(prefix)) - @mock.patch('{}.KubernetesTemplate.get_rc_pods'.format(prefix)) - @mock.patch('{}.KubernetesContext._create_rcs'.format(prefix)) - @mock.patch('{}.KubernetesContext._set_ssh_key'.format(prefix)) + @mock.patch.object(kubernetes.KubernetesContext, '_create_services') + @mock.patch.object(kubernetes.KubernetesContext, '_wait_until_running') + @mock.patch.object(kubernetes.KubernetesTemplate, 'get_rc_pods') + @mock.patch.object(kubernetes.KubernetesContext, '_create_rcs') + @mock.patch.object(kubernetes.KubernetesContext, '_set_ssh_key') def test_deploy(self, mock_set_ssh_key, mock_create_rcs, @@ -77,44 +74,37 @@ class KubernetesTestCase(unittest.TestCase): mock_wait_until_running, mock_create_services): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) with mock.patch("yardstick.benchmark.contexts.kubernetes.time"): - k8s_context.deploy() + self.k8s_context.deploy() self.assertTrue(mock_set_ssh_key.called) self.assertTrue(mock_create_rcs.called) self.assertTrue(mock_create_services.called) self.assertTrue(mock_get_rc_pods.called) self.assertTrue(mock_wait_until_running.called) - @mock.patch('{}.paramiko'.format(prefix), **{"resource_filename.return_value": ""}) - @mock.patch('{}.pkg_resources'.format(prefix), **{"resource_filename.return_value": ""}) - @mock.patch('{}.utils'.format(prefix)) - @mock.patch('{}.open'.format(prefix), create=True) - @mock.patch('{}.k8s_utils.delete_config_map'.format(prefix)) - @mock.patch('{}.k8s_utils.create_config_map'.format(prefix)) - def test_ssh_key(self, mock_create, mock_delete, mock_open, mock_utils, mock_resources, - mock_paramiko): - - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._set_ssh_key() - k8s_context._delete_ssh_key() + @mock.patch.object(kubernetes, 'paramiko', **{"resource_filename.return_value": ""}) + @mock.patch.object(kubernetes, 'pkg_resources', **{"resource_filename.return_value": ""}) + @mock.patch.object(kubernetes, 'utils') + @mock.patch.object(kubernetes, 'open', create=True) + @mock.patch.object(kubernetes.k8s_utils, 'delete_config_map') + @mock.patch.object(kubernetes.k8s_utils, 'create_config_map') + def test_ssh_key(self, mock_create, mock_delete, *args): + self.k8s_context._set_ssh_key() + self.k8s_context._delete_ssh_key() + self.assertTrue(mock_create.called) self.assertTrue(mock_delete.called) - @mock.patch('{}.k8s_utils.read_pod_status'.format(prefix)) + @mock.patch.object(kubernetes.k8s_utils, 'read_pod_status') def test_wait_until_running(self, mock_read_pod_status): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context.template.pods = ['server'] + self.k8s_context.template.pods = ['server'] mock_read_pod_status.return_value = 'Running' - k8s_context._wait_until_running() + self.k8s_context._wait_until_running() - @mock.patch('{}.k8s_utils.get_pod_by_name'.format(prefix)) - @mock.patch('{}.KubernetesContext._get_node_ip'.format(prefix)) - @mock.patch('{}.k8s_utils.get_service_by_name'.format(prefix)) + @mock.patch.object(kubernetes.k8s_utils, 'get_pod_by_name') + @mock.patch.object(kubernetes.KubernetesContext, '_get_node_ip') + @mock.patch.object(kubernetes.k8s_utils, 'get_service_by_name') def test_get_server(self, mock_get_service_by_name, mock_get_node_ip, @@ -136,64 +126,45 @@ class KubernetesTestCase(unittest.TestCase): def __init__(self): self.status = Status() - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - mock_get_service_by_name.return_value = Services() mock_get_pod_by_name.return_value = Pod() mock_get_node_ip.return_value = '172.16.10.131' - server = k8s_context._get_server('server') - self.assertIsNotNone(server) + self.assertIsNotNone(self.k8s_context._get_server('server')) - @mock.patch('{}.KubernetesContext._create_rc'.format(prefix)) + @mock.patch.object(kubernetes.KubernetesContext, '_create_rc') def test_create_rcs(self, mock_create_rc): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._create_rcs() + self.k8s_context._create_rcs() self.assertTrue(mock_create_rc.called) - @mock.patch('{}.k8s_utils.create_replication_controller'.format(prefix)) + @mock.patch.object(kubernetes.k8s_utils, 'create_replication_controller') def test_create_rc(self, mock_create_replication_controller): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._create_rc({}) + self.k8s_context._create_rc({}) self.assertTrue(mock_create_replication_controller.called) - @mock.patch('{}.KubernetesContext._delete_rc'.format(prefix)) + @mock.patch.object(kubernetes.KubernetesContext, '_delete_rc') def test_delete_rcs(self, mock_delete_rc): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._delete_rcs() + self.k8s_context._delete_rcs() self.assertTrue(mock_delete_rc.called) - @mock.patch('{}.k8s_utils.delete_replication_controller'.format(prefix)) + @mock.patch.object(kubernetes.k8s_utils, 'delete_replication_controller') def test_delete_rc(self, mock_delete_replication_controller): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._delete_rc({}) + self.k8s_context._delete_rc({}) self.assertTrue(mock_delete_replication_controller.called) - @mock.patch('{}.k8s_utils.get_node_list'.format(prefix)) + @mock.patch.object(kubernetes.k8s_utils, 'get_node_list') def test_get_node_ip(self, mock_get_node_list): - - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._get_node_ip() + self.k8s_context._get_node_ip() self.assertTrue(mock_get_node_list.called) @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.create') def test_create_services(self, mock_create): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._create_services() + self.k8s_context._create_services() self.assertTrue(mock_create.called) @mock.patch('yardstick.orchestrator.kubernetes.ServiceObject.delete') def test_delete_services(self, mock_delete): - k8s_context = KubernetesContext() - k8s_context.init(context_cfg) - k8s_context._delete_services() + self.k8s_context._delete_services() self.assertTrue(mock_delete.called) diff --git a/tests/unit/benchmark/contexts/test_model.py b/yardstick/tests/unit/benchmark/contexts/test_model.py index 53b035b82..28011d494 100644 --- a/tests/unit/benchmark/contexts/test_model.py +++ b/yardstick/tests/unit/benchmark/contexts/test_model.py @@ -155,7 +155,7 @@ class NetworkTestCase(unittest.TestCase): def test_find_external_network(self): mock_network = mock.Mock() - mock_network.router = mock.Mock() + mock_network.router = mock.Mock() #pylint ignore assignment-from-none mock_network.router.external_gateway_info = 'ext_net' model.Network.list = [mock_network] diff --git a/tests/unit/benchmark/contexts/test_node.py b/yardstick/tests/unit/benchmark/contexts/test_node.py index a2e2f7b9a..5329d30f4 100644 --- a/tests/unit/benchmark/contexts/test_node.py +++ b/yardstick/tests/unit/benchmark/contexts/test_node.py @@ -21,6 +21,10 @@ from yardstick.common import constants as consts from yardstick.benchmark.contexts import node +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + class NodeContextTestCase(unittest.TestCase): PREFIX = 'yardstick.benchmark.contexts.node' @@ -345,6 +349,7 @@ class NodeContextTestCase(unittest.TestCase): result = self.test_context.get_context_from_server('my.vnf1') self.assertIs(result, self.test_context) + # TODO: Split this into more granular tests def test__get_network(self): network1 = { 'name': 'net_1', diff --git a/tests/unit/benchmark/core/__init__.py b/yardstick/tests/unit/benchmark/core/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/core/__init__.py +++ b/yardstick/tests/unit/benchmark/core/__init__.py diff --git a/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml b/yardstick/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml index 44c4a31ff..44c4a31ff 100644 --- a/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml +++ b/yardstick/tests/unit/benchmark/core/no_constraint_no_args_scenario_sample.yaml diff --git a/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml b/yardstick/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml index ced13f19e..ced13f19e 100644 --- a/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml +++ b/yardstick/tests/unit/benchmark/core/no_constraint_with_args_scenario_sample.yaml diff --git a/tests/unit/benchmark/core/test_plugin.py b/yardstick/tests/unit/benchmark/core/test_plugin.py index f9c076159..1d6e80574 100644 --- a/tests/unit/benchmark/core/test_plugin.py +++ b/yardstick/tests/unit/benchmark/core/test_plugin.py @@ -29,7 +29,7 @@ class Arg(object): # self.input_file = ('plugin/sample_config.yaml',) self.input_file = [ os.path.join(os.path.abspath( - dirname(dirname(dirname(dirname(dirname(__file__)))))), + dirname(dirname(dirname(dirname(dirname(dirname(__file__))))))), 'plugin/sample_config.yaml')] diff --git a/tests/unit/benchmark/core/test_report.py b/yardstick/tests/unit/benchmark/core/test_report.py index 69546928c..3d9a503b6 100644 --- a/tests/unit/benchmark/core/test_report.py +++ b/yardstick/tests/unit/benchmark/core/test_report.py @@ -55,10 +55,12 @@ class ReportTestCase(unittest.TestCase): self.assertEqual(1, mock_tasks.call_count) self.assertEqual(1, mock_keys.call_count) + # pylint: disable=deprecated-method def test_invalid_yaml_name(self): self.assertRaisesRegexp(ValueError, "yaml*", self.rep._validate, 'F@KE_NAME', FAKE_TASK_ID) + # pylint: disable=deprecated-method def test_invalid_task_id(self): self.assertRaisesRegexp(ValueError, "task*", self.rep._validate, FAKE_YAML_NAME, DUMMY_TASK_ID) @@ -68,5 +70,7 @@ class ReportTestCase(unittest.TestCase): mock_query.return_value = [] self.rep.yaml_name = FAKE_YAML_NAME self.rep.task_id = FAKE_TASK_ID + # pylint: disable=deprecated-method self.assertRaisesRegexp(KeyError, "Task ID", self.rep._get_fieldkeys) self.assertRaisesRegexp(KeyError, "Task ID", self.rep._get_tasks) + # pylint: enable=deprecated-method diff --git a/tests/unit/benchmark/core/test_task.py b/yardstick/tests/unit/benchmark/core/test_task.py index bed0bb6d8..3d9a10d88 100644 --- a/tests/unit/benchmark/core/test_task.py +++ b/yardstick/tests/unit/benchmark/core/test_task.py @@ -27,6 +27,10 @@ from yardstick.benchmark.core import task from yardstick.common import constants as consts +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + class TaskTestCase(unittest.TestCase): @mock.patch('yardstick.benchmark.core.task.Context') diff --git a/tests/unit/benchmark/core/test_testcase.py b/yardstick/tests/unit/benchmark/core/test_testcase.py index 1f5aad75e..1f5aad75e 100644 --- a/tests/unit/benchmark/core/test_testcase.py +++ b/yardstick/tests/unit/benchmark/core/test_testcase.py diff --git a/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml b/yardstick/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml index 168d4b01a..168d4b01a 100644 --- a/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml +++ b/yardstick/tests/unit/benchmark/core/with_constraint_no_args_scenario_sample.yaml diff --git a/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml b/yardstick/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml index 299e5de56..299e5de56 100644 --- a/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml +++ b/yardstick/tests/unit/benchmark/core/with_constraint_with_args_scenario_sample.yaml diff --git a/tests/unit/benchmark/runner/__init__.py b/yardstick/tests/unit/benchmark/runner/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/runner/__init__.py +++ b/yardstick/tests/unit/benchmark/runner/__init__.py diff --git a/tests/unit/benchmark/runner/test_base.py b/yardstick/tests/unit/benchmark/runner/test_base.py index f47b88e95..0fdc42347 100644 --- a/tests/unit/benchmark/runner/test_base.py +++ b/yardstick/tests/unit/benchmark/runner/test_base.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. # @@ -9,16 +7,13 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from __future__ import print_function -from __future__ import absolute_import - -import unittest import time -from mock import mock +import mock +import unittest from yardstick.benchmark.runners import base -from yardstick.benchmark.runners.iteration import IterationRunner +from yardstick.benchmark.runners import iteration class ActionTestCase(unittest.TestCase): @@ -44,40 +39,41 @@ class ActionTestCase(unittest.TestCase): class RunnerTestCase(unittest.TestCase): + def setUp(self): + self.runner = iteration.IterationRunner({}) + @mock.patch("yardstick.benchmark.runners.iteration.multiprocessing") - def test_get_output(self, mock_process): - runner = IterationRunner({}) - runner.output_queue.put({'case': 'opnfv_yardstick_tc002'}) - runner.output_queue.put({'criteria': 'PASS'}) + def test_get_output(self, *args): + self.runner.output_queue.put({'case': 'opnfv_yardstick_tc002'}) + self.runner.output_queue.put({'criteria': 'PASS'}) idle_result = { 'case': 'opnfv_yardstick_tc002', 'criteria': 'PASS' } - for retries in range(1000): + for _ in range(1000): time.sleep(0.01) - if not runner.output_queue.empty(): + if not self.runner.output_queue.empty(): break - actual_result = runner.get_output() + actual_result = self.runner.get_output() self.assertEqual(idle_result, actual_result) @mock.patch("yardstick.benchmark.runners.iteration.multiprocessing") - def test_get_result(self, mock_process): - runner = IterationRunner({}) - runner.result_queue.put({'case': 'opnfv_yardstick_tc002'}) - runner.result_queue.put({'criteria': 'PASS'}) + def test_get_result(self, *args): + self.runner.result_queue.put({'case': 'opnfv_yardstick_tc002'}) + self.runner.result_queue.put({'criteria': 'PASS'}) idle_result = [ {'case': 'opnfv_yardstick_tc002'}, {'criteria': 'PASS'} ] - for retries in range(1000): + for _ in range(1000): time.sleep(0.01) - if not runner.result_queue.empty(): + if not self.runner.result_queue.empty(): break - actual_result = runner.get_result() + actual_result = self.runner.get_result() self.assertEqual(idle_result, actual_result) def test__run_benchmark(self): diff --git a/tests/unit/benchmark/runner/test_search.py b/yardstick/tests/unit/benchmark/runner/test_search.py index 8fab5a71f..1bc07448d 100644 --- a/tests/unit/benchmark/runner/test_search.py +++ b/yardstick/tests/unit/benchmark/runner/test_search.py @@ -11,14 +11,13 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# -from __future__ import absolute_import +import time -import unittest import mock +import unittest -from tests.unit import STL_MOCKS +from yardstick.tests.unit import STL_MOCKS STLClient = mock.MagicMock() stl_patch = mock.patch.dict("sys.modules", STL_MOCKS) @@ -40,7 +39,8 @@ class TestSearchRunnerHelper(unittest.TestCase): benchmark = cls() method = getattr(benchmark, 'my_method') - helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted) + helper = SearchRunnerHelper( + cls, 'my_method', scenario_cfg, {}, aborted) with helper.get_benchmark_instance(): helper() @@ -54,22 +54,25 @@ class TestSearchRunnerHelper(unittest.TestCase): 'runner': {}, } - helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted) + helper = SearchRunnerHelper( + cls, 'my_method', scenario_cfg, {}, aborted) with self.assertRaises(RuntimeError): helper() - @mock.patch('yardstick.benchmark.runners.search.time') - def test_is_not_done(self, mock_time): + @mock.patch.object(time, 'sleep') + @mock.patch.object(time, 'time') + def test_is_not_done(self, mock_time, *args): cls = mock.MagicMock() aborted = mock.MagicMock() scenario_cfg = { 'runner': {}, } - mock_time.time.side_effect = range(1000) + mock_time.side_effect = range(1000) - helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted) + helper = SearchRunnerHelper( + cls, 'my_method', scenario_cfg, {}, aborted) index = -1 for index in helper.is_not_done(): @@ -78,8 +81,8 @@ class TestSearchRunnerHelper(unittest.TestCase): self.assertGreaterEqual(index, 10) - @mock.patch('yardstick.benchmark.runners.search.time') - def test_is_not_done_immediate_stop(self, mock_time): + @mock.patch.object(time, 'sleep') + def test_is_not_done_immediate_stop(self, *args): cls = mock.MagicMock() aborted = mock.MagicMock() scenario_cfg = { @@ -88,7 +91,8 @@ class TestSearchRunnerHelper(unittest.TestCase): }, } - helper = SearchRunnerHelper(cls, 'my_method', scenario_cfg, {}, aborted) + helper = SearchRunnerHelper( + cls, 'my_method', scenario_cfg, {}, aborted) index = -1 for index in helper.is_not_done(): @@ -97,6 +101,7 @@ class TestSearchRunnerHelper(unittest.TestCase): self.assertEqual(index, -1) + class TestSearchRunner(unittest.TestCase): def test__worker_run_once(self): diff --git a/tests/unit/benchmark/scenarios/__init__.py b/yardstick/tests/unit/benchmark/scenarios/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/__init__.py diff --git a/tests/unit/benchmark/scenarios/availability/__init__.py b/yardstick/tests/unit/benchmark/scenarios/availability/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/availability/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/__init__.py diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py index cc179602e..f0921c0f6 100644 --- a/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py @@ -20,20 +20,24 @@ from yardstick.benchmark.scenarios.availability.attacker import \ attacker_baremetal +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.subprocess') class ExecuteShellTestCase(unittest.TestCase): def test__fun_execute_shell_command_successful(self, mock_subprocess): cmd = "env" mock_subprocess.check_output.return_value = (0, 'unittest') - exitcode, output = attacker_baremetal._execute_shell_command(cmd) + exitcode, _ = attacker_baremetal._execute_shell_command(cmd) self.assertEqual(exitcode, 0) @mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.LOG') def test__fun_execute_shell_command_fail_cmd_exception(self, mock_log, mock_subprocess): cmd = "env" mock_subprocess.check_output.side_effect = RuntimeError - exitcode, output = attacker_baremetal._execute_shell_command(cmd) + exitcode, _ = attacker_baremetal._execute_shell_command(cmd) self.assertEqual(exitcode, -1) mock_log.error.assert_called_once() diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_general.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_general.py index 612b5a662..612b5a662 100644 --- a/tests/unit/benchmark/scenarios/availability/test_attacker_general.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_general.py diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_process.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_process.py index 0a8e8322a..0a8e8322a 100644 --- a/tests/unit/benchmark/scenarios/availability/test_attacker_process.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_attacker_process.py diff --git a/tests/unit/benchmark/scenarios/availability/test_basemonitor.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_basemonitor.py index 92ae8aa88..9bc04ebf4 100644 --- a/tests/unit/benchmark/scenarios/availability/test_basemonitor.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_basemonitor.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. # @@ -9,19 +7,12 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for -# yardstick.benchmark.scenarios.availability.monitor.monitor_command - -from __future__ import absolute_import import mock import unittest from yardstick.benchmark.scenarios.availability.monitor import basemonitor -@mock.patch( - 'yardstick.benchmark.scenarios.availability.monitor.basemonitor' - '.BaseMonitor') class MonitorMgrTestCase(unittest.TestCase): def setUp(self): @@ -52,19 +43,23 @@ class MonitorMgrTestCase(unittest.TestCase): for mo in self.monitor_list: mo._result = {"outage_time": 10} - def test__MonitorMgr_setup_successful(self, mock_monitor): + @mock.patch.object(basemonitor, 'BaseMonitor') + def test__MonitorMgr_setup_successful(self, *args): instance = basemonitor.MonitorMgr({"nova-api": 10}) instance.init_monitors(self.monitor_configs, None) instance.start_monitors() instance.wait_monitors() - ret = instance.verify_SLA() + # TODO(elfoley): Check the return value + ret = instance.verify_SLA() # pylint: disable=unused-variable - def test_MonitorMgr_getitem(self, mock_monitor): + @mock.patch.object(basemonitor, 'BaseMonitor') + def test_MonitorMgr_getitem(self, *args): monitorMgr = basemonitor.MonitorMgr({"nova-api": 10}) monitorMgr.init_monitors(self.monitor_configs, None) - def test_store_result(self, mock_monitor): + @mock.patch.object(basemonitor, 'BaseMonitor') + def test_store_result(self, *args): expect = {'process_neutron-server_outage_time': 10, 'openstack-router-list_outage_time': 10} result = {} @@ -102,9 +97,7 @@ class BaseMonitorTestCase(unittest.TestCase): ins.run() ins.verify_SLA() - @mock.patch( - 'yardstick.benchmark.scenarios.availability.monitor.basemonitor' - '.multiprocessing') + @mock.patch.object(basemonitor, 'multiprocessing') def test__basemonitor_func_false(self, mock_multiprocess): ins = self.MonitorSimple(self.monitor_cfg, None, {"nova-api": 10}) ins.setup() @@ -112,11 +105,12 @@ class BaseMonitorTestCase(unittest.TestCase): ins.run() ins.verify_SLA() + # TODO(elfoley): fix this test to not throw an error def test__basemonitor_getmonitorcls_successfule(self): cls = None try: cls = basemonitor.BaseMonitor.get_monitor_cls(self.monitor_cfg) - except Exception: + except Exception: # pylint: disable=broad-except pass self.assertIsNone(cls) diff --git a/tests/unit/benchmark/scenarios/availability/test_baseoperation.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_baseoperation.py index 03ec1492b..b7c9f62ff 100644 --- a/tests/unit/benchmark/scenarios/availability/test_baseoperation.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_baseoperation.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2016 Huan Li and others # lihuansse@tongji.edu.cn @@ -9,19 +7,12 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for -# yardstick.benchmark.scenarios.availability.operation.baseoperation - -from __future__ import absolute_import import mock import unittest from yardstick.benchmark.scenarios.availability.operation import baseoperation -@mock.patch( - 'yardstick.benchmark.scenarios.availability.operation.baseoperation' - '.BaseOperation') class OperationMgrTestCase(unittest.TestCase): def setUp(self): @@ -33,17 +24,19 @@ class OperationMgrTestCase(unittest.TestCase): self.operation_configs = [] self.operation_configs.append(config) - def test_all_successful(self, mock_operation): + @mock.patch.object(baseoperation, 'BaseOperation') + def test_all_successful(self, *args): mgr_ins = baseoperation.OperationMgr() mgr_ins.init_operations(self.operation_configs, None) - operation_ins = mgr_ins["service-status"] + _ = mgr_ins["service-status"] mgr_ins.rollback() - def test_getitem_fail(self, mock_operation): + @mock.patch.object(baseoperation, 'BaseOperation') + def test_getitem_fail(self, *args): mgr_ins = baseoperation.OperationMgr() mgr_ins.init_operations(self.operation_configs, None) with self.assertRaises(KeyError): - operation_ins = mgr_ins["operation-not-exist"] + _ = mgr_ins["operation-not-exist"] class TestOperation(baseoperation.BaseOperation): @@ -66,22 +59,21 @@ class BaseOperationTestCase(unittest.TestCase): 'operation_type': 'general-operation', 'key': 'service-status' } + self.base_ins = baseoperation.BaseOperation(self.config, None) def test_all_successful(self): - base_ins = baseoperation.BaseOperation(self.config, None) - base_ins.setup() - base_ins.run() - base_ins.rollback() + self.base_ins.setup() + self.base_ins.run() + self.base_ins.rollback() def test_get_script_fullpath(self): - base_ins = baseoperation.BaseOperation(self.config, None) - base_ins.get_script_fullpath("ha_tools/test.bash") + self.base_ins.get_script_fullpath("ha_tools/test.bash") + # TODO(elfoley): Fix test to check on expected outputs + # pylint: disable=unused-variable def test_get_operation_cls_successful(self): - base_ins = baseoperation.BaseOperation(self.config, None) - operation_ins = base_ins.get_operation_cls("test-operation") + operation_ins = self.base_ins.get_operation_cls("test-operation") def test_get_operation_cls_fail(self): - base_ins = baseoperation.BaseOperation(self.config, None) with self.assertRaises(RuntimeError): - operation_ins = base_ins.get_operation_cls("operation-not-exist") + self.base_ins.get_operation_cls("operation-not-exist") diff --git a/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py index 36ce900fb..ae74d241c 100644 --- a/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_baseresultchecker.py @@ -9,10 +9,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.scenarios.availability.result_checker -# .baseresultchecker - -from __future__ import absolute_import import mock import unittest @@ -20,8 +16,6 @@ from yardstick.benchmark.scenarios.availability.result_checker import \ baseresultchecker -@mock.patch('yardstick.benchmark.scenarios.availability.result_checker' - '.baseresultchecker.BaseResultChecker') class ResultCheckerMgrTestCase(unittest.TestCase): def setUp(self): @@ -33,21 +27,27 @@ class ResultCheckerMgrTestCase(unittest.TestCase): self.checker_configs = [] self.checker_configs.append(config) - def test_ResultCheckerMgr_setup_successful(self, mock_basechacer): - mgr_ins = baseresultchecker.ResultCheckerMgr() - mgr_ins.init_ResultChecker(self.checker_configs, None) - mgr_ins.verify() + self.mgr_ins = baseresultchecker.ResultCheckerMgr() + + self._mock_basechecker = mock.patch.object(baseresultchecker, + 'BaseResultChecker') + self.mock_basechecker = self._mock_basechecker.start() + self.addCleanup(self._stop_mock) + + def _stop_mock(self): + self._mock_basechecker.stop() + + def test_ResultCheckerMgr_setup_successful(self): + self.mgr_ins.verify() - def test_getitem_succeessful(self, mock_basechacer): - mgr_ins = baseresultchecker.ResultCheckerMgr() - mgr_ins.init_ResultChecker(self.checker_configs, None) - checker_ins = mgr_ins["process-checker"] + def test_getitem_succeessful(self): + self.mgr_ins.init_ResultChecker(self.checker_configs, None) + _ = self.mgr_ins["process-checker"] - def test_getitem_fail(self, mock_basechacer): - mgr_ins = baseresultchecker.ResultCheckerMgr() - mgr_ins.init_ResultChecker(self.checker_configs, None) + def test_getitem_fail(self): + self.mgr_ins.init_ResultChecker(self.checker_configs, None) with self.assertRaises(KeyError): - checker_ins = mgr_ins["checker-not-exist"] + _ = self.mgr_ins["checker-not-exist"] class BaseResultCheckerTestCase(unittest.TestCase): @@ -66,22 +66,20 @@ class BaseResultCheckerTestCase(unittest.TestCase): 'checker_type': 'general-result-checker', 'key': 'process-checker' } + self.ins = baseresultchecker.BaseResultChecker(self.checker_cfg, None) def test_baseresultchecker_setup_verify_successful(self): - ins = baseresultchecker.BaseResultChecker(self.checker_cfg, None) - ins.setup() - ins.verify() + self.ins.setup() + self.ins.verify() def test_baseresultchecker_verfiy_pass(self): - ins = baseresultchecker.BaseResultChecker(self.checker_cfg, None) - ins.setup() - ins.actualResult = True - ins.expectedResult = True - ins.verify() + self.ins.setup() + self.ins.actualResult = True + self.ins.expectedResult = True + self.ins.verify() def test_get_script_fullpath(self): - ins = baseresultchecker.BaseResultChecker(self.checker_cfg, None) - path = ins.get_script_fullpath("test.bash") + self.ins.get_script_fullpath("test.bash") def test_get_resultchecker_cls_successful(self): baseresultchecker.BaseResultChecker.get_resultchecker_cls( diff --git a/tests/unit/benchmark/scenarios/availability/test_director.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_director.py index d01a60e2d..72ce7b0d5 100644 --- a/tests/unit/benchmark/scenarios/availability/test_director.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_director.py @@ -18,6 +18,10 @@ import unittest from yardstick.benchmark.scenarios.availability.director import Director +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.availability.director.basemonitor') @mock.patch('yardstick.benchmark.scenarios.availability.director.baseattacker') @mock.patch( diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_command.py index b84cef23c..1aebcc85b 100644 --- a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_command.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. # @@ -9,36 +7,37 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for -# yardstick.benchmark.scenarios.availability.monitor.monitor_command - -from __future__ import absolute_import import mock import unittest from yardstick.benchmark.scenarios.availability.monitor import monitor_command -@mock.patch('subprocess.check_output') class ExecuteShellTestCase(unittest.TestCase): - def test__fun_execute_shell_command_successful(self, mock_subprocess_check_output): + def setUp(self): + self._mock_subprocess = mock.patch.object(monitor_command, 'subprocess') + self.mock_subprocess = self._mock_subprocess.start() + self.addCleanup(self._stop_mock) + + def _stop_mock(self): + self._mock_subprocess.stop() + + def test__fun_execute_shell_command_successful(self): cmd = "env" - mock_subprocess_check_output.return_value = (0, 'unittest') - exitcode, _ = monitor_command._execute_shell_command(cmd) + self.mock_subprocess.check_output.return_value = (0, 'unittest') + exitcode, _t = 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_check_output): + @mock.patch.object(monitor_command, 'LOG') + def test__fun_execute_shell_command_fail_cmd_exception(self, mock_log): cmd = "env" - mock_subprocess_check_output.side_effect = RuntimeError + self.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('subprocess.check_output') class MonitorOpenstackCmdTestCase(unittest.TestCase): def setUp(self): @@ -54,35 +53,39 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase): 'monitor_time': 1, 'sla': {'max_outage_time': 5} } + self._mock_subprocess = mock.patch.object(monitor_command, 'subprocess') + self.mock_subprocess = self._mock_subprocess.start() + self.addCleanup(self._stop_mock) + + def _stop_mock(self): + self._mock_subprocess.stop() - def test__monitor_command_monitor_func_successful(self, mock_subprocess_check_output): + def test__monitor_command_monitor_func_successful(self): instance = monitor_command.MonitorOpenstackCmd(self.config, None, {"nova-api": 10}) instance.setup() - mock_subprocess_check_output.return_value = (0, 'unittest') + self.mock_subprocess.check_output.return_value = (0, 'unittest') ret = instance.monitor_func() 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_check_output): - mock_subprocess_check_output.return_value = (1, 'unittest') + @mock.patch.object(monitor_command, 'LOG') + def test__monitor_command_monitor_func_failure(self, mock_log): + self.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 + self.mock_subprocess.check_output.side_effect = RuntimeError ret = instance.monitor_func() self.assertFalse(ret) mock_log.error.assert_called_once() instance._result = {"outage_time": 10} instance.verify_SLA() - @mock.patch( - 'yardstick.benchmark.scenarios.availability.monitor.monitor_command' - '.ssh') - def test__monitor_command_ssh_monitor_successful(self, mock_ssh, mock_subprocess_check_output): + @mock.patch.object(monitor_command, 'ssh') + def test__monitor_command_ssh_monitor_successful(self, mock_ssh): - mock_subprocess_check_output.return_value = (0, 'unittest') + self.mock_subprocess.check_output.return_value = (0, 'unittest') self.config["host"] = "node1" instance = monitor_command.MonitorOpenstackCmd( self.config, self.context, {"nova-api": 10}) diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_general.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_general.py index c14f073ec..7022ea678 100644 --- a/tests/unit/benchmark/scenarios/availability/test_monitor_general.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_general.py @@ -18,6 +18,10 @@ import unittest from yardstick.benchmark.scenarios.availability.monitor import monitor_general +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.availability.monitor.' 'monitor_general.ssh') @mock.patch('yardstick.benchmark.scenarios.availability.monitor.' diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py index b59ec6cf1..0d61d9b15 100644 --- a/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_multi.py @@ -17,6 +17,11 @@ import mock import unittest from yardstick.benchmark.scenarios.availability.monitor import monitor_multi + +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.availability.monitor.' 'monitor_general.ssh') @mock.patch('yardstick.benchmark.scenarios.availability.monitor.' @@ -42,7 +47,8 @@ class MultiMonitorServiceTestCase(unittest.TestCase): } def test__monitor_multi_all_successful(self, mock_open, mock_ssh): - ins = monitor_multi.MultiMonitor(self.monitor_cfg, self.context, {"nova-api": 10}) + ins = monitor_multi.MultiMonitor( + self.monitor_cfg, self.context, {"nova-api": 10}) mock_ssh.SSH.from_node().execute.return_value = (0, "running", '') @@ -51,11 +57,11 @@ class MultiMonitorServiceTestCase(unittest.TestCase): ins.verify_SLA() def test__monitor_multi_all_fail(self, mock_open, mock_ssh): - ins = monitor_multi.MultiMonitor(self.monitor_cfg, self.context, {"nova-api": 10}) + ins = monitor_multi.MultiMonitor( + self.monitor_cfg, self.context, {"nova-api": 10}) mock_ssh.SSH.from_node().execute.return_value = (0, "running", '') ins.start_monitor() ins.wait_monitor() ins.verify_SLA() - diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_process.py index 41ce5445e..41ce5445e 100644 --- a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_monitor_process.py diff --git a/tests/unit/benchmark/scenarios/availability/test_operation_general.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_operation_general.py index fb8ccb122..a965f7f64 100644 --- a/tests/unit/benchmark/scenarios/availability/test_operation_general.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_operation_general.py @@ -19,6 +19,10 @@ from yardstick.benchmark.scenarios.availability.operation import \ operation_general +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.availability.operation.' 'operation_general.ssh') @mock.patch('yardstick.benchmark.scenarios.availability.operation.' diff --git a/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py index d036bb0da..234adcb6e 100644 --- a/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_result_checker_general.py @@ -21,6 +21,10 @@ from yardstick.benchmark.scenarios.availability.result_checker import \ result_checker_general +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.availability.result_checker.' 'result_checker_general.ssh') @mock.patch('yardstick.benchmark.scenarios.availability.result_checker.' diff --git a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_scenario_general.py index 244a5e798..45840d569 100644 --- a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_scenario_general.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2016 Huan Li and others # lihuansse@tongji.edu.cn @@ -9,18 +7,11 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.scenarios.availability.scenario_general - -from __future__ import absolute_import import mock import unittest -from yardstick.benchmark.scenarios.availability.scenario_general import \ - ScenarioGeneral - +from yardstick.benchmark.scenarios.availability import scenario_general -@mock.patch( - 'yardstick.benchmark.scenarios.availability.scenario_general.Director') class ScenarioGeneralTestCase(unittest.TestCase): def setUp(self): @@ -44,28 +35,33 @@ class ScenarioGeneralTestCase(unittest.TestCase): 'index': 2}] } } + self.instance = scenario_general.ScenarioGeneral(self.scenario_cfg, None) + + self._mock_director = mock.patch.object(scenario_general, 'Director') + self.mock_director = self._mock_director.start() + self.addCleanup(self._stop_mock) + + def _stop_mock(self): + self._mock_director.stop() - def test_scenario_general_all_successful(self, mock_director): - ins = ScenarioGeneral(self.scenario_cfg, None) - ins.setup() - ins.run({}) - ins.teardown() + def test_scenario_general_all_successful(self): + self.instance.setup() + self.instance.run({}) + self.instance.teardown() - def test_scenario_general_exception(self, mock_director): - ins = ScenarioGeneral(self.scenario_cfg, None) + def test_scenario_general_exception(self): mock_obj = mock.Mock() mock_obj.createActionPlayer.side_effect = KeyError('Wrong') - ins.director = mock_obj - ins.director.data = {} - ins.run({}) - ins.teardown() + self.instance.director = mock_obj + self.instance.director.data = {} + self.instance.run({}) + self.instance.teardown() - def test_scenario_general_case_fail(self, mock_director): - ins = ScenarioGeneral(self.scenario_cfg, None) + def test_scenario_general_case_fail(self): mock_obj = mock.Mock() mock_obj.verify.return_value = False - ins.director = mock_obj - ins.director.data = {} - ins.run({}) - ins.pass_flag = True - ins.teardown() + self.instance.director = mock_obj + self.instance.director.data = {} + self.instance.run({}) + self.instance.pass_flag = True + self.instance.teardown() diff --git a/tests/unit/benchmark/scenarios/availability/test_serviceha.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_serviceha.py index 97d534894..6bb3ec63b 100644 --- a/tests/unit/benchmark/scenarios/availability/test_serviceha.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_serviceha.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. # @@ -9,9 +7,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.scenarios.availability.serviceha - -from __future__ import absolute_import import mock import unittest @@ -48,11 +43,11 @@ class ServicehaTestCase(unittest.TestCase): sla = {"outage_time": 5} self.args = {"options": options, "sla": sla} - @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): + # NOTE(elfoley): This should be split into test_setup and test_run + # NOTE(elfoley): This should explicitly test outcomes and states + @mock.patch.object(serviceha, 'baseattacker') + @mock.patch.object(serviceha, 'basemonitor') + def test__serviceha_setup_run_successful(self, mock_monitor, *args): p = serviceha.ServiceHA(self.args, self.ctx) p.setup() @@ -65,15 +60,15 @@ class ServicehaTestCase(unittest.TestCase): p.setup() self.assertTrue(p.setup_done) -# def test__serviceha_run_sla_error(self, mock_attacker, mock_monitor): -# p = serviceha.ServiceHA(self.args, self.ctx) + # def test__serviceha_run_sla_error(self, mock_attacker, mock_monitor): + # p = serviceha.ServiceHA(self.args, self.ctx) -# p.setup() -# self.assertTrue(p.setup_done) -# -# result = {} -# result["outage_time"] = 10 -# mock_monitor.Monitor().get_result.return_value = result + # p.setup() + # self.assertEqual(p.setup_done, True) + + # result = {} + # result["outage_time"] = 10 + # mock_monitor.Monitor().get_result.return_value = result -# ret = {} -# self.assertRaises(AssertionError, p.run, ret) + # ret = {} + # self.assertRaises(AssertionError, p.run, ret) diff --git a/tests/unit/benchmark/scenarios/availability/test_util.py b/yardstick/tests/unit/benchmark/scenarios/availability/test_util.py index 548efe91b..548efe91b 100644 --- a/tests/unit/benchmark/scenarios/availability/test_util.py +++ b/yardstick/tests/unit/benchmark/scenarios/availability/test_util.py diff --git a/tests/unit/benchmark/scenarios/compute/__init__.py b/yardstick/tests/unit/benchmark/scenarios/compute/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/compute/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/__init__.py diff --git a/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt b/yardstick/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt index e2c79a9b1..e2c79a9b1 100644 --- a/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt +++ b/yardstick/tests/unit/benchmark/scenarios/compute/cachestat_sample_output.txt diff --git a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt b/yardstick/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt index 723e64bcb..723e64bcb 100644 --- a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt +++ b/yardstick/tests/unit/benchmark/scenarios/compute/cpuload_sample_output1.txt diff --git a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt b/yardstick/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt index c66520a27..c66520a27 100644 --- a/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt +++ b/yardstick/tests/unit/benchmark/scenarios/compute/cpuload_sample_output2.txt diff --git a/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt b/yardstick/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt index 1793e2f10..1793e2f10 100644 --- a/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt +++ b/yardstick/tests/unit/benchmark/scenarios/compute/memload_sample_output.txt diff --git a/tests/unit/benchmark/scenarios/compute/test_cachestat.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_cachestat.py index b0ddfc6b4..b0ddfc6b4 100644 --- a/tests/unit/benchmark/scenarios/compute/test_cachestat.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_cachestat.py diff --git a/tests/unit/benchmark/scenarios/compute/test_computecapacity.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_computecapacity.py index 7b9a5ad4a..7b9a5ad4a 100644 --- a/tests/unit/benchmark/scenarios/compute/test_computecapacity.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_computecapacity.py diff --git a/tests/unit/benchmark/scenarios/compute/test_cpuload.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_cpuload.py index 840ac7885..840ac7885 100644 --- a/tests/unit/benchmark/scenarios/compute/test_cpuload.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_cpuload.py diff --git a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_cyclictest.py index 51ffd2488..51ffd2488 100644 --- a/tests/unit/benchmark/scenarios/compute/test_cyclictest.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_cyclictest.py diff --git a/tests/unit/benchmark/scenarios/compute/test_lmbench.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_lmbench.py index 65939c6ba..b3152d12c 100644 --- a/tests/unit/benchmark/scenarios/compute/test_lmbench.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_lmbench.py @@ -21,6 +21,10 @@ from oslo_serialization import jsonutils from yardstick.benchmark.scenarios.compute import lmbench +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.compute.lmbench.ssh') class LmbenchTestCase(unittest.TestCase): diff --git a/tests/unit/benchmark/scenarios/compute/test_memload.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_memload.py index ebae9993d..ebae9993d 100644 --- a/tests/unit/benchmark/scenarios/compute/test_memload.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_memload.py diff --git a/tests/unit/benchmark/scenarios/compute/test_plugintest.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_plugintest.py index 680f6ad65..680f6ad65 100644 --- a/tests/unit/benchmark/scenarios/compute/test_plugintest.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_plugintest.py diff --git a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py index fb55b809f..26a26cdf7 100644 --- a/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_qemumigrate.py @@ -162,5 +162,6 @@ class QemuMigrateTestCase(unittest.TestCase): def main(): unittest.main() + if __name__ == '__main__': main() diff --git a/tests/unit/benchmark/scenarios/compute/test_ramspeed.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_ramspeed.py index 4f71fbb36..4f71fbb36 100644 --- a/tests/unit/benchmark/scenarios/compute/test_ramspeed.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_ramspeed.py diff --git a/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py index 40423b9da..74612d7b6 100644 --- a/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_spec_cpu.py @@ -17,7 +17,6 @@ import unittest import mock -from yardstick.common import utils from yardstick.benchmark.scenarios.compute import spec_cpu @@ -39,7 +38,6 @@ class SpecCPUTestCase(unittest.TestCase): options = { "SPECint_benchmark": "perlbench", - "runspec_tune": "all", "output_format": "all", "runspec_iterations": "1", "runspec_tune": "base", @@ -63,7 +61,6 @@ class SpecCPUTestCase(unittest.TestCase): args = {"options": options} s = spec_cpu.SpecCPU(args, self.ctx) - sample_output = '' mock_ssh.SSH.from_node().execute.return_value = (0, '', '') s.run(self.result) expected_result = {} @@ -79,8 +76,10 @@ class SpecCPUTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR') self.assertRaises(RuntimeError, s.run, self.result) + def main(): unittest.main() + if __name__ == '__main__': main() diff --git a/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py index c428e1fb8..c428e1fb8 100644 --- a/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_spec_cpu_for_vm.py diff --git a/tests/unit/benchmark/scenarios/compute/test_unixbench.py b/yardstick/tests/unit/benchmark/scenarios/compute/test_unixbench.py index fec355b45..fec355b45 100644 --- a/tests/unit/benchmark/scenarios/compute/test_unixbench.py +++ b/yardstick/tests/unit/benchmark/scenarios/compute/test_unixbench.py diff --git a/tests/unit/benchmark/scenarios/dummy/__init__.py b/yardstick/tests/unit/benchmark/scenarios/dummy/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/dummy/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/dummy/__init__.py diff --git a/tests/unit/benchmark/scenarios/dummy/test_dummy.py b/yardstick/tests/unit/benchmark/scenarios/dummy/test_dummy.py index bc5131806..bc5131806 100644 --- a/tests/unit/benchmark/scenarios/dummy/test_dummy.py +++ b/yardstick/tests/unit/benchmark/scenarios/dummy/test_dummy.py diff --git a/tests/unit/benchmark/scenarios/lib/__init__.py b/yardstick/tests/unit/benchmark/scenarios/lib/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/lib/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/__init__.py diff --git a/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py index bda07f723..bda07f723 100644 --- a/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_add_memory_load.py diff --git a/tests/unit/benchmark/scenarios/lib/test_attach_volume.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_attach_volume.py index e69924072..25b911d5e 100644 --- a/tests/unit/benchmark/scenarios/lib/test_attach_volume.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_attach_volume.py @@ -17,14 +17,15 @@ class AttachVolumeTestCase(unittest.TestCase): @mock.patch('yardstick.common.openstack_utils.attach_server_volume') def test_attach_volume(self, mock_attach_server_volume): options = { - 'volume_id': '123-456-000', - 'server_id': '000-123-456' + 'volume_id': '123-456-000', + 'server_id': '000-123-456' } args = {"options": options} obj = AttachVolume(args, {}) obj.run({}) self.assertTrue(mock_attach_server_volume.called) + def main(): unittest.main() diff --git a/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py index 1fb2f89ca..7188c29d5 100644 --- a/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_check_connectivity.py @@ -30,7 +30,7 @@ class CheckConnectivityTestCase(unittest.TestCase): 'target': { 'ipaddr': '172.16.0.138' } - } + } @mock.patch('yardstick.benchmark.scenarios.lib.check_connectivity.ssh') def test_check_connectivity(self, mock_ssh): @@ -43,18 +43,18 @@ class CheckConnectivityTestCase(unittest.TestCase): 'ssh_port': '22', 'ssh_timeout': 600, 'ping_parameter': "-s 2048" - }, + }, 'sla': {'status': 'True', 'action': 'assert'} } - result = {} + # TODO(elfoley): Properly check the outputs + result = {} # pylint: disable=unused-variable obj = check_connectivity.CheckConnectivity(args, {}) obj.setup() mock_ssh.SSH.execute.return_value = (0, '100', '') - @mock.patch('yardstick.benchmark.scenarios.lib.check_connectivity.ssh') def test_check_connectivity_key(self, mock_ssh): @@ -64,18 +64,20 @@ class CheckConnectivityTestCase(unittest.TestCase): 'ssh_port': '22', 'ssh_timeout': 600, 'ping_parameter': "-s 2048" - }, + }, 'sla': {'status': 'True', 'action': 'assert'} } - result = {} + # TODO(elfoley): Properly check the outputs + result = {} # pylint: disable=unused-variable obj = check_connectivity.CheckConnectivity(args, self.ctx) obj.setup() mock_ssh.SSH.execute.return_value = (0, '100', '') + def main(): unittest.main() diff --git a/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py index 1dd461d41..f983f9c5b 100644 --- a/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_check_numa_info.py @@ -6,17 +6,16 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -import unittest import mock +import unittest from yardstick.benchmark.scenarios.lib.check_numa_info import CheckNumaInfo class CheckNumaInfoTestCase(unittest.TestCase): - @mock.patch( - 'yardstick.benchmark.scenarios.lib.check_numa_info.CheckNumaInfo._check_vm2_status') - def test_check_numa_info(self, mock_check_vm2): + @mock.patch.object(CheckNumaInfo, '_check_vm2_status') + def test_run(self, mock_check_vm2): scenario_cfg = {'info1': {}, 'info2': {}} obj = CheckNumaInfo(scenario_cfg, {}) obj.run({}) diff --git a/tests/unit/benchmark/scenarios/lib/test_check_value.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_check_value.py index 21e83f830..5a40e7d8f 100644 --- a/tests/unit/benchmark/scenarios/lib/test_check_value.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_check_value.py @@ -10,33 +10,29 @@ import unittest from yardstick.benchmark.scenarios.lib.check_value import CheckValue - class CheckValueTestCase(unittest.TestCase): + def setUp(self): + self.result = {} + def test_check_value_eq(self): scenario_cfg = {'options': {'operator': 'eq', 'value1': 1, 'value2': 2}} obj = CheckValue(scenario_cfg, {}) - try: - obj.run({}) - except Exception as e: - self.assertIsInstance(e, AssertionError) + self.assertRaises(AssertionError, obj.run, self.result) + self.assertEqual({}, self.result) def test_check_value_eq_pass(self): scenario_cfg = {'options': {'operator': 'eq', 'value1': 1, 'value2': 1}} obj = CheckValue(scenario_cfg, {}) - try: - obj.run({}) - except Exception as e: - self.assertIsInstance(e, AssertionError) + + obj.run(self.result) + self.assertEqual({}, self.result) def test_check_value_ne(self): scenario_cfg = {'options': {'operator': 'ne', 'value1': 1, 'value2': 1}} obj = CheckValue(scenario_cfg, {}) - try: - obj.run({}) - except Exception as e: - self.assertIsInstance(e, AssertionError) - + self.assertRaises(AssertionError, obj.run, self.result) + self.assertEqual({}, self.result) def main(): unittest.main() diff --git a/tests/unit/benchmark/scenarios/lib/test_create_flavor.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_flavor.py index 036ae952d..036ae952d 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_flavor.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_flavor.py diff --git a/yardstick/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py new file mode 100644 index 000000000..a7286f5da --- /dev/null +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_floating_ip.py @@ -0,0 +1,58 @@ +############################################################################## +# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import unittest +import mock + +from yardstick.benchmark.scenarios.lib import create_floating_ip +import yardstick.common.openstack_utils as op_utils + + +class CreateFloatingIpTestCase(unittest.TestCase): + + def setUp(self): + self._mock_get_network_id = mock.patch.object( + op_utils, 'get_network_id') + self.mock_get_network_id = self._mock_get_network_id.start() + self._mock_create_floating_ip = mock.patch.object( + op_utils, 'create_floating_ip') + self.mock_create_floating_ip = self._mock_create_floating_ip.start() + self._mock_get_neutron_client = mock.patch.object( + op_utils, 'get_neutron_client') + self.mock_get_neutron_client = self._mock_get_neutron_client.start() + self._mock_get_shade_client = mock.patch.object( + op_utils, 'get_shade_client') + self.mock_get_shade_client = self._mock_get_shade_client.start() + self._mock_log = mock.patch.object(create_floating_ip, 'LOG') + self.mock_log = self._mock_log.start() + + self._fip_obj = create_floating_ip.CreateFloatingIp(mock.ANY, mock.ANY) + self._fip_obj.scenario_cfg = {'output': 'key1\nkey2'} + + self.addCleanup(self._stop_mock) + + def _stop_mock(self): + self._mock_get_network_id.stop() + self._mock_create_floating_ip.stop() + self._mock_get_neutron_client.stop() + self._mock_get_shade_client.stop() + self._mock_log.stop() + + def test_run(self): + self.mock_create_floating_ip.return_value = {'fip_id': 'value1', + 'fip_addr': 'value2'} + output = self._fip_obj.run(mock.ANY) + self.assertDictEqual({'key1': 'value1', 'key2': 'value2'}, output) + + def test_run_no_fip(self): + self.mock_create_floating_ip.return_value = None + output = self._fip_obj.run(mock.ANY) + self.assertIsNone(output) + self.mock_log.error.assert_called_once_with( + 'Creating floating ip failed!') diff --git a/tests/unit/benchmark/scenarios/lib/test_create_image.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_image.py index c213ceba0..b26957979 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_image.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_image.py @@ -9,28 +9,30 @@ import unittest import mock -from yardstick.benchmark.scenarios.lib.create_image import CreateImage - +from yardstick.benchmark.scenarios.lib import create_image +from yardstick.common import openstack_utils +# NOTE(elfoley): There should be more tests here. class CreateImageTestCase(unittest.TestCase): - @mock.patch('yardstick.common.openstack_utils.create_image') - @mock.patch('yardstick.common.openstack_utils.get_glance_client') + @mock.patch.object(openstack_utils, 'create_image') + @mock.patch.object(openstack_utils, 'get_glance_client') def test_create_image(self, mock_get_glance_client, mock_create_image): options = { - 'image_name': 'yardstick_test_image_01', - 'disk_format': 'qcow2', - 'container_format': 'bare', - 'min_disk': '1', - 'min_ram': '512', - 'protected': 'False', - 'tags': '["yardstick automatic test image"]', - 'file_path': '/home/opnfv/images/cirros-0.3.5-x86_64-disk.img' + 'image_name': 'yardstick_test_image_01', + 'disk_format': 'qcow2', + 'container_format': 'bare', + 'min_disk': '1', + 'min_ram': '512', + 'protected': 'False', + 'tags': '["yardstick automatic test image"]', + 'file_path': '/home/opnfv/images/cirros-0.3.5-x86_64-disk.img' } args = {"options": options} - obj = CreateImage(args, {}) + obj = create_image.CreateImage(args, {}) obj.run({}) - self.assertTrue(mock_create_image.called) + mock_create_image.assert_called_once() + mock_get_glance_client.assert_called_once() def main(): diff --git a/tests/unit/benchmark/scenarios/lib/test_create_keypair.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_keypair.py index 4b9b72013..10e351b5e 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_keypair.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_keypair.py @@ -6,26 +6,25 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -import unittest -import mock -from yardstick.benchmark.scenarios.lib.create_keypair import CreateKeypair +import mock +import unittest -PREFIX = "yardstick.benchmark.scenarios.lib.create_keypair" +from yardstick.benchmark.scenarios.lib import create_keypair class CreateKeypairTestCase(unittest.TestCase): - @mock.patch('{}.paramiko'.format(PREFIX)) - @mock.patch('{}.op_utils'.format(PREFIX)) - def test_create_keypair(self, mock_op_utils, mock_paramiko): + @mock.patch.object(create_keypair, 'paramiko') + @mock.patch.object(create_keypair, 'op_utils') + def test_create_keypair(self, mock_op_utils, *args): options = { 'key_name': 'yardstick_key', 'key_path': '/tmp/yardstick_key' } args = {"options": options} - obj = CreateKeypair(args, {}) + obj = create_keypair.CreateKeypair(args, {}) obj.run({}) - self.assertTrue(mock_op_utils.create_keypair.called) + mock_op_utils.create_keypair.assert_called_once() def main(): diff --git a/tests/unit/benchmark/scenarios/lib/test_create_network.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_network.py index 8e7d8b5a1..e0382851f 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_network.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_network.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.create_network import CreateNetwork @@ -19,10 +18,10 @@ class CreateNetworkTestCase(unittest.TestCase): @mock.patch('yardstick.common.openstack_utils.create_neutron_net') def test_create_network(self, mock_get_neutron_client, mock_create_neutron_net): options = { - 'openstack_paras': { - 'name': 'yardstick_net', - 'admin_state_up': 'True' - } + 'openstack_paras': { + 'name': 'yardstick_net', + 'admin_state_up': 'True' + } } args = {"options": options} obj = CreateNetwork(args, {}) diff --git a/tests/unit/benchmark/scenarios/lib/test_create_port.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_port.py index 3b2aa2247..0f15058da 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_port.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_port.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.create_port import CreatePort @@ -18,9 +17,9 @@ class CreatePortTestCase(unittest.TestCase): @mock.patch('yardstick.common.openstack_utils.get_neutron_client') def test_create_port(self, mock_get_neutron_client): options = { - 'openstack_paras': { - 'name': 'yardstick_port' - } + 'openstack_paras': { + 'name': 'yardstick_port' + } } args = {"options": options} obj = CreatePort(args, {}) diff --git a/tests/unit/benchmark/scenarios/lib/test_create_router.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_router.py index b956a3634..8f3914b83 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_router.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_router.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.create_router import CreateRouter @@ -19,10 +18,10 @@ class CreateRouterTestCase(unittest.TestCase): @mock.patch('yardstick.common.openstack_utils.create_neutron_router') def test_create_router(self, mock_get_neutron_client, mock_create_neutron_router): options = { - 'openstack_paras': { - 'admin_state_up': 'True', - 'name': 'yardstick_router' - } + 'openstack_paras': { + 'admin_state_up': 'True', + 'name': 'yardstick_router' + } } args = {"options": options} obj = CreateRouter(args, {}) diff --git a/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py index b962f7f0e..c1c137cda 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_sec_group.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.create_sec_group import CreateSecgroup @@ -19,10 +18,10 @@ class CreateSecGroupTestCase(unittest.TestCase): @mock.patch('yardstick.common.openstack_utils.create_security_group_full') def test_create_sec_group(self, mock_get_neutron_client, mock_create_security_group_full): options = { - 'openstack_paras': { - 'sg_name': 'yardstick_sec_group', - 'description': 'security group for yardstick manual VM' - } + 'openstack_paras': { + 'sg_name': 'yardstick_sec_group', + 'description': 'security group for yardstick manual VM' + } } args = {"options": options} obj = CreateSecgroup(args, {}) diff --git a/tests/unit/benchmark/scenarios/lib/test_create_server.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_server.py index 7c4193132..74003b995 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_server.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_server.py @@ -21,10 +21,10 @@ class CreateServerTestCase(unittest.TestCase): def test_create_server(self, mock_get_nova_client, mock_get_neutron_client, mock_get_glance_client, mock_create_instance_and_wait_for_active): scenario_cfg = { - 'options' : { - 'openstack_paras': 'example' - }, - 'output': 'server' + 'options': { + 'openstack_paras': 'example' + }, + 'output': 'server' } obj = CreateServer(scenario_cfg, {}) obj.run({}) diff --git a/tests/unit/benchmark/scenarios/lib/test_create_subnet.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_subnet.py index 0154755c4..b7f29dfe4 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_subnet.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_subnet.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.create_subnet import CreateSubnet @@ -19,12 +18,12 @@ class CreateSubnetTestCase(unittest.TestCase): @mock.patch('yardstick.common.openstack_utils.create_neutron_subnet') def test_create_subnet(self, mock_get_neutron_client, mock_create_neutron_subnet): options = { - 'openstack_paras': { - 'network_id': '123-123-123', - 'name': 'yardstick_subnet', - 'cidr': '10.10.10.0/24', - 'ip_version': '4' - } + 'openstack_paras': { + 'network_id': '123-123-123', + 'name': 'yardstick_subnet', + 'cidr': '10.10.10.0/24', + 'ip_version': '4' + } } args = {"options": options} obj = CreateSubnet(args, {}) diff --git a/tests/unit/benchmark/scenarios/lib/test_create_volume.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_volume.py index ef2c0ccaf..ca055db2f 100644 --- a/tests/unit/benchmark/scenarios/lib/test_create_volume.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_create_volume.py @@ -6,10 +6,10 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -import unittest import mock +import unittest -import yardstick.benchmark.scenarios.lib.create_volume +from yardstick.benchmark.scenarios.lib import create_volume class CreateVolumeTestCase(unittest.TestCase): @@ -32,10 +32,9 @@ class CreateVolumeTestCase(unittest.TestCase): } } - self.scenario = ( - yardstick.benchmark.scenarios.lib.create_volume.CreateVolume( - scenario_cfg=self.scenario_cfg, - context_cfg={})) + self.scenario = create_volume.CreateVolume( + scenario_cfg=self.scenario_cfg, + context_cfg={}) def _stop_mock(self): self._mock_cinder_client.stop() @@ -50,10 +49,9 @@ class CreateVolumeTestCase(unittest.TestCase): 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={})) + scenario = 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) @@ -75,13 +73,32 @@ class CreateVolumeTestCase(unittest.TestCase): mock_image_id.assert_called_once() mock_create_volume.assert_called_once() - @mock.patch.object( - yardstick.benchmark.scenarios.lib.create_volume.CreateVolume, 'setup') + @mock.patch.object(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() + @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} + scenario = create_volume.CreateVolume(args, {}) + scenario.run() + self.assertTrue(mock_create_volume.called) + self.assertTrue(mock_image_id.called) + self.assertTrue(mock_get_glance_client.called) + self.assertTrue(mock_get_cinder_client.called) + def main(): unittest.main() diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py index 4a91b8939..4a91b8939 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_flavor.py diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py index 7592c8070..df2321292 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_floating_ip.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.delete_floating_ip import DeleteFloatingIp diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_image.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_image.py index 2bbf14d16..9edc2ff1d 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_image.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_image.py @@ -19,7 +19,7 @@ class DeleteImageTestCase(unittest.TestCase): @mock.patch('yardstick.common.openstack_utils.get_glance_client') def test_delete_image(self, mock_get_glance_client, mock_image_id, mock_delete_image): options = { - 'image_name': 'yardstick_test_image_01' + 'image_name': 'yardstick_test_image_01' } args = {"options": options} obj = DeleteImage(args, {}) @@ -28,6 +28,7 @@ class DeleteImageTestCase(unittest.TestCase): self.assertTrue(mock_image_id.called) self.assertTrue(mock_get_glance_client.called) + def main(): unittest.main() diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py index 9663fe9fb..73894a903 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.delete_keypair import DeleteKeypair diff --git a/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_network.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_network.py new file mode 100644 index 000000000..aef99ee94 --- /dev/null +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_network.py @@ -0,0 +1,49 @@ +############################################################################## +# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +from oslo_utils import uuidutils +import unittest +import mock + +import yardstick.common.openstack_utils as op_utils +from yardstick.benchmark.scenarios.lib import delete_network + + +class DeleteNetworkTestCase(unittest.TestCase): + + def setUp(self): + self._mock_delete_neutron_net = mock.patch.object( + op_utils, 'delete_neutron_net') + self.mock_delete_neutron_net = self._mock_delete_neutron_net.start() + self._mock_get_shade_client = mock.patch.object( + op_utils, 'get_shade_client') + self.mock_get_shade_client = self._mock_get_shade_client.start() + self._mock_log = mock.patch.object(delete_network, 'LOG') + self.mock_log = self._mock_log.start() + _uuid = uuidutils.generate_uuid() + self.args = {'options': {'network_id': _uuid}} + self._del_obj = delete_network.DeleteNetwork(self.args, mock.ANY) + + self.addCleanup(self._stop_mock) + + def _stop_mock(self): + self._mock_delete_neutron_net.stop() + self._mock_get_shade_client.stop() + self._mock_log.stop() + + def test_run(self): + self.mock_delete_neutron_net.return_value = True + self.assertTrue(self._del_obj.run({})) + self.mock_log.info.assert_called_once_with( + "Delete network successful!") + + def test_run_fail(self): + self.mock_delete_neutron_net.return_value = False + self.assertFalse(self._del_obj.run({})) + self.mock_log.error.assert_called_once_with("Delete network failed!") diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_port.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_port.py index 77b9c7009..de3179b2d 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_port.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_port.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.delete_port import DeletePort diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_router.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router.py index ab1ad5d35..73cb81278 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_router.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.delete_router import DeleteRouter diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py index 1150dccda..3cfc4ed21 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router_gateway.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.delete_router_gateway import DeleteRouterGateway diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py index 2cc9c9f37..67aff1091 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_router_interface.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.delete_router_interface import DeleteRouterInterface diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_server.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_server.py index 622ead5ac..622ead5ac 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_server.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_server.py diff --git a/tests/unit/benchmark/scenarios/lib/test_delete_volume.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_volume.py index a11d0121b..9438b077a 100644 --- a/tests/unit/benchmark/scenarios/lib/test_delete_volume.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_delete_volume.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.delete_volume import DeleteVolume diff --git a/tests/unit/benchmark/scenarios/lib/test_detach_volume.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_detach_volume.py index 0cffcba15..87af63a55 100644 --- a/tests/unit/benchmark/scenarios/lib/test_detach_volume.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_detach_volume.py @@ -8,7 +8,6 @@ ############################################################################## import unittest import mock -import paramiko from yardstick.benchmark.scenarios.lib.detach_volume import DetachVolume diff --git a/tests/unit/benchmark/scenarios/lib/test_get_flavor.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_flavor.py index bf12e0a32..bf12e0a32 100644 --- a/tests/unit/benchmark/scenarios/lib/test_get_flavor.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_flavor.py diff --git a/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py index f046c92ea..f046c92ea 100644 --- a/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_migrate_target_host.py diff --git a/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py index 680692fdc..50d5238d7 100644 --- a/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_numa_info.py @@ -11,6 +11,11 @@ import mock from yardstick.benchmark.scenarios.lib.get_numa_info import GetNumaInfo + +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + BASE = 'yardstick.benchmark.scenarios.lib.get_numa_info' diff --git a/tests/unit/benchmark/scenarios/lib/test_get_server.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_server.py index aebbf5416..aebbf5416 100644 --- a/tests/unit/benchmark/scenarios/lib/test_get_server.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_server.py diff --git a/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py index 3d20d5439..3d20d5439 100644 --- a/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py +++ b/yardstick/tests/unit/benchmark/scenarios/lib/test_get_server_ip.py diff --git a/tests/unit/benchmark/scenarios/networking/__init__.py b/yardstick/tests/unit/benchmark/scenarios/networking/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/networking/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/__init__.py diff --git a/tests/unit/benchmark/scenarios/networking/imix_voice.yaml b/yardstick/tests/unit/benchmark/scenarios/networking/imix_voice.yaml index b8f8e5358..b8f8e5358 100644 --- a/tests/unit/benchmark/scenarios/networking/imix_voice.yaml +++ b/yardstick/tests/unit/benchmark/scenarios/networking/imix_voice.yaml diff --git a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json b/yardstick/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json index b56009ba1..b56009ba1 100644 --- a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json +++ b/yardstick/tests/unit/benchmark/scenarios/networking/iperf3_sample_output.json diff --git a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json b/yardstick/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json index 8173c8f64..8173c8f64 100644 --- a/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json +++ b/yardstick/tests/unit/benchmark/scenarios/networking/iperf3_sample_output_udp.json diff --git a/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml b/yardstick/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml index f3046f463..f3046f463 100644 --- a/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml +++ b/yardstick/tests/unit/benchmark/scenarios/networking/ipv4_1flow_Packets_vpe.yaml diff --git a/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml b/yardstick/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml index 2123e4705..2123e4705 100644 --- a/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml +++ b/yardstick/tests/unit/benchmark/scenarios/networking/ipv4_throughput_vpe.yaml diff --git a/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json b/yardstick/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json index bba76cfa5..bba76cfa5 100755 --- a/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json +++ b/yardstick/tests/unit/benchmark/scenarios/networking/netperf_sample_output.json diff --git a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt b/yardstick/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt index f90457cb3..f90457cb3 100644 --- a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt +++ b/yardstick/tests/unit/benchmark/scenarios/networking/netutilization_sample_output1.txt diff --git a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt b/yardstick/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt index 417613ec1..417613ec1 100644 --- a/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt +++ b/yardstick/tests/unit/benchmark/scenarios/networking/netutilization_sample_output2.txt diff --git a/tests/unit/benchmark/scenarios/networking/test_iperf3.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_iperf3.py index 4d3745230..4d3745230 100644 --- a/tests/unit/benchmark/scenarios/networking/test_iperf3.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_iperf3.py diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_netperf.py index d82a00931..d82a00931 100755 --- a/tests/unit/benchmark/scenarios/networking/test_netperf.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_netperf.py diff --git a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_netperf_node.py index 8be9bb94d..8be9bb94d 100755 --- a/tests/unit/benchmark/scenarios/networking/test_netperf_node.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_netperf_node.py diff --git a/tests/unit/benchmark/scenarios/networking/test_netutilization.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_netutilization.py index 1227e056e..1227e056e 100644 --- a/tests/unit/benchmark/scenarios/networking/test_netutilization.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_netutilization.py diff --git a/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py index 3e7a3c5ee..3e7a3c5ee 100644 --- a/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_networkcapacity.py diff --git a/tests/unit/benchmark/scenarios/networking/test_nstat.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_nstat.py index 4b58e06c1..7dd5351b1 100644 --- a/tests/unit/benchmark/scenarios/networking/test_nstat.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_nstat.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. # @@ -9,13 +7,8 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.scenarios.networking.nstat.Nstat - -from __future__ import absolute_import - -import unittest - import mock +import unittest from yardstick.benchmark.scenarios.networking import nstat diff --git a/tests/unit/benchmark/scenarios/networking/test_ping.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_ping.py index 06353249a..06353249a 100644 --- a/tests/unit/benchmark/scenarios/networking/test_ping.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_ping.py diff --git a/tests/unit/benchmark/scenarios/networking/test_ping6.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_ping6.py index d2be6f576..d2be6f576 100644 --- a/tests/unit/benchmark/scenarios/networking/test_ping6.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_ping6.py diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen.py index 005b53177..acd9027d3 100644 --- a/tests/unit/benchmark/scenarios/networking/test_pktgen.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2015 Ericsson AB and others. # @@ -9,13 +7,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.scenarios.networking.pktgen.Pktgen - -from __future__ import absolute_import - +import mock import unittest -import mock from oslo_serialization import jsonutils from yardstick.benchmark.scenarios.networking import pktgen @@ -127,9 +121,7 @@ class PktgenTestCase(unittest.TestCase): p.server = mock_ssh.SSH.from_node() p.client = mock_ssh.SSH.from_node() - mock_iptables_result = mock.Mock() - mock_iptables_result.return_value = 149300 - p._iptables_get_result = mock_iptables_result + p._iptables_get_result = mock.Mock(return_value=149300) sample_output = '{"packets_per_second": 9753, "errors": 0, \ "packets_sent": 149776, "packetsize": 60, "flows": 110, "ppm": 3179}' @@ -154,9 +146,7 @@ class PktgenTestCase(unittest.TestCase): p.server = mock_ssh.SSH.from_node() p.client = mock_ssh.SSH.from_node() - mock_iptables_result = mock.Mock() - mock_iptables_result.return_value = 149300 - p._iptables_get_result = mock_iptables_result + p._iptables_get_result = mock.Mock(return_value=149300) sample_output = '{"packets_per_second": 9753, "errors": 0, \ "packets_sent": 149776, "packetsize": 60, "flows": 110, "ppm": 3179}' @@ -181,9 +171,7 @@ class PktgenTestCase(unittest.TestCase): p.server = mock_ssh.SSH.from_node() p.client = mock_ssh.SSH.from_node() - mock_iptables_result = mock.Mock() - mock_iptables_result.return_value = 149300 - p._iptables_get_result = mock_iptables_result + p._iptables_get_result = mock.Mock(return_value=149300) sample_output = '{"packets_per_second": 9753, "errors": 0, \ "packets_sent": 149776, "packetsize": 60, "flows": 110}' @@ -314,13 +302,8 @@ class PktgenTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, '4', '') - mock_result1 = mock.Mock() - mock_result1.return_value = 1 - p._get_usable_queue_number = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = 4 - p._get_available_queue_number = mock_result2 + p._get_usable_queue_number = mock.Mock(return_value=1) + p._get_available_queue_number = mock.Mock(return_value=4) p.queue_number = p._enable_ovs_multiqueue() self.assertEqual(p.queue_number, 4) @@ -335,13 +318,8 @@ class PktgenTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, '1', '') - mock_result1 = mock.Mock() - mock_result1.return_value = 1 - p._get_usable_queue_number = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = 1 - p._get_available_queue_number = mock_result2 + p._get_usable_queue_number = mock.Mock(return_value=1) + p._get_available_queue_number = mock.Mock(return_value=1) p.queue_number = p._enable_ovs_multiqueue() self.assertEqual(p.queue_number, 1) @@ -356,13 +334,8 @@ class PktgenTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (1, '', '') - mock_result1 = mock.Mock() - mock_result1.return_value = 1 - p._get_usable_queue_number = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = 4 - p._get_available_queue_number = mock_result2 + p._get_usable_queue_number = mock.Mock(return_value=1) + p._get_available_queue_number = mock.Mock(return_value=4) self.assertRaises(RuntimeError, p._enable_ovs_multiqueue) @@ -536,21 +509,10 @@ class PktgenTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, '4', '') - mock_result1 = mock.Mock() - mock_result1.return_value = False - p._is_irqbalance_disabled = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = "virtio_net" - p._get_vnic_driver_name = mock_result2 - - mock_result3 = mock.Mock() - mock_result3.return_value = 1 - p._get_usable_queue_number = mock_result3 - - mock_result4 = mock.Mock() - mock_result4.return_value = 4 - p._get_available_queue_number = mock_result4 + p._is_irqbalance_disabled = mock.Mock(return_value=False) + p._get_vnic_driver_name = mock.Mock(return_value="virtio_net") + p._get_usable_queue_number = mock.Mock(return_value=1) + p._get_available_queue_number = mock.Mock(return_value=4) p.multiqueue_setup() @@ -566,21 +528,10 @@ class PktgenTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, '1', '') - mock_result1 = mock.Mock() - mock_result1.return_value = False - p._is_irqbalance_disabled = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = "virtio_net" - p._get_vnic_driver_name = mock_result2 - - mock_result3 = mock.Mock() - mock_result3.return_value = 1 - p._get_usable_queue_number = mock_result3 - - mock_result4 = mock.Mock() - mock_result4.return_value = 1 - p._get_available_queue_number = mock_result4 + p._is_irqbalance_disabled = mock.Mock(return_value=False) + p._get_vnic_driver_name = mock.Mock(return_value="virtio_net") + p._get_usable_queue_number = mock.Mock(return_value=1) + p._get_available_queue_number = mock.Mock(return_value=1) p.multiqueue_setup() @@ -596,13 +547,8 @@ class PktgenTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, '2', '') - mock_result1 = mock.Mock() - mock_result1.return_value = False - p._is_irqbalance_disabled = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = "ixgbevf" - p._get_vnic_driver_name = mock_result2 + p._is_irqbalance_disabled = mock.Mock(return_value=False) + p._get_vnic_driver_name = mock.Mock(return_value="ixgbevf") p.multiqueue_setup() @@ -618,13 +564,8 @@ class PktgenTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (0, '1', '') - mock_result1 = mock.Mock() - mock_result1.return_value = False - p._is_irqbalance_disabled = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = "ixgbevf" - p._get_vnic_driver_name = mock_result2 + p._is_irqbalance_disabled = mock.Mock(return_value=False) + p._get_vnic_driver_name = mock.Mock(return_value="ixgbevf") p.multiqueue_setup() @@ -677,28 +618,12 @@ class PktgenTestCase(unittest.TestCase): p.server = mock_ssh.SSH.from_node() p.client = mock_ssh.SSH.from_node() - mock_result = mock.Mock() - mock_result.return_value = "virtio_net" - p._get_vnic_driver_name = mock_result - - mock_result1 = mock.Mock() - mock_result1.return_value = 1 - p._get_usable_queue_number = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = 4 - p._get_available_queue_number = mock_result2 - - mock_result3 = mock.Mock() - mock_result3.return_value = 4 - p._enable_ovs_multiqueue = mock_result3 - - mock_result4 = mock.Mock() - p._setup_irqmapping_ovs = mock_result4 - - mock_iptables_result = mock.Mock() - mock_iptables_result.return_value = 149300 - p._iptables_get_result = mock_iptables_result + p._get_vnic_driver_name = mock.Mock(return_value="virtio_net") + p._get_usable_queue_number = mock.Mock(return_value=1) + p._get_available_queue_number = mock.Mock(return_value=4) + p._enable_ovs_multiqueue = mock.Mock(return_value=4) + p._setup_irqmapping_ovs = mock.Mock() + p._iptables_get_result = mock.Mock(return_value=149300) sample_output = '{"packets_per_second": 9753, "errors": 0, \ "packets_sent": 149300, "flows": 110, "ppm": 0}' @@ -726,20 +651,10 @@ class PktgenTestCase(unittest.TestCase): p.server = mock_ssh.SSH.from_node() p.client = mock_ssh.SSH.from_node() - mock_result1 = mock.Mock() - mock_result1.return_value = "ixgbevf" - p._get_vnic_driver_name = mock_result1 - - mock_result2 = mock.Mock() - mock_result2.return_value = 2 - p._get_sriov_queue_number = mock_result2 - - mock_result3 = mock.Mock() - p._setup_irqmapping_sriov = mock_result3 - - mock_iptables_result = mock.Mock() - mock_iptables_result.return_value = 149300 - p._iptables_get_result = mock_iptables_result + p._get_vnic_driver_name = mock.Mock(return_value="ixgbevf") + p._get_sriov_queue_number = mock.Mock(return_value=2) + p._setup_irqmapping_sriov = mock.Mock() + p._iptables_get_result = mock.Mock(return_value=149300) sample_output = '{"packets_per_second": 9753, "errors": 0, \ "packets_sent": 149300, "flows": 110, "ppm": 0}' diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py index c9eec4b94..99399abdc 100644 --- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2015 ZTE and others. # @@ -9,12 +7,8 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.benchmark.scenarios.networking.pktgen.Pktgen - -from __future__ import absolute_import -import unittest - import mock +import unittest import yardstick.common.utils as utils from yardstick.benchmark.scenarios.networking import pktgen_dpdk diff --git a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py index c2e35af75..1b12bd507 100644 --- a/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_pktgen_dpdk_throughput.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################## # Copyright (c) 2017 Nokia and others. # @@ -6,7 +7,6 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -#!/usr/bin/env python # Unittest for yardstick.benchmark.scenarios.networking.pktgen.PktgenDPDK @@ -19,6 +19,10 @@ import mock from yardstick.benchmark.scenarios.networking import pktgen_dpdk_throughput +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + @mock.patch('yardstick.benchmark.scenarios.networking.pktgen_dpdk_throughput.ssh') class PktgenDPDKTestCase(unittest.TestCase): diff --git a/tests/unit/benchmark/scenarios/networking/test_sfc.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_sfc.py index 78c0352dd..78c0352dd 100644 --- a/tests/unit/benchmark/scenarios/networking/test_sfc.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_sfc.py diff --git a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py index 016608a21..fb55b5ea0 100644 --- a/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py @@ -26,7 +26,7 @@ import mock from copy import deepcopy -from tests.unit import STL_MOCKS +from yardstick.tests.unit import STL_MOCKS from yardstick.benchmark.scenarios.networking.vnf_generic import \ SshManager, NetworkServiceTestCase, IncorrectConfig, \ open_relative_file @@ -35,6 +35,10 @@ from yardstick.network_services.vnf_generic.vnf.base import \ GenericTrafficGen, GenericVNF +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + COMPLETE_TREX_VNFD = { 'vnfd:vnfd-catalog': { 'vnfd': [ @@ -354,7 +358,7 @@ class TestNetworkServiceTestCase(unittest.TestCase): ssh_mock.execute = \ mock.Mock(return_value=(0, SYS_CLASS_NET + IP_ADDR_SHOW, "")) ssh.from_node.return_value = ssh_mock - for node, node_dict in self.context_cfg["nodes"].items(): + for _, node_dict in self.context_cfg["nodes"].items(): with SshManager(node_dict) as conn: self.assertIsNotNone(conn) @@ -365,7 +369,8 @@ class TestNetworkServiceTestCase(unittest.TestCase): self.scenario_cfg["traffic_options"]["flow"] = \ self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml") result = '152.16.100.2-152.16.100.254' - self.assertEqual(result, self.s._get_ip_flow_range('152.16.100.2-152.16.100.254')) + self.assertEqual(result, self.s._get_ip_flow_range( + '152.16.100.2-152.16.100.254')) def test__get_ip_flow_range(self): self.scenario_cfg["traffic_options"]["flow"] = \ @@ -397,21 +402,19 @@ class TestNetworkServiceTestCase(unittest.TestCase): self.scenario_cfg["options"] = {} self.scenario_cfg['options'] = { 'flow': { - 'src_ip': [ - { - 'tg__1': 'xe0', - }, - ], - 'dst_ip': [ - { - 'tg__1': 'xe1', - }, - ], - 'public_ip': ['1.1.1.1'], + 'src_ip': [ + { + 'tg__1': 'xe0', + }, + ], + 'dst_ip': [ + { + 'tg__1': 'xe1', + }, + ], + 'public_ip': ['1.1.1.1'], }, } - result = {'flow': {'dst_ip0': '152.16.40.2-152.16.40.254', - 'src_ip0': '152.16.100.2-152.16.100.254'}} self.assertEqual({'flow': {}}, self.s._get_traffic_flow()) @@ -461,8 +464,10 @@ class TestNetworkServiceTestCase(unittest.TestCase): self.s.map_topology_to_infrastructure() nodes = self.context_cfg["nodes"] - self.assertEqual("../../vnf_descriptors/tg_rfc2544_tpl.yaml", nodes['tg__1']['VNF model']) - self.assertEqual("../../vnf_descriptors/vpe_vnf.yaml", nodes['vnf__1']['VNF model']) + self.assertEqual( + "../../vnf_descriptors/tg_rfc2544_tpl.yaml", nodes['tg__1']['VNF model']) + self.assertEqual("../../vnf_descriptors/vpe_vnf.yaml", + nodes['vnf__1']['VNF model']) def test_map_topology_to_infrastructure_insufficient_nodes(self): del self.context_cfg['nodes']['vnf__1'] @@ -499,7 +504,7 @@ class TestNetworkServiceTestCase(unittest.TestCase): del interface['local_mac'] with mock.patch( - "yardstick.benchmark.scenarios.networking.vnf_generic.LOG") as mock_log: + "yardstick.benchmark.scenarios.networking.vnf_generic.LOG"): with self.assertRaises(IncorrectConfig) as raised: self.s._resolve_topology() @@ -514,7 +519,7 @@ class TestNetworkServiceTestCase(unittest.TestCase): self.s.topology["vld"][0]['vnfd-connection-point-ref'][0]) with mock.patch( - "yardstick.benchmark.scenarios.networking.vnf_generic.LOG") as mock_log: + "yardstick.benchmark.scenarios.networking.vnf_generic.LOG"): with self.assertRaises(IncorrectConfig) as raised: self.s._resolve_topology() @@ -525,7 +530,7 @@ class TestNetworkServiceTestCase(unittest.TestCase): self.s.topology["vld"][0]['vnfd-connection-point-ref'][:1] with mock.patch( - "yardstick.benchmark.scenarios.networking.vnf_generic.LOG") as mock_log: + "yardstick.benchmark.scenarios.networking.vnf_generic.LOG"): with self.assertRaises(IncorrectConfig) as raised: self.s._resolve_topology() @@ -590,7 +595,8 @@ class TestNetworkServiceTestCase(unittest.TestCase): tgen.name = "tgen__1" vnf = mock.Mock(autospec=GenericVNF) vnf.runs_traffic = False - vnf.instantiate.side_effect = RuntimeError("error during instantiate") + vnf.instantiate.side_effect = RuntimeError( + "error during instantiate") vnf.terminate = mock.Mock(return_value=True) self.s.vnfs = [tgen, vnf] self.s.traffic_profile = mock.Mock() @@ -616,7 +622,8 @@ class TestNetworkServiceTestCase(unittest.TestCase): def test___get_traffic_imix_exception(self): with mock.patch.dict(self.scenario_cfg["traffic_options"], {'imix': ''}): - self.assertEqual({'imix': {'64B': 100}}, self.s._get_traffic_imix()) + self.assertEqual({'imix': {'64B': 100}}, + self.s._get_traffic_imix()) def test__fill_traffic_profile(self): with mock.patch.dict("sys.modules", STL_MOCKS): @@ -641,7 +648,8 @@ class TestNetworkServiceTestCase(unittest.TestCase): def test_teardown_exception(self): vnf = mock.Mock(autospec=GenericVNF) - vnf.terminate = mock.Mock(side_effect=RuntimeError("error duing terminate")) + vnf.terminate = mock.Mock( + side_effect=RuntimeError("error duing terminate")) vnf.name = str(vnf) self.s.vnfs = [vnf] self.s.traffic_profile = mock.Mock() @@ -737,6 +745,7 @@ class TestNetworkServiceTestCase(unittest.TestCase): NetworkServiceTestCase._probe_missing_values(netdevs, network) assert network['vpci'] == '0000:00:19.0' + # TODO: Split this into several tests, for different IOError sub-types def test_open_relative_path(self): mock_open = mock.mock_open() mock_open_result = mock_open() @@ -747,7 +756,8 @@ class TestNetworkServiceTestCase(unittest.TestCase): # test with mock.patch(module_name, mock_open, create=True): - self.assertEqual(open_relative_file('foo', 'bar'), mock_open_result) + self.assertEqual(open_relative_file( + 'foo', 'bar'), mock_open_result) mock_open_call_count += 1 # one more call expected self.assertEqual(mock_open.call_count, mock_open_call_count) @@ -760,7 +770,8 @@ class TestNetworkServiceTestCase(unittest.TestCase): raise IOError(errno.ENOENT, 'not found') mock_open.side_effect = open_effect - self.assertEqual(open_relative_file('foo', 'bar'), mock_open_result) + self.assertEqual(open_relative_file( + 'foo', 'bar'), mock_open_result) mock_open_call_count += 2 # two more calls expected self.assertEqual(mock_open.call_count, mock_open_call_count) diff --git a/tests/unit/benchmark/scenarios/networking/test_vsperf.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_vsperf.py index be8ac55d0..be8ac55d0 100644 --- a/tests/unit/benchmark/scenarios/networking/test_vsperf.py +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_vsperf.py diff --git a/yardstick/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py b/yardstick/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py new file mode 100644 index 000000000..1923960e9 --- /dev/null +++ b/yardstick/tests/unit/benchmark/scenarios/networking/test_vsperf_dpdk.py @@ -0,0 +1,221 @@ +# Copyright 2017 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import subprocess +import time + +import mock +import unittest + +from yardstick.benchmark.scenarios.networking import vsperf_dpdk + + +class VsperfDPDKTestCase(unittest.TestCase): + + def setUp(self): + self.ctx = { + "host": { + "ip": "10.229.47.137", + "user": "ubuntu", + "password": "ubuntu", + }, + } + self.args = { + 'task_id': "1234-5678", + 'options': { + 'testname': 'pvp_tput', + 'traffic_type': 'rfc2544_throughput', + 'frame_size': '64', + 'test_params': 'TRAFFICGEN_DURATION=30;', + 'trafficgen_port1': 'ens4', + 'trafficgen_port2': 'ens5', + 'conf_file': 'vsperf-yardstick.conf', + 'setup_script': 'setup_yardstick.sh', + 'moongen_helper_file': '~/moongen.py', + 'moongen_host_ip': '10.5.201.151', + 'moongen_port1_mac': '8c:dc:d4:ae:7c:5c', + 'moongen_port2_mac': '8c:dc:d4:ae:7c:5d', + 'trafficgen_port1_nw': 'test2', + 'trafficgen_port2_nw': 'test3', + }, + 'sla': { + 'metrics': 'throughput_rx_fps', + 'throughput_rx_fps': 500000, + 'action': 'monitor', + } + } + + self.scenario = vsperf_dpdk.VsperfDPDK(self.args, self.ctx) + + self._mock_ssh = mock.patch( + 'yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh') + self.mock_ssh = self._mock_ssh.start() + self._mock_subprocess_call = mock.patch.object(subprocess, 'call') + self.mock_subprocess_call = self._mock_subprocess_call.start() + + self.addCleanup(self._cleanup) + + def _cleanup(self): + self._mock_ssh.stop() + self._mock_subprocess_call.stop() + + def test_setup(self): + # setup() specific mocks + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + def test_teardown(self): + # setup() specific mocks + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + self.scenario.teardown() + self.assertFalse(self.scenario.setup_done) + + def test_is_dpdk_setup_no(self): + # setup() specific mocks + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + # is_dpdk_setup() specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '') + + result = self.scenario._is_dpdk_setup() + self.assertFalse(result) + + def test_is_dpdk_setup_yes(self): + # setup() specific mocks + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + # is_dpdk_setup() specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') + + result = self.scenario._is_dpdk_setup() + self.assertTrue(result) + + @mock.patch.object(time, 'sleep') + def test_dpdk_setup_first(self, *args): + # setup() specific mocks + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + # is_dpdk_setup() specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '') + + self.scenario.dpdk_setup() + self.assertFalse(self.scenario._is_dpdk_setup()) + self.assertTrue(self.scenario.dpdk_setup_done) + + @mock.patch.object(time, 'sleep') + def test_dpdk_setup_next(self, *args): + # setup() specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + self.scenario.dpdk_setup() + self.assertTrue(self.scenario._is_dpdk_setup()) + self.assertTrue(self.scenario.dpdk_setup_done) + + @mock.patch.object(time, 'sleep') + def test_dpdk_setup_runtime_error(self, *args): + + # setup specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '') + self.assertTrue(self.scenario.setup_done) + + self.assertRaises(RuntimeError, self.scenario.dpdk_setup) + + @mock.patch.object(subprocess, 'check_output') + @mock.patch('time.sleep') + def test_run_ok(self, *args): + # setup() specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + # run() specific mocks + self.mock_subprocess_call().execute.return_value = None + self.mock_ssh.SSH.from_node().execute.return_value = ( + 0, 'throughput_rx_fps\r\n14797660.000\r\n', '') + + result = {} + self.scenario.run(result) + + self.assertEqual(result['throughput_rx_fps'], '14797660.000') + + def test_run_failed_vsperf_execution(self): + # setup() specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '') + + result = {} + self.assertRaises(RuntimeError, self.scenario.run, result) + + def test_run_falied_csv_report(self): + # setup() specific mocks + self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '') + self.mock_subprocess_call().execute.return_value = None + + self.scenario.setup() + self.assertIsNotNone(self.scenario.client) + self.assertTrue(self.scenario.setup_done) + + # run() specific mocks + self.mock_subprocess_call().execute.return_value = None + self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '') + + result = {} + self.assertRaises(RuntimeError, self.scenario.run, result) + + +def main(): + unittest.main() + + +if __name__ == '__main__': + main() diff --git a/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml b/yardstick/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml index b1641836b..b1641836b 100644 --- a/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml +++ b/yardstick/tests/unit/benchmark/scenarios/networking/tg_trex_tpl.yaml diff --git a/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml b/yardstick/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml index 1ac6c1f89..1ac6c1f89 100644 --- a/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml +++ b/yardstick/tests/unit/benchmark/scenarios/networking/vpe_vnf_topology.yaml diff --git a/tests/unit/benchmark/scenarios/parser/__init__.py b/yardstick/tests/unit/benchmark/scenarios/parser/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/parser/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/parser/__init__.py diff --git a/tests/unit/benchmark/scenarios/parser/test_parser.py b/yardstick/tests/unit/benchmark/scenarios/parser/test_parser.py index ee2bbc07d..ee2bbc07d 100644 --- a/tests/unit/benchmark/scenarios/parser/test_parser.py +++ b/yardstick/tests/unit/benchmark/scenarios/parser/test_parser.py diff --git a/tests/unit/benchmark/scenarios/storage/__init__.py b/yardstick/tests/unit/benchmark/scenarios/storage/__init__.py index e69de29bb..e69de29bb 100644 --- a/tests/unit/benchmark/scenarios/storage/__init__.py +++ b/yardstick/tests/unit/benchmark/scenarios/storage/__init__.py diff --git a/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json b/yardstick/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json index e9f642aba..e9f642aba 100644 --- a/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json +++ b/yardstick/tests/unit/benchmark/scenarios/storage/fio_read_sample_output.json diff --git a/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json b/yardstick/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json index 4c7501818..4c7501818 100644 --- a/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json +++ b/yardstick/tests/unit/benchmark/scenarios/storage/fio_rw_sample_output.json diff --git a/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json b/yardstick/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json index 7c760e8bc..7c760e8bc 100644 --- a/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json +++ b/yardstick/tests/unit/benchmark/scenarios/storage/fio_write_sample_output.json diff --git a/tests/unit/benchmark/scenarios/storage/test_bonnie.py b/yardstick/tests/unit/benchmark/scenarios/storage/test_bonnie.py index b3524e9a7..b98dceae7 100644 --- a/tests/unit/benchmark/scenarios/storage/test_bonnie.py +++ b/yardstick/tests/unit/benchmark/scenarios/storage/test_bonnie.py @@ -17,7 +17,6 @@ import unittest import mock -from yardstick.common import utils from yardstick.benchmark.scenarios.storage import bonnie @@ -67,8 +66,10 @@ class BonnieTestCase(unittest.TestCase): mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR') self.assertRaises(RuntimeError, b.run, self.result) + def main(): unittest.main() + if __name__ == '__main__': main() diff --git a/tests/unit/benchmark/scenarios/storage/test_fio.py b/yardstick/tests/unit/benchmark/scenarios/storage/test_fio.py index 0cffea224..0cffea224 100644 --- a/tests/unit/benchmark/scenarios/storage/test_fio.py +++ b/yardstick/tests/unit/benchmark/scenarios/storage/test_fio.py diff --git a/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py b/yardstick/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py index 095674f72..095674f72 100644 --- a/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py +++ b/yardstick/tests/unit/benchmark/scenarios/storage/test_storagecapacity.py diff --git a/tests/unit/benchmark/scenarios/storage/test_storperf.py b/yardstick/tests/unit/benchmark/scenarios/storage/test_storperf.py index 7b16bb37d..52786d7cb 100644 --- a/tests/unit/benchmark/scenarios/storage/test_storperf.py +++ b/yardstick/tests/unit/benchmark/scenarios/storage/test_storperf.py @@ -21,8 +21,12 @@ from oslo_serialization import jsonutils from yardstick.benchmark.scenarios.storage import storperf +# pylint: disable=unused-argument +# disable this for now because I keep forgetting mock patch arg ordering + + def mocked_requests_config_post(*args, **kwargs): - class MockResponseConfigPost: + class MockResponseConfigPost(object): def __init__(self, json_data, status_code): self.content = json_data @@ -35,7 +39,7 @@ def mocked_requests_config_post(*args, **kwargs): def mocked_requests_config_get(*args, **kwargs): - class MockResponseConfigGet: + class MockResponseConfigGet(object): def __init__(self, json_data, status_code): self.content = json_data @@ -48,7 +52,7 @@ def mocked_requests_config_get(*args, **kwargs): def mocked_requests_job_get(*args, **kwargs): - class MockResponseJobGet: + class MockResponseJobGet(object): def __init__(self, json_data, status_code): self.content = json_data @@ -61,7 +65,7 @@ def mocked_requests_job_get(*args, **kwargs): def mocked_requests_job_post(*args, **kwargs): - class MockResponseJobPost: + class MockResponseJobPost(object): def __init__(self, json_data, status_code): self.content = json_data @@ -72,7 +76,7 @@ def mocked_requests_job_post(*args, **kwargs): def mocked_requests_job_delete(*args, **kwargs): - class MockResponseJobDelete: + class MockResponseJobDelete(object): def __init__(self, json_data, status_code): self.content = json_data @@ -82,7 +86,7 @@ def mocked_requests_job_delete(*args, **kwargs): def mocked_requests_delete(*args, **kwargs): - class MockResponseDelete: + class MockResponseDelete(object): def __init__(self, json_data, status_code): self.json_data = json_data @@ -92,7 +96,7 @@ def mocked_requests_delete(*args, **kwargs): def mocked_requests_delete_failed(*args, **kwargs): - class MockResponseDeleteFailed: + class MockResponseDeleteFailed(object): def __init__(self, json_data, status_code): self.json_data = json_data diff --git a/tests/unit/benchmark/scenarios/test_base.py b/yardstick/tests/unit/benchmark/scenarios/test_base.py index a95e6bc86..a95e6bc86 100644 --- a/tests/unit/benchmark/scenarios/test_base.py +++ b/yardstick/tests/unit/benchmark/scenarios/test_base.py diff --git a/yardstick/tests/unit/common/test_openstack_utils.py b/yardstick/tests/unit/common/test_openstack_utils.py index bf468489e..8a2f5f95b 100644 --- a/yardstick/tests/unit/common/test_openstack_utils.py +++ b/yardstick/tests/unit/common/test_openstack_utils.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - ############################################################################## # Copyright (c) 2016 Huawei Technologies Co.,Ltd and others. # @@ -9,12 +7,11 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Unittest for yardstick.common.openstack_utils - -from __future__ import absolute_import +from oslo_utils import uuidutils import unittest import mock +from shade import exc from yardstick.common import openstack_utils @@ -38,9 +35,51 @@ class GetHeatApiVersionTestCase(unittest.TestCase): self.assertEqual(api_version, expected_result) -def main(): - unittest.main() +class GetNetworkIdTestCase(unittest.TestCase): + + def test_get_network_id(self): + _uuid = uuidutils.generate_uuid() + mock_shade_client = mock.Mock() + mock_shade_client.list_networks = mock.Mock() + mock_shade_client.list_networks.return_value = [{'id': _uuid}] + + output = openstack_utils.get_network_id(mock_shade_client, + 'network_name') + self.assertEqual(_uuid, output) + + def test_get_network_id_no_network(self): + mock_shade_client = mock.Mock() + mock_shade_client.list_networks = mock.Mock() + mock_shade_client.list_networks.return_value = None + + output = openstack_utils.get_network_id(mock_shade_client, + 'network_name') + self.assertEqual(None, output) + + +class DeleteNeutronNetTestCase(unittest.TestCase): + + def setUp(self): + self.mock_shade_client = mock.Mock() + self.mock_shade_client.delete_network = mock.Mock() + + def test_delete_neutron_net(self): + self.mock_shade_client.delete_network.return_value = True + output = openstack_utils.delete_neutron_net(self.mock_shade_client, + 'network_id') + self.assertTrue(output) + def test_delete_neutron_net_fail(self): + self.mock_shade_client.delete_network.return_value = False + output = openstack_utils.delete_neutron_net(self.mock_shade_client, + 'network_id') + self.assertFalse(output) -if __name__ == '__main__': - main() + @mock.patch.object(openstack_utils, 'log') + def test_delete_neutron_net_exception(self, mock_logger): + self.mock_shade_client.delete_network.side_effect = ( + exc.OpenStackCloudException('error message')) + output = openstack_utils.delete_neutron_net(self.mock_shade_client, + 'network_id') + self.assertFalse(output) + mock_logger.error.assert_called_once() diff --git a/yardstick/tests/unit/orchestrator/test_heat.py b/yardstick/tests/unit/orchestrator/test_heat.py index 9164197b8..e0a353812 100644 --- a/yardstick/tests/unit/orchestrator/test_heat.py +++ b/yardstick/tests/unit/orchestrator/test_heat.py @@ -59,7 +59,7 @@ class HeatStackTestCase(unittest.TestCase): with mock.patch.object(tempfile._TemporaryFileWrapper, '__enter__', return_value=mock_tfile): self.heatstack.create(template, heat_parameters, True, 100) - mock_tfile.write.assert_called_once_with(jsonutils.dumps(template)) + mock_tfile.write.assert_called_once_with(jsonutils.dump_as_bytes(template)) mock_tfile.close.assert_called_once() self.mock_stack_create.assert_called_once_with( @@ -89,6 +89,18 @@ class HeatStackTestCase(unittest.TestCase): self.assertFalse(heat._DEPLOYED_STACKS) self.mock_stack_delete.assert_called_once_with(id, wait=True) + def test_delete_bug_in_shade(self): + id = uuidutils.generate_uuid() + self.heatstack._stack = FakeStack( + outputs=mock.Mock(), status=mock.Mock(), id=id) + heat._DEPLOYED_STACKS[id] = self.heatstack._stack + self.mock_stack_delete.side_effect = TypeError() + + ret = self.heatstack.delete(wait=True) + self.assertTrue(ret) + self.assertFalse(heat._DEPLOYED_STACKS) + self.mock_stack_delete.assert_called_once_with(id, wait=True) + class HeatTemplateTestCase(unittest.TestCase): |