# P2P concurrency test cases
# Copyright (c) 2013, Jouni Malinen <j@w1.fi>
#
# This software may be distributed under the terms of the BSD license.
# See README for more details.

import logging
logger = logging.getLogger()
import time

import hwsim_utils
import hostapd
from test_p2p_grpform import go_neg_pin_authorized
from test_p2p_grpform import go_neg_pbc
from test_p2p_grpform import check_grpform_results
from test_p2p_grpform import remove_group
from test_p2p_persistent import form
from test_p2p_persistent import invite_from_cli
from test_p2p_persistent import invite_from_go
from test_p2p_persistent import invite

def test_concurrent_autogo(dev, apdev):
    """Concurrent P2P autonomous GO"""
    logger.info("Connect to an infrastructure AP")
    dev[0].request("P2P_SET cross_connect 0")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
    hwsim_utils.test_connectivity(dev[0], hapd)

    logger.info("Start a P2P group while associated to an AP")
    dev[0].request("SET p2p_no_group_iface 0")
    dev[0].p2p_start_go()
    pin = dev[1].wps_read_pin()
    dev[0].p2p_go_authorize_client(pin)
    dev[1].p2p_connect_group(dev[0].p2p_dev_addr(), pin, timeout=60,
                             social=True)
    hwsim_utils.test_connectivity_p2p(dev[0], dev[1])
    dev[0].remove_group()
    dev[1].wait_go_ending_session()

    logger.info("Confirm AP connection after P2P group removal")
    hwsim_utils.test_connectivity(dev[0], hapd)

def test_concurrent_autogo_crossconnect(dev, apdev):
    """Concurrent P2P autonomous GO"""
    dev[0].global_request("P2P_SET cross_connect 1")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")

    dev[0].global_request("SET p2p_no_group_iface 0")
    dev[0].p2p_start_go(no_event_clear=True)
    ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-ENABLE", timeout=10)
    if ev is None:
        raise Exception("Timeout on cross connection enabled event")
    if dev[0].group_ifname + " " + dev[0].ifname not in ev:
        raise Exception("Unexpected interfaces: " + ev)
    dev[0].dump_monitor()

    dev[0].global_request("P2P_SET cross_connect 0")
    ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-DISABLE", timeout=10)
    if ev is None:
        raise Exception("Timeout on cross connection disabled event")
    if dev[0].group_ifname + " " + dev[0].ifname not in ev:
        raise Exception("Unexpected interfaces: " + ev)
    dev[0].remove_group()

    dev[0].global_request("P2P_SET cross_connect 1")
    dev[0].p2p_start_go(no_event_clear=True)
    ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-ENABLE", timeout=10)
    if ev is None:
        raise Exception("Timeout on cross connection enabled event")
    if dev[0].group_ifname + " " + dev[0].ifname not in ev:
        raise Exception("Unexpected interfaces: " + ev)
    dev[0].dump_monitor()
    dev[0].remove_group()
    ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-DISABLE", timeout=10)
    if ev is None:
        raise Exception("Timeout on cross connection disabled event")
    dev[0].global_request("P2P_SET cross_connect 0")

def test_concurrent_p2pcli(dev, apdev):
    """Concurrent P2P client join"""
    logger.info("Connect to an infrastructure AP")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
    hwsim_utils.test_connectivity(dev[0], hapd)

    logger.info("Join a P2P group while associated to an AP")
    dev[0].request("SET p2p_no_group_iface 0")
    dev[1].p2p_start_go(freq=2412)
    pin = dev[0].wps_read_pin()
    dev[1].p2p_go_authorize_client(pin)
    dev[0].p2p_connect_group(dev[1].p2p_dev_addr(), pin, timeout=60,
                             social=True)
    hwsim_utils.test_connectivity_p2p(dev[0], dev[1])
    dev[1].remove_group()
    dev[0].wait_go_ending_session()

    logger.info("Confirm AP connection after P2P group removal")
    hwsim_utils.test_connectivity(dev[0], hapd)

def test_concurrent_grpform_go(dev, apdev):
    """Concurrent P2P group formation to become GO"""
    logger.info("Connect to an infrastructure AP")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
    hwsim_utils.test_connectivity(dev[0], hapd)

    logger.info("Form a P2P group while associated to an AP")
    dev[0].request("SET p2p_no_group_iface 0")

    [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
                                           r_dev=dev[1], r_intent=0)
    check_grpform_results(i_res, r_res)
    remove_group(dev[0], dev[1])

    logger.info("Confirm AP connection after P2P group removal")
    hwsim_utils.test_connectivity(dev[0], hapd)

def test_concurrent_grpform_cli(dev, apdev):
    """Concurrent P2P group formation to become P2P Client"""
    logger.info("Connect to an infrastructure AP")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
    hwsim_utils.test_connectivity(dev[0], hapd)

    logger.info("Form a P2P group while associated to an AP")
    dev[0].request("SET p2p_no_group_iface 0")

    [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=0,
                                           r_dev=dev[1], r_intent=15)
    check_grpform_results(i_res, r_res)
    remove_group(dev[0], dev[1])

    logger.info("Confirm AP connection after P2P group removal")
    hwsim_utils.test_connectivity(dev[0], hapd)

def test_concurrent_grpform_while_connecting(dev, apdev):
    """Concurrent P2P group formation while connecting to an AP"""
    logger.info("Start connection to an infrastructure AP")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)

    logger.info("Form a P2P group while connecting to an AP")
    dev[0].request("SET p2p_no_group_iface 0")

    [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_freq=2412,
                                           r_dev=dev[1], r_freq=2412)
    check_grpform_results(i_res, r_res)
    remove_group(dev[0], dev[1])

    logger.info("Confirm AP connection after P2P group removal")
    hwsim_utils.test_connectivity(dev[0], hapd)

def test_concurrent_grpform_while_connecting2(dev, apdev):
    """Concurrent P2P group formation while connecting to an AP (2)"""
    logger.info("Start connection to an infrastructure AP")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)
    dev[1].flush_scan_cache()

    logger.info("Form a P2P group while connecting to an AP")
    dev[0].request("SET p2p_no_group_iface 0")

    [i_res, r_res] = go_neg_pbc(i_dev=dev[0], i_intent=15, i_freq=2412,
                                r_dev=dev[1], r_intent=0, r_freq=2412)
    check_grpform_results(i_res, r_res)
    remove_group(dev[0], dev[1])

    logger.info("Confirm AP connection after P2P group removal")
    dev[0].wait_completed()
    hwsim_utils.test_connectivity(dev[0], hapd)

def test_concurrent_grpform_while_connecting3(dev, apdev):
    """Concurrent P2P group formation while connecting to an AP (3)"""
    logger.info("Start connection to an infrastructure AP")
    hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
    dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)

    logger.info("Form a P2P group while connecting to an AP")
    dev[0].request("SET p2p_no_group_iface 0")

    [i_res, r_res] = go_neg_pbc(i_dev=dev[1], i_intent=15, i_freq=2412,
                                r_dev=dev[0], r_intent=0, r_freq=2412)
    check_grpform_results(i_res, r_res)
    remove_group(dev[0], dev[1])

    logger.info("Confirm AP connection after P2P group removal")
    dev[0].wait_completed()
    hwsim_utils.test_connectivity(dev[0], hapd)

def test_concurrent_persistent_group(dev, apdev):
    """Concurrent P2P persistent group"""
    logger.info("Connect to an infrastructure AP")
    hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open", "channel": "2" })
    dev[0].global_request("SET p2p_no_group_iface 0")
    dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2417")

    logger.info("Run persistent group test while associated to an AP")
    form(dev[0], dev[1])
    [go_res, cli_res] = invite_from_cli(dev[0], dev[1])
    if go_res['freq'] != '2417':
        raise Exception("Unexpected channel selected: " + go_res['freq'])
    [go_res, cli_res] = invite_from_go(dev[0], dev[1])
    if go_res['freq'] != '2417':
        raise Exception("Unexpected channel selected: " + go_res['freq'])

def test_concurrent_invitation_channel_mismatch(dev, apdev):
    """P2P persistent group invitation and channel mismatch"""
    form(dev[0], dev[1])
    dev[0].dump_monitor()
    dev[1].dump_monitor()

    logger.info("Connect to an infrastructure AP")
    hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open", "channel": "2" })
    dev[0].global_request("SET p2p_no_group_iface 0")
    dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2417")
    invite(dev[1], dev[0], extra="freq=2412")
    ev = dev[1].wait_global_event(["P2P-INVITATION-RESULT"], timeout=15)
    if ev is None:
        raise Exception("P2P invitation result not received")
    if "status=7" not in ev:
        raise Exception("Unexpected P2P invitation result: " + ev)
