ci: rename eco tags to revision

This commit is contained in:
Fu Hanxi
2026-02-25 13:05:17 +01:00
parent 7b1d576416
commit 4f92cfd077
60 changed files with 130 additions and 127 deletions
+9 -6
View File
@@ -23,12 +23,7 @@
- [Grammar](#grammar) - [Grammar](#grammar)
- [Special Rules](#special-rules) - [Special Rules](#special-rules)
- [Upload/Download Artifacts to Internal Minio Server](#uploaddownload-artifacts-to-internal-minio-server) - [Upload/Download Artifacts to Internal Minio Server](#uploaddownload-artifacts-to-internal-minio-server)
- [Users Without Access to Minio](#users-without-access-to-minio) - [Revision Marker Naming Rules](#revision-marker-naming-rules)
- [Users With Access to Minio](#users-with-access-to-minio)
- [Env Vars for Minio](#env-vars-for-minio)
- [Artifacts Types and File Patterns](#artifacts-types-and-file-patterns)
- [Upload](#upload)
- [Download](#download)
## General Workflow ## General Workflow
@@ -256,3 +251,11 @@ In ESP-IDF CI, there's a few more special rules are additionally supported to di
## Upload/Download Artifacts to Internal Minio Server ## Upload/Download Artifacts to Internal Minio Server
Please refer to the documentation [here](https://docs.espressif.com/projects/idf-ci/en/latest/guides/cli.html) Please refer to the documentation [here](https://docs.espressif.com/projects/idf-ci/en/latest/guides/cli.html)
## Revision Marker Naming Rules
When specifying chip revisions for testing markers, configurations or filenames, strictly follow the format `esp32<series>_rev<number>` (or similarly `<series>_rev<number>` when brief).
> e.g., `esp32_rev3`, `esp32c2_rev2`, `esp32c3_rev1`, `esp32p4_rev1`, `esp32c5_rev1`
This convention replaces the legacy `eco` naming format (e.g., `esp32c2eco4`).
@@ -35,8 +35,8 @@ def test_adc_esp32c2_xtal_26mhz(dut: Dut) -> None:
# TODO: IDF-15005 # TODO: IDF-15005
# P4 REV2 adc # P4 REV2 adc
# @pytest.mark.adc # @pytest.mark.adc
# @pytest.mark.esp32p4_eco4 # @pytest.mark.esp32p4_rev1
# @pytest.mark.parametrize('config', ['esp32p4_eco4'], indirect=True) # @pytest.mark.parametrize('config', ['esp32p4_rev1'], indirect=True)
# @idf_parametrize( # @idf_parametrize(
# 'target', # 'target',
# ['esp32p4'], # ['esp32p4'],
@@ -27,30 +27,30 @@ def test_external_coex_unit_test_esp32c2_xtal26m(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config, baud', 'config, baud',
[ [
('esp32c2eco4_xtal26m', '74880'), ('esp32c2_rev2_xtal26m', '74880'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_external_coex_unit_test_esp32c2eco4_xtal26m(dut: Dut) -> None: def test_external_coex_unit_test_esp32c2_rev2_xtal26m(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
'esp32c3eco7', 'esp32c3_rev1',
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_external_coex_unit_test_esp32c3eco7(dut: Dut) -> None: def test_external_coex_unit_test_esp32c3_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -22,7 +22,7 @@ def test_gptimer(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -31,7 +31,7 @@ def test_gptimer(dut: Dut) -> None:
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_gptimer_esp32c5_eco3(dut: Dut) -> None: def test_gptimer_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -41,7 +41,7 @@ def test_i2s_esp32c5(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -54,7 +54,7 @@ def test_i2s_esp32c5(dut: Dut) -> None:
['esp32c5'], ['esp32c5'],
indirect=['target'], indirect=['target'],
) )
def test_i2s_esp32c5_eco3(dut: Dut) -> None: def test_i2s_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -22,11 +22,11 @@ def test_isp(dut: Dut) -> None:
# TODO: IDF-15006 # TODO: IDF-15006
# @pytest.mark.generic # @pytest.mark.generic
# @pytest.mark.esp32p4_eco4 # @pytest.mark.esp32p4_rev1
# @pytest.mark.parametrize( # @pytest.mark.parametrize(
# 'config', # 'config',
# [ # [
# ('esp32p4_eco4'), # ('esp32p4_rev1'),
# ], # ],
# indirect=True, # indirect=True,
# ) # )
@@ -37,7 +37,7 @@ def test_ledc_esp32c5(dut: IdfDut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -46,7 +46,7 @@ def test_ledc_esp32c5(dut: IdfDut) -> None:
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_ledc_esp32c5_eco3(dut: IdfDut) -> None: def test_ledc_esp32c5_rev1(dut: IdfDut) -> None:
dut.run_all_single_board_cases(reset=True) dut.run_all_single_board_cases(reset=True)
@@ -33,7 +33,7 @@ def test_mcpwm_esp32c5(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -42,5 +42,5 @@ def test_mcpwm_esp32c5(dut: Dut) -> None:
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_mcpwm_esp32c5_eco3(dut: Dut) -> None: def test_mcpwm_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -55,7 +55,7 @@ def test_parlio_esp32c5(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -64,5 +64,5 @@ def test_parlio_esp32c5(dut: Dut) -> None:
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_parlio_esp32c5_eco3(dut: Dut) -> None: def test_parlio_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -20,16 +20,16 @@ def test_ppa(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.eco4 @pytest.mark.esp32p4_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
('esp32p4_eco4'), ('esp32p4_rev1'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32p4'], indirect=['target']) @idf_parametrize('target', ['esp32p4'], indirect=['target'])
def test_ppa_esp32p4_eco4(dut: Dut) -> None: def test_ppa_esp32p4_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -57,7 +57,7 @@ def test_rmt_esp32c5(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -66,7 +66,7 @@ def test_rmt_esp32c5(dut: Dut) -> None:
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_rmt_esp32c5_eco3(dut: Dut) -> None: def test_rmt_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -30,8 +30,8 @@ def test_sdm_esp32c5(dut: IdfDut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize('config', ['release'], indirect=True) @pytest.mark.parametrize('config', ['release'], indirect=True)
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_sdm_esp32c5_eco3(dut: IdfDut) -> None: def test_sdm_esp32c5_rev1(dut: IdfDut) -> None:
dut.run_all_single_board_cases(group='sdm') dut.run_all_single_board_cases(group='sdm')
@@ -41,7 +41,7 @@ def test_master_single_dev_esp32c5(case_tester) -> None: # type: ignore
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -50,7 +50,7 @@ def test_master_single_dev_esp32c5(case_tester) -> None: # type: ignore
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_master_single_dev_esp32c5_eco3(case_tester) -> None: # type: ignore def test_master_single_dev_esp32c5_rev1(case_tester) -> None: # type: ignore
for case in case_tester.test_menu: for case in case_tester.test_menu:
if 'test_env' in case.attributes: if 'test_env' in case.attributes:
continue # If `test_env` is defined, should not run on generic runner continue # If `test_env` is defined, should not run on generic runner
@@ -22,10 +22,10 @@ def test_slave_single_dev_esp32c5(case_tester) -> None: # type: ignore
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize('config', ['release'], indirect=True) @pytest.mark.parametrize('config', ['release'], indirect=True)
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_slave_single_dev_esp32c5_eco3(case_tester) -> None: # type: ignore def test_slave_single_dev_esp32c5_rev1(case_tester) -> None: # type: ignore
case_tester.run_all_normal_cases(reset=True) case_tester.run_all_normal_cases(reset=True)
@@ -18,10 +18,10 @@ def test_slave_hd_single_dev(case_tester) -> None: # type: ignore
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize('config', ['release'], indirect=True) @pytest.mark.parametrize('config', ['release'], indirect=True)
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_slave_hd_single_dev_esp32c5_eco3(case_tester) -> None: # type: ignore def test_slave_hd_single_dev_esp32c5_rev1(case_tester) -> None: # type: ignore
case_tester.run_all_normal_cases(reset=True, timeout=180) case_tester.run_all_normal_cases(reset=True, timeout=180)
@@ -24,7 +24,7 @@ def test_temperature_sensor_driver(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -37,7 +37,7 @@ def test_temperature_sensor_driver(dut: Dut) -> None:
['esp32c5'], ['esp32c5'],
indirect=['target'], indirect=['target'],
) )
def test_temperature_sensor_driver_esp32c5_eco3(dut: Dut) -> None: def test_temperature_sensor_driver_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -25,10 +25,10 @@ def test_driver_twai_loopbk(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@pytest.mark.parametrize('config', ['release', 'cache_safe'], indirect=True) @pytest.mark.parametrize('config', ['release', 'cache_safe'], indirect=True)
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_driver_twai_loopbk_c5eco3(dut: Dut) -> None: def test_driver_twai_loopbk_c5rev1(dut: Dut) -> None:
dut.run_all_single_board_cases(group='twai', reset=True) dut.run_all_single_board_cases(group='twai', reset=True)
@@ -51,7 +51,7 @@ class EthTestIntf:
def configure_eth_if(self, eth_type: int = 0) -> Iterator[socket.socket]: def configure_eth_if(self, eth_type: int = 0) -> Iterator[socket.socket]:
if eth_type == 0: if eth_type == 0:
eth_type = self.eth_type eth_type = self.eth_type
so = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(eth_type)) so = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(eth_type)) # type: ignore
so.bind((self.target_if, 0)) so.bind((self.target_if, 0))
try: try:
yield so yield so
@@ -306,7 +306,7 @@ def test_esp32_emac_clko(dut: IdfDut) -> None:
'config, target', 'config, target',
[ [
pytest.param('default_generic_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]), pytest.param('default_generic_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]),
pytest.param('default_generic_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_eco4]), pytest.param('default_generic_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_rev1]),
], ],
indirect=['target'], indirect=['target'],
) )
@@ -320,7 +320,7 @@ def test_esp32p4_ethernet(dut: IdfDut) -> None:
'config, target', 'config, target',
[ [
pytest.param('default_generic_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]), pytest.param('default_generic_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]),
pytest.param('default_generic_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_eco4]), pytest.param('default_generic_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_rev1]),
], ],
indirect=['target'], indirect=['target'],
) )
@@ -334,7 +334,7 @@ def test_esp32p4_emac(dut: IdfDut) -> None:
'config, target', 'config, target',
[ [
pytest.param('rmii_clko_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]), pytest.param('rmii_clko_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]),
pytest.param('rmii_clko_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_eco4]), pytest.param('rmii_clko_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_rev1]),
], ],
indirect=['target'], indirect=['target'],
) )
@@ -32,11 +32,11 @@ def test_esp_hw_support_esp32c5(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@idf_parametrize( @idf_parametrize(
'config,target', 'config,target',
[('release', 'esp32c5')], [('release', 'esp32c5')],
indirect=['config', 'target'], indirect=['config', 'target'],
) )
def test_esp_hw_support_esp32c5_eco3(dut: Dut) -> None: def test_esp_hw_support_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases(timeout=180) dut.run_all_single_board_cases(timeout=180)
@@ -44,15 +44,15 @@ def test_dsi_lcd_with_virt_flash_enc(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.eco4 @pytest.mark.esp32p4_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
('esp32p4_eco4'), ('esp32p4_rev1'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32p4'], indirect=['target']) @idf_parametrize('target', ['esp32p4'], indirect=['target'])
@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='no runner') @pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='no runner')
def test_dsi_lcd_esp32p4_eco4(dut: Dut) -> None: def test_dsi_lcd_esp32p4_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -6,7 +6,7 @@ from pytest_embedded_idf.utils import idf_parametrize
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.eco5 @pytest.mark.esp32h2_rev1_2
@idf_parametrize('target', ['esp32h2'], indirect=['target']) @idf_parametrize('target', ['esp32h2'], indirect=['target'])
def test_phy(dut: Dut) -> None: def test_phy(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -60,7 +60,7 @@ def esp_reset_and_wait_ready_esp32c5(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.esp32c5_eco3 @pytest.mark.esp32c5_rev1
@idf_parametrize( @idf_parametrize(
'config', 'config',
[ [
@@ -70,11 +70,11 @@ def esp_reset_and_wait_ready_esp32c5(dut: Dut) -> None:
indirect=['config'], indirect=['config'],
) )
@idf_parametrize('target', ['esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32c5'], indirect=['target'])
def test_esp_system_esp32c5_eco3(dut: Dut) -> None: def test_esp_system_esp32c5_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases(timeout=60) dut.run_all_single_board_cases(timeout=60)
def esp_reset_and_wait_ready_esp32c5_eco3(dut: Dut) -> None: def esp_reset_and_wait_ready_esp32c5_rev1(dut: Dut) -> None:
dut.serial.hard_reset() dut.serial.hard_reset()
time.sleep(0.5) time.sleep(0.5)
dut.expect_exact('Press ENTER to see the list of tests') dut.expect_exact('Press ENTER to see the list of tests')
@@ -28,30 +28,30 @@ def test_wifi_connect_cases_esp32c2_xtal26m(case_tester: CaseTester) -> None:
case_tester.run_all_cases() case_tester.run_all_cases()
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config, baud', 'count, config, baud',
[ [
(2, 'esp32c2eco4_xtal26m', '74880'), (2, 'esp32c2_rev2_xtal26m', '74880'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_wifi_connect_cases_esp32c2eco4_xtal26m(case_tester: CaseTester) -> None: def test_wifi_connect_cases_esp32c2_rev2_xtal26m(case_tester: CaseTester) -> None:
case_tester.run_all_cases() case_tester.run_all_cases()
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config', 'count, config',
[ [
(2, 'esp32c3eco7'), (2, 'esp32c3_rev1'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_wifi_connect_cases_esp32c3eco7(case_tester: CaseTester) -> None: def test_wifi_connect_cases_esp32c3_rev1(case_tester: CaseTester) -> None:
case_tester.run_all_cases() case_tester.run_all_cases()
@@ -27,30 +27,30 @@ def test_wifi_unit_test_esp32c2_xtal26m(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config, baud', 'config, baud',
[ [
('esp32c2eco4_xtal26m', '74880'), ('esp32c2_rev2_xtal26m', '74880'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_wifi_unit_test_esp32c2eco4_xtal26m(dut: Dut) -> None: def test_wifi_unit_test_esp32c2_rev2_xtal26m(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
'esp32c3eco7', 'esp32c3_rev1',
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_wifi_unit_test_esp32c3eco7(dut: Dut) -> None: def test_wifi_unit_test_esp32c3_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -55,40 +55,40 @@ def test_wpa_supplicant_ut_psram(case_tester: CaseTester) -> None:
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config, baud', 'count, config, baud',
[ [
( (
2, 2,
'esp32c2eco4_xtal26m', 'esp32c2_rev2_xtal26m',
'74880', '74880',
), ),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_wpa_supplicant_esp32c2eco4_xtal26mhz(case_tester: CaseTester) -> None: def test_wpa_supplicant_esp32c2_rev2_xtal26mhz(case_tester: CaseTester) -> None:
for case in case_tester.test_menu: for case in case_tester.test_menu:
if case.attributes.get('test_env') == 'two_duts': if case.attributes.get('test_env') == 'two_duts':
case_tester.run_multi_dev_case(case=case, reset=True) case_tester.run_multi_dev_case(case=case, reset=True)
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config', 'count, config',
[ [
( (
2, 2,
'esp32c3eco7', 'esp32c3_rev1',
), ),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_wpa_supplicant_esp32c3eco7(case_tester: CaseTester) -> None: def test_wpa_supplicant_esp32c3_rev1(case_tester: CaseTester) -> None:
for case in case_tester.test_menu: for case in case_tester.test_menu:
if case.attributes.get('test_env') == 'two_duts': if case.attributes.get('test_env') == 'two_duts':
case_tester.run_multi_dev_case(case=case, reset=True) case_tester.run_multi_dev_case(case=case, reset=True)
@@ -72,12 +72,12 @@ def test_power_save_conn_esp32c2_26mhz(dut: tuple[IdfDut, IdfDut]) -> None:
# Case 2: BLE power save test for ESP32C2ECO4 # Case 2: BLE power save test for ESP32C2ECO4
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config, count, app_path, baud', 'config, count, app_path, baud',
[ [
( (
'esp32c2eco4_xtal26m', 'esp32c2_rev2_xtal26m',
2, 2,
f'{str(CUR_DIR / "power_save")}|{str(CUR_DIR / "blecent")}', f'{str(CUR_DIR / "power_save")}|{str(CUR_DIR / "blecent")}',
'74880', '74880',
@@ -86,7 +86,7 @@ def test_power_save_conn_esp32c2_26mhz(dut: tuple[IdfDut, IdfDut]) -> None:
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_power_save_conn_esp32c2eco4(dut: tuple[IdfDut, IdfDut]) -> None: def test_power_save_conn_esp32c2_rev2(dut: tuple[IdfDut, IdfDut]) -> None:
peripheral = dut[0] peripheral = dut[0]
central = dut[1] central = dut[1]
@@ -102,12 +102,12 @@ def test_power_save_conn_esp32c2eco4(dut: tuple[IdfDut, IdfDut]) -> None:
# Case 2: BLE power save test for ESP32C3ECO7 # Case 2: BLE power save test for ESP32C3ECO7
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config, count, app_path', 'config, count, app_path',
[ [
( (
'esp32c3eco7', 'esp32c3_rev1',
2, 2,
f'{str(CUR_DIR / "power_save")}|{str(CUR_DIR / "blecent")}', f'{str(CUR_DIR / "power_save")}|{str(CUR_DIR / "blecent")}',
), ),
@@ -115,7 +115,7 @@ def test_power_save_conn_esp32c2eco4(dut: tuple[IdfDut, IdfDut]) -> None:
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_power_save_conn_esp32c3eco7(dut: tuple[IdfDut, IdfDut]) -> None: def test_power_save_conn_esp32c3_rev1(dut: tuple[IdfDut, IdfDut]) -> None:
peripheral = dut[0] peripheral = dut[0]
central = dut[1] central = dut[1]
+1 -1
View File
@@ -13,7 +13,7 @@ from pytest_embedded import Dut
pytest.param('defaults', 'esp32', marks=[pytest.mark.eth_ip101]), pytest.param('defaults', 'esp32', marks=[pytest.mark.eth_ip101]),
pytest.param('lan8720_esp32', 'esp32', marks=[pytest.mark.eth_lan8720]), pytest.param('lan8720_esp32', 'esp32', marks=[pytest.mark.eth_lan8720]),
pytest.param('defaults_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]), pytest.param('defaults_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]),
pytest.param('defaults_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_eco4]), pytest.param('defaults_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_rev1]),
], ],
indirect=['target'], indirect=['target'],
) )
+1 -1
View File
@@ -154,7 +154,7 @@ def test_esp_eth_iperf_ip101(
'config, target', 'config, target',
[ [
pytest.param('default_ip101_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]), pytest.param('default_ip101_esp32p4', 'esp32p4', marks=[pytest.mark.eth_ip101]),
pytest.param('default_ip101_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_eco4]), pytest.param('default_ip101_esp32p4v1', 'esp32p4', marks=[pytest.mark.eth_ip101, pytest.mark.esp32p4_rev1]),
], ],
indirect=['target'], indirect=['target'],
) )
@@ -400,7 +400,7 @@ def test_examples_efuse_with_virt_secure_boot_v1_pre_loaded(dut: Dut) -> None:
dut.expect('example: Done') dut.expect('example: Done')
@pytest.mark.esp32eco3 @pytest.mark.esp32_rev3
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -520,7 +520,7 @@ def test_examples_efuse_with_virt_secure_boot_v2(dut: Dut) -> None:
dut.expect('example: Done') dut.expect('example: Done')
@pytest.mark.esp32eco3 @pytest.mark.esp32_rev3
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -823,7 +823,7 @@ def test_examples_efuse_with_virt_sb_v1_and_fe(dut: Dut) -> None:
dut.expect('example: Done') dut.expect('example: Done')
@pytest.mark.esp32eco3 @pytest.mark.esp32_rev3
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
@@ -923,7 +923,7 @@ def test_examples_efuse_with_virt_sb_v2_and_fe(dut: Dut) -> None:
@pytest.mark.parametrize( @pytest.mark.parametrize(
'qemu_extra_args', 'qemu_extra_args',
[ [
f'-drive file={os.path.join(os.path.dirname(__file__), "test", "esp32eco3_efuses.bin")},' f'-drive file={os.path.join(os.path.dirname(__file__), "test", "esp32_rev3_efuses.bin")},'
'if=none,format=raw,id=efuse ' 'if=none,format=raw,id=efuse '
'-global driver=nvram.esp32.efuse,property=drive,value=efuse ' '-global driver=nvram.esp32.efuse,property=drive,value=efuse '
'-global driver=timer.esp32.timg,property=wdt_disable,value=true', '-global driver=timer.esp32.timg,property=wdt_disable,value=true',
@@ -994,11 +994,11 @@ def test_examples_efuse_with_virt_sb_v2_and_fe_qemu(dut: QemuDut) -> None:
finally: finally:
# the above example test burns the efuses, and hence the efuses file which the # the above example test burns the efuses, and hence the efuses file which the
# qemu uses to emulate the efuses, "test/esp32eco3_efuses.bin", gets modified. # qemu uses to emulate the efuses, "test/esp32_rev3_efuses.bin", gets modified.
# Thus, restore the efuses file values back to the default ESP32-ECO3 efuses values. # Thus, restore the efuses file values back to the default ESP32-ECO3 efuses values.
with open(os.path.join(os.path.dirname(__file__), 'test', 'esp32eco3_efuses.bin'), 'wb') as efuse_file: with open(os.path.join(os.path.dirname(__file__), 'test', 'esp32_rev3_efuses.bin'), 'wb') as efuse_file:
esp32eco3_efuses = '0' * 26 + '8' + '0' * 17 + '1' + '0' * 203 esp32_rev3_efuses = '0' * 26 + '8' + '0' * 17 + '1' + '0' * 203
efuse_file.write(bytearray.fromhex(esp32eco3_efuses)) efuse_file.write(bytearray.fromhex(esp32_rev3_efuses))
def example_efuse_with_virt_sb_v2_and_fe(dut: Dut) -> None: def example_efuse_with_virt_sb_v2_and_fe(dut: Dut) -> None:
@@ -84,13 +84,13 @@ def test_wifi_getting_started_esp32c2_xtal_26mhz(dut: tuple[IdfDut, IdfDut]) ->
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config, baud, app_path', 'count, config, baud, app_path',
[ [
( (
2, 2,
'esp32c2eco4_xtal26m', 'esp32c2_rev2_xtal26m',
'74880', '74880',
f'{os.path.join(os.path.dirname(__file__), "softAP")}|{os.path.join(os.path.dirname(__file__), "station")}', f'{os.path.join(os.path.dirname(__file__), "softAP")}|{os.path.join(os.path.dirname(__file__), "station")}',
), ),
@@ -98,7 +98,7 @@ def test_wifi_getting_started_esp32c2_xtal_26mhz(dut: tuple[IdfDut, IdfDut]) ->
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_wifi_getting_started_esp32c2eco4_xtal_26mhz(dut: tuple[IdfDut, IdfDut]) -> None: def test_wifi_getting_started_esp32c2_rev2_xtal_26mhz(dut: tuple[IdfDut, IdfDut]) -> None:
softap = dut[0] softap = dut[0]
station = dut[1] station = dut[1]
@@ -115,20 +115,20 @@ def test_wifi_getting_started_esp32c2eco4_xtal_26mhz(dut: tuple[IdfDut, IdfDut])
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config, app_path', 'count, config, app_path',
[ [
( (
2, 2,
'c3eco7', 'esp32c3_rev1',
f'{os.path.join(os.path.dirname(__file__), "softAP")}|{os.path.join(os.path.dirname(__file__), "station")}', f'{os.path.join(os.path.dirname(__file__), "softAP")}|{os.path.join(os.path.dirname(__file__), "station")}',
), ),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_wifi_getting_started_esp32c3eco7(dut: tuple[IdfDut, IdfDut]) -> None: def test_wifi_getting_started_esp32c3_rev1(dut: tuple[IdfDut, IdfDut]) -> None:
softap = dut[0] softap = dut[0]
station = dut[1] station = dut[1]
@@ -80,28 +80,28 @@ def test_wifi_power_save_esp32c2_26mhz(dut: Dut) -> None:
@pytest.mark.wifi_ap @pytest.mark.wifi_ap
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config, baud', 'config, baud',
[ [
('c2eco4_xtal26m', '74880'), ('esp32c2_rev2_xtal26m', '74880'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_wifi_power_save_esp32c2eco4_26mhz(dut: Dut) -> None: def test_wifi_power_save_esp32c2_rev2_26mhz(dut: Dut) -> None:
_run_test(dut) _run_test(dut)
@pytest.mark.wifi_ap @pytest.mark.wifi_ap
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
[ [
'c3eco7', 'esp32c3_rev1',
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_wifi_power_save_esp32c3eco7(dut: Dut) -> None: def test_wifi_power_save_esp32c3_rev1(dut: Dut) -> None:
_run_test(dut) _run_test(dut)
+9 -8
View File
@@ -98,7 +98,6 @@ env_markers =
xtal32k: Runner with external 32k crystal connected xtal32k: Runner with external 32k crystal connected
no32kXtal: Runner with no external 32k crystal connected no32kXtal: Runner with no external 32k crystal connected
psramv0: Runner with PSRAM version 0 psramv0: Runner with PSRAM version 0
esp32eco3: Runner with esp32 eco3 connected
ecdsa_efuse: Runner with test ECDSA private keys programmed in efuse ecdsa_efuse: Runner with test ECDSA private keys programmed in efuse
ccs811: Runner with CCS811 connected ccs811: Runner with CCS811 connected
nvs_encr_hmac: Runner with test HMAC key programmed in efuse nvs_encr_hmac: Runner with test HMAC key programmed in efuse
@@ -127,12 +126,14 @@ env_markers =
twai_std: twai runner with all twai supported targets connect to usb-can adapter twai_std: twai runner with all twai supported targets connect to usb-can adapter
lp_i2s: lp_i2s runner tested with hp_i2s lp_i2s: lp_i2s runner tested with hp_i2s
ram_app: ram_app runners ram_app: ram_app runners
esp32c3eco7: esp32c3 major version(v1.1) chips
esp32c2eco4: esp32c2 major version(v2.0) chips
recovery_bootloader: Runner with recovery bootloader offset set in recovery_bootloader: Runner with recovery bootloader offset set in
esp32p4_eco4: Runner with esp32p4 eco4 connected
esp32c5_eco3: Runner with esp32c5 eco3 connected
rev_default: Runner with default revision connected
flash_32m: Runner with 32MB flash flash_32m: Runner with 32MB flash
eco4: Runner with SOC chip that is exactly with the ECO4 version
eco5: Runner with esp32h2 eco5 connected # revision markers
rev_default: Runner with default revision connected
esp32_rev3: Runner with ESP32 rev 3.x connected
esp32c3_rev1: Runner with ESP32-C3 rev 1.x connected
esp32c2_rev2: Runner with ESP32-C2 rev 2.x connected
esp32p4_rev1: Runner with ESP32-P4 rev 1.x connected
esp32c5_rev1: Runner with ESP32-C5 rev 1.x connected
esp32h2_rev1_2: Runner with ESP32-H2 rev 1.2 connected
+7 -8
View File
@@ -25,12 +25,11 @@ TIMEOUT_4H_MARKERS = [
'ethernet_stress', 'ethernet_stress',
] ]
ECO_MARKERS = [ REV_MARKERS = [
'esp32eco3', 'esp32_rev3',
'esp32c2eco4', 'esp32c2_rev2',
'esp32c3eco7', 'esp32c3_rev1',
'esp32p4_eco4', 'esp32h2_rev1_2',
'esp32c5_eco3', 'esp32p4_rev1',
'eco4', 'esp32c5_rev1',
'eco5',
] ]
+3 -3
View File
@@ -20,7 +20,7 @@ from pytest_embedded.utils import find_by_suffix
from pytest_ignore_test_results.ignore_results import ChildCase from pytest_ignore_test_results.ignore_results import ChildCase
from pytest_ignore_test_results.ignore_results import ChildCasesStashKey from pytest_ignore_test_results.ignore_results import ChildCasesStashKey
from .constants import ECO_MARKERS from .constants import REV_MARKERS
from .utils import format_case_id from .utils import format_case_id
from .utils import merge_junit_files from .utils import merge_junit_files
from .utils import normalize_testcase_file_path from .utils import normalize_testcase_file_path
@@ -181,8 +181,8 @@ class IdfLocalPlugin:
if 'esp32c2' in case.targets and 'xtal_26mhz' not in case.all_markers: if 'esp32c2' in case.targets and 'xtal_26mhz' not in case.all_markers:
item.add_marker('xtal_40mhz') item.add_marker('xtal_40mhz')
for eco_marker in ECO_MARKERS: for rev_marker in REV_MARKERS:
if eco_marker in case.all_markers: if rev_marker in case.all_markers:
break break
else: else:
item.add_marker('rev_default') item.add_marker('rev_default')
@@ -190,16 +190,16 @@ def test_phy_tsens_coexist_c2_xtal26m(dut: tuple[Dut, Dut]) -> None:
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.xtal_26mhz @pytest.mark.xtal_26mhz
@pytest.mark.esp32c2eco4 @pytest.mark.esp32c2_rev2
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config, baud', 'count, config, baud',
[ [
(2, 'c2_eco4', '74880'), (2, 'esp32c2_rev2', '74880'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c2'], indirect=['target']) @idf_parametrize('target', ['esp32c2'], indirect=['target'])
def test_phy_tsens_coexist_c2eco4_xtal26m(dut: tuple[Dut, Dut]) -> None: def test_phy_tsens_coexist_esp32c2_rev2_xtal26m(dut: tuple[Dut, Dut]) -> None:
for _dut in dut: for _dut in dut:
_dut.expect('esp>') _dut.expect('esp>')
run_phy_tsens_test(dut) run_phy_tsens_test(dut)
@@ -216,16 +216,16 @@ def test_phy_tsens_coexist_c2eco4_xtal26m(dut: tuple[Dut, Dut]) -> None:
@pytest.mark.two_duts @pytest.mark.two_duts
@pytest.mark.esp32c3eco7 @pytest.mark.esp32c3_rev1
@pytest.mark.parametrize( @pytest.mark.parametrize(
'count, config', 'count, config',
[ [
(2, 'c3_eco7'), (2, 'esp32c3_rev1'),
], ],
indirect=True, indirect=True,
) )
@idf_parametrize('target', ['esp32c3'], indirect=['target']) @idf_parametrize('target', ['esp32c3'], indirect=['target'])
def test_phy_tsens_coexist_c3eco7(dut: tuple[Dut, Dut]) -> None: def test_phy_tsens_coexist_esp32c3_rev1(dut: tuple[Dut, Dut]) -> None:
for _dut in dut: for _dut in dut:
_dut.expect('esp>') _dut.expect('esp>')
run_phy_tsens_test(dut) run_phy_tsens_test(dut)