def check_device(devices, setup_params, dev_name, monitor=False): host = rutils.get_host(devices, dev_name) # simple check if authorized_keys works correctly status, buf = host.execute(["id"]) if status != 0: raise Exception(dev_name + " - ssh communication FAILED: " + buf) rutils.setup_hw_host(host, setup_params) ifaces = re.split('; | |, ', host.ifname) # check interfaces (multi for monitor) for iface in ifaces: status, buf = host.execute(["ifconfig", iface]) if status != 0: raise Exception(dev_name + " ifconfig " + iface + " failed: " + buf) # monitor doesn't need wpa_supplicant/hostapd ... if monitor == True: return status, buf = host.execute(["ls", "-l", setup_params['wpa_supplicant']]) if status != 0: raise Exception(dev_name + " - wpa_supplicant: " + buf) status, buf = host.execute(["ls", "-l", setup_params['hostapd']]) if status != 0: raise Exception(dev_name + " - hostapd: " + buf) status, buf = host.execute(["which", setup_params['iperf']]) if status != 0: raise Exception(dev_name + " - iperf: " + buf) status, buf = host.execute(["which", "tshark"]) if status != 0: logger.debug(dev_name + " - tshark: " + buf)
def show_devices(devices, setup_params): """Show/check available devices""" print("Devices:") for device in devices: host = rutils.get_host(devices, device['name']) # simple check if authorized_keys works correctly status, buf = host.execute(["id"]) if status != 0: print("[" + host.name + "] - ssh communication: FAILED") continue else: print("[" + host.name + "] - ssh communication: OK") # check setup_hw works correctly rutils.setup_hw_host(host, setup_params) # show uname status, buf = host.execute(["uname", "-s", "-n", "-r", "-m", "-o"]) print("\t" + buf) # show ifconfig ifaces = re.split('; | |, ', host.ifname) for iface in ifaces: status, buf = host.execute(["ifconfig", iface]) if status != 0: print("\t" + iface + " failed\n") continue lines = buf.splitlines() for line in lines: print("\t" + line) # check hostapd, wpa_supplicant, iperf exist status, buf = host.execute([setup_params['wpa_supplicant'], "-v"]) if status != 0: print("\t" + setup_params['wpa_supplicant'] + " not find\n") continue lines = buf.splitlines() for line in lines: print("\t" + line) print("") status, buf = host.execute([setup_params['hostapd'], "-v"]) if status != 1: print("\t" + setup_params['hostapd'] + " not find\n") continue lines = buf.splitlines() for line in lines: print("\t" + line) print("") status, buf = host.execute([setup_params['iperf'], "-v"]) if status != 0 and status != 1: print("\t" + setup_params['iperf'] + " not find\n") continue lines = buf.splitlines() for line in lines: print("\t" + line) print("")
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
def run_hwsim_test(devices, setup_params, refs, duts, monitors, hwsim_test): try: ref_hosts = [] dut_hosts = [] dev = [] apdev = [] # get hosts for ref in refs: ref_host = rutils.get_host(devices, ref) ref_hosts.append(ref_host) for dut in duts: dut_host = rutils.get_host(devices, dut) dut_hosts.append(dut_host) # setup log dir local_log_dir = setup_params['local_log_dir'] # setup hw before test rutils.setup_hw(ref_hosts, setup_params) rutils.setup_hw(dut_hosts, setup_params) # run monitors if requested/possible for ref_host in ref_hosts: monitor.add(ref_host, monitors) monitor.run(ref_host, setup_params) for dut_host in dut_hosts: monitor.add(dut_host, monitors) monitor.run(dut_host, setup_params) monitor_hosts = monitor.create(devices, setup_params, refs, duts, monitors) mon = None if len(monitor_hosts) > 0: mon = monitor_hosts[0] wlantest.Wlantest.reset_remote_wlantest() wlantest.Wlantest.register_remote_wlantest(mon, setup_params, monitor) # run hostapd/wpa_supplicant for ref_host in ref_hosts: rutils.run_wpasupplicant(ref_host, setup_params) wpas = WpaSupplicant(hostname=ref_host.host, global_iface="udp", global_port=ref_host.port) wpas.interface_add(ref_host.ifname) dev.append(wpas) for dut_host in dut_hosts: rutils.run_hostapd(dut_host, setup_params) dut_host.dev['bssid'] = rutils.get_mac_addr(dut_host) apdev.append(dut_host.dev) # run hwsim test/currently only 2 params tests if hwsim_test.func_code.co_argcount == 1: hwsim_test(dev) elif hwsim_test.func_code.co_argcount == 2: hwsim_test(dev, apdev) else: raise Exception("more than 2 arguments required") # hostapd/wpa_supplicant cleanup for wpas in dev: wpas.interface_remove(wpas.host.ifname) wpas.terminate() dev = [] # remove monitors for ref_host in ref_hosts: monitor.remove(ref_host) for dut_host in dut_hosts: monitor.remove(dut_host) for ref_host in ref_hosts: ref_host.execute(["killall", "wpa_supplicant"]) ref_host.get_logs(local_log_dir) for dut_host in dut_hosts: dut_host.execute(["killall", "hostapd"]) dut_host.get_logs(local_log_dir) if mon is not None: wlantest.Wlantest.reset_remote_wlantest() mon.get_logs(local_log_dir) return "" except: logger.info(traceback.format_exc()) for wpas in dev: try: wpas.interface_remove(wpas.host.ifname) wpas.terminate() except: pass for ref_host in ref_hosts: monitor.remove(ref_host) for dut_host in dut_hosts: monitor.remove(dut_host) for ref_host in ref_hosts: ref_host.execute(["killall", "wpa_supplicant"]) ref_host.get_logs(local_log_dir) for dut_host in dut_hosts: dut_host.execute(["killall", "hostapd"]) dut_host.get_logs(local_log_dir) if mon is not None: wlantest.Wlantest.reset_remote_wlantest() mon.get_logs(local_log_dir) raise
def run_hwsim_test(devices, setup_params, refs, duts, monitors, hwsim_test): try: ref_hosts = [] dut_hosts = [] dev = [] apdev = [] # get hosts for ref in refs: ref_host = rutils.get_host(devices, ref) ref_hosts.append(ref_host) for dut in duts: dut_host = rutils.get_host(devices, dut) dut_hosts.append(dut_host) # setup log dir local_log_dir = setup_params['local_log_dir'] # setup hw before test rutils.setup_hw(ref_hosts, setup_params) rutils.setup_hw(dut_hosts, setup_params) # run monitors if requested/possible for ref_host in ref_hosts: monitor.add(ref_host, monitors) monitor.run(ref_host, setup_params) for dut_host in dut_hosts: monitor.add(dut_host, monitors) monitor.run(dut_host, setup_params) monitor_hosts = monitor.create(devices, setup_params, refs, duts, monitors) mon = None if len(monitor_hosts) > 0: mon = monitor_hosts[0] wlantest.Wlantest.reset_remote_wlantest() wlantest.Wlantest.register_remote_wlantest(mon, setup_params, monitor) # run hostapd/wpa_supplicant for ref_host in ref_hosts: rutils.run_wpasupplicant(ref_host, setup_params) wpas = WpaSupplicant(hostname=ref_host.host, global_iface="udp", global_port=ref_host.port) wpas.interface_add(ref_host.ifname) dev.append(wpas) for dut_host in dut_hosts: rutils.run_hostapd(dut_host, setup_params) dut_host.dev['bssid'] = rutils.get_mac_addr(dut_host) apdev.append(dut_host.dev) if hwsim_test.__code__.co_argcount == 1: hwsim_test(dev) elif hwsim_test.__code__.co_argcount == 2: hwsim_test(dev, apdev) else: params = {} params['long'] = 1 params['logdir'] = local_log_dir hwsim_test(dev, apdev, params) # hostapd/wpa_supplicant cleanup for wpas in dev: wpas.interface_remove(wpas.host.ifname) wpas.terminate() dev = [] # remove monitors for ref_host in ref_hosts: monitor.remove(ref_host) for dut_host in dut_hosts: monitor.remove(dut_host) for ref_host in ref_hosts: rutils.kill_wpasupplicant(ref_host, setup_params) ref_host.get_logs(local_log_dir) for dut_host in dut_hosts: rutils.kill_hostapd(dut_host, setup_params) dut_host.get_logs(local_log_dir) if mon is not None: wlantest.Wlantest.reset_remote_wlantest() mon.get_logs(local_log_dir) return "" except: logger.info(traceback.format_exc()) for wpas in dev: try: wpas.interface_remove(wpas.host.ifname) wpas.terminate() except: pass for ref_host in ref_hosts: monitor.remove(ref_host) for dut_host in dut_hosts: monitor.remove(dut_host) for ref_host in ref_hosts: rutils.kill_wpasupplicant(ref_host, setup_params) ref_host.get_logs(local_log_dir) for dut_host in dut_hosts: rutils.kill_hostapd(dut_host, setup_params) dut_host.get_logs(local_log_dir) if mon is not None: wlantest.Wlantest.reset_remote_wlantest() mon.get_logs(local_log_dir) raise
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