Merged the hostap_2.6 updates, and the Leap of Faith work, from the hostap_update...
[mech_eap.git] / libeap / tests / hwsim / test_p2p_set.py
diff --git a/libeap/tests/hwsim/test_p2p_set.py b/libeap/tests/hwsim/test_p2p_set.py
new file mode 100644 (file)
index 0000000..a96b572
--- /dev/null
@@ -0,0 +1,126 @@
+# P2P_SET test cases
+# Copyright (c) 2014, Jouni Malinen <j@w1.fi>
+#
+# This software may be distributed under the terms of the BSD license.
+# See README for more details.
+
+from remotehost import remote_compatible
+
+def test_p2p_set(dev):
+    """P2P_SET commands"""
+    for cmd in [ "",
+                 "foo bar",
+                 "noa 1",
+                 "noa 1,2",
+                 "noa 1,2,3",
+                 "noa -1,0,0",
+                 "noa 256,0,0",
+                 "noa 0,-1,0",
+                 "noa 0,0,-1",
+                 "noa 0,0,1",
+                 "noa 255,10,20",
+                 "ps 1",
+                 "ps 2",
+                 "oppps 1",
+                 "ctwindow 1",
+                 "conc_pref foo",
+                 "peer_filter foo",
+                 "client_apsd 0",
+                 "client_apsd 0,0",
+                 "client_apsd 0,0,0",
+                 "disc_int 1",
+                 "disc_int 1 2",
+                 "disc_int 2 1 10",
+                 "disc_int -1 0 10",
+                 "disc_int 0 -1 10",
+                 "ssid_postfix 123456789012345678901234" ]:
+        if "FAIL" not in dev[0].request("P2P_SET " + cmd):
+            raise Exception("Invalid P2P_SET accepted: " + cmd)
+
+def test_p2p_set_discoverability(dev):
+    """P2P_SET discoverability"""
+    addr0 = dev[0].p2p_dev_addr()
+    addr1 = dev[1].p2p_dev_addr()
+
+    dev[0].p2p_start_go(freq="2412")
+    if "OK" not in dev[1].request("P2P_SET discoverability 0"):
+        raise Exception("P2P_SET discoverability 0 failed")
+    pin = dev[1].wps_read_pin()
+    dev[0].p2p_go_authorize_client(pin)
+    dev[1].p2p_connect_group(addr0, pin, timeout=20, social=True, freq="2412")
+
+    if not dev[2].discover_peer(addr1, timeout=10):
+        if not dev[2].discover_peer(addr1, timeout=10):
+            if not dev[2].discover_peer(addr1, timeout=10):
+                raise Exception("Could not discover group client")
+
+    peer = dev[2].get_peer(addr1)
+    if int(peer['dev_capab'], 16) & 0x02 != 0:
+        raise Exception("Discoverability dev_capab reported: " + peer['dev_capab'])
+    dev[2].p2p_stop_find()
+
+    if "OK" not in dev[1].request("P2P_SET discoverability 1"):
+        raise Exception("P2P_SET discoverability 1 failed")
+    dev[1].dump_monitor()
+    dev[1].group_request("REASSOCIATE")
+    ev = dev[1].wait_group_event(["CTRL-EVENT-CONNECTED"], timeout=20)
+    if ev is None:
+        raise Exception("Connection timed out")
+
+    dev[2].request("P2P_FLUSH")
+    if not dev[2].discover_peer(addr1, timeout=10):
+        if not dev[2].discover_peer(addr1, timeout=10):
+            if not dev[2].discover_peer(addr1, timeout=10):
+                raise Exception("Could not discover group client")
+
+    peer = dev[2].get_peer(addr1)
+    if int(peer['dev_capab'], 16) & 0x02 != 0x02:
+        raise Exception("Discoverability dev_capab reported: " + peer['dev_capab'])
+    dev[2].p2p_stop_find()
+
+def test_p2p_set_managed(dev):
+    """P2P_SET managed"""
+    addr0 = dev[0].p2p_dev_addr()
+
+    if "OK" not in dev[0].request("P2P_SET managed 1"):
+        raise Exception("P2P_SET managed 1 failed")
+
+    dev[0].p2p_listen()
+    if not dev[1].discover_peer(addr0):
+        raise Exception("Could not discover peer")
+    peer = dev[1].get_peer(addr0)
+    if int(peer['dev_capab'], 16) & 0x08 != 0x08:
+        raise Exception("Managed dev_capab not reported: " + peer['dev_capab'])
+    dev[1].p2p_stop_find()
+
+    if "OK" not in dev[0].request("P2P_SET managed 0"):
+        raise Exception("P2P_SET managed 0 failed")
+
+    if not dev[2].discover_peer(addr0):
+        raise Exception("Could not discover peer")
+    peer = dev[2].get_peer(addr0)
+    if int(peer['dev_capab'], 16) & 0x08 != 0:
+        raise Exception("Managed dev_capab reported: " + peer['dev_capab'])
+    dev[2].p2p_stop_find()
+    dev[0].p2p_stop_find()
+
+@remote_compatible
+def test_p2p_set_ssid_postfix(dev):
+    """P2P_SET ssid_postfix"""
+    addr0 = dev[0].p2p_dev_addr()
+    addr1 = dev[1].p2p_dev_addr()
+    postfix = "12345678901234567890123"
+
+    try:
+        if "OK" not in dev[0].request("P2P_SET ssid_postfix " + postfix):
+            raise Exception("P2P_SET ssid_postfix failed")
+        dev[0].p2p_start_go(freq="2412")
+        pin = dev[1].wps_read_pin()
+        dev[0].p2p_go_authorize_client(pin)
+        dev[1].p2p_connect_group(addr0, pin, timeout=20, social=True, freq="2412")
+        if postfix not in dev[1].get_group_status_field("ssid"):
+            raise Exception("SSID postfix missing from status")
+        if postfix not in dev[1].group_request("SCAN_RESULTS"):
+            raise Exception("SSID postfix missing from scan results")
+    finally:
+        dev[0].request("P2P_SET ssid_postfix ")