test_p2p_concurrency.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. # P2P concurrency test cases
  2. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  3. #
  4. # This software may be distributed under the terms of the BSD license.
  5. # See README for more details.
  6. import logging
  7. logger = logging.getLogger()
  8. import time
  9. import hwsim_utils
  10. import hostapd
  11. from test_p2p_grpform import go_neg_pin_authorized
  12. from test_p2p_grpform import go_neg_pbc
  13. from test_p2p_grpform import check_grpform_results
  14. from test_p2p_grpform import remove_group
  15. from test_p2p_persistent import form
  16. from test_p2p_persistent import invite_from_cli
  17. from test_p2p_persistent import invite_from_go
  18. from test_p2p_persistent import invite
  19. def test_concurrent_autogo(dev, apdev):
  20. """Concurrent P2P autonomous GO"""
  21. logger.info("Connect to an infrastructure AP")
  22. dev[0].request("P2P_SET cross_connect 0")
  23. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  24. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  25. hwsim_utils.test_connectivity(dev[0], hapd)
  26. logger.info("Start a P2P group while associated to an AP")
  27. dev[0].request("SET p2p_no_group_iface 0")
  28. dev[0].p2p_start_go()
  29. pin = dev[1].wps_read_pin()
  30. dev[0].p2p_go_authorize_client(pin)
  31. dev[1].p2p_connect_group(dev[0].p2p_dev_addr(), pin, timeout=60,
  32. social=True)
  33. hwsim_utils.test_connectivity_p2p(dev[0], dev[1])
  34. dev[0].remove_group()
  35. dev[1].wait_go_ending_session()
  36. logger.info("Confirm AP connection after P2P group removal")
  37. hwsim_utils.test_connectivity(dev[0], hapd)
  38. def test_concurrent_autogo_crossconnect(dev, apdev):
  39. """Concurrent P2P autonomous GO"""
  40. dev[0].request("P2P_SET cross_connect 1")
  41. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  42. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  43. dev[0].request("SET p2p_no_group_iface 0")
  44. dev[0].p2p_start_go(no_event_clear=True)
  45. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-ENABLE", timeout=10)
  46. if ev is None:
  47. raise Exception("Timeout on cross connection enabled event")
  48. if dev[0].group_ifname + " " + dev[0].ifname not in ev:
  49. raise Exception("Unexpected interfaces: " + ev)
  50. dev[0].dump_monitor()
  51. dev[0].request("P2P_SET cross_connect 0")
  52. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-DISABLE", timeout=10)
  53. if ev is None:
  54. raise Exception("Timeout on cross connection disabled event")
  55. if dev[0].group_ifname + " " + dev[0].ifname not in ev:
  56. raise Exception("Unexpected interfaces: " + ev)
  57. dev[0].remove_group()
  58. dev[0].request("P2P_SET cross_connect 1")
  59. dev[0].p2p_start_go(no_event_clear=True)
  60. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-ENABLE", timeout=10)
  61. if ev is None:
  62. raise Exception("Timeout on cross connection enabled event")
  63. if dev[0].group_ifname + " " + dev[0].ifname not in ev:
  64. raise Exception("Unexpected interfaces: " + ev)
  65. dev[0].dump_monitor()
  66. dev[0].remove_group()
  67. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-DISABLE", timeout=10)
  68. if ev is None:
  69. raise Exception("Timeout on cross connection disabled event")
  70. dev[0].request("P2P_SET cross_connect 0")
  71. def test_concurrent_p2pcli(dev, apdev):
  72. """Concurrent P2P client join"""
  73. logger.info("Connect to an infrastructure AP")
  74. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  75. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  76. hwsim_utils.test_connectivity(dev[0], hapd)
  77. logger.info("Join a P2P group while associated to an AP")
  78. dev[0].request("SET p2p_no_group_iface 0")
  79. dev[1].p2p_start_go(freq=2412)
  80. pin = dev[0].wps_read_pin()
  81. dev[1].p2p_go_authorize_client(pin)
  82. dev[0].p2p_connect_group(dev[1].p2p_dev_addr(), pin, timeout=60,
  83. social=True)
  84. hwsim_utils.test_connectivity_p2p(dev[0], dev[1])
  85. dev[1].remove_group()
  86. dev[0].wait_go_ending_session()
  87. logger.info("Confirm AP connection after P2P group removal")
  88. hwsim_utils.test_connectivity(dev[0], hapd)
  89. def test_concurrent_grpform_go(dev, apdev):
  90. """Concurrent P2P group formation to become GO"""
  91. logger.info("Connect to an infrastructure AP")
  92. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  93. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  94. hwsim_utils.test_connectivity(dev[0], hapd)
  95. logger.info("Form a P2P group while associated to an AP")
  96. dev[0].request("SET p2p_no_group_iface 0")
  97. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
  98. r_dev=dev[1], r_intent=0)
  99. check_grpform_results(i_res, r_res)
  100. remove_group(dev[0], dev[1])
  101. logger.info("Confirm AP connection after P2P group removal")
  102. hwsim_utils.test_connectivity(dev[0], hapd)
  103. def test_concurrent_grpform_cli(dev, apdev):
  104. """Concurrent P2P group formation to become P2P Client"""
  105. logger.info("Connect to an infrastructure AP")
  106. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  107. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  108. hwsim_utils.test_connectivity(dev[0], hapd)
  109. logger.info("Form a P2P group while associated to an AP")
  110. dev[0].request("SET p2p_no_group_iface 0")
  111. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=0,
  112. r_dev=dev[1], r_intent=15)
  113. check_grpform_results(i_res, r_res)
  114. remove_group(dev[0], dev[1])
  115. logger.info("Confirm AP connection after P2P group removal")
  116. hwsim_utils.test_connectivity(dev[0], hapd)
  117. def test_concurrent_grpform_while_connecting(dev, apdev):
  118. """Concurrent P2P group formation while connecting to an AP"""
  119. logger.info("Start connection to an infrastructure AP")
  120. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  121. dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)
  122. logger.info("Form a P2P group while connecting to an AP")
  123. dev[0].request("SET p2p_no_group_iface 0")
  124. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_freq=2412,
  125. r_dev=dev[1], r_freq=2412)
  126. check_grpform_results(i_res, r_res)
  127. remove_group(dev[0], dev[1])
  128. logger.info("Confirm AP connection after P2P group removal")
  129. hwsim_utils.test_connectivity(dev[0], hapd)
  130. def test_concurrent_grpform_while_connecting2(dev, apdev):
  131. """Concurrent P2P group formation while connecting to an AP (2)"""
  132. logger.info("Start connection to an infrastructure AP")
  133. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  134. dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)
  135. dev[1].flush_scan_cache()
  136. logger.info("Form a P2P group while connecting to an AP")
  137. dev[0].request("SET p2p_no_group_iface 0")
  138. [i_res, r_res] = go_neg_pbc(i_dev=dev[0], i_intent=15, i_freq=2412,
  139. r_dev=dev[1], r_intent=0, r_freq=2412)
  140. check_grpform_results(i_res, r_res)
  141. remove_group(dev[0], dev[1])
  142. logger.info("Confirm AP connection after P2P group removal")
  143. dev[0].wait_completed()
  144. hwsim_utils.test_connectivity(dev[0], hapd)
  145. def test_concurrent_grpform_while_connecting3(dev, apdev):
  146. """Concurrent P2P group formation while connecting to an AP (3)"""
  147. logger.info("Start connection to an infrastructure AP")
  148. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  149. dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)
  150. logger.info("Form a P2P group while connecting to an AP")
  151. dev[0].request("SET p2p_no_group_iface 0")
  152. [i_res, r_res] = go_neg_pbc(i_dev=dev[1], i_intent=15, i_freq=2412,
  153. r_dev=dev[0], r_intent=0, r_freq=2412)
  154. check_grpform_results(i_res, r_res)
  155. remove_group(dev[0], dev[1])
  156. logger.info("Confirm AP connection after P2P group removal")
  157. dev[0].wait_completed()
  158. hwsim_utils.test_connectivity(dev[0], hapd)
  159. def test_concurrent_persistent_group(dev, apdev):
  160. """Concurrent P2P persistent group"""
  161. logger.info("Connect to an infrastructure AP")
  162. hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open", "channel": "2" })
  163. dev[0].request("SET p2p_no_group_iface 0")
  164. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2417")
  165. logger.info("Run persistent group test while associated to an AP")
  166. form(dev[0], dev[1])
  167. [go_res, cli_res] = invite_from_cli(dev[0], dev[1])
  168. if go_res['freq'] != '2417':
  169. raise Exception("Unexpected channel selected: " + go_res['freq'])
  170. [go_res, cli_res] = invite_from_go(dev[0], dev[1])
  171. if go_res['freq'] != '2417':
  172. raise Exception("Unexpected channel selected: " + go_res['freq'])
  173. def test_concurrent_invitation_channel_mismatch(dev, apdev):
  174. """P2P persistent group invitation and channel mismatch"""
  175. form(dev[0], dev[1])
  176. dev[0].dump_monitor()
  177. dev[1].dump_monitor()
  178. logger.info("Connect to an infrastructure AP")
  179. hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open", "channel": "2" })
  180. dev[0].request("SET p2p_no_group_iface 0")
  181. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2417")
  182. invite(dev[1], dev[0], extra="freq=2412")
  183. ev = dev[1].wait_global_event(["P2P-INVITATION-RESULT"], timeout=15)
  184. if ev is None:
  185. raise Exception("P2P invitation result not received")
  186. if "status=7" not in ev:
  187. raise Exception("Unexpected P2P invitation result: " + ev)