Skip to content

Commit 2cbd5c7

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 2cbd5c7

File tree

4 files changed

+654
-2
lines changed

4 files changed

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