Skip to content

Commit c96ab65

Browse files
authored
Merge pull request #6845 from yanglei-rh/LIBVIRTAT-22400
Improve virtual_network provider's public function
2 parents 34e38a7 + 750b657 commit c96ab65

2 files changed

Lines changed: 70 additions & 13 deletions

File tree

provider/virtual_network/netperf_base.py

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import logging
22
import os
33

4-
from virttest import data_dir, error_context, remote, utils_misc
4+
from virttest import data_dir, error_context, remote, utils_misc, utils_net, utils_netperf
55

66
LOG_JOB = logging.getLogger("avocado.test")
77

@@ -147,3 +147,56 @@ def netperf_record(results, filter_list, header=False, base="17", fbase="2"):
147147
record += "%s|" % format_result(results[key], base=base, fbase=fbase)
148148
record = record.rstrip("|")
149149
return record, key_list
150+
151+
152+
def compile_netperf_pkg(params, env, address):
153+
"""
154+
Prepare and compile netperf binaries on the target system
155+
156+
:param params: Test parameters dictionary configs
157+
:param env: Test environment object
158+
:param address: localhost, vm name, or ip address
159+
:return: netserver_path, netperf_path
160+
"""
161+
if address in ("localhost", "127.0.0.1",):
162+
target_ip = utils_net.get_host_ip_address(params)
163+
install_path = params.get("server_path", "/var/tmp")
164+
user = params.get("hostusername", "root")
165+
pwd = params.get("hostpassword", "")
166+
elif address in params.get('vms', '').split():
167+
vm = env.get_vm(address)
168+
vm.verify_alive()
169+
target_ip = vm.get_address()
170+
install_path = params.get("client_path", "/var/tmp")
171+
user = params.get("username", "")
172+
pwd = params.get("password", "")
173+
else:
174+
target_ip = address
175+
install_path = params.get("server_path", "/var/tmp")
176+
user = params.get("remote_username", "")
177+
pwd = params.get("remote_password", "")
178+
179+
netperf_link = params.get("netperf_link")
180+
netperf_src = os.path.join(data_dir.get_deps_dir("netperf"), netperf_link)
181+
182+
LOG_JOB.info(f"Instantiating NetperfServer on {address} (IP: {target_ip})...")
183+
n_server = utils_netperf.NetperfServer(
184+
address=target_ip,
185+
netperf_path=install_path,
186+
md5sum=params.get("pkg_md5sum", ""),
187+
netperf_source=netperf_src,
188+
username=user,
189+
password=pwd,
190+
compile_option="--enable-demo=yes",
191+
install=True
192+
)
193+
194+
nserver_path = n_server.netserver_path
195+
nperf_path = n_server.netperf_path
196+
197+
if n_server.session:
198+
n_server.session.close()
199+
if n_server.package and hasattr(n_server.package, "_release_session"):
200+
n_server.package._release_session()
201+
202+
return nserver_path, nperf_path

provider/virtual_network/network_base.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,8 @@ def cleanup_for_iface(iface_type, params):
433433
libvirt_network.create_or_del_network(network_dict, is_del=True)
434434

435435

436-
def check_throughput(serv_runner, cli_runner, ip_addr, bw, th_type):
436+
def check_throughput(serv_runner, cli_runner, ip_addr, bw, th_type,
437+
netserver_cmd='netserver', netperf_cmd='netperf'):
437438
"""
438439
Check actual thoughput of network using netperf
439440
@@ -442,12 +443,15 @@ def check_throughput(serv_runner, cli_runner, ip_addr, bw, th_type):
442443
:param ip_addr: ip address
443444
:param bw: bandwidth setting
444445
:param th_type: inbound or outbound
446+
:param netserver_cmd: netserver command with path (default: 'netserver')
447+
:param netperf_cmd: netperf command with path (default: 'netperf')
445448
"""
446449

447-
serv_runner('netserver')
448-
netperf_out = cli_runner(f'netperf -H {ip_addr}')
450+
serv_runner(netserver_cmd)
451+
netperf_out = cli_runner(f'{netperf_cmd} -H {ip_addr}')
449452
LOG.debug(netperf_out)
450-
serv_runner('pkill netserver')
453+
netserver_bin = os.path.basename(netserver_cmd.split()[0])
454+
serv_runner(f'pkill {netserver_bin}')
451455

452456
actual_throu = float(netperf_out.strip().splitlines()[-1].split()[-1])
453457
expect_throu = int(bw) * 8 / 1024
@@ -757,7 +761,7 @@ def cancel_if_ovs_bridge(params, test):
757761
:param params: Test parameters dict
758762
:param test: Test object
759763
"""
760-
bridge_name = params.get('netdst', '').split(',')[0]
764+
bridge_name = params.get('netdst', '')
761765

762766
try:
763767
br_backend = utils_net.find_bridge_manager(bridge_name)
@@ -775,14 +779,14 @@ def setup_ovs_bridge_attrs(params, iface_attrs):
775779
:param iface_attrs: Interface attributes dictionary to modify
776780
:return: True if OVS configuration applied, False otherwise
777781
"""
778-
bridge_name = params.get('netdst', '').split(',')[0]
779-
is_ovs_bridge = not isinstance(utils_net.find_bridge_manager(bridge_name), utils_net.Bridge)
780-
781-
if is_ovs_bridge:
782-
# Configure for OVS bridge
782+
netdst = params.get('netdst', '')
783+
br_obj = utils_net.find_bridge_manager(netdst)
784+
if br_obj is None:
785+
raise exceptions.TestError(f"Bridge '{netdst}' does not exist")
786+
if "OpenVSwitch" in br_obj.__class__.__name__:
783787
iface_attrs['type_name'] = 'bridge'
784-
iface_attrs['source'] = {'bridge': bridge_name}
788+
iface_attrs['source'] = {'bridge': netdst}
785789
iface_attrs['virtualport'] = {'type': 'openvswitch'}
786-
LOG.debug(f"Configured OVS bridge: {bridge_name}")
790+
LOG.debug(f"Configured OVS bridge: {netdst}")
787791
return True
788792
return False

0 commit comments

Comments
 (0)