test_hostapd_oom.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. # hostapd and out-of-memory error paths
  2. # Copyright (c) 2015, Jouni Malinen
  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 hostapd
  10. from utils import HwsimSkip
  11. def hostapd_oom_loop(apdev, params, start_func="main"):
  12. hapd = hostapd.add_ap(apdev[0], { "ssid": "ctrl" })
  13. count = 0
  14. for i in range(1, 1000):
  15. if "OK" not in hapd.request("TEST_ALLOC_FAIL %d:%s" % (i, start_func)):
  16. raise HwsimSkip("TEST_ALLOC_FAIL not supported")
  17. try:
  18. hostapd.add_ap(apdev[1], params, timeout=2.5)
  19. logger.info("Iteration %d - success" % i)
  20. hostapd.remove_bss(apdev[1])
  21. state = hapd.request('GET_ALLOC_FAIL')
  22. logger.info("GET_ALLOC_FAIL: " + state)
  23. hapd.request("TEST_ALLOC_FAIL 0:")
  24. if i < 3:
  25. raise Exception("AP setup succeeded during out-of-memory")
  26. if state.startswith('0:'):
  27. count = 0
  28. else:
  29. count += 1
  30. if count == 5:
  31. break
  32. except Exception, e:
  33. logger.info("Iteration %d - %s" % (i, str(e)))
  34. def test_hostapd_oom_open(dev, apdev):
  35. """hostapd failing to setup open mode due to OOM"""
  36. params = { "ssid": "open" }
  37. hostapd_oom_loop(apdev, params)
  38. def test_hostapd_oom_wpa2_psk(dev, apdev):
  39. """hostapd failing to setup WPA2-PSK mode due to OOM"""
  40. params = hostapd.wpa2_params(ssid="test", passphrase="12345678")
  41. params['wpa_psk_file'] = 'hostapd.wpa_psk'
  42. hostapd_oom_loop(apdev, params)
  43. def test_hostapd_oom_wpa2_eap(dev, apdev):
  44. """hostapd failing to setup WPA2-EAP mode due to OOM"""
  45. params = hostapd.wpa2_eap_params(ssid="test")
  46. params['acct_server_addr'] = "127.0.0.1"
  47. params['acct_server_port'] = "1813"
  48. params['acct_server_shared_secret'] = "radius"
  49. hostapd_oom_loop(apdev, params)
  50. def test_hostapd_oom_wpa2_eap_radius(dev, apdev):
  51. """hostapd failing to setup WPA2-EAP mode due to OOM in RADIUS"""
  52. params = hostapd.wpa2_eap_params(ssid="test")
  53. params['acct_server_addr'] = "127.0.0.1"
  54. params['acct_server_port'] = "1813"
  55. params['acct_server_shared_secret'] = "radius"
  56. hostapd_oom_loop(apdev, params, start_func="accounting_init")
  57. def test_hostapd_oom_wpa2_psk_connect(dev, apdev):
  58. """hostapd failing during WPA2-PSK mode connection due to OOM"""
  59. params = hostapd.wpa2_params(ssid="test-wpa2-psk", passphrase="12345678")
  60. hapd = hostapd.add_ap(apdev[0], params)
  61. dev[0].request("SCAN_INTERVAL 1")
  62. count = 0
  63. for i in range(1, 1000):
  64. logger.info("Iteration %d" % i)
  65. if "OK" not in hapd.request("TEST_ALLOC_FAIL %d:main" % i):
  66. raise HwsimSkip("TEST_ALLOC_FAIL not supported")
  67. id = dev[0].connect("test-wpa2-psk", psk="12345678",
  68. scan_freq="2412", wait_connect=False)
  69. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED",
  70. "CTRL-EVENT-SSID-TEMP-DISABLED"], timeout=5)
  71. if ev is None:
  72. logger.info("Timeout while waiting for connection in iteration %d" % i)
  73. dev[0].request("REMOVE_NETWORK all")
  74. time.sleep(0.1)
  75. else:
  76. if "CTRL-EVENT-SSID-TEMP-DISABLED" in ev:
  77. logger.info("Re-select to avoid long wait for temp disavle")
  78. dev[0].select_network(id)
  79. dev[0].wait_connected()
  80. dev[0].request("REMOVE_NETWORK all")
  81. dev[0].wait_disconnected()
  82. for i in range(3):
  83. dev[i].dump_monitor()
  84. hapd.dump_monitor()
  85. state = hapd.request('GET_ALLOC_FAIL')
  86. logger.info("GET_ALLOC_FAIL: " + state)
  87. hapd.request("TEST_ALLOC_FAIL 0:")
  88. if state.startswith('0:'):
  89. count = 0
  90. else:
  91. count += 1
  92. if count == 5:
  93. break
  94. dev[0].request("SCAN_INTERVAL 5")
  95. def test_hostapd_oom_wpa2_eap_connect(dev, apdev, params):
  96. """hostapd failing during WPA2-EAP mode connection due to OOM"""
  97. if not params['long']:
  98. raise HwsimSkip("Skip test case with long duration due to --long not specified")
  99. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  100. params['acct_server_addr'] = "127.0.0.1"
  101. params['acct_server_port'] = "1813"
  102. params['acct_server_shared_secret'] = "radius"
  103. hapd = hostapd.add_ap(apdev[0], params)
  104. dev[0].request("SCAN_INTERVAL 1")
  105. count = 0
  106. for i in range(1, 1000):
  107. logger.info("Iteration %d" % i)
  108. if "OK" not in hapd.request("TEST_ALLOC_FAIL %d:main" % i):
  109. raise HwsimSkip("TEST_ALLOC_FAIL not supported")
  110. id = dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP",
  111. eap="GPSK", identity="gpsk user",
  112. password="abcdefghijklmnop0123456789abcdef",
  113. scan_freq="2412", wait_connect=False)
  114. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED",
  115. "CTRL-EVENT-SSID-TEMP-DISABLED"], timeout=5)
  116. if ev is None:
  117. logger.info("Timeout while waiting for connection in iteration %d" % i)
  118. dev[0].request("REMOVE_NETWORK all")
  119. time.sleep(0.1)
  120. else:
  121. if "CTRL-EVENT-SSID-TEMP-DISABLED" in ev:
  122. logger.info("Re-select to avoid long wait for temp disavle")
  123. dev[0].select_network(id)
  124. dev[0].wait_connected()
  125. dev[0].request("REMOVE_NETWORK all")
  126. dev[0].wait_disconnected()
  127. for i in range(3):
  128. dev[i].dump_monitor()
  129. hapd.dump_monitor()
  130. state = hapd.request('GET_ALLOC_FAIL')
  131. logger.info("GET_ALLOC_FAIL: " + state)
  132. hapd.request("TEST_ALLOC_FAIL 0:")
  133. if state.startswith('0:'):
  134. count = 0
  135. else:
  136. count += 1
  137. if count == 5:
  138. break
  139. dev[0].request("SCAN_INTERVAL 5")