123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- # Hwsim wrapper
- # 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 traceback
- import wlantest
- import logging
- logger = logging.getLogger()
- 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
|