diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2019-04-30 10:33:47 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-07-17 02:26:38 +0000 |
commit | 4c65410c1732168ad7f0edee27a9c06344eadf5f (patch) | |
tree | 91c734164322a94742f716c6a98517d364d1d696 /test | |
parent | bed74f99eb720b5799624541bf88a22d4b79c3f3 (diff) | |
download | chrome-ec-4c65410c1732168ad7f0edee27a9c06344eadf5f.tar.gz |
nvmem: add test of recovery from interrupted saves (take two)
Add a test which introduces corrupted objects in the flash and
verifies that the initialization function is able to recover.
BRANCH=cr50, cr50-mp
BUG=b:69907320, b:129710256
TEST='make run-nvmem' succeeds
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1590044
Reviewed-by: Andrey Pronin <apronin@chromium.org>
(cherry picked from commit 15bd8639ef6df248b4474808bd21d80b0c19bac4)
Change-Id: I9ad93134ee3284d4db5f556197722d90c1d24027
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1644287
Tested-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
(cherry picked from commit 283794fbc0235ae4f0d9fefc8d5eff55c4d82996)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1705708
Diffstat (limited to 'test')
-rw-r--r-- | test/nvmem.c | 14 | ||||
-rw-r--r-- | test/nvmem_test.h | 3 |
2 files changed, 16 insertions, 1 deletions
diff --git a/test/nvmem.c b/test/nvmem.c index a7e339ebf1..52cf40138a 100644 --- a/test/nvmem.c +++ b/test/nvmem.c @@ -828,6 +828,7 @@ static int test_nvmem_incomplete_transaction(void) uint16_t offsets[MAX_OFFSETS]; size_t num_objects; uint8_t buf[nvmem_user_sizes[NVMEM_TPM]]; + uint8_t *p; TEST_ASSERT(prepare_post_migration_nvmem() == EC_SUCCESS); num_objects = fill_obj_offsets(offsets, ARRAY_SIZE(offsets)); @@ -859,6 +860,19 @@ static int test_nvmem_incomplete_transaction(void) num_objects = fill_obj_offsets(offsets, ARRAY_SIZE(offsets)); TEST_ASSERT(num_objects == 7); + /* + * Now, let's modify an object and introduce corruption when saving + * it. + */ + p = evictable_offs_to_addr(offsets[4]); + p[10] ^= 0x55; + failure_mode = TEST_FAILED_HASH; + new_nvmem_save(); + failure_mode = TEST_NO_FAILURE; + + /* And verify that nvmem can still successfully initialize. */ + TEST_ASSERT(nvmem_init() == EC_SUCCESS); + return EC_SUCCESS; } diff --git a/test/nvmem_test.h b/test/nvmem_test.h index 9e050582ac..6aba855bfe 100644 --- a/test/nvmem_test.h +++ b/test/nvmem_test.h @@ -19,7 +19,8 @@ enum test_failure_mode { TEST_FAIL_WHEN_INVALIDATING, TEST_FAIL_WHEN_COMPACTING, TEST_FAIL_SAVING_VAR, - TEST_FAIL_FINALIZING_VAR + TEST_FAIL_FINALIZING_VAR, + TEST_FAILED_HASH }; extern enum test_failure_mode failure_mode; |