mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
90e57cdf8f
1. add test cases and related scripts 2. add CI config files read README.md for detail
179 lines
6.7 KiB
Python
Executable File
179 lines
6.7 KiB
Python
Executable File
import random
|
|
import time
|
|
import string
|
|
import threading
|
|
|
|
from TCAction import TCActionBase
|
|
from NativeLog import NativeLog
|
|
from TCAction import PerformanceTCBase
|
|
from Utility import Encoding
|
|
|
|
|
|
class STAJAPThread(threading.Thread):
|
|
def __init__(self, test_action, port_name, ssid, password, delay1, delay2, change_mac):
|
|
threading.Thread.__init__(self)
|
|
self.setDaemon(True)
|
|
self.test_action = test_action
|
|
self.port_name = port_name
|
|
self.ssid = ssid
|
|
self.password = password
|
|
self.delay1 = delay1
|
|
self.delay2 = delay2
|
|
self.change_mac = change_mac
|
|
self.exit_flag = threading.Event()
|
|
pass
|
|
|
|
def exit(self):
|
|
self.exit_flag.set()
|
|
pass
|
|
|
|
def run(self):
|
|
total_test_count = 0
|
|
fail_count = 0
|
|
while self.exit_flag.isSet() is False:
|
|
# change mac
|
|
if self.change_mac is True:
|
|
mac = Encoding.generate_random_mac()
|
|
self.test_action.serial_write_line(self.port_name, "mac -S -o 1 -m %s" % mac)
|
|
self.test_action.check_response(self.port_name, "+MAC:STA,OK")
|
|
|
|
time.sleep(1)
|
|
|
|
# JAP
|
|
total_test_count += 1
|
|
# flush current port data
|
|
self.test_action.flush_data(self.port_name)
|
|
self.test_action.serial_write_line(self.port_name, "sta -C -s %s -p %s" % (self.ssid, self.password))
|
|
if self.test_action.check_response(self.port_name, "+JAP:CONNECTED", 45) is False:
|
|
fail_count += 1
|
|
NativeLog.add_trace_critical("[%s] Failed to JAP, Failed/Total : %d/%d"
|
|
% (self.port_name, fail_count, total_test_count))
|
|
continue
|
|
time.sleep(random.randint(self.delay1[0], self.delay1[1]))
|
|
|
|
# QAP
|
|
self.test_action.serial_write_line(self.port_name, "sta -D")
|
|
if self.test_action.check_response(self.port_name, "+QAP:OK", 5) is False:
|
|
NativeLog.add_trace_critical("[%s] Failed to QAP" % self.port_name)
|
|
time.sleep(random.randint(self.delay2[0], self.delay2[1]))
|
|
|
|
# make sure quit AP
|
|
self.test_action.serial_write_line(self.port_name, "sta -D")
|
|
pass
|
|
pass
|
|
|
|
|
|
class SoftAPNSTA(PerformanceTCBase.PerformanceTCBase):
|
|
|
|
def __init__(self, name, test_env, cmd_set, timeout=30, log_path=TCActionBase.LOG_PATH):
|
|
PerformanceTCBase.PerformanceTCBase.__init__(self, name, test_env, cmd_set=cmd_set,
|
|
timeout=timeout, log_path=log_path)
|
|
self.sta_num = 0
|
|
self.max_sta = 4
|
|
self.test_time = 60
|
|
self.delay1 = [5, 30]
|
|
self.delay2 = [5, 10]
|
|
self.change_mac = True
|
|
self.channel = 11
|
|
# load param from excel
|
|
for i in range(1, len(cmd_set)):
|
|
if cmd_set[i][0] != "dummy" and cmd_set[i][0] != "":
|
|
cmd_string = "self." + cmd_set[i][0]
|
|
exec cmd_string
|
|
pass
|
|
|
|
def process(self):
|
|
# configurable parameters
|
|
try:
|
|
sta_num = self.sta_num
|
|
max_sta = self.max_sta
|
|
test_time = self.test_time
|
|
# delay between JAP succeed and QAP
|
|
delay1 = self.delay1
|
|
# delay between QAP and JAP
|
|
delay2 = self.delay2
|
|
# if change mac each time before JAP
|
|
change_mac = self.change_mac
|
|
# channel
|
|
channel = self.channel
|
|
except StandardError, e:
|
|
raise StandardError("miss mandatory parameters")
|
|
|
|
# step 0, set op mode and enable dhcp
|
|
self.serial_write_line("SSC1", "op -S -o 2")
|
|
if self.check_response("SSC1", "+MODE:OK", 2) is False:
|
|
NativeLog.add_trace_critical("Failed to set ap mode")
|
|
return
|
|
self.serial_write_line("SSC1", "dhcp -E -o 2")
|
|
if self.check_response("SSC1", "+DHCP:AP,OK", 2) is False:
|
|
NativeLog.add_trace_critical("Failed to enable ap dhcp")
|
|
return
|
|
self.serial_write_line("SSC1", "dhcp -L -s 192.168.4.2 -e 192.168.4.100 -t 1")
|
|
if self.check_response("SSC1", "+DHCP:LEASE,OK", 2) is False:
|
|
NativeLog.add_trace_critical("Failed to enable ap dhcp")
|
|
return
|
|
self.serial_write_line("SSC1", "dhcp -S -o 2")
|
|
if self.check_response("SSC1", "+DHCP:AP,OK", 2) is False:
|
|
NativeLog.add_trace_critical("Failed to enable ap dhcp")
|
|
return
|
|
|
|
for i in range(sta_num):
|
|
self.serial_write_line("SSC%d" % (i+2), "op -S -o 1")
|
|
if self.check_response("SSC%d" % (i+2), "+MODE:OK", 2) is False:
|
|
NativeLog.add_trace_critical("Failed to set sta mode")
|
|
return
|
|
self.serial_write_line("SSC%d" % (i+2), "dhcp -S -o 1")
|
|
if self.check_response("SSC%d" % (i+2), "+DHCP:STA,OK", 2) is False:
|
|
NativeLog.add_trace_critical("Failed to enable sta dhcp")
|
|
|
|
# step 1, set ap config and load
|
|
ap_ssid = "".join([random.choice(string.uppercase) for m in range(15)])
|
|
ap_password = "".join([random.choice(string.lowercase) for m in range(15)])
|
|
|
|
self.serial_write_line("SSC1", "ap -S -s %s -p %s -t 3 -m %s -n %s"
|
|
% (ap_ssid, ap_password, max_sta, channel))
|
|
if self.check_response("SSC1", "+SAP:OK", 2) is False:
|
|
NativeLog.add_trace_critical("Failed to set AP")
|
|
return
|
|
|
|
# step 2, start thread to let STA JAP
|
|
sta_thread_list = []
|
|
for i in range(sta_num):
|
|
sta_thread_list.append(STAJAPThread(self, "SSC%d" % (i+2),
|
|
ap_ssid, ap_password, delay1, delay2, change_mac))
|
|
for sta_thread in sta_thread_list:
|
|
sta_thread.start()
|
|
|
|
# step 3, sleep for test time
|
|
for i in range(test_time):
|
|
self.flush_data("SSC1")
|
|
time.sleep(60)
|
|
|
|
# step 4, close all thread, will disconnect when exit thread
|
|
for sta_thread in sta_thread_list:
|
|
sta_thread.exit()
|
|
for sta_thread in sta_thread_list:
|
|
sta_thread.join()
|
|
# wait and make sure disconnect done
|
|
time.sleep(1)
|
|
|
|
# step 5, join AP and check
|
|
sta_num_temp = max_sta if sta_num > max_sta else sta_num
|
|
|
|
for i in range(sta_num_temp):
|
|
self.serial_write_line("SSC%d" % (i+2), "sta -C -s %s -p %s" % (ap_ssid, ap_password))
|
|
if self.check_response("SSC%d" % (i+2), "+JAP:CONNECTED", 45) is False:
|
|
self.set_result("Fail")
|
|
break
|
|
pass
|
|
else:
|
|
self.set_result("Succeed")
|
|
|
|
|
|
def main():
|
|
pass
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|