mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	With the superblock expansion stuff, the test_format tests have grown to test more advanced superblock-related features. This is fine but deserves a rename so it's more clear. Also fixed a typo that meant tests never ran with block cycles.
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
| [[case]] # simple formatting test
 | |
| code = '''
 | |
|     lfs_format(&lfs, &cfg) => 0;
 | |
| '''
 | |
| 
 | |
| [[case]] # mount/unmount
 | |
| code = '''
 | |
|     lfs_format(&lfs, &cfg) => 0;
 | |
|     lfs_mount(&lfs, &cfg) => 0;
 | |
|     lfs_unmount(&lfs) => 0;
 | |
| '''
 | |
| 
 | |
| [[case]] # reentrant format
 | |
| reentrant = true
 | |
| code = '''
 | |
|     err = lfs_mount(&lfs, &cfg);
 | |
|     if (err) {
 | |
|         lfs_format(&lfs, &cfg) => 0;
 | |
|         lfs_mount(&lfs, &cfg) => 0;
 | |
|     }
 | |
|     lfs_unmount(&lfs) => 0;
 | |
| '''
 | |
| 
 | |
| [[case]] # invalid mount
 | |
| code = '''
 | |
|     lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT;
 | |
| '''
 | |
| 
 | |
| [[case]] # expanding superblock
 | |
| define.LFS_BLOCK_CYCLES = [32, 33, 1]
 | |
| define.N = [10, 100, 1000]
 | |
| code = '''
 | |
|     lfs_format(&lfs, &cfg) => 0;
 | |
|     lfs_mount(&lfs, &cfg) => 0;
 | |
|     for (int i = 0; i < N; i++) {
 | |
|         lfs_file_open(&lfs, &file, "dummy",
 | |
|                 LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
 | |
|         lfs_file_close(&lfs, &file) => 0;
 | |
|         lfs_stat(&lfs, "dummy", &info) => 0;
 | |
|         assert(strcmp(info.name, "dummy") == 0);
 | |
|         assert(info.type == LFS_TYPE_REG);
 | |
|         lfs_remove(&lfs, "dummy") => 0;
 | |
|     }
 | |
|     lfs_unmount(&lfs) => 0;
 | |
| 
 | |
|     // one last check after power-cycle
 | |
|     lfs_mount(&lfs, &cfg) => 0;
 | |
|     lfs_file_open(&lfs, &file, "dummy",
 | |
|             LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
 | |
|     lfs_file_close(&lfs, &file) => 0;
 | |
|     lfs_stat(&lfs, "dummy", &info) => 0;
 | |
|     assert(strcmp(info.name, "dummy") == 0);
 | |
|     assert(info.type == LFS_TYPE_REG);
 | |
|     lfs_unmount(&lfs) => 0;
 | |
| '''
 | |
| 
 | |
| [[case]] # expanding superblock with power cycle
 | |
| define.LFS_BLOCK_CYCLES = [32, 33, 1]
 | |
| define.N = [10, 100, 1000]
 | |
| code = '''
 | |
|     lfs_format(&lfs, &cfg) => 0;
 | |
|     for (int i = 0; i < N; i++) {
 | |
|         lfs_mount(&lfs, &cfg) => 0;
 | |
|         // remove lingering dummy?
 | |
|         err = lfs_stat(&lfs, "dummy", &info);
 | |
|         assert(err == 0 || (err == LFS_ERR_NOENT && i == 0));
 | |
|         if (!err) {
 | |
|             assert(strcmp(info.name, "dummy") == 0);
 | |
|             assert(info.type == LFS_TYPE_REG);
 | |
|             lfs_remove(&lfs, "dummy") => 0;
 | |
|         }
 | |
| 
 | |
|         lfs_file_open(&lfs, &file, "dummy",
 | |
|                 LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
 | |
|         lfs_file_close(&lfs, &file) => 0;
 | |
|         lfs_stat(&lfs, "dummy", &info) => 0;
 | |
|         assert(strcmp(info.name, "dummy") == 0);
 | |
|         assert(info.type == LFS_TYPE_REG);
 | |
|         lfs_unmount(&lfs) => 0;
 | |
|     }
 | |
| 
 | |
|     // one last check after power-cycle
 | |
|     lfs_mount(&lfs, &cfg) => 0;
 | |
|     lfs_stat(&lfs, "dummy", &info) => 0;
 | |
|     assert(strcmp(info.name, "dummy") == 0);
 | |
|     assert(info.type == LFS_TYPE_REG);
 | |
|     lfs_unmount(&lfs) => 0;
 | |
| '''
 | |
| 
 | |
| [[case]] # reentrant expanding superblock
 | |
| define.LFS_BLOCK_CYCLES = [2, 1]
 | |
| define.N = 24
 | |
| reentrant = true
 | |
| code = '''
 | |
|     err = lfs_mount(&lfs, &cfg);
 | |
|     if (err) {
 | |
|         lfs_format(&lfs, &cfg) => 0;
 | |
|         lfs_mount(&lfs, &cfg) => 0;
 | |
|     }
 | |
| 
 | |
|     for (int i = 0; i < N; i++) {
 | |
|         // remove lingering dummy?
 | |
|         err = lfs_stat(&lfs, "dummy", &info);
 | |
|         assert(err == 0 || (err == LFS_ERR_NOENT && i == 0));
 | |
|         if (!err) {
 | |
|             assert(strcmp(info.name, "dummy") == 0);
 | |
|             assert(info.type == LFS_TYPE_REG);
 | |
|             lfs_remove(&lfs, "dummy") => 0;
 | |
|         }
 | |
| 
 | |
|         lfs_file_open(&lfs, &file, "dummy",
 | |
|                 LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
 | |
|         lfs_file_close(&lfs, &file) => 0;
 | |
|         lfs_stat(&lfs, "dummy", &info) => 0;
 | |
|         assert(strcmp(info.name, "dummy") == 0);
 | |
|         assert(info.type == LFS_TYPE_REG);
 | |
|     }
 | |
| 
 | |
|     lfs_unmount(&lfs) => 0;
 | |
| 
 | |
|     // one last check after power-cycle
 | |
|     lfs_mount(&lfs, &cfg) => 0;
 | |
|     lfs_stat(&lfs, "dummy", &info) => 0;
 | |
|     assert(strcmp(info.name, "dummy") == 0);
 | |
|     assert(info.type == LFS_TYPE_REG);
 | |
|     lfs_unmount(&lfs) => 0;
 | |
| '''
 |