fragattacks/tests/remote/test_example.py
Jonathan Afek 04fd8ea1ba tests/remote: Use a function to add a log file to a remote host
Instead of accessing the logs list member of the remote host directly,
use a function to add logs to the remote host to be collected after the
test. This enables us to later have different implementation of remote
hosts or logs collection without requiring to have this list as the
implementation.

Signed-off-by: Jonathan Afek <jonathanx.afek@intel.com>
2016-05-28 16:33:48 +03:00

142 lines
4.3 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="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.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