-
Notifications
You must be signed in to change notification settings - Fork 7.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature/update_efuse_example_test_to_pytest' into 'master'
efuse_exmple_test: Update to pytest framework See merge request espressif/esp-idf!18702
- Loading branch information
Showing
2 changed files
with
444 additions
and
240 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
import logging | ||
import os | ||
|
||
import pytest | ||
from _pytest.fixtures import FixtureRequest | ||
from _pytest.monkeypatch import MonkeyPatch | ||
from pytest_embedded_idf.app import FlashFile | ||
from pytest_embedded_idf.serial import IdfSerial | ||
|
||
|
||
# This is a custom IdfSerial class to support custom functionality | ||
# which is required only for this test | ||
class EfuseFlashEncSerial(IdfSerial): | ||
|
||
@IdfSerial.use_esptool | ||
def write_flash_no_enc(self) -> None: | ||
self.app.flash_settings['encrypt'] = False | ||
flash_files = [] | ||
for file in self.app.flash_files: | ||
# Set encrypted flag to false for each file. | ||
flash_files.append(file._replace(encrypted=False)) | ||
# Replace the original tuple with modified tuple with all the files marked as unencrypted. | ||
self.app.flash_files = tuple(flash_files) | ||
# Now flash the files | ||
self.flash() | ||
|
||
def bootloader_flash(self) -> None: | ||
""" | ||
Flash bootloader. | ||
:return: None | ||
""" | ||
logging.info('Flashing bootloader') | ||
bootloader_path = os.path.join(self.app.binary_path, 'bootloader', 'bootloader.bin') | ||
offs = int(self.app.sdkconfig.get('BOOTLOADER_OFFSET_IN_FLASH', 0)) | ||
logging.info('bootloader offset is {0}'.format(hex(offs))) | ||
prev_flash_files = self.app.flash_files | ||
flash_files = [] | ||
flash_files.append( | ||
FlashFile( | ||
offs, | ||
bootloader_path, | ||
False, | ||
) | ||
) | ||
self.app.flash_files = flash_files | ||
self.app.flash_settings['encrypt'] = False | ||
self.flash() | ||
# Restore self.app.flash files to original value | ||
self.app.flash_files = prev_flash_files | ||
|
||
def erase_field_on_emul_efuse(self, pos_of_bits: list) -> None: | ||
emul_efuse_bin_path = os.path.join(self.app.binary_path, 'emul_efuse.bin') | ||
self.dump_flash(output=emul_efuse_bin_path, partition='emul_efuse') | ||
logging.info('Erasing field on emulated efuse') | ||
|
||
def erase_bit(pos_of_bit: int) -> None: | ||
nbytes, nbits = divmod(pos_of_bit, 8) | ||
with open(emul_efuse_bin_path, 'r+b') as f: | ||
f.seek(nbytes) | ||
data = ord(f.read(1)) | ||
data &= ~(1 << nbits) | ||
f.seek(-1, os.SEEK_CUR) | ||
f.write(bytes([data])) | ||
|
||
for pos_of_bit in sorted(pos_of_bits): | ||
erase_bit(pos_of_bit) | ||
|
||
offs = self.app.partition_table['emul_efuse']['offset'] | ||
logging.info('emul efuse offset is {0}'.format(hex(offs))) | ||
prev_flash_files = self.app.flash_files | ||
|
||
flash_files = [] | ||
flash_files.append( | ||
FlashFile( | ||
offs, | ||
emul_efuse_bin_path, | ||
False, | ||
) | ||
) | ||
self.app.flash_files = flash_files | ||
self.app.flash_settings['encrypt'] = False | ||
self.flash() | ||
self.app.flash_files = prev_flash_files | ||
|
||
|
||
@pytest.fixture(scope='module') | ||
def monkeypatch_module(request: FixtureRequest) -> MonkeyPatch: | ||
mp = MonkeyPatch() | ||
request.addfinalizer(mp.undo) | ||
return mp | ||
|
||
|
||
@pytest.fixture(scope='module', autouse=True) | ||
def replace_dut_class(monkeypatch_module: MonkeyPatch) -> None: | ||
monkeypatch_module.setattr('pytest_embedded_idf.serial.IdfSerial', EfuseFlashEncSerial) |
Oops, something went wrong.