26
26
#include "memfault/panics/coredump_impl.h"
27
27
#include "memfault_self_test_private.h"
28
28
29
+ // Wrap this definition to prevent unused macro warning
30
+ #if !MEMFAULT_DEMO_CLI_SELF_TEST_COREDUMP_STORAGE
31
+ #ifndef MEMFAULT_SELF_TEST_COREDUMP_STORAGE_DISABLE_MSG
32
+ #define MEMFAULT_SELF_TEST_COREDUMP_STORAGE_DISABLE_MSG \
33
+ "Set MEMFAULT_DEMO_CLI_SELF_TEST_COREDUMP_STORAGE in memfault_platform_config.h"
34
+ #endif // !MEMFAULT_SELF_TEST_COREDUMP_STORAGE_DISABLE_MSG
35
+ #endif // !MEMFAULT_DEMO_CLI_SELF_TEST_COREDUMP_STORAGE
36
+
29
37
#if !defined(MEMFAULT_UNITTEST_SELF_TEST )
30
38
31
39
typedef enum {
@@ -140,9 +148,9 @@ static void prv_device_info_test_describe(uint32_t results) {
140
148
}
141
149
142
150
MEMFAULT_LOG_ERROR ("One or more fields is invalid. Check for correct length and contents" );
143
- for (uint8_t i = 0 ; i < kDeviceInfoField_Max ; i ++ ) {
151
+ for (size_t i = 0 ; i < kDeviceInfoField_Max ; i ++ ) {
144
152
// Check if bit cleared, cleared bits indicate an invalid field
145
- if ((results & (1 << i ))) {
153
+ if ((results & (1u << i ))) {
146
154
MEMFAULT_LOG_ERROR ("%s invalid" , s_device_info_field_names [i ]);
147
155
}
148
156
}
@@ -232,7 +240,7 @@ static void prv_print_region_group_info(const char *group_name, const sMfltCored
232
240
MEMFAULT_LOG_INFO ("-----------------------------" );
233
241
MEMFAULT_LOG_INFO ("%10s|%10s|%6s|" , "Address" , "Length" , "Type" );
234
242
MEMFAULT_LOG_INFO ("-----------------------------" );
235
- for (size_t i = 0 ; i < num_regions ; i ++ ) {
243
+ for (size_t i = 0 ; ( regions != NULL ) && ( i < num_regions ) ; i ++ ) {
236
244
sMfltCoredumpRegion region = regions [i ];
237
245
MEMFAULT_LOG_INFO ("0x%08" PRIxPTR "|%10" PRIu32 "|%6u|" , (uintptr_t )region .region_start ,
238
246
region .region_size , region .type );
@@ -378,6 +386,42 @@ uint32_t memfault_self_test_time_test(void) {
378
386
return result ;
379
387
}
380
388
389
+ uint32_t memfault_self_test_coredump_storage_capacity_test (void ) {
390
+ MEMFAULT_SELF_TEST_PRINT_HEADER ("Coredump Storage Capacity Test" );
391
+ bool result = memfault_coredump_storage_check_size ();
392
+ MEMFAULT_LOG_INFO (MEMFAULT_SELF_TEST_END_OUTPUT );
393
+ return result ? 0 : 1 ;
394
+ }
395
+
396
+ uint32_t memfault_self_test_coredump_storage_test (void ) {
397
+ MEMFAULT_SELF_TEST_PRINT_HEADER ("Coredump Storage Test" );
398
+
399
+ if (memfault_coredump_has_valid_coredump (NULL )) {
400
+ MEMFAULT_LOG_ERROR ("Aborting test, valid coredump present" );
401
+ MEMFAULT_LOG_INFO (MEMFAULT_SELF_TEST_END_OUTPUT );
402
+ return (1 << 0 );
403
+ }
404
+
405
+ // Wrap test with calls to disable/enable irqs to allow test to run uninterrupted
406
+ // Abort if we cannot disable irqs
407
+ bool irqs_disabled = memfault_self_test_platform_disable_irqs ();
408
+ if (!irqs_disabled ) {
409
+ MEMFAULT_LOG_ERROR ("Aborting test, could not disable interrupts" );
410
+ MEMFAULT_LOG_INFO (MEMFAULT_SELF_TEST_END_OUTPUT );
411
+ return (1 << 1 );
412
+ }
413
+
414
+ memfault_coredump_storage_debug_test_begin ();
415
+ if (!memfault_self_test_platform_enable_irqs ()) {
416
+ MEMFAULT_LOG_WARN ("Failed to enable interrupts after test completed" );
417
+ }
418
+
419
+ bool result = memfault_coredump_storage_debug_test_finish ();
420
+
421
+ MEMFAULT_LOG_INFO (MEMFAULT_SELF_TEST_END_OUTPUT );
422
+ return result ? 0 : (1 << 2 );
423
+ }
424
+
381
425
#endif // defined(MEMFAULT_UNITTEST_SELF_TEST)
382
426
383
427
int memfault_self_test_run (uint32_t run_flags ) {
@@ -403,5 +447,17 @@ int memfault_self_test_run(uint32_t run_flags) {
403
447
if (run_flags & kMemfaultSelfTestFlag_PlatformTime ) {
404
448
result |= memfault_self_test_time_test ();
405
449
}
450
+ if (run_flags & kMemfaultSelfTestFlag_CoredumpStorage ) {
451
+ #if MEMFAULT_DEMO_CLI_SELF_TEST_COREDUMP_STORAGE
452
+ result |= memfault_self_test_coredump_storage_test ();
453
+ #else
454
+ MEMFAULT_LOG_ERROR ("Coredump storage test not enabled" );
455
+ MEMFAULT_LOG_ERROR (MEMFAULT_SELF_TEST_COREDUMP_STORAGE_DISABLE_MSG );
456
+ result = 1 ;
457
+ #endif
458
+ }
459
+ if (run_flags & kMemfaultSelfTestFlag_CoredumpStorageCapacity ) {
460
+ result |= memfault_self_test_coredump_storage_capacity_test ();
461
+ }
406
462
return (result == 0 ) ? 0 : 1 ;
407
463
}
0 commit comments