|
@@ -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
|