Skip to content

Commit 2e65857

Browse files
committed
OOadd case for pktgen with burst mode
XXXX-300599:[virtual network][virtio-net-pci] pktgen burst mode tests Signed-off-by: nanli <[email protected]>
1 parent 1d089a1 commit 2e65857

File tree

4 files changed

+646
-2
lines changed

4 files changed

+646
-2
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
- virtual_network.qemu_test.pktgen_burst_mode_test:
2+
type = pktgen_burst_mode_test
3+
start_vm = no
4+
category = "tx"
5+
pktgen_script = "pktgen_sample03_burst_single_flow"
6+
pktgen_threads = 1
7+
pkt_size = 64
8+
burst = 3
9+
pktgen_test_timeout = 30
10+
record_list = "pkt_size run_threads burst mpps"
11+
guest_ver_cmd = "uname -r"
12+
kvm_ver_chk_cmd = "rpm -qa qemu-kvm-rhev && rpm -qa qemu-kvm"
13+
queues = 8
14+
test_vm = no
15+
disable_iptables_rules_cmd = "iptables -F ; nft flush ruleset"
16+
variants:
17+
- ethernet_multi_queues:
18+
iface_type = "ethernet"
19+
pre_tap = "yes"
20+
iface_list = [{'type_name': '${iface_type}', 'model': 'virtio', 'target': {'dev': tap_name, 'managed': 'no'},'driver': {'driver_attr': {'queues': '${queues}', 'name': 'vhost'}}}]
21+
tap_flag = "multi_queue"
22+
- linux_bridge:
23+
iface_type = "bridge"
24+
iface_list = [{'type_name': '${iface_type}', 'model': 'virtio', 'source': {'bridge': bridge_name}, 'driver': {'driver_attr': {'queues': '${queues}', 'name': 'vhost'}}}]
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import os
2+
3+
from avocado.utils import process
4+
5+
from virttest import utils_misc
6+
from virttest import utils_net
7+
from virttest import virsh
8+
from virttest.libvirt_xml import vm_xml
9+
10+
from provider.virtual_network import pktgen_utils
11+
from provider.virtual_network import network_base
12+
13+
14+
def write_in_result_file(test, params):
15+
"""
16+
Write some qemu, kvm version info and write them into pktgen test result.
17+
18+
:params, params
19+
:return result_file, pktgen test result file.
20+
"""
21+
kvm_ver_chk_cmd = params.get("kvm_ver_chk_cmd")
22+
23+
result_path = utils_misc.get_path(test.resultsdir, "pktgen_perf.RHS")
24+
result_file = open(result_path, "w")
25+
kvm_ver = process.system_output(kvm_ver_chk_cmd, shell=True).decode()
26+
host_ver = os.uname()[2]
27+
result_file.write("### kvm-userspace-ver : %s\n" % kvm_ver)
28+
result_file.write("### kvm_version : %s\n" % host_ver)
29+
30+
return result_file
31+
32+
33+
def run(test, params, env):
34+
"""
35+
Pktgen tests with burst mode.
36+
"""
37+
def setup_test():
38+
"""
39+
Prepare the test environment with required guest type and interface.
40+
41+
"""
42+
utils_net.create_linux_bridge_tmux(bridge_name, host_iface)
43+
if params.get_boolean("pre_tap") :
44+
network_base.create_tap(tap_name, bridge_name, 'root', flag=tap_flag)
45+
46+
test.log.info("TEST_SETUP: guest and interface.")
47+
network_base.prepare_single_vm(params, vm_name, iface_list)
48+
49+
50+
def run_test():
51+
"""
52+
Run pktgen in burst mode for vm.
53+
"""
54+
result_file = write_in_result_file(test, params)
55+
56+
if disable_iptables_rules_cmd:
57+
process.system(disable_iptables_rules_cmd, shell=True)
58+
59+
pktgen_runner = pktgen_utils.PktgenRunner()
60+
if pktgen_runner.is_version_lt_rhel(process.getoutput("uname -r"), 7):
61+
if host_ver.count("64k"):
62+
pktgen_runner.install_package(host_ver, pagesize="64k")
63+
else:
64+
pktgen_runner.install_package(host_ver)
65+
66+
test.log.debug("TEST_STEP: Test with guest: %s.", vm_name)
67+
env.create_vm(vm_type='libvirt', target="", name=vm_name, params=params, bindir=test.bindir)
68+
vm = env.get_vm(vm_name)
69+
vm.start()
70+
test.log.debug("Guest xml:%s", vm_xml.VMXML.new_from_dumpxml(vm_name))
71+
72+
test.log.debug("TEST_STEP: Test with guest and host connectivity")
73+
session_serial = vm.wait_for_serial_login(restart_network=True)
74+
mac = vm.get_mac_address()
75+
params.update({
76+
'vm_ping_host': 'pass'}
77+
)
78+
ips = {
79+
'vm_ip': utils_net.get_guest_ip_addr(session_serial, mac),
80+
'host_ip': host_ip
81+
}
82+
network_base.ping_check(params, ips, session_serial, force_ipv4=True)
83+
84+
test.log.debug("TEST_STEP: Install package and Run pktgen in burst mode.")
85+
guest_ver = session_serial.cmd_output(guest_ver_cmd)
86+
result_file.write("### guest-kernel-ver :%s" % guest_ver)
87+
if pktgen_runner.is_version_lt_rhel(session_serial.cmd("uname -r"), 7):
88+
if guest_ver.count("64k"):
89+
pktgen_runner.install_package(
90+
guest_ver.strip(),
91+
pagesize="64k",
92+
vm=vm,
93+
session_serial=session_serial)
94+
else:
95+
pktgen_runner.install_package(
96+
guest_ver.strip(), vm=vm, session_serial=session_serial)
97+
98+
pktgen_utils.run_tests_for_category(
99+
params, result_file, test_vm, vm, session_serial)
100+
101+
test.log.debug("TEST_STEP: Check the guest dmesg without error messages.")
102+
vm.verify_dmesg()
103+
vm.verify_kernel_crash()
104+
105+
virsh.destroy(vm_name)
106+
virsh.undefine(vm_name, options='--nvram')
107+
108+
result_file.close()
109+
110+
def teardown_test():
111+
"""
112+
Clean data.
113+
"""
114+
test.log.debug("TEST_TEARDOWN: Recover the env.")
115+
network_base.delete_tap(tap_name)
116+
utils_net.delete_linux_bridge_tmux(bridge_name, host_iface)
117+
118+
backup_vmxml.sync()
119+
120+
vm_name = params.get("main_vm")
121+
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
122+
backup_vmxml = vmxml.copy()
123+
124+
disable_iptables_rules_cmd = params.get("disable_iptables_rules_cmd")
125+
guest_ver_cmd = params["guest_ver_cmd"]
126+
test_vm = params.get_boolean("test_vm")
127+
host_ver = os.uname()[2]
128+
129+
rand_id = utils_misc.generate_random_string(3)
130+
bridge_name = 'br_' + rand_id
131+
tap_name = 'tap_' + rand_id
132+
host_iface = utils_net.get_default_gateway(iface_name=True, force_dhcp=True, json=True)
133+
host_ip = utils_net.get_ip_address_by_interface(host_iface, ip_ver='ipv4')
134+
135+
iface_list = eval(params.get('iface_list', '{}'))
136+
tap_flag = params.get("tap_flag")
137+
138+
try:
139+
setup_test()
140+
run_test()
141+
142+
finally:
143+
teardown_test()

provider/virtual_network/network_base.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ def prepare_single_vm(params, vm_name, disk_path='', iface_list=[]):
470470
:params disk_path: path of the disk image.
471471
:params iface_list: list of interface for vm.
472472
"""
473-
if vm_name not in virsh.dom_list().stdout_text:
473+
if vm_name not in virsh.dom_list("--all").stdout_text:
474474
params.update(
475475
{"vm_name_bootc": vm_name,
476476
"vm_disk_image_path": disk_path,
@@ -503,7 +503,8 @@ def prepare_vms_with_iface(params, vm_image_path=[], iface_list=[]):
503503
vm_list = []
504504
for image_path in vm_image_path:
505505
guest_version = os.path.basename(image_path)
506-
vm_name = "".join([re.findall("Win|RHEL", guest_version, re.IGNORECASE)[0], "_vm"])
506+
rand_id = utils_misc.generate_random_string(3)
507+
vm_name = "".join([re.findall("Win|RHEL", guest_version, re.IGNORECASE)[0], "_vm"]) + rand_id
507508
LOG.debug("TEST_LOOP: Test '%s' with guest version '%s'.", vm_name, guest_version)
508509

509510
prepare_single_vm(params, vm_name, image_path, iface_list)

0 commit comments

Comments
 (0)