tests: Split run-tests.py logger info into per test case files
[mech_eap.git] / tests / hwsim / test_p2p_autogo.py
1 #!/usr/bin/python
2 #
3 # P2P autonomous GO test cases
4 # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
5 #
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
8
9 import time
10 import subprocess
11 import logging
12 logger = logging.getLogger()
13
14 import hwsim_utils
15 from wlantest import Wlantest
16
17 def autogo(go):
18     logger.info("Start autonomous GO " + go.ifname)
19     res = go.p2p_start_go()
20     logger.debug("res: " + str(res))
21     return res
22
23 def connect_cli(go, client):
24     logger.info("Try to connect the client to the GO")
25     pin = client.wps_read_pin()
26     go.p2p_go_authorize_client(pin)
27     client.p2p_connect_group(go.p2p_dev_addr(), pin, timeout=60)
28     logger.info("Client connected")
29     hwsim_utils.test_connectivity_p2p(go, client)
30
31 def test_autogo(dev):
32     """P2P autonomous GO and client joining group"""
33     autogo(dev[0])
34     connect_cli(dev[0], dev[1])
35     dev[0].remove_group()
36     dev[1].wait_go_ending_session()
37
38 def test_autogo_2cli(dev):
39     """P2P autonomous GO and two clients joining group"""
40     autogo(dev[0])
41     connect_cli(dev[0], dev[1])
42     connect_cli(dev[0], dev[2])
43     hwsim_utils.test_connectivity_p2p(dev[1], dev[2])
44     dev[0].global_request("P2P_REMOVE_CLIENT " + dev[1].p2p_dev_addr())
45     dev[1].wait_go_ending_session()
46     dev[0].remove_group()
47     dev[2].wait_go_ending_session()
48
49 def test_autogo_tdls(dev):
50     """P2P autonomous GO and two clients using TDLS"""
51     wt = Wlantest()
52     go = dev[0]
53     logger.info("Start autonomous GO with fixed parameters " + go.ifname)
54     id = go.add_network()
55     go.set_network_quoted(id, "ssid", "DIRECT-tdls")
56     go.set_network_quoted(id, "psk", "12345678")
57     go.set_network(id, "mode", "3")
58     go.set_network(id, "disabled", "2")
59     res = go.p2p_start_go(persistent=id)
60     logger.debug("res: " + str(res))
61     wt.flush()
62     wt.add_passphrase("12345678")
63     connect_cli(go, dev[1])
64     connect_cli(go, dev[2])
65     hwsim_utils.test_connectivity_p2p(dev[1], dev[2])
66     bssid = dev[0].p2p_interface_addr()
67     addr1 = dev[1].p2p_interface_addr()
68     addr2 = dev[2].p2p_interface_addr()
69     dev[1].tdls_setup(addr2)
70     time.sleep(1)
71     hwsim_utils.test_connectivity_p2p(dev[1], dev[2])
72     conf = wt.get_tdls_counter("setup_conf_ok", bssid, addr1, addr2);
73     if conf == 0:
74         raise Exception("No TDLS Setup Confirm (success) seen")
75     dl = wt.get_tdls_counter("valid_direct_link", bssid, addr1, addr2);
76     if dl == 0:
77         raise Exception("No valid frames through direct link")
78     wt.tdls_clear(bssid, addr1, addr2);
79     dev[1].tdls_teardown(addr2)
80     time.sleep(1)
81     teardown = wt.get_tdls_counter("teardown", bssid, addr1, addr2);
82     if teardown == 0:
83         raise Exception("No TDLS Setup Teardown seen")
84     wt.tdls_clear(bssid, addr1, addr2);
85     hwsim_utils.test_connectivity_p2p(dev[1], dev[2])
86     ap_path = wt.get_tdls_counter("valid_ap_path", bssid, addr1, addr2);
87     if ap_path == 0:
88         raise Exception("No valid frames via AP path")
89     direct_link = wt.get_tdls_counter("valid_direct_link", bssid, addr1, addr2);
90     if direct_link > 0:
91         raise Exception("Unexpected frames through direct link")
92     idirect_link = wt.get_tdls_counter("invalid_direct_link", bssid, addr1,
93                                        addr2);
94     if idirect_link > 0:
95         raise Exception("Unexpected frames through direct link (invalid)")
96     dev[2].remove_group()
97     dev[1].remove_group()
98     dev[0].remove_group()
99
100 def test_autogo_legacy(dev):
101     """P2P autonomous GO and legacy clients"""
102     res = autogo(dev[0])
103
104     logger.info("Connect P2P client")
105     connect_cli(dev[0], dev[1])
106
107     logger.info("Connect legacy WPS client")
108     pin = dev[2].wps_read_pin()
109     dev[0].p2p_go_authorize_client(pin)
110     dev[2].request("SET ignore_old_scan_res 1")
111     dev[2].request("P2P_SET disabled 1")
112     dev[2].dump_monitor()
113     dev[2].request("WPS_PIN any " + pin)
114     ev = dev[2].wait_event(["CTRL-EVENT-CONNECTED"], timeout=30)
115     if ev is None:
116         raise Exception("Association with the GO timed out")
117     status = dev[2].get_status()
118     if status['wpa_state'] != 'COMPLETED':
119         raise Exception("Not fully connected")
120     hwsim_utils.test_connectivity_p2p_sta(dev[1], dev[2])
121     dev[2].request("DISCONNECT")
122
123     logger.info("Connect legacy non-WPS client")
124     dev[2].request("FLUSH")
125     dev[2].request("P2P_SET disabled 1")
126     dev[2].connect(ssid=res['ssid'], psk=res['passphrase'], proto='RSN',
127                    key_mgmt='WPA-PSK', pairwise='CCMP', group='CCMP',
128                    scan_freq=res['freq'])
129     hwsim_utils.test_connectivity_p2p_sta(dev[1], dev[2])
130     dev[2].request("DISCONNECT")
131
132     dev[0].remove_group()
133     dev[1].wait_go_ending_session()