Skip to content

Commit 8082626

Browse files
committed
Add erase-flash option to erase the flash before programming.
Signed-off-by: Abdelatif Guettouche <[email protected]>
1 parent e9e46aa commit 8082626

File tree

4 files changed

+26
-2
lines changed
  • pytest-embedded/pytest_embedded
  • pytest-embedded-arduino/pytest_embedded_arduino
  • pytest-embedded-idf/pytest_embedded_idf
  • pytest-embedded-serial-esp/pytest_embedded_serial_esp

4 files changed

+26
-2
lines changed

pytest-embedded-arduino/pytest_embedded_arduino/serial.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ def __init__(
2525
baud: int = EspSerial.DEFAULT_BAUDRATE,
2626
target: Optional[str] = None,
2727
skip_autoflash: bool = False,
28+
erase_flash: bool = False,
2829
**kwargs,
2930
) -> None:
3031
self.app = app
31-
super().__init__(pexpect_proc, target or self.app.target, port, baud, skip_autoflash, **kwargs)
32+
super().__init__(pexpect_proc, target or self.app.target, port, baud, skip_autoflash, erase_flash, **kwargs)
3233

3334
def _start(self):
3435
if self.skip_autoflash:
@@ -68,6 +69,9 @@ def __init__(self, attributes):
6869
default_kwargs['force'] = False
6970
default_kwargs['chip'] = self.app.target
7071

72+
if self.erase_flash:
73+
default_kwargs['erase_all'] = True
74+
7175
default_kwargs.update(self.app.flash_settings)
7276
flash_args = FlashArgs(default_kwargs)
7377

pytest-embedded-idf/pytest_embedded_idf/serial.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def __init__(
2929
port: Optional[str] = None,
3030
baud: int = EspSerial.DEFAULT_BAUDRATE,
3131
skip_autoflash: bool = False,
32+
erase_flash: bool = False,
3233
port_app_cache: Dict[str, str] = None,
3334
confirm_target_elf_sha256: bool = False,
3435
erase_nvs: bool = False,
@@ -45,7 +46,7 @@ def __init__(
4546
if target and self.app.target and self.app.target != target:
4647
raise ValueError(f'Targets do not match. App target: {self.app.target}, Cmd target: {target}.')
4748

48-
super().__init__(pexpect_proc, target or app.target, port, baud, skip_autoflash, **kwargs)
49+
super().__init__(pexpect_proc, target or app.target, port, baud, skip_autoflash, erase_flash, **kwargs)
4950

5051
def _post_init(self):
5152
if self.esp.serial_port in self._port_app_cache:
@@ -129,6 +130,9 @@ def __init__(self, attributes):
129130
if self.ESPTOOL_VERSION == EsptoolVersion.V4:
130131
default_kwargs['force'] = False
131132

133+
if self.erase_flash:
134+
default_kwargs['erase_all'] = True
135+
132136
default_kwargs.update(self.app.flash_settings)
133137
default_kwargs.update(self.app.flash_args.get('extra_esptool_args', {}))
134138
args = FlashArgs(default_kwargs)

pytest-embedded-serial-esp/pytest_embedded_serial_esp/serial.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ def __init__(
4242
port: Optional[str] = None,
4343
baud: int = DEFAULT_BAUDRATE,
4444
skip_autoflash: bool = False,
45+
erase_flash: bool = False,
4546
port_target_cache: Dict[str, str] = None,
4647
**kwargs,
4748
) -> None:
@@ -87,6 +88,7 @@ def __init__(
8788
self.target = target
8889

8990
self.skip_autoflash = skip_autoflash
91+
self.erase_flash = erase_flash
9092
super().__init__(pexpect_proc, port=self.esp._port, **kwargs)
9193

9294
def _post_init(self):

pytest-embedded/pytest_embedded/plugin.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ def pytest_addoption(parser):
115115
'--skip-autoflash',
116116
help='y/yes/true for True and n/no/false for False. Set to True to disable auto flash. (Default: False)',
117117
)
118+
esp_group.addoption(
119+
'--erase-flash',
120+
help='y/yes/true for True and n/no/false for False. Set to True to erase flash before programming. '
121+
'(Default: False)',
122+
)
118123

119124
idf_group = parser.getgroup('embedded-idf')
120125
idf_group.addoption(
@@ -566,6 +571,13 @@ def skip_autoflash(request: FixtureRequest) -> Optional[bool]:
566571
return _request_param_or_config_option_or_default(request, 'skip_autoflash', None)
567572

568573

574+
@pytest.fixture
575+
@multi_dut_argument
576+
def erase_flash(request: FixtureRequest) -> Optional[bool]:
577+
"""Enable parametrization for the same cli option"""
578+
return _request_param_or_config_option_or_default(request, 'erase_flash', None)
579+
580+
569581
#######
570582
# idf #
571583
#######
@@ -704,6 +716,7 @@ def _fixture_classes_and_options(
704716
target,
705717
baud,
706718
skip_autoflash,
719+
erase_flash,
707720
part_tool,
708721
confirm_target_elf_sha256,
709722
erase_nvs,
@@ -792,6 +805,7 @@ def _fixture_classes_and_options(
792805
'port': os.getenv('ESPPORT') or port,
793806
'baud': int(os.getenv('ESPBAUD') or baud or EspSerial.DEFAULT_BAUDRATE),
794807
'skip_autoflash': skip_autoflash,
808+
'erase_flash': erase_flash,
795809
}
796810
if 'idf' in _services:
797811
from pytest_embedded_idf.serial import IdfSerial

0 commit comments

Comments
 (0)