[[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 code = ''' err = lfs_mount(&lfs, &cfg); if (err) { lfs_format(&lfs, &cfg) => 0; lfs_mount(&lfs, &cfg) => 0; } lfs_unmount(&lfs) => 0; ''' reentrant = true [[case]] # invalid mount code = ''' lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT; ''' # TODO invalid superblock? (corrupt 1, 0) [[case]] # expanding superblock code = ''' lfs_format(&lfs, &cfg) => 0; lfs_mount(&lfs, &cfg) => 0; for (int i = 0; i < N; i++) { lfs_mkdir(&lfs, "dummy") => 0; lfs_stat(&lfs, "dummy", &info) => 0; assert(strcmp(info.name, "dummy") == 0); lfs_remove(&lfs, "dummy") => 0; } lfs_unmount(&lfs) => 0; // one last check after power-cycle lfs_mount(&lfs, &cfg) => 0; lfs_mkdir(&lfs, "dummy") => 0; lfs_stat(&lfs, "dummy", &info) => 0; assert(strcmp(info.name, "dummy") == 0); lfs_unmount(&lfs) => 0; ''' define.BLOCK_CYCLES = [32, 33, 1] define.N = [10, 100, 1000] [[case]] # expanding superblock with power cycle code = ''' lfs_format(&lfs, &cfg) => 0; for (int i = 0; i < N; i++) { lfs_mount(&lfs, &cfg) => 0; // remove lingering dummy? err = lfs_remove(&lfs, "dummy"); assert(err == 0 || (err == LFS_ERR_NOENT && i == 0)); lfs_mkdir(&lfs, "dummy") => 0; lfs_stat(&lfs, "dummy", &info) => 0; assert(strcmp(info.name, "dummy") == 0); 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); lfs_unmount(&lfs) => 0; ''' define.BLOCK_CYCLES = [32, 33, 1] define.N = [10, 100, 1000] [[case]] # reentrant expanding superblock 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_remove(&lfs, "dummy"); assert(err == 0 || (err == LFS_ERR_NOENT && i == 0)); lfs_mkdir(&lfs, "dummy") => 0; lfs_stat(&lfs, "dummy", &info) => 0; assert(strcmp(info.name, "dummy") == 0); } 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); lfs_unmount(&lfs) => 0; ''' define.BLOCK_CYCLES = [2, 1] define.N = 24 reentrant = true