diff --git a/components/spi_flash/test_apps/esp_flash/main/test_app_main.c b/components/spi_flash/test_apps/esp_flash/main/test_app_main.c index 3f6f58e601..01255c9084 100644 --- a/components/spi_flash/test_apps/esp_flash/main/test_app_main.c +++ b/components/spi_flash/test_apps/esp_flash/main/test_app_main.c @@ -11,22 +11,14 @@ // Some resources are lazy allocated in flash encryption, the threadhold is left for that case #define TEST_MEMORY_LEAK_THRESHOLD (400) -static size_t before_free_8bit; -static size_t before_free_32bit; - - void setUp(void) { - before_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT); - before_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT); + unity_utils_record_free_mem(); } void tearDown(void) { - size_t after_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT); - size_t after_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT); - unity_utils_check_leak(before_free_8bit, after_free_8bit, "8BIT", TEST_MEMORY_LEAK_THRESHOLD); - unity_utils_check_leak(before_free_32bit, after_free_32bit, "32BIT", TEST_MEMORY_LEAK_THRESHOLD); + unity_utils_evaluate_leaks_direct(TEST_MEMORY_LEAK_THRESHOLD); } void app_main(void) diff --git a/components/spi_flash/test_apps/esp_flash/main/test_esp_flash_drv.c b/components/spi_flash/test_apps/esp_flash/main/test_esp_flash_drv.c index 231615f564..a104830c50 100644 --- a/components/spi_flash/test_apps/esp_flash/main/test_esp_flash_drv.c +++ b/components/spi_flash/test_apps/esp_flash/main/test_esp_flash_drv.c @@ -916,6 +916,83 @@ static void test_flash_read_large_psram_buffer_low_internal_mem(const esp_partit } TEST_CASE_FLASH("esp_flash_read large PSRAM buffer low memory", test_flash_read_large_psram_buffer_low_internal_mem); - - #endif + + +#if CONFIG_SPI_FLASH_ENABLE_COUNTERS +#define TEST_CNT_RW_TIMES 4 +#define TEST_CNT_RW_LEN 64 +#define TEST_CNT_ERASE_LEN 8192 +void test_flash_counter(const esp_partition_t* part) +{ + esp_flash_t* chip = part->flash_chip; + uint32_t offs = part->address; + esp_flash_counters_t flash_counter; + static uint8_t write_buf[TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES]; + static uint8_t read_buf[TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES]; + + for(int i = 0;i < TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES; i ++){ + write_buf[i] = i; + } + + esp_flash_reset_counters(); + flash_counter = *esp_flash_get_counters(); + // check for resset_counter and get_counter API + TEST_ASSERT_EACH_EQUAL_HEX8(0, &flash_counter, sizeof(esp_flash_counters_t)); + + TEST_ASSERT_EQUAL(ESP_OK, esp_flash_erase_region(chip, offs, TEST_CNT_ERASE_LEN)); + flash_counter = *esp_flash_get_counters(); + // check for erase_counter API + TEST_ASSERT_EQUAL_UINT32(0, flash_counter.read.count); + TEST_ASSERT_EQUAL_UINT32(0, flash_counter.write.count); + TEST_ASSERT_EQUAL_UINT32(1, flash_counter.erase.count); + TEST_ASSERT_EQUAL_UINT32(0 * TEST_CNT_RW_LEN, flash_counter.read.bytes); + TEST_ASSERT_EQUAL_UINT32(0 * TEST_CNT_RW_LEN, flash_counter.write.bytes); + TEST_ASSERT_EQUAL_UINT32(TEST_CNT_ERASE_LEN, flash_counter.erase.bytes); + + int count; + for(count = 0; count < TEST_CNT_RW_TIMES; count ++) { + // check counter on write option + TEST_ASSERT_EQUAL(ESP_OK, esp_flash_write(chip, write_buf + TEST_CNT_RW_LEN * count, offs + TEST_CNT_RW_LEN * count, TEST_CNT_RW_LEN) ); + flash_counter = *esp_flash_get_counters(); + TEST_ASSERT_EQUAL_UINT32((count + 1), flash_counter.write.count); + TEST_ASSERT_EQUAL_UINT32((count + 1) * TEST_CNT_RW_LEN, flash_counter.write.bytes); + + // check counter on read option + TEST_ASSERT_EQUAL(ESP_OK, esp_flash_read(chip, read_buf + TEST_CNT_RW_LEN * count, offs + TEST_CNT_RW_LEN * count, TEST_CNT_RW_LEN) ); + flash_counter = *esp_flash_get_counters(); + TEST_ASSERT_EQUAL_UINT32((count + 1), flash_counter.read.count); + TEST_ASSERT_EQUAL_UINT32((count + 1) * TEST_CNT_RW_LEN, flash_counter.read.bytes); + + esp_flash_dump_counters(stdout); + } + TEST_ASSERT_EQUAL_HEX8_ARRAY(write_buf, read_buf, TEST_CNT_RW_LEN * TEST_CNT_RW_TIMES); + + // check remain value + flash_counter = *esp_flash_get_counters(); + TEST_ASSERT_EQUAL_UINT32(1, flash_counter.erase.count); + TEST_ASSERT_EQUAL_UINT32(TEST_CNT_ERASE_LEN, flash_counter.erase.bytes); + + esp_flash_reset_counters(); + flash_counter = *esp_flash_get_counters(); + // check for resset_counter after used + TEST_ASSERT_EACH_EQUAL_HEX8(0, &flash_counter, sizeof(esp_flash_counters_t)); + + TEST_ASSERT_EQUAL(ESP_OK, esp_flash_write_encrypted(chip, offs, write_buf, TEST_CNT_RW_LEN) ); + TEST_ASSERT_EQUAL(ESP_OK, esp_flash_read_encrypted(chip, offs, read_buf, TEST_CNT_RW_LEN) ); + + printf("\ntest for encrypted write/read\n"); + esp_flash_dump_counters(stdout); + + flash_counter = *esp_flash_get_counters(); + // As we do one time of encrypted RW, no erase option + TEST_ASSERT_EQUAL_UINT32(1, flash_counter.read.count); + TEST_ASSERT_EQUAL_UINT32(1, flash_counter.write.count); + TEST_ASSERT_EQUAL_UINT32(0, flash_counter.erase.count); + TEST_ASSERT_EQUAL_UINT32(1 * TEST_CNT_RW_LEN, flash_counter.read.bytes); + TEST_ASSERT_EQUAL_UINT32(1 * TEST_CNT_RW_LEN, flash_counter.write.bytes); + TEST_ASSERT_EQUAL_UINT32(0, flash_counter.erase.bytes); +} + +TEST_CASE_FLASH("SPI flash counter test", test_flash_counter); +#endif //CONFIG_SPI_FLASH_ENABLE_COUNTERS diff --git a/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py b/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py index 179b424b56..4785ffcf0a 100644 --- a/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py +++ b/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py @@ -16,14 +16,12 @@ from pytest_embedded import Dut [ 'release', 'flash_qio', - 'verify' + 'verify', ], indirect=True, ) def test_esp_flash(dut: Dut) -> None: - dut.expect_exact('Press ENTER to see the list of tests') - dut.write('[esp_flash]') - dut.expect_unity_test_output() + dut.run_all_single_board_cases(group='esp_flash') @pytest.mark.esp32s3 @@ -38,9 +36,7 @@ def test_esp_flash(dut: Dut) -> None: indirect=True, ) def test_esp_flash_rom(dut: Dut) -> None: - dut.expect_exact('Press ENTER to see the list of tests') - dut.write('[esp_flash]') - dut.expect_unity_test_output() + dut.run_all_single_board_cases(group='esp_flash') @pytest.mark.esp32 diff --git a/components/spi_flash/test_apps/esp_flash/sdkconfig.ci.release b/components/spi_flash/test_apps/esp_flash/sdkconfig.ci.release index 7eb62a2852..e20ceb05da 100644 --- a/components/spi_flash/test_apps/esp_flash/sdkconfig.ci.release +++ b/components/spi_flash/test_apps/esp_flash/sdkconfig.ci.release @@ -3,3 +3,4 @@ CONFIG_FREERTOS_USE_TICKLESS_IDLE=y CONFIG_COMPILER_OPTIMIZATION_SIZE=y CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y +CONFIG_SPI_FLASH_ENABLE_COUNTERS=y