# This software may be distributed under the terms of the BSD license.
# See README for more details.
+from remotehost import remote_compatible
import logging
logger = logging.getLogger()
import re
import hwsim_utils
from p2p_utils import *
+@remote_compatible
def test_persistent_group(dev):
"""P2P persistent group formation and re-invocation"""
form(dev[0], dev[1])
if dev[1].p2p_dev_addr() in clients:
raise Exception("Peer was still in client list")
+@remote_compatible
def test_persistent_group2(dev):
"""P2P persistent group formation with reverse roles"""
form(dev[0], dev[1], reverse_init=True)
invite_from_cli(dev[0], dev[1])
invite_from_go(dev[0], dev[1])
+@remote_compatible
def test_persistent_group3(dev):
"""P2P persistent group formation and re-invocation with empty BSS table"""
form(dev[0], dev[1])
terminate_group(dev[0], dev[1])
+@remote_compatible
def test_persistent_group_channel(dev):
"""P2P persistent group re-invocation with channel selection"""
form(dev[0], dev[1], test_data=False)
raise Exception("Persistent group client channel preference not followed")
terminate_group(dev[0], dev[1])
+@remote_compatible
def test_persistent_group_and_role_change(dev):
"""P2P persistent group, auto GO in another role, and re-invocation"""
form(dev[0], dev[1])
if 'persistent' not in peer or peer['persistent'] != id:
raise Exception("Persistent group client not recognized(2)")
+@remote_compatible
def test_persistent_group_in_grpform(dev):
"""P2P persistent group parameters re-used in group formation"""
addr0 = dev[0].p2p_dev_addr()
logger.debug("i_res: " + str(i_res))
logger.debug("r_res: " + str(r_res))
+@remote_compatible
def test_persistent_group_without_persistent_reconnect(dev):
"""P2P persistent group re-invocation without persistent reconnect"""
form(dev[0], dev[1])
ev = dev[0].wait_global_event(["P2P-INVITATION-RECEIVED"], timeout=15)
if ev is None:
- raise Exception("No invitation request reported");
+ raise Exception("No invitation request reported")
if "persistent=" not in ev:
raise Exception("Invalid invitation type reported: " + ev)
ev2 = dev[1].wait_global_event(["P2P-INVITATION-RESULT"], timeout=15)
if ev2 is None:
- raise Exception("No invitation response reported");
+ raise Exception("No invitation response reported")
if "status=1" not in ev2:
raise Exception("Unexpected status: " + ev2)
dev[1].p2p_listen()
ev = dev[1].wait_global_event(["P2P-INVITATION-RECEIVED"], timeout=15)
if ev is None:
- raise Exception("No invitation request reported");
+ raise Exception("No invitation request reported")
if "persistent=" not in ev:
raise Exception("Invalid invitation type reported: " + ev)
ev2 = dev[0].wait_global_event(["P2P-INVITATION-RESULT"], timeout=15)
if ev2 is None:
- raise Exception("No invitation response reported");
+ raise Exception("No invitation response reported")
if "status=1" not in ev2:
raise Exception("Unexpected status: " + ev2)
dev[0].p2p_listen()
[go_res, cli_res] = check_result(dev[0], dev[1])
terminate_group(dev[0], dev[1])
+@remote_compatible
def test_persistent_group_already_running(dev):
"""P2P persistent group formation and invitation while GO already running"""
form(dev[0], dev[1])
raise Exception("Could not state GO")
invite_from_cli(dev[0], dev[1])
+@remote_compatible
def test_persistent_group_add_cli_chan(dev):
"""P2P persistent group formation and re-invocation with p2p_add_cli_chan=1"""
try:
dev[0].request("SET p2p_add_cli_chan 0")
dev[1].request("SET p2p_add_cli_chan 0")
+@remote_compatible
def test_persistent_invalid_group_add(dev):
"""Invalid P2P_GROUP_ADD command"""
id = dev[0].add_network()
terminate_group(dev[0], dev[1])
+@remote_compatible
def test_persistent_group_profile_add(dev):
"""Create a P2P persistent group with ADD_NETWORK"""
passphrase="passphrase here"
- id = dev[0].add_network()
- dev[0].set_network_quoted(id, "ssid", "DIRECT-ab")
- dev[0].set_network_quoted(id, "psk", passphrase)
- dev[0].set_network(id, "mode", "3")
- dev[0].set_network(id, "disabled", "2")
+ id = dev[0].p2pdev_add_network()
+ dev[0].p2pdev_set_network_quoted(id, "ssid", "DIRECT-ab")
+ dev[0].p2pdev_set_network_quoted(id, "psk", passphrase)
+ dev[0].p2pdev_set_network(id, "mode", "3")
+ dev[0].p2pdev_set_network(id, "disabled", "2")
dev[0].p2p_start_go(persistent=id, freq=2412)
pin = dev[1].wps_read_pin()
dev[0].remove_group()
dev[1].wait_go_ending_session()
+@remote_compatible
def test_persistent_group_cancel_on_cli(dev):
"""P2P persistent group formation, re-invocation, and cancel"""
dev[0].global_request("SET p2p_no_group_iface 0")
raise Exception("P2P_CANCEL succeeded unexpectedly on GO")
terminate_group(dev[0], dev[1])
+@remote_compatible
def test_persistent_group_cancel_on_cli2(dev):
"""P2P persistent group formation, re-invocation, and cancel (2)"""
form(dev[0], dev[1])
raise Exception("P2P_CANCEL succeeded unexpectedly on GO")
terminate_group(dev[0], dev[1])
+@remote_compatible
def test_persistent_group_peer_dropped(dev):
"""P2P persistent group formation and re-invocation with peer having dropped group"""
form(dev[0], dev[1], reverse_init=True)
invite_from_cli(dev[0], dev[1])
logger.info("Remove group on the GO and try to invite from the client")
- dev[0].request("REMOVE_NETWORK all")
+ dev[0].global_request("REMOVE_NETWORK all")
invite(dev[1], dev[0])
ev = dev[1].wait_global_event(["P2P-INVITATION-RESULT"], timeout=10)
if ev is None:
logger.info("Verify that a new group can be formed")
form(dev[0], dev[1], reverse_init=True)
+@remote_compatible
def test_persistent_group_peer_dropped2(dev):
"""P2P persistent group formation and re-invocation with peer having dropped group (2)"""
form(dev[0], dev[1])
invite_from_go(dev[0], dev[1])
logger.info("Remove group on the client and try to invite from the GO")
- dev[1].request("REMOVE_NETWORK all")
+ dev[1].global_request("REMOVE_NETWORK all")
invite(dev[0], dev[1])
ev = dev[0].wait_global_event(["P2P-INVITATION-RESULT"], timeout=10)
if ev is None:
logger.info("Verify that a new group can be formed")
form(dev[0], dev[1])
+
+def test_persistent_group_peer_dropped3(dev):
+ """P2P persistent group formation and re-invocation with peer having dropped group (3)"""
+ form(dev[0], dev[1], reverse_init=True)
+ invite_from_cli(dev[0], dev[1])
+
+ logger.info("Remove group on the GO and try to invite from the client")
+ dev[0].global_request("REMOVE_NETWORK all")
+ invite(dev[1], dev[0], use_listen=False)
+ ev = dev[1].wait_global_event(["P2P-INVITATION-RESULT"], timeout=10)
+ if ev is None:
+ raise Exception("No invitation result seen")
+ if "status=8" not in ev:
+ raise Exception("Unexpected invitation result: " + ev)
+ networks = dev[1].list_networks(p2p=True)
+ if len(networks) > 0:
+ raise Exception("Unexpected network block on client")
+
+ time.sleep(0.2)
+ logger.info("Verify that a new group can be formed")
+ form(dev[0], dev[1], reverse_init=True, r_listen=False)