mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/py3_ci' into 'master'
Fix Python3 compatibility issues See merge request idf/esp-idf!3487
This commit is contained in:
commit
f55509bd3f
@ -27,6 +27,8 @@ import shlex
|
|||||||
|
|
||||||
from local_util import run_cmd_get_output, copy_if_modified
|
from local_util import run_cmd_get_output, copy_if_modified
|
||||||
|
|
||||||
|
# build_docs on the CI server sometimes fails under Python3. This is a workaround:
|
||||||
|
sys.setrecursionlimit(3500)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
builddir = os.environ['BUILDDIR']
|
builddir = os.environ['BUILDDIR']
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
SPHINXOPTS =
|
SPHINXOPTS =
|
||||||
# note: this is changed from sphinx-build so it depends on default python interpreter, not on /bin/sphinx-build
|
# note: this is changed from sphinx-build so it depends on default python interpreter, not on /bin/sphinx-build
|
||||||
# (which will be the most recently installed version of sphinx and may not match)
|
# (which will be the most recently installed version of sphinx and may not match)
|
||||||
SPHINXBUILD = python2 -m sphinx
|
SPHINXBUILD = python -m sphinx
|
||||||
PAPER =
|
PAPER =
|
||||||
BUILDDIR = _build
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
@ -170,9 +170,9 @@ def get_version():
|
|||||||
# No tag, look for a branch
|
# No tag, look for a branch
|
||||||
refs = subprocess.check_output(["git", "for-each-ref", "--points-at", "HEAD", "--format", "%(refname)"])
|
refs = subprocess.check_output(["git", "for-each-ref", "--points-at", "HEAD", "--format", "%(refname)"])
|
||||||
print("refs:\n%s" % refs)
|
print("refs:\n%s" % refs)
|
||||||
refs = refs.split("\n")
|
refs = refs.split(b"\n")
|
||||||
# Note: this looks for branches in 'origin' because GitLab CI doesn't check out a local branch
|
# Note: this looks for branches in 'origin' because GitLab CI doesn't check out a local branch
|
||||||
branches = [ r.replace("refs/remotes/origin/","").strip() for r in refs if r.startswith("refs/remotes/origin/") ]
|
branches = [ r.replace(b"refs/remotes/origin/",b"").strip() for r in refs if r.startswith(b"refs/remotes/origin/") ]
|
||||||
if len(branches) == 0:
|
if len(branches) == 0:
|
||||||
# last resort, return the commit (may happen on Gitlab CI sometimes, unclear why)
|
# last resort, return the commit (may happen on Gitlab CI sometimes, unclear why)
|
||||||
return (subprocess.check_output(["git", "rev-parse", "--short", "HEAD"]).strip(), "commit", False)
|
return (subprocess.check_output(["git", "rev-parse", "--short", "HEAD"]).strip(), "commit", False)
|
||||||
|
@ -19,8 +19,8 @@ import IDF
|
|||||||
global g_client_response;
|
global g_client_response;
|
||||||
global g_msg_to_client;
|
global g_msg_to_client;
|
||||||
|
|
||||||
g_client_response = ""
|
g_client_response = b""
|
||||||
g_msg_to_client = " 3XYZ"
|
g_msg_to_client = b" 3XYZ"
|
||||||
|
|
||||||
def get_my_ip():
|
def get_my_ip():
|
||||||
s1 = socket(AF_INET, SOCK_DGRAM)
|
s1 = socket(AF_INET, SOCK_DGRAM)
|
||||||
@ -81,11 +81,12 @@ def test_examples_protocol_asio_chat_client(env, extra_data):
|
|||||||
# 3. send host's IP to the client i.e. the `dut1`
|
# 3. send host's IP to the client i.e. the `dut1`
|
||||||
dut1.write(host_ip)
|
dut1.write(host_ip)
|
||||||
# 4. client `dut1` should receive a message
|
# 4. client `dut1` should receive a message
|
||||||
dut1.expect(g_msg_to_client[4:]) # Strip out the front 4 bytes of message len (see chat_message protocol)
|
dut1.expect(g_msg_to_client[4:].decode()) # Strip out the front 4 bytes of message len (see chat_message protocol)
|
||||||
# 5. write test message from `dut1` chat_client to the server
|
# 5. write test message from `dut1` chat_client to the server
|
||||||
dut1.write(test_msg)
|
dut1.write(test_msg)
|
||||||
while g_client_response == "":
|
while len(g_client_response) == 0:
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
g_client_response = g_client_response.decode()
|
||||||
print(g_client_response)
|
print(g_client_response)
|
||||||
# 6. evaluate host_server received this message
|
# 6. evaluate host_server received this message
|
||||||
if (g_client_response[4:7] == test_msg):
|
if (g_client_response[4:7] == test_msg):
|
||||||
@ -93,7 +94,7 @@ def test_examples_protocol_asio_chat_client(env, extra_data):
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
print("Failure!")
|
print("Failure!")
|
||||||
raise ValueError('Wrong data received from asi tcp server: {} (expected:{})'.format(g_client_response, test_msg))
|
raise ValueError('Wrong data received from asi tcp server: {} (expected:{})'.format(g_client_response[4:7], test_msg))
|
||||||
thread1.join()
|
thread1.join()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -27,7 +27,7 @@ def test_examples_protocol_asio_chat_server(env, extra_data):
|
|||||||
3. Test connects to server and sends a test message
|
3. Test connects to server and sends a test message
|
||||||
4. Test evaluates received test message from server
|
4. Test evaluates received test message from server
|
||||||
"""
|
"""
|
||||||
test_msg=" 4ABC\n"
|
test_msg=b" 4ABC\n"
|
||||||
dut1 = env.get_dut("chat_server", "examples/protocols/asio/chat_server")
|
dut1 = env.get_dut("chat_server", "examples/protocols/asio/chat_server")
|
||||||
# check and log bin size
|
# check and log bin size
|
||||||
binary_file = os.path.join(dut1.app.binary_path, "asio_chat_server.bin")
|
binary_file = os.path.join(dut1.app.binary_path, "asio_chat_server.bin")
|
||||||
|
@ -28,7 +28,7 @@ def test_examples_protocol_asio_tcp_server(env, extra_data):
|
|||||||
4. Test evaluates received test message from server
|
4. Test evaluates received test message from server
|
||||||
5. Test evaluates received test message on server stdout
|
5. Test evaluates received test message on server stdout
|
||||||
"""
|
"""
|
||||||
test_msg="echo message from client to server"
|
test_msg=b"echo message from client to server"
|
||||||
dut1 = env.get_dut("tcp_echo_server", "examples/protocols/asio/tcp_echo_server")
|
dut1 = env.get_dut("tcp_echo_server", "examples/protocols/asio/tcp_echo_server")
|
||||||
# check and log bin size
|
# check and log bin size
|
||||||
binary_file = os.path.join(dut1.app.binary_path, "asio_tcp_echo_server.bin")
|
binary_file = os.path.join(dut1.app.binary_path, "asio_tcp_echo_server.bin")
|
||||||
@ -53,7 +53,7 @@ def test_examples_protocol_asio_tcp_server(env, extra_data):
|
|||||||
print("Failure!")
|
print("Failure!")
|
||||||
raise ValueError('Wrong data received from asi tcp server: {} (expoected:{})'.format(data, test_msg))
|
raise ValueError('Wrong data received from asi tcp server: {} (expoected:{})'.format(data, test_msg))
|
||||||
# 5. check the client message appears also on server terminal
|
# 5. check the client message appears also on server terminal
|
||||||
dut1.expect(test_msg)
|
dut1.expect(test_msg.decode())
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -28,7 +28,7 @@ def test_examples_protocol_asio_udp_server(env, extra_data):
|
|||||||
4. Test evaluates received test message from server
|
4. Test evaluates received test message from server
|
||||||
5. Test evaluates received test message on server stdout
|
5. Test evaluates received test message on server stdout
|
||||||
"""
|
"""
|
||||||
test_msg="echo message from client to server"
|
test_msg=b"echo message from client to server"
|
||||||
dut1 = env.get_dut("udp_echo_server", "examples/protocols/asio/udp_echo_server")
|
dut1 = env.get_dut("udp_echo_server", "examples/protocols/asio/udp_echo_server")
|
||||||
# check and log bin size
|
# check and log bin size
|
||||||
binary_file = os.path.join(dut1.app.binary_path, "asio_udp_echo_server.bin")
|
binary_file = os.path.join(dut1.app.binary_path, "asio_udp_echo_server.bin")
|
||||||
@ -53,7 +53,7 @@ def test_examples_protocol_asio_udp_server(env, extra_data):
|
|||||||
print("Failure!")
|
print("Failure!")
|
||||||
raise ValueError('Wrong data received from asi udp server: {} (expoected:{})'.format(data, test_msg))
|
raise ValueError('Wrong data received from asi udp server: {} (expoected:{})'.format(data, test_msg))
|
||||||
# 5. check the client message appears also on server terminal
|
# 5. check the client message appears also on server terminal
|
||||||
dut1.expect(test_msg)
|
dut1.expect(test_msg.decode())
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_examples_protocol_asio_udp_server()
|
test_examples_protocol_asio_udp_server()
|
||||||
|
@ -23,7 +23,7 @@ def check_artifacts_expire_time():
|
|||||||
|
|
||||||
print("expire time for jobs:")
|
print("expire time for jobs:")
|
||||||
|
|
||||||
job_names = config.keys()
|
job_names = list(config.keys())
|
||||||
job_names.sort()
|
job_names.sort()
|
||||||
|
|
||||||
for job_name in job_names:
|
for job_name in job_names:
|
||||||
|
@ -20,6 +20,7 @@ This file provide method to control programmable attenuator.
|
|||||||
|
|
||||||
import time
|
import time
|
||||||
import serial
|
import serial
|
||||||
|
import codecs
|
||||||
|
|
||||||
|
|
||||||
def set_att(port, att, att_fix=False):
|
def set_att(port, att, att_fix=False):
|
||||||
@ -51,11 +52,11 @@ def set_att(port, att, att_fix=False):
|
|||||||
cmd_hex = "7e7e10{:02x}{:x}".format(att_t, 0x10 + att_t)
|
cmd_hex = "7e7e10{:02x}{:x}".format(att_t, 0x10 + att_t)
|
||||||
exp_res_hex = "7e7e20{:02x}00{:x}".format(att_t, 0x20 + att_t)
|
exp_res_hex = "7e7e20{:02x}00{:x}".format(att_t, 0x20 + att_t)
|
||||||
|
|
||||||
cmd = cmd_hex.decode("hex")
|
cmd = codecs.decode(cmd_hex, "hex")
|
||||||
exp_res = exp_res_hex.decode("hex")
|
exp_res = codecs.decode(exp_res_hex, "hex")
|
||||||
|
|
||||||
serial_port.write(cmd)
|
serial_port.write(cmd)
|
||||||
res = ""
|
res = b""
|
||||||
|
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
res += serial_port.read(20)
|
res += serial_port.read(20)
|
||||||
|
@ -27,15 +27,15 @@ class Control(object):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def apc_telnet_make_choice(cls, telnet, choice):
|
def apc_telnet_make_choice(cls, telnet, choice):
|
||||||
""" select a choice """
|
""" select a choice """
|
||||||
telnet.read_until("Event Log")
|
telnet.read_until(b"Event Log")
|
||||||
telnet.read_until(">")
|
telnet.read_until(b">")
|
||||||
telnet.write(choice + "\r\n")
|
telnet.write(choice.encode() + b"\r\n")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def apc_telnet_common_action(cls, telnet, check_str, action):
|
def apc_telnet_common_action(cls, telnet, check_str, action):
|
||||||
""" wait until a pattern and then write a line """
|
""" wait until a pattern and then write a line """
|
||||||
telnet.read_until(check_str)
|
telnet.read_until(check_str.encode())
|
||||||
telnet.write(action + "\r\n")
|
telnet.write(action.encode() + b"\r\n")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def control(cls, apc_ip, control_dict):
|
def control(cls, apc_ip, control_dict):
|
||||||
@ -83,13 +83,13 @@ class Control(object):
|
|||||||
cls.apc_telnet_make_choice(tn, "\033")
|
cls.apc_telnet_make_choice(tn, "\033")
|
||||||
|
|
||||||
# exit to main menu and logout
|
# exit to main menu and logout
|
||||||
tn.write("\033\r\n")
|
tn.write(b"\033\r\n")
|
||||||
tn.write("\033\r\n")
|
tn.write(b"\033\r\n")
|
||||||
tn.write("\033\r\n")
|
tn.write(b"\033\r\n")
|
||||||
tn.write("4\r\n")
|
tn.write(b"4\r\n")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def control_rest(cls, apc_ip, outlet, action):
|
def control_rest(cls, apc_ip, outlet, action):
|
||||||
outlet_list = range(1, 9)
|
outlet_list = list(range(1, 9)) # has to be a list if we want to remove from it under Python 3
|
||||||
outlet_list.remove(outlet)
|
outlet_list.remove(outlet)
|
||||||
cls.control(apc_ip, dict.fromkeys(outlet_list, action))
|
cls.control(apc_ip, dict.fromkeys(outlet_list, action))
|
||||||
|
@ -6,8 +6,8 @@ class Section(object):
|
|||||||
"""
|
"""
|
||||||
One Section of section table. contains info about section name, address and raw data
|
One Section of section table. contains info about section name, address and raw data
|
||||||
"""
|
"""
|
||||||
SECTION_START_PATTERN = re.compile("Contents of section (.+?):")
|
SECTION_START_PATTERN = re.compile(b"Contents of section (.+?):")
|
||||||
DATA_PATTERN = re.compile("([0-9a-f]{4,8})")
|
DATA_PATTERN = re.compile(b"([0-9a-f]{4,8})")
|
||||||
|
|
||||||
def __init__(self, name, start_address, data):
|
def __init__(self, name, start_address, data):
|
||||||
self.name = name
|
self.name = name
|
||||||
@ -52,7 +52,7 @@ class Section(object):
|
|||||||
start_address = 0
|
start_address = 0
|
||||||
# first find start line
|
# first find start line
|
||||||
for i, line in enumerate(raw_data):
|
for i, line in enumerate(raw_data):
|
||||||
if "Contents of section " in line: # do strcmp first to speed up
|
if b"Contents of section " in line: # do strcmp first to speed up
|
||||||
match = cls.SECTION_START_PATTERN.search(line)
|
match = cls.SECTION_START_PATTERN.search(line)
|
||||||
if match is not None:
|
if match is not None:
|
||||||
name = match.group(1)
|
name = match.group(1)
|
||||||
@ -60,11 +60,11 @@ class Section(object):
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
# do some error handling
|
# do some error handling
|
||||||
raw_data = [""] # add a dummy first data line
|
raw_data = [b""] # add a dummy first data line
|
||||||
|
|
||||||
def process_data_line(line_to_process):
|
def process_data_line(line_to_process):
|
||||||
# first remove the ascii part
|
# first remove the ascii part
|
||||||
hex_part = line_to_process.split(" ")[0]
|
hex_part = line_to_process.split(b" ")[0]
|
||||||
# process rest part
|
# process rest part
|
||||||
data_list = cls.DATA_PATTERN.findall(hex_part)
|
data_list = cls.DATA_PATTERN.findall(hex_part)
|
||||||
try:
|
try:
|
||||||
@ -74,7 +74,7 @@ class Section(object):
|
|||||||
|
|
||||||
def hex_to_str(hex_data):
|
def hex_to_str(hex_data):
|
||||||
if len(hex_data) % 2 == 1:
|
if len(hex_data) % 2 == 1:
|
||||||
hex_data = "0" + hex_data # append zero at the beginning
|
hex_data = b"0" + hex_data # append zero at the beginning
|
||||||
_length = len(hex_data)
|
_length = len(hex_data)
|
||||||
return "".join([chr(int(hex_data[_i:_i + 2], base=16))
|
return "".join([chr(int(hex_data[_i:_i + 2], base=16))
|
||||||
for _i in range(0, _length, 2)])
|
for _i in range(0, _length, 2)])
|
||||||
|
@ -68,7 +68,7 @@ class Parser(object):
|
|||||||
table = CreateSectionTable.SectionTable("section_table.tmp")
|
table = CreateSectionTable.SectionTable("section_table.tmp")
|
||||||
tags = self.parse_tags(os.path.join(config_output_folder, self.SDKCONFIG_FILE))
|
tags = self.parse_tags(os.path.join(config_output_folder, self.SDKCONFIG_FILE))
|
||||||
test_cases = []
|
test_cases = []
|
||||||
with open("case_address.tmp", "r") as f:
|
with open("case_address.tmp", "rb") as f:
|
||||||
for line in f:
|
for line in f:
|
||||||
# process symbol table like: "3ffb4310 l O .dram0.data 00000018 test_desc_33$5010"
|
# process symbol table like: "3ffb4310 l O .dram0.data 00000018 test_desc_33$5010"
|
||||||
line = line.split()
|
line = line.split()
|
||||||
@ -235,7 +235,7 @@ class Parser(object):
|
|||||||
dump parsed test cases to YAML file for test bench input
|
dump parsed test cases to YAML file for test bench input
|
||||||
:param test_cases: parsed test cases
|
:param test_cases: parsed test cases
|
||||||
"""
|
"""
|
||||||
with open(os.path.join(self.idf_path, self.TEST_CASE_FILE), "wb+") as f:
|
with open(os.path.join(self.idf_path, self.TEST_CASE_FILE), "w+") as f:
|
||||||
yaml.dump({"test cases": test_cases}, f, allow_unicode=True, default_flow_style=False)
|
yaml.dump({"test cases": test_cases}, f, allow_unicode=True, default_flow_style=False)
|
||||||
|
|
||||||
def copy_module_def_file(self):
|
def copy_module_def_file(self):
|
||||||
@ -297,7 +297,7 @@ def test_parser():
|
|||||||
}
|
}
|
||||||
sdkconfig = ["123", "789"]
|
sdkconfig = ["123", "789"]
|
||||||
tags = parser.parse_tags_internal(sdkconfig, config_dependency, parser.CONFIG_PATTERN)
|
tags = parser.parse_tags_internal(sdkconfig, config_dependency, parser.CONFIG_PATTERN)
|
||||||
assert tags == ['a', 'd', 'f']
|
assert sorted(tags) == ['a', 'd', 'f'] # sorted is required for older Python3, e.g. 3.4.8
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user