mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Generated v2 prefixes
This commit is contained in:
		
							
								
								
									
										241
									
								
								tests/test_badblocks.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								tests/test_badblocks.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,241 @@ | ||||
| # bad blocks with block cycles should be tested in test_relocations | ||||
| if = 'LFS2_BLOCK_CYCLES == -1' | ||||
|  | ||||
| [[case]] # single bad blocks | ||||
| define.LFS2_BLOCK_COUNT = 256 # small bd so test runs faster | ||||
| define.LFS2_ERASE_CYCLES = 0xffffffff | ||||
| define.LFS2_ERASE_VALUE = [0x00, 0xff, -1] | ||||
| define.LFS2_BADBLOCK_BEHAVIOR = [ | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASEERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_READERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGNOOP', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASENOOP', | ||||
| ] | ||||
| define.NAMEMULT = 64 | ||||
| define.FILEMULT = 1 | ||||
| code = ''' | ||||
|     for (lfs2_block_t badblock = 2; badblock < LFS2_BLOCK_COUNT; badblock++) { | ||||
|         lfs2_testbd_setwear(&cfg, badblock-1, 0) => 0; | ||||
|         lfs2_testbd_setwear(&cfg, badblock, 0xffffffff) => 0; | ||||
|          | ||||
|         lfs2_format(&lfs2, &cfg) => 0; | ||||
|  | ||||
|         lfs2_mount(&lfs2, &cfg) => 0; | ||||
|         for (int i = 1; i < 10; i++) { | ||||
|             for (int j = 0; j < NAMEMULT; j++) { | ||||
|                 buffer[j] = '0'+i; | ||||
|             } | ||||
|             buffer[NAMEMULT] = '\0'; | ||||
|             lfs2_mkdir(&lfs2, (char*)buffer) => 0; | ||||
|  | ||||
|             buffer[NAMEMULT] = '/'; | ||||
|             for (int j = 0; j < NAMEMULT; j++) { | ||||
|                 buffer[j+NAMEMULT+1] = '0'+i; | ||||
|             } | ||||
|             buffer[2*NAMEMULT+1] = '\0'; | ||||
|             lfs2_file_open(&lfs2, &file, (char*)buffer, | ||||
|                     LFS2_O_WRONLY | LFS2_O_CREAT) => 0; | ||||
|              | ||||
|             size = NAMEMULT; | ||||
|             for (int j = 0; j < i*FILEMULT; j++) { | ||||
|                 lfs2_file_write(&lfs2, &file, buffer, size) => size; | ||||
|             } | ||||
|  | ||||
|             lfs2_file_close(&lfs2, &file) => 0; | ||||
|         } | ||||
|         lfs2_unmount(&lfs2) => 0; | ||||
|  | ||||
|         lfs2_mount(&lfs2, &cfg) => 0; | ||||
|         for (int i = 1; i < 10; i++) { | ||||
|             for (int j = 0; j < NAMEMULT; j++) { | ||||
|                 buffer[j] = '0'+i; | ||||
|             } | ||||
|             buffer[NAMEMULT] = '\0'; | ||||
|             lfs2_stat(&lfs2, (char*)buffer, &info) => 0; | ||||
|             info.type => LFS2_TYPE_DIR; | ||||
|  | ||||
|             buffer[NAMEMULT] = '/'; | ||||
|             for (int j = 0; j < NAMEMULT; j++) { | ||||
|                 buffer[j+NAMEMULT+1] = '0'+i; | ||||
|             } | ||||
|             buffer[2*NAMEMULT+1] = '\0'; | ||||
|             lfs2_file_open(&lfs2, &file, (char*)buffer, LFS2_O_RDONLY) => 0; | ||||
|              | ||||
|             size = NAMEMULT; | ||||
|             for (int j = 0; j < i*FILEMULT; j++) { | ||||
|                 uint8_t rbuffer[1024]; | ||||
|                 lfs2_file_read(&lfs2, &file, rbuffer, size) => size; | ||||
|                 memcmp(buffer, rbuffer, size) => 0; | ||||
|             } | ||||
|  | ||||
|             lfs2_file_close(&lfs2, &file) => 0; | ||||
|         } | ||||
|         lfs2_unmount(&lfs2) => 0; | ||||
|     } | ||||
| ''' | ||||
|  | ||||
| [[case]] # region corruption (causes cascading failures) | ||||
| define.LFS2_BLOCK_COUNT = 256 # small bd so test runs faster | ||||
| define.LFS2_ERASE_CYCLES = 0xffffffff | ||||
| define.LFS2_ERASE_VALUE = [0x00, 0xff, -1] | ||||
| define.LFS2_BADBLOCK_BEHAVIOR = [ | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASEERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_READERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGNOOP', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASENOOP', | ||||
| ] | ||||
| define.NAMEMULT = 64 | ||||
| define.FILEMULT = 1 | ||||
| code = ''' | ||||
|     for (lfs2_block_t i = 0; i < (LFS2_BLOCK_COUNT-2)/2; i++) { | ||||
|         lfs2_testbd_setwear(&cfg, i+2, 0xffffffff) => 0; | ||||
|     } | ||||
|      | ||||
|     lfs2_format(&lfs2, &cfg) => 0; | ||||
|  | ||||
|     lfs2_mount(&lfs2, &cfg) => 0; | ||||
|     for (int i = 1; i < 10; i++) { | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j] = '0'+i; | ||||
|         } | ||||
|         buffer[NAMEMULT] = '\0'; | ||||
|         lfs2_mkdir(&lfs2, (char*)buffer) => 0; | ||||
|  | ||||
|         buffer[NAMEMULT] = '/'; | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j+NAMEMULT+1] = '0'+i; | ||||
|         } | ||||
|         buffer[2*NAMEMULT+1] = '\0'; | ||||
|         lfs2_file_open(&lfs2, &file, (char*)buffer, | ||||
|                 LFS2_O_WRONLY | LFS2_O_CREAT) => 0; | ||||
|          | ||||
|         size = NAMEMULT; | ||||
|         for (int j = 0; j < i*FILEMULT; j++) { | ||||
|             lfs2_file_write(&lfs2, &file, buffer, size) => size; | ||||
|         } | ||||
|  | ||||
|         lfs2_file_close(&lfs2, &file) => 0; | ||||
|     } | ||||
|     lfs2_unmount(&lfs2) => 0; | ||||
|  | ||||
|     lfs2_mount(&lfs2, &cfg) => 0; | ||||
|     for (int i = 1; i < 10; i++) { | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j] = '0'+i; | ||||
|         } | ||||
|         buffer[NAMEMULT] = '\0'; | ||||
|         lfs2_stat(&lfs2, (char*)buffer, &info) => 0; | ||||
|         info.type => LFS2_TYPE_DIR; | ||||
|  | ||||
|         buffer[NAMEMULT] = '/'; | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j+NAMEMULT+1] = '0'+i; | ||||
|         } | ||||
|         buffer[2*NAMEMULT+1] = '\0'; | ||||
|         lfs2_file_open(&lfs2, &file, (char*)buffer, LFS2_O_RDONLY) => 0; | ||||
|          | ||||
|         size = NAMEMULT; | ||||
|         for (int j = 0; j < i*FILEMULT; j++) { | ||||
|             uint8_t rbuffer[1024]; | ||||
|             lfs2_file_read(&lfs2, &file, rbuffer, size) => size; | ||||
|             memcmp(buffer, rbuffer, size) => 0; | ||||
|         } | ||||
|  | ||||
|         lfs2_file_close(&lfs2, &file) => 0; | ||||
|     } | ||||
|     lfs2_unmount(&lfs2) => 0; | ||||
| ''' | ||||
|  | ||||
| [[case]] # alternating corruption (causes cascading failures) | ||||
| define.LFS2_BLOCK_COUNT = 256 # small bd so test runs faster | ||||
| define.LFS2_ERASE_CYCLES = 0xffffffff | ||||
| define.LFS2_ERASE_VALUE = [0x00, 0xff, -1] | ||||
| define.LFS2_BADBLOCK_BEHAVIOR = [ | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASEERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_READERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGNOOP', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASENOOP', | ||||
| ] | ||||
| define.NAMEMULT = 64 | ||||
| define.FILEMULT = 1 | ||||
| code = ''' | ||||
|     for (lfs2_block_t i = 0; i < (LFS2_BLOCK_COUNT-2)/2; i++) { | ||||
|         lfs2_testbd_setwear(&cfg, (2*i) + 2, 0xffffffff) => 0; | ||||
|     } | ||||
|      | ||||
|     lfs2_format(&lfs2, &cfg) => 0; | ||||
|  | ||||
|     lfs2_mount(&lfs2, &cfg) => 0; | ||||
|     for (int i = 1; i < 10; i++) { | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j] = '0'+i; | ||||
|         } | ||||
|         buffer[NAMEMULT] = '\0'; | ||||
|         lfs2_mkdir(&lfs2, (char*)buffer) => 0; | ||||
|  | ||||
|         buffer[NAMEMULT] = '/'; | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j+NAMEMULT+1] = '0'+i; | ||||
|         } | ||||
|         buffer[2*NAMEMULT+1] = '\0'; | ||||
|         lfs2_file_open(&lfs2, &file, (char*)buffer, | ||||
|                 LFS2_O_WRONLY | LFS2_O_CREAT) => 0; | ||||
|          | ||||
|         size = NAMEMULT; | ||||
|         for (int j = 0; j < i*FILEMULT; j++) { | ||||
|             lfs2_file_write(&lfs2, &file, buffer, size) => size; | ||||
|         } | ||||
|  | ||||
|         lfs2_file_close(&lfs2, &file) => 0; | ||||
|     } | ||||
|     lfs2_unmount(&lfs2) => 0; | ||||
|  | ||||
|     lfs2_mount(&lfs2, &cfg) => 0; | ||||
|     for (int i = 1; i < 10; i++) { | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j] = '0'+i; | ||||
|         } | ||||
|         buffer[NAMEMULT] = '\0'; | ||||
|         lfs2_stat(&lfs2, (char*)buffer, &info) => 0; | ||||
|         info.type => LFS2_TYPE_DIR; | ||||
|  | ||||
|         buffer[NAMEMULT] = '/'; | ||||
|         for (int j = 0; j < NAMEMULT; j++) { | ||||
|             buffer[j+NAMEMULT+1] = '0'+i; | ||||
|         } | ||||
|         buffer[2*NAMEMULT+1] = '\0'; | ||||
|         lfs2_file_open(&lfs2, &file, (char*)buffer, LFS2_O_RDONLY) => 0; | ||||
|          | ||||
|         size = NAMEMULT; | ||||
|         for (int j = 0; j < i*FILEMULT; j++) { | ||||
|             uint8_t rbuffer[1024]; | ||||
|             lfs2_file_read(&lfs2, &file, rbuffer, size) => size; | ||||
|             memcmp(buffer, rbuffer, size) => 0; | ||||
|         } | ||||
|  | ||||
|         lfs2_file_close(&lfs2, &file) => 0; | ||||
|     } | ||||
|     lfs2_unmount(&lfs2) => 0; | ||||
| ''' | ||||
|  | ||||
| # other corner cases | ||||
| [[case]] # bad superblocks (corrupt 1 or 0) | ||||
| define.LFS2_ERASE_CYCLES = 0xffffffff | ||||
| define.LFS2_ERASE_VALUE = [0x00, 0xff, -1] | ||||
| define.LFS2_BADBLOCK_BEHAVIOR = [ | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASEERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_READERROR', | ||||
|     'LFS2_TESTBD_BADBLOCK_PROGNOOP', | ||||
|     'LFS2_TESTBD_BADBLOCK_ERASENOOP', | ||||
| ] | ||||
| code = ''' | ||||
|     lfs2_testbd_setwear(&cfg, 0, 0xffffffff) => 0; | ||||
|     lfs2_testbd_setwear(&cfg, 1, 0xffffffff) => 0; | ||||
|  | ||||
|     lfs2_format(&lfs2, &cfg) => LFS2_ERR_NOSPC; | ||||
|     lfs2_mount(&lfs2, &cfg) => LFS2_ERR_CORRUPT; | ||||
| ''' | ||||
		Reference in New Issue
	
	Block a user