From 18e19ba3ec1de0a831e58f4e8b58ee2dc691bb89 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Mon, 8 Aug 2022 13:29:17 +0800 Subject: [PATCH] ci: fix base_mac_address test failure for S2 chips Some esp32s2 chips was burned with one MAC address by mistake. The MAC address code contains a special case for these chips, update MR to handle this special case. --- .../pytest_base_mac_address.py | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/examples/system/base_mac_address/pytest_base_mac_address.py b/examples/system/base_mac_address/pytest_base_mac_address.py index ee3dcb7381..a5ec6f03c4 100644 --- a/examples/system/base_mac_address/pytest_base_mac_address.py +++ b/examples/system/base_mac_address/pytest_base_mac_address.py @@ -12,16 +12,30 @@ def test_base_mac_address(dut: Dut) -> None: hex_r = r', '.join((r'0x([0-9a-f]{1,2})',) * 6) mac_m = dut.expect(r'BASE_MAC: Using "' + hex_r + r'" as base MAC address', timeout=5).groups() - def get_expected_mac_string(increment: int) -> str: + def get_expected_mac_string(increment: int, target: str) -> str: ''' Return the string representation of the MAC address mac_m with the last octet incremented. mac_m is an array of strings in hexa-decimal format without the '0x' prefix. ''' + # as a result of some esp32s2 chips burned with one MAC address by mistake, + # there are some MAC address are reserved for this bug fix. + # related mistake MAC address is 0x7cdfa1003000~0x7cdfa1005fff, + # reserved MAC address is 0x7cdfa1020000~0x7cdfa1022fff (MAC address + 0x1d000). + if target == 'esp32s2' and increment == 1: + hex_string = ''.join([m.decode('utf8').rjust(2, '0') for m in mac_m]) + mac_bytes = int(hex_string, 16) + + if mac_bytes >= int('7cdfa1003000', 16) and mac_bytes <= int('7cdfa1005fff', 16): + mac_bytes += int('1d000', 16) + hex_string = f'{mac_bytes:x}' + # Format the new string to match the expected output from the app (includes stripping leading zeroes) + return ', '.join('0x{}'.format(hex_string[i:i + 2].lstrip('0')) for i in range(0, len(hex_string), 2)) + return ', '.join(['0x{}'.format(m.decode('utf8')) for m in mac_m[:-1]] + [hex(int(mac_m[-1], 16) + increment)]) - dut.expect_exact('WIFI_STA MAC: ' + get_expected_mac_string(0), timeout=2) - dut.expect_exact('SoftAP MAC: ' + get_expected_mac_string(1)) + dut.expect_exact('WIFI_STA MAC: ' + get_expected_mac_string(0, dut.target), timeout=2) + dut.expect_exact('SoftAP MAC: ' + get_expected_mac_string(1, dut.target)) if dut.target != 'esp32s2': - dut.expect_exact('BT MAC: ' + get_expected_mac_string(2)) - dut.expect_exact('Ethernet MAC: ' + get_expected_mac_string(3)) + dut.expect_exact('BT MAC: ' + get_expected_mac_string(2, dut.target)) + dut.expect_exact('Ethernet MAC: ' + get_expected_mac_string(3, dut.target))