mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-02 22:51:14 +00:00
add auto generated test folder to components:
1. add test cases and related scripts 2. add CI config files read README.md for detail
This commit is contained in:
244
components/test/TestCaseScript/IOT/WifiConnUtility.py
Executable file
244
components/test/TestCaseScript/IOT/WifiConnUtility.py
Executable file
@@ -0,0 +1,244 @@
|
||||
from NativeLog import NativeLog
|
||||
import time
|
||||
import random
|
||||
import string
|
||||
|
||||
|
||||
ERROR_AP_PROP = {"ssid": "123456789012345678901234567890",
|
||||
"ssid_len": 30,
|
||||
"pwd": "12345678901234567890",
|
||||
"pwd_len": 20,
|
||||
"channel": 10,
|
||||
"enc": 3,
|
||||
"apc": 9, # invalid apc count
|
||||
}
|
||||
|
||||
|
||||
class WifiConnUtilError(StandardError):
|
||||
pass
|
||||
|
||||
|
||||
class WifiConnUtility(object):
|
||||
|
||||
def __init__(self, tc_action):
|
||||
self.tc_action = tc_action
|
||||
self.target_type = tc_action.target_type
|
||||
pass
|
||||
|
||||
def set_mode(self, mode):
|
||||
ret = True
|
||||
fail_string = "set mode fail"
|
||||
cmd = []
|
||||
checker_stings = []
|
||||
for i in range(2):
|
||||
if self.target_type[0] == "SSC":
|
||||
cmd.append("SSCC SSC%d op -S -o %d" % (i+1, mode[i]))
|
||||
checker_stings.append("SSCP SSC%d C cur_mode C %d" % (i+1, mode[i]))
|
||||
pass
|
||||
else:
|
||||
cmd.append("ATC AT%d CWMODE %d" % (i+1, mode[i]))
|
||||
checker_stings.append("ATP AT%d L OK" % (i+1))
|
||||
pass
|
||||
if self.tc_action.load_and_exe_one_step(checker_stings, cmd,
|
||||
fail_string, check_time=50) is False:
|
||||
NativeLog.add_trace_critical("Failed to set mode")
|
||||
ret = False
|
||||
return ret
|
||||
pass
|
||||
|
||||
def _apc_switch(self, outlet_list, action_list):
|
||||
checker_stings = ["R PC_COM C OK"]
|
||||
switch_cmd = "APC APC1"
|
||||
fail_string = "Error when switching APC"
|
||||
ret = True
|
||||
|
||||
for [_outlet, _action] in zip(action_list, outlet_list):
|
||||
switch_cmd += " %s %d" % (_action, _outlet)
|
||||
|
||||
if self.tc_action.load_and_exe_one_step(checker_stings, [switch_cmd],
|
||||
fail_string, check_time=50) is False:
|
||||
NativeLog.add_trace_critical("Error when switching APC")
|
||||
ret = False
|
||||
return ret
|
||||
pass
|
||||
|
||||
def _set_target_ap(self, ap_prop):
|
||||
ret = True
|
||||
fail_string = "set target ap fail, %s, %s" % (ap_prop["ssid"], ap_prop["pwd"])
|
||||
if self.target_type[1] == "SSC":
|
||||
if ap_prop["pwd"] == "":
|
||||
cmd = ["SSCC SSC2 ap -S -s %s -t %d" % (ap_prop["ssid"],
|
||||
ap_prop["enc"])
|
||||
]
|
||||
else:
|
||||
cmd = ["SSCC SSC2 ap -S -s %s -p %s -t %d" % (ap_prop["ssid"],
|
||||
ap_prop["pwd"],
|
||||
ap_prop["enc"])
|
||||
]
|
||||
checker_stings = ["SSCP SSC2 C +SAP:OK"]
|
||||
pass
|
||||
else:
|
||||
cmd = ["ATC AT2 CWSAP \"%s\" \"%s\" %d %d" % (ap_prop["ssid"],
|
||||
ap_prop["pwd"],
|
||||
ap_prop["channel"],
|
||||
ap_prop["enc"])
|
||||
]
|
||||
checker_stings = ["ATR AT2 L OK"]
|
||||
pass
|
||||
if self.tc_action.load_and_exe_one_step(checker_stings, cmd,
|
||||
fail_string, check_time=50) is False:
|
||||
NativeLog.add_trace_critical("set target ap fail")
|
||||
ret = False
|
||||
return ret
|
||||
pass
|
||||
|
||||
def setup_ap(self, ap_type, ap_prop):
|
||||
if ap_type == "target":
|
||||
ret = self._set_target_ap(ap_prop)
|
||||
pass
|
||||
else:
|
||||
ret = self._apc_switch(["ON"], [ap_prop["apc"]])
|
||||
# delay for 5 seconds, wait AP ready
|
||||
time.sleep(5)
|
||||
pass
|
||||
return ret
|
||||
|
||||
def do_scan(self, ap_prop):
|
||||
fail_string = "Scan fail"
|
||||
ret = True
|
||||
# do not check if the set AP can be scanned
|
||||
if self.target_type[1] == "SSC":
|
||||
cmd = ["SSCC SSC1 sta -S"]
|
||||
checker_stings = ["SSCR SSC1 C ssc%20scan%20done"]
|
||||
pass
|
||||
else:
|
||||
cmd = ["ATS AT1 AT+CWLAP"]
|
||||
checker_stings = ["ATR AT1 L OK"]
|
||||
pass
|
||||
if self.tc_action.load_and_exe_one_step(checker_stings, cmd,
|
||||
fail_string, check_time=100) is False:
|
||||
NativeLog.add_trace_critical("Scan fail")
|
||||
ret = False
|
||||
return ret
|
||||
pass
|
||||
|
||||
def _switch_off_target_ap(self, delay):
|
||||
time.sleep(delay)
|
||||
self._set_target_ap(ERROR_AP_PROP)
|
||||
pass
|
||||
|
||||
def _switch_on_target_ap(self, ap_prop, delay):
|
||||
time.sleep(delay)
|
||||
self._set_target_ap(ap_prop)
|
||||
pass
|
||||
|
||||
def _switch_off_ap(self, ap_type, ap_prop, delay_range):
|
||||
delay = random.randint(delay_range[0]*10, delay_range[1]*10)/10
|
||||
if ap_type == "target":
|
||||
self._switch_off_target_ap(delay)
|
||||
else:
|
||||
delay -= 1.5
|
||||
time.sleep(delay if delay > 0 else 0)
|
||||
self._apc_switch(["OFF"], [ap_prop["apc"]])
|
||||
pass
|
||||
|
||||
def _switch_on_ap(self, ap_type, ap_prop, delay_range):
|
||||
delay = random.randint(delay_range[0]*10, delay_range[1]*10)/10
|
||||
if ap_type == "target":
|
||||
self._switch_on_target_ap(ap_prop, delay)
|
||||
else:
|
||||
delay -= 1.5
|
||||
time.sleep(delay if delay > 0 else 0)
|
||||
self._apc_switch(["ON"], [ap_prop["apc"]])
|
||||
pass
|
||||
|
||||
def _join_ap(self, ap_prop, test_method):
|
||||
fail_string = "join target ap fail, %s, %s" % (ap_prop["ssid"], ap_prop["pwd"])
|
||||
if self.target_type[1] == "SSC":
|
||||
cmd = ["SSCC SSC1 ap -C -s %s -p %s" % (ap_prop["ssid"],
|
||||
ap_prop["pwd"],)
|
||||
]
|
||||
checker_stings = ["SSCR SSC1 C %s" % ap_prop["ssid"],
|
||||
"SSCR SSC1 C dhcp%20client%20start",
|
||||
"SSCR SSC1 C ip C mask C gw"]
|
||||
pass
|
||||
else:
|
||||
cmd = ["ATC AT1 CWJAP \"%s\" \"%s\"" % (ap_prop["ssid"],
|
||||
ap_prop["pwd"])
|
||||
]
|
||||
checker_stings = ["ATR AT1 NC ERROR NC FAIL L OK"]
|
||||
pass
|
||||
if test_method == "Normal":
|
||||
ret = self.tc_action.load_and_exe_one_step(checker_stings, cmd,
|
||||
fail_string, check_freq=0.1, check_time=350)
|
||||
if ret is not False:
|
||||
ret *= 0.1
|
||||
else:
|
||||
ret = self.tc_action.load_and_exe_one_step([], cmd, fail_string)
|
||||
return ret
|
||||
pass
|
||||
|
||||
def _check_join_ap_result(self, ap_prop):
|
||||
ret = False
|
||||
fail_string = "join ap fail, %s, %s" % (ap_prop["ssid"], ap_prop["pwd"])
|
||||
|
||||
if self.target_type[1] == "SSC":
|
||||
checker_stings = ["SSCR SSC1 C dhcp%20client%20start",
|
||||
"SSCR SSC1 C ip C mask C gw"]
|
||||
ret = self.tc_action.load_and_exe_one_step(checker_stings, ["DELAY 0"],
|
||||
fail_string, check_freq=1, check_time=120)
|
||||
pass
|
||||
else:
|
||||
cmd = ["ATS AT1 AT+CWJAP?"]
|
||||
checker_stings = ["ATR AT1 NC busy NC No%20AP C +CWJAP"]
|
||||
for i in range(3):
|
||||
ret = self.tc_action.load_and_exe_one_step(checker_stings, cmd,
|
||||
fail_string, check_freq=1, check_time=2)
|
||||
if ret is not False:
|
||||
break
|
||||
time.sleep(15)
|
||||
|
||||
return ret
|
||||
pass
|
||||
|
||||
def join_ap(self, join_test_method, ap_type, ap_prop, delay):
|
||||
|
||||
if join_test_method == "WRONG_PROP":
|
||||
_prop = ERROR_AP_PROP
|
||||
else:
|
||||
_prop = ap_prop
|
||||
|
||||
ret = self._join_ap(_prop, join_test_method)
|
||||
|
||||
if join_test_method == "OFF_ON":
|
||||
self._switch_off_ap(ap_type, ap_prop, delay[0])
|
||||
self._switch_on_ap(ap_type, ap_prop, delay[1])
|
||||
ret = self._check_join_ap_result(_prop)
|
||||
pass
|
||||
elif join_test_method == "OFF":
|
||||
self._switch_off_ap(ap_type, ap_prop, delay[0])
|
||||
time.sleep(25)
|
||||
pass
|
||||
|
||||
return ret
|
||||
pass
|
||||
|
||||
def do_reconnect(self, reconnect_test_method, ap_type, ap_prop, delay):
|
||||
ret = True
|
||||
if reconnect_test_method == "OFF_ON":
|
||||
self._switch_off_ap(ap_type, ap_prop, delay[0])
|
||||
self._switch_on_ap(ap_type, ap_prop, delay[1])
|
||||
ret = self._check_join_ap_result(ap_prop)
|
||||
pass
|
||||
elif reconnect_test_method == "OFF":
|
||||
self._switch_off_ap(ap_type, ap_prop, delay[0])
|
||||
pass
|
||||
return ret
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
pass
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user