tests/remote: Add test_example.py

This is simple example how to write a simple test case.

modprobe mac80211_hwsim radios=4
run example:
./run-tests.py -d hwsim0 -r hwsim1 -t example

run example with monitors:
./run-tests.py -d hwsim0 -r hwsim1 -t example -m all -m hwsim2

run example with trace record:
./run-tests.py -d hwsim0 -r hwsim1 -t example -T

run example with trace and perf:
./run-tests.py -d hwsim0 -r hwsim1 -t example -T -P

restart hw before test case run:
./run-tests.py -d hwsim0 -r hwsim1 -t example -R

run example verbose
./run-tests.py -d hwsim0 -r hwsim1 -t example -v

For perf/trace you need to write own hw specyfic scripts:
trace_start.sh, trace_stop.sh
perf_start.sh, perf_stop.sh

In any case you will find logs in the logs/current/ directory.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
This commit is contained in:
Janusz Dziedzic 2016-04-29 07:07:36 +02:00 committed by Jouni Malinen
parent a73fa13be2
commit ff9bb8a210

View file

@ -0,0 +1,141 @@
# 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="udp",
global_port = sta.port)
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.logs.append(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.logs.append(dmesg)
ap.get_logs(local_log_dir)
ap.execute(["ifconfig", ap.ifname, " down"])
raise