From eb29af5f8a8f01ec979a12fb665f2dc43059aace Mon Sep 17 00:00:00 2001 From: David Saada Date: Tue, 5 Mar 2019 11:31:55 +0200 Subject: [PATCH] Fix direct access to device key test for small erase/program ratio This commit fixes the failure in the "Direct access to device key" test, when working with internal flash components, whose erase size to program size ratio is small. In such cases, the last two sectors are not large enough to store the device key. --- .../kvstore/direct_access_devicekey_test/main.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/features/storage/TESTS/kvstore/direct_access_devicekey_test/main.cpp b/features/storage/TESTS/kvstore/direct_access_devicekey_test/main.cpp index 25704b8b2a..3c31f6859f 100644 --- a/features/storage/TESTS/kvstore/direct_access_devicekey_test/main.cpp +++ b/features/storage/TESTS/kvstore/direct_access_devicekey_test/main.cpp @@ -186,7 +186,7 @@ void test_direct_access_to_devicekey_tdb_flashiap_remainder() void test_direct_access_to_devicekey_tdb_last_two_sectors() { - utest_printf("Test Direct Access To DeviceKey Test Entire FlashIAP Remainder\n"); + utest_printf("Test Direct Access To DeviceKey Test Last Two Sectors\n"); uint32_t flash_bd_start_address; uint32_t flash_bd_end_address; @@ -198,6 +198,18 @@ void test_direct_access_to_devicekey_tdb_last_two_sectors() uint32_t flash_bd_size = flash_bd_end_address - flash_bd_start_address; FlashIAPBlockDevice *flash_bd = new FlashIAPBlockDevice((bd_addr_t)flash_bd_start_address, (bd_size_t)flash_bd_size); + flash_bd->init(); + uint32_t sector_addr = flash_bd->size(); + for (int i = 0; i < 2; i++) { + uint32_t sector_size = flash_bd->get_erase_size(sector_addr - 1); + uint32_t erase_prog_ratio = sector_size / flash_bd->get_program_size(); + if (erase_prog_ratio < 4) { + delete flash_bd; + TEST_SKIP_UNLESS_MESSAGE(false, "Test skipped. Flash program size doesn't support this test."); + } + sector_addr -= sector_size; + } + flash_bd->deinit(); TDBStore *tdb = new TDBStore(flash_bd); // Start by Init and Reset to TDBStore