559-tests-add-WPS-tests-to-multi_ap-hwsim-tests.patch 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. From 0729e01f5830ebf4701f0b1b7ff1bd2a2eedae40 Mon Sep 17 00:00:00 2001
  2. From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
  3. Date: Tue, 12 Feb 2019 11:02:42 +0100
  4. Subject: [PATCH] tests: add WPS tests to multi_ap hwsim tests
  5. Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <[email protected]>
  6. ---
  7. v4: new patch
  8. ---
  9. tests/hwsim/test_multi_ap.py | 164 +++++++++++++++++++++++++++++++++++
  10. 1 file changed, 164 insertions(+)
  11. --- a/tests/hwsim/test_multi_ap.py
  12. +++ b/tests/hwsim/test_multi_ap.py
  13. @@ -61,3 +61,167 @@ def test_multi_ap_fronthaul_on_ap(dev, a
  14. raise Exception("Connection result not reported")
  15. if "CTRL-EVENT-DISCONNECTED" not in ev:
  16. raise Exception("Unexpected connection result")
  17. +
  18. +def run_multi_ap_wps(dev, apdev, params, multi_ap_bssid = None):
  19. + """Helper for running Multi-AP WPS tests
  20. +
  21. + dev[0] does multi_ap WPS, dev[1] does normal WPS. apdev[0] is the fronthaul
  22. + BSS. If there is a separate backhaul BSS, it must have been set up by the
  23. + caller. params are the normal SSID parameters, they will be extended with
  24. + the WPS parameters. multi_ap_bssid must be given if it is not equal to the
  25. + fronthaul BSSID."""
  26. +
  27. + if multi_ap_bssid is None:
  28. + multi_ap_bssid = apdev[0]['bssid']
  29. + params.update({"wps_state": "2", "eap_server": "1"})
  30. +
  31. + # WPS with multi-ap station dev[0]
  32. + hapd = hostapd.add_ap(apdev[0], params)
  33. + hapd.request("WPS_PBC")
  34. + if "PBC Status: Active" not in hapd.request("WPS_GET_STATUS"):
  35. + raise Exception("PBC status not shown correctly")
  36. +
  37. + dev[0].request("WPS_PBC multi_ap=1")
  38. + dev[0].wait_connected(timeout=20)
  39. + status = dev[0].get_status()
  40. + if status['wpa_state'] != 'COMPLETED' or status['bssid'] != multi_ap_bssid:
  41. + raise Exception("Not fully connected")
  42. + if status['ssid'] != params['multi_ap_backhaul_ssid'].strip('"'):
  43. + raise Exception("Unexpected SSID %s != %s" % (status['ssid'], params["multi_ap_backhaul_ssid"]))
  44. + if status['pairwise_cipher'] != 'CCMP':
  45. + raise Exception("Unexpected encryption configuration %s" % status['pairwise_cipher'])
  46. + if status['key_mgmt'] != 'WPA2-PSK':
  47. + raise Exception("Unexpected key_mgmt")
  48. +
  49. + status = hapd.request("WPS_GET_STATUS")
  50. + if "PBC Status: Disabled" not in status:
  51. + raise Exception("PBC status not shown correctly")
  52. + if "Last WPS result: Success" not in status:
  53. + raise Exception("Last WPS result not shown correctly")
  54. + if "Peer Address: " + dev[0].p2p_interface_addr() not in status:
  55. + raise Exception("Peer address not shown correctly")
  56. +
  57. + if len(dev[0].list_networks()) != 1:
  58. + raise Exception("Unexpected number of network blocks")
  59. +
  60. + # WPS with non-multi-ap station dev[1]
  61. + hapd.request("WPS_PBC")
  62. + if "PBC Status: Active" not in hapd.request("WPS_GET_STATUS"):
  63. + raise Exception("PBC status not shown correctly")
  64. +
  65. + dev[1].request("WPS_PBC")
  66. + dev[1].wait_connected(timeout=20)
  67. + status = dev[1].get_status()
  68. + if status['wpa_state'] != 'COMPLETED' or status['bssid'] != apdev[0]['bssid']:
  69. + raise Exception("Not fully connected")
  70. + if status['ssid'] != params["ssid"]:
  71. + raise Exception("Unexpected SSID")
  72. + # Fronthaul may be something else than WPA2-PSK so don't test it.
  73. +
  74. + status = hapd.request("WPS_GET_STATUS")
  75. + if "PBC Status: Disabled" not in status:
  76. + raise Exception("PBC status not shown correctly")
  77. + if "Last WPS result: Success" not in status:
  78. + raise Exception("Last WPS result not shown correctly")
  79. + if "Peer Address: " + dev[1].p2p_interface_addr() not in status:
  80. + raise Exception("Peer address not shown correctly")
  81. +
  82. + if len(dev[1].list_networks()) != 1:
  83. + raise Exception("Unexpected number of network blocks")
  84. +
  85. +
  86. +def test_multi_ap_wps_shared(dev, apdev):
  87. + """WPS on shared fronthaul/backhaul AP"""
  88. + ssid = "multi-ap-wps"
  89. + passphrase = "12345678"
  90. + params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase)
  91. + params.update({"multi_ap": "3",
  92. + "multi_ap_backhaul_ssid": '"%s"' % ssid,
  93. + "multi_ap_backhaul_wpa_passphrase": passphrase})
  94. + run_multi_ap_wps(dev, apdev, params)
  95. +
  96. +def test_multi_ap_wps_shared_psk(dev, apdev):
  97. + """WPS on shared fronthaul/backhaul AP using PSK"""
  98. + ssid = "multi-ap-wps"
  99. + psk = "1234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
  100. + params = hostapd.wpa2_params(ssid=ssid)
  101. + params.update({"wpa_psk": psk, "multi_ap": "3",
  102. + "multi_ap_backhaul_ssid": '"%s"' % ssid,
  103. + "multi_ap_backhaul_wpa_psk": psk})
  104. + run_multi_ap_wps(dev, apdev, params)
  105. +
  106. +def test_multi_ap_wps_split(dev, apdev):
  107. + """WPS on split fronthaul and backhaul AP"""
  108. + backhaul_ssid = "multi-ap-backhaul-wps"
  109. + backhaul_passphrase = "87654321"
  110. + params = hostapd.wpa2_params(ssid="multi-ap-fronthaul-wps", passphrase="12345678")
  111. + params.update({"multi_ap": "2",
  112. + "multi_ap_backhaul_ssid": '"%s"' % backhaul_ssid,
  113. + "multi_ap_backhaul_wpa_passphrase": backhaul_passphrase})
  114. + params_backhaul = hostapd.wpa2_params(ssid=backhaul_ssid, passphrase=backhaul_passphrase)
  115. + params_backhaul.update({"multi_ap": "1"})
  116. + hapd_backhaul = hostapd.add_ap(apdev[1], params_backhaul)
  117. +
  118. + run_multi_ap_wps(dev, apdev, params, hapd_backhaul.own_addr())
  119. +
  120. +def test_multi_ap_wps_split_psk(dev, apdev):
  121. + """WPS on split fronthaul and backhaul AP"""
  122. + backhaul_ssid = "multi-ap-backhaul-wps"
  123. + backhaul_psk = "1234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
  124. + params = hostapd.wpa2_params(ssid="multi-ap-fronthaul-wps", passphrase="12345678")
  125. + params.update({"multi_ap": "2",
  126. + "multi_ap_backhaul_ssid": '"%s"' % backhaul_ssid,
  127. + "multi_ap_backhaul_wpa_psk": backhaul_psk})
  128. + params_backhaul = hostapd.wpa2_params(ssid=backhaul_ssid)
  129. + params_backhaul.update({"multi_ap": "1", "wpa_psk": backhaul_psk})
  130. + hapd_backhaul = hostapd.add_ap(apdev[1], params_backhaul)
  131. +
  132. + run_multi_ap_wps(dev, apdev, params, hapd_backhaul.own_addr())
  133. +
  134. +def test_multi_ap_wps_split_mixed(dev, apdev):
  135. + """WPS on split fronthaul and backhaul AP with mixed-mode fronthaul"""
  136. + backhaul_ssid = "multi-ap-backhaul-wps"
  137. + backhaul_passphrase = "87654321"
  138. + params = hostapd.wpa_mixed_params(ssid="multi-ap-fronthaul-wps", passphrase="12345678")
  139. + params.update({"multi_ap": "2",
  140. + "multi_ap_backhaul_ssid": '"%s"' % backhaul_ssid,
  141. + "multi_ap_backhaul_wpa_passphrase": backhaul_passphrase})
  142. + params_backhaul = hostapd.wpa2_params(ssid=backhaul_ssid, passphrase=backhaul_passphrase)
  143. + params_backhaul.update({"multi_ap": "1"})
  144. + hapd_backhaul = hostapd.add_ap(apdev[1], params_backhaul)
  145. +
  146. + run_multi_ap_wps(dev, apdev, params, hapd_backhaul.own_addr())
  147. +
  148. +def test_multi_ap_wps_split_open(dev, apdev):
  149. + """WPS on split fronthaul and backhaul AP with open fronthaul"""
  150. + backhaul_ssid = "multi-ap-backhaul-wps"
  151. + backhaul_passphrase = "87654321"
  152. + params = {"ssid": "multi-ap-wps-fronthaul", "multi_ap": "2",
  153. + "multi_ap_backhaul_ssid": '"%s"' % backhaul_ssid,
  154. + "multi_ap_backhaul_wpa_passphrase": backhaul_passphrase}
  155. + params_backhaul = hostapd.wpa2_params(ssid=backhaul_ssid, passphrase=backhaul_passphrase)
  156. + params_backhaul.update({"multi_ap": "1"})
  157. + hapd_backhaul = hostapd.add_ap(apdev[1], params_backhaul)
  158. +
  159. + run_multi_ap_wps(dev, apdev, params, hapd_backhaul.own_addr())
  160. +
  161. +def test_multi_ap_wps_fail_non_multi_ap(dev, apdev):
  162. + """Multi-AP WPS on non-WPS AP fails"""
  163. +
  164. + params = hostapd.wpa2_params(ssid="non-multi-ap-wps", passphrase="12345678")
  165. + params.update({"wps_state": "2", "eap_server": "1"})
  166. +
  167. + hapd = hostapd.add_ap(apdev[0], params)
  168. + hapd.request("WPS_PBC")
  169. + if "PBC Status: Active" not in hapd.request("WPS_GET_STATUS"):
  170. + raise Exception("PBC status not shown correctly")
  171. +
  172. + dev[0].request("WPS_PBC multi_ap=1")
  173. + # Since we will fail to associate and WPS doesn't even get started, there
  174. + # isn't much we can do except wait for timeout. For PBC, it is not possible
  175. + # to change the timeout from 2 minutes. Instead of waiting for the timeout,
  176. + # just check that WPS doesn't finish within reasonable time.
  177. + ev = dev[0].wait_event(["WPS-SUCCESS", "WPS-FAIL"], timeout=20)
  178. + if ev:
  179. + raise Exception("WPS operation completed: " + ev)
  180. + dev[0].request("WPS_CANCEL")