hostapd/tests/remote/test_example.py
Janusz Dziedzic 222d443950 tests: Use remote_cli in remote testing
This allows to use remote wpa_cli/hostapd_cli for:
 - hwsim wrapper
 - example test case

For example,
 modprobe mac80211_hwsim radios=8
 ./run-tests.py -d hwsim0 -d hwsim1 -d hwsim2 -r hwsim3 -r hwsim4 -h ap_wpa2_psk -v

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@gmail.com>
2024-08-03 18:35:10 +03:00

142 lines
4.4 KiB
Python

# Example test case
# Copyright (c) 2016, Tieto Corporation
#
# This software may be distributed under the terms of the BSD license.
# See README for more details.
import remotehost
from wpasupplicant import WpaSupplicant
import hostapd
import config
import rutils
import monitor
import logging
logger = logging.getLogger()
def test_example(devices, setup_params, refs, duts, monitors):
"""TC example - simple connect and ping test"""
try:
sta = None
ap = None
hapd = None
wpas = None
mon = None
# get hosts based on name
sta = rutils.get_host(devices, duts[0])
ap = rutils.get_host(devices, refs[0])
# setup log dir
local_log_dir = setup_params['local_log_dir']
# setup hw before test
rutils.setup_hw([sta, ap], setup_params)
# run traces if requested
rutils.trace_start([sta], setup_params)
# run perf if requested
rutils.perf_start([sta], setup_params)
# run hostapd/wpa_supplicant
rutils.run_wpasupplicant(sta, setup_params)
rutils.run_hostapd(ap, setup_params)
# get ap_params
ap_params = rutils.get_ap_params(channel="1", bw="HT20", country="US",
security="open")
# Add monitors if requested
monitor_hosts = monitor.create(devices, setup_params, refs, duts,
monitors)
if len(monitor_hosts) > 0:
mon = monitor_hosts[0]
monitor.add(sta, monitors)
monitor.add(ap, monitors)
# connect to hostapd/wpa_supplicant UDP CTRL iface
hapd = hostapd.add_ap(ap.dev, ap_params)
freq = hapd.get_status_field("freq")
wpas = WpaSupplicant(hostname=sta.host, global_iface=sta.global_iface,
global_port=sta.port, remote_cli=sta.remote_cli)
wpas.interface_add(sta.ifname)
# setup standalone monitor based on hapd; could be multi interface
# monitor
monitor_param = monitor.get_monitor_params(hapd)
monitor.setup(mon, [monitor_param])
# run monitors
monitor.run(sta, setup_params)
monitor.run(ap, setup_params)
monitor.run(mon, setup_params)
# connect wpa_supplicant to hostapd
wpas.connect(ap_params['ssid'], key_mgmt="NONE", scan_freq=freq)
# run ping test
ap_sta, sta_ap = rutils.check_connectivity(ap, sta, "ipv6")
# remove/destroy monitors
monitor.remove(sta)
monitor.remove(ap)
monitor.destroy(devices, monitor_hosts)
# hostapd/wpa_supplicant cleanup
wpas.interface_remove(sta.ifname)
wpas.terminate()
hapd.close_ctrl()
hostapd.remove_bss(ap.dev)
hostapd.terminate(ap.dev)
# stop perf
rutils.perf_stop([sta], setup_params)
# stop traces
rutils.trace_stop([sta], setup_params)
# get wpa_supplicant/hostapd/tshark logs
sta.get_logs(local_log_dir)
ap.get_logs(local_log_dir)
if mon:
mon.get_logs(local_log_dir)
return "packet_loss: " + ap_sta + ", " + sta_ap
except:
rutils.perf_stop([sta], setup_params)
rutils.trace_stop([sta], setup_params)
if wpas:
try:
wpas.interface_remove(sta.ifname)
wpas.terminate()
except:
pass
if hapd:
try:
hapd.close_ctrl()
hostapd.remove_bss(ap.dev)
hostapd.terminate(ap.dev)
except:
pass
if mon:
monitor.destroy(devices, monitor_hosts)
mon.get_logs(local_log_dir)
if sta:
monitor.remove(sta)
dmesg = setup_params['log_dir'] + setup_params['tc_name'] + "_" + sta.name + "_" + sta.ifname + ".dmesg"
sta.execute(["dmesg", "-c", ">", dmesg])
sta.add_log(dmesg)
sta.get_logs(local_log_dir)
sta.execute(["ifconfig", sta.ifname, "down"])
if ap:
monitor.remove(ap)
dmesg = setup_params['log_dir'] + setup_params['tc_name'] + "_" + ap.name + "_" + ap.ifname + ".dmesg"
ap.execute(["dmesg", "-c", ">", dmesg])
ap.add_log(dmesg)
ap.get_logs(local_log_dir)
ap.execute(["ifconfig", ap.ifname, " down"])
raise