Skip to content

Commit 9a355b7

Browse files
committed
Updated upload-mock tests for generation
1 parent 53e1d25 commit 9a355b7

File tree

1 file changed

+91
-68
lines changed

1 file changed

+91
-68
lines changed

test/test_upload_mock.py

Lines changed: 91 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import sys
1818
import hashlib
1919
import pytest
20+
import os
2021
from pathlib import Path
2122
from typing import Union
2223

@@ -29,107 +30,130 @@ def generate_build_dir(sketch_path):
2930

3031

3132
def generate_expected_output(
32-
output: str, upload_tools: Union[dict, str], data_dir: str, upload_port: str, build_dir: str, sketch_name: str
33+
output: Union[dict, str], data_dir: str, upload_port: str, build_dir: str, sketch_name: str
3334
) -> str:
34-
if isinstance(upload_tools, str):
35-
tool = upload_tools
35+
if isinstance(output, str):
36+
out = output
3637
else:
37-
tool = upload_tools[sys.platform]
38-
return output.format(
39-
tool_executable=tool, data_dir=data_dir, upload_port=upload_port, build_dir=build_dir, sketch_name=sketch_name,
38+
out = output[sys.platform]
39+
return out.format(
40+
data_dir=data_dir,
41+
upload_port=upload_port,
42+
build_dir=build_dir,
43+
sketch_name=sketch_name,
4044
).replace("\\", "/")
4145

4246

47+
indexes = [
48+
"https://adafruit.github.io/arduino-board-index/package_adafruit_index.json",
49+
"https://dl.espressif.com/dl/package_esp32_index.json",
50+
"http://arduino.esp8266.com/stable/package_esp8266com_index.json",
51+
]
52+
53+
cores_to_install = [
54+
"arduino:[email protected]",
55+
"adafruit:[email protected]",
56+
57+
"esp8266:[email protected]",
58+
]
59+
4360
testdata = [
4461
(
45-
"",
4662
"arduino:avr:uno",
47-
"arduino:[email protected]",
48-
[],
4963
"/dev/ttyACM0",
50-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
51-
"{tool_executable} "
52-
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
53-
+ '-v -V -patmega328p -carduino "-P{upload_port}" -b115200 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
64+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
65+
'"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
66+
'-v -V -patmega328p -carduino "-P/dev/ttyACM0" -b115200 -D '
67+
'"-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"\n',
5468
),
5569
(
56-
"",
5770
"arduino:avr:leonardo",
58-
"arduino:[email protected]",
59-
[],
6071
"/dev/ttyACM999",
61-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
62-
"{tool_executable} "
63-
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
64-
+ '-v -V -patmega32u4 -cavr109 "-P{upload_port}0" -b57600 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
72+
"Performing 1200-bps touch reset on serial port /dev/ttyACM999\n"
73+
"Waiting for upload port...\n"
74+
"Upload port found on /dev/ttyACM9990\n"
75+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
76+
'"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
77+
'-v -V -patmega32u4 -cavr109 "-P/dev/ttyACM9990" -b57600 -D '
78+
'"-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"\n',
6579
),
6680
(
67-
"https://adafruit.github.io/arduino-board-index/package_adafruit_index.json",
6881
"adafruit:avr:flora8",
69-
"adafruit:[email protected]",
70-
["arduino:[email protected]"],
7182
"/dev/ttyACM0",
72-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
73-
"{tool_executable} "
74-
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
75-
+ '-v -patmega32u4 -cavr109 -P{upload_port} -b57600 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
83+
"Performing 1200-bps touch reset on serial port /dev/ttyACM0\n"
84+
"Waiting for upload port...\n"
85+
"No upload port found, using /dev/ttyACM0 as fallback\n"
86+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
87+
'"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
88+
"-v -patmega32u4 -cavr109 -P/dev/ttyACM0 -b57600 -D "
89+
'"-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"\n',
7690
),
7791
(
78-
"https://adafruit.github.io/arduino-board-index/package_adafruit_index.json",
7992
"adafruit:avr:flora8",
80-
"adafruit:[email protected]",
81-
["arduino:[email protected]"],
8293
"/dev/ttyACM999",
83-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
84-
"{tool_executable} "
85-
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
86-
+ '-v -patmega32u4 -cavr109 -P{upload_port}0 -b57600 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
94+
"Performing 1200-bps touch reset on serial port /dev/ttyACM999\n"
95+
"Waiting for upload port...\n"
96+
"Upload port found on /dev/ttyACM9990\n"
97+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
98+
'"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
99+
"-v -patmega32u4 -cavr109 -P/dev/ttyACM9990 -b57600 -D "
100+
'"-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"\n',
87101
),
88102
(
89-
"https://dl.espressif.com/dl/package_esp32_index.json",
90103
"esp32:esp32:esp32thing",
91-
92-
[],
93104
"/dev/ttyACM0",
94105
{
95-
"linux": 'python "{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.py"',
96-
"darwin": '"{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.py"',
97-
"win32": '"{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.exe"',
106+
"linux": "python "
107+
'"{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.py" '
108+
'--chip esp32 --port "/dev/ttyACM0" --baud 921600 --before '
109+
"default_reset --after hard_reset write_flash -z --flash_mode "
110+
"dio --flash_freq 80m --flash_size detect 0xe000 "
111+
'"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin" '
112+
"0x1000 "
113+
'"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader_dio_80m.bin" '
114+
'0x10000 "{build_dir}/{sketch_name}.ino.bin" 0x8000 '
115+
'"{build_dir}/{sketch_name}.ino.partitions.bin"\n',
116+
"darwin": '"{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool" '
117+
'--chip esp32 --port "/dev/ttyACM0" --baud 921600 --before '
118+
"default_reset --after hard_reset write_flash -z "
119+
"--flash_mode dio --flash_freq 80m --flash_size detect "
120+
"0xe000 "
121+
'"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin" '
122+
"0x1000 "
123+
'"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader_dio_80m.bin" '
124+
'0x10000 "{build_dir}/{sketch_name}.ino.bin" 0x8000 '
125+
'"{build_dir}/{sketch_name}.ino.partitions.bin"\n',
126+
"win32": '"{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.exe" '
127+
'--chip esp32 --port "/dev/ttyACM0" --baud 921600 --before '
128+
"default_reset --after hard_reset write_flash -z "
129+
"--flash_mode dio --flash_freq 80m --flash_size detect "
130+
"0xe000 "
131+
'"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin" '
132+
"0x1000 "
133+
'"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader_dio_80m.bin" '
134+
'0x10000 "{build_dir}/{sketch_name}.ino.bin" 0x8000 '
135+
'"{build_dir}/{sketch_name}.ino.partitions.bin"\n',
98136
},
99-
"{tool_executable} "
100-
+ '--chip esp32 --port "{upload_port}" --baud 921600 --before default_reset '
101-
+ "--after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 "
102-
+ '"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin" 0x1000 '
103-
+ '"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader_dio_80m.bin" 0x10000 '
104-
+ '"{build_dir}/{sketch_name}.ino.bin" 0x8000 "{build_dir}/{sketch_name}.ino.partitions.bin"',
105137
),
106138
(
107-
"http://arduino.esp8266.com/stable/package_esp8266com_index.json",
108139
"esp8266:esp8266:generic",
109-
"esp8266:[email protected]",
110-
[],
111140
"/dev/ttyACM0",
112-
'"{data_dir}/packages/esp8266/tools/python3/3.7.2-post1/python3"',
113-
"{tool_executable} "
114-
+ '"{data_dir}/packages/esp8266/hardware/esp8266/3.0.1/tools/upload.py" '
115-
+ '--chip esp8266 --port "{upload_port}" --baud "115200" "" '
116-
+ "--before default_reset --after hard_reset write_flash 0x0 "
117-
+ '"{build_dir}/{sketch_name}.ino.bin"',
141+
'"{data_dir}/packages/esp8266/tools/python3/3.7.2-post1/python3" '
142+
'"{data_dir}/packages/esp8266/hardware/esp8266/3.0.1/tools/upload.py" '
143+
'--chip esp8266 --port "/dev/ttyACM0" --baud "115200" "" --before '
144+
"default_reset --after hard_reset write_flash 0x0 "
145+
'"{build_dir}/{sketch_name}.ino.bin"\n',
118146
),
119147
]
120148

121149

122-
@pytest.mark.parametrize("package_index, fqbn, core, core_dependencies, upload_port, upload_tools, output", testdata)
150+
@pytest.mark.parametrize("fqbn, upload_port, output", testdata)
123151
def test_upload_sketch(
124152
run_command,
125153
session_data_dir,
126154
downloads_dir,
127-
package_index,
128155
fqbn,
129-
core,
130-
core_dependencies,
131156
upload_port,
132-
upload_tools,
133157
output,
134158
):
135159
env = {
@@ -138,15 +162,15 @@ def test_upload_sketch(
138162
"ARDUINO_SKETCHBOOK_DIR": session_data_dir,
139163
}
140164

141-
if package_index:
165+
# Install everything just once
166+
if not os.path.isdir(session_data_dir + "/packages"):
142167
assert run_command("config init --overwrite", custom_env=env)
143-
assert run_command(f"config add board_manager.additional_urls {package_index}", custom_env=env)
168+
for package_index in indexes:
169+
assert run_command(f"config add board_manager.additional_urls {package_index}", custom_env=env)
144170
assert run_command("update", custom_env=env)
145171

146-
assert run_command(f"core install {core}", custom_env=env)
147-
148-
for d in core_dependencies:
149-
assert run_command(f"core install {d}", custom_env=env)
172+
for d in cores_to_install:
173+
assert run_command(f"core install {d}", custom_env=env)
150174

151175
# Create a sketch
152176
sketch_name = "TestSketchForUpload"
@@ -161,9 +185,8 @@ def test_upload_sketch(
161185

162186
generate_expected_output(
163187
output=output,
164-
upload_tools=upload_tools,
165188
data_dir=session_data_dir,
166189
upload_port=upload_port,
167190
build_dir=build_dir,
168191
sketch_name=sketch_name,
169-
) in res.stdout.replace("\\", "/")
192+
) in res.stdout.replace("\\", "/").replace("\r", "")

0 commit comments

Comments
 (0)