X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Ffs%2Fbattfs_test.c;h=1e6d844c9bbda22109cc1df3945e39dd896c3441;hb=f7d8da5a4b5c03b208309c2f0fb1c164f6478235;hp=650ecdc74ca108e9ecbcf6c929ee88a9dceccc9e;hpb=d44edf1da8ae32efcf62ec94e48b90e0b6e18a7c;p=bertos.git diff --git a/bertos/fs/battfs_test.c b/bertos/fs/battfs_test.c index 650ecdc7..1e6d844c 100644 --- a/bertos/fs/battfs_test.c +++ b/bertos/fs/battfs_test.c @@ -50,26 +50,14 @@ #if UNIT_TEST -FILE *fp; const char test_filename[]="battfs_disk.bin"; static uint8_t page_buffer[PAGE_SIZE]; -static bool disk_open(struct BattFsSuper *d) -{ - fp = fopen(test_filename, "r+b"); - ASSERT(fp); - fseek(fp, 0, SEEK_END); - d->page_size = PAGE_SIZE; - d->page_count = ftell(fp) / d->page_size; - d->page_array = malloc(d->page_count * sizeof(pgcnt_t)); - //TRACEMSG("page_size:%d, page_count:%d\n", d->page_size, d->page_count); - return (fp && d->page_array); -} - static size_t disk_page_read(struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr, void *buf, size_t size) { //TRACEMSG("page:%d, addr:%d, size:%d", page, addr, size); + FILE *fp = (FILE *)d->disk_ctx; fseek(fp, page * d->page_size + addr, SEEK_SET); return fread(buf, 1, size, fp); } @@ -94,6 +82,7 @@ static size_t disk_buffer_read(struct BattFsSuper *d, pgaddr_t addr, void *buf, static bool disk_page_load(struct BattFsSuper *d, pgcnt_t page) { + FILE *fp = (FILE *)d->disk_ctx; //TRACEMSG("page:%d", page); fseek(fp, page * d->page_size, SEEK_SET); return fread(page_buffer, 1, d->page_size, fp) == d->page_size; @@ -101,6 +90,7 @@ static bool disk_page_load(struct BattFsSuper *d, pgcnt_t page) static bool disk_page_save(struct BattFsSuper *d, pgcnt_t page) { + FILE *fp = (FILE *)d->disk_ctx; //TRACEMSG("page:%d", page); fseek(fp, page * d->page_size, SEEK_SET); return fwrite(page_buffer, 1, d->page_size, fp) == d->page_size; @@ -108,6 +98,7 @@ static bool disk_page_save(struct BattFsSuper *d, pgcnt_t page) static bool disk_page_erase(struct BattFsSuper *d, pgcnt_t page) { + FILE *fp = (FILE *)d->disk_ctx; //TRACEMSG("page:%d", page); fseek(fp, page * d->page_size, SEEK_SET); @@ -119,14 +110,37 @@ static bool disk_page_erase(struct BattFsSuper *d, pgcnt_t page) static bool disk_close(struct BattFsSuper *d) { + FILE *fp = (FILE *)d->disk_ctx; //TRACE; free(d->page_array); return (fclose(fp) != EOF); } +static bool disk_open(struct BattFsSuper *d) +{ + d->read = disk_page_read; + d->load = disk_page_load; + d->bufferWrite = disk_buffer_write; + d->bufferRead = disk_buffer_read; + d->save = disk_page_save; + d->erase = disk_page_erase; + d->close = disk_close; + + FILE *fp = fopen(test_filename, "r+b"); + ASSERT(fp); + d->disk_ctx = fp; + fseek(fp, 0, SEEK_END); + d->page_size = PAGE_SIZE; + d->page_count = ftell(fp) / d->page_size; + d->page_array = malloc(d->page_count * sizeof(pgcnt_t)); + //TRACEMSG("page_size:%d, page_count:%d\n", d->page_size, d->page_count); + return (fp && d->page_array); +} + static void testCheck(BattFsSuper *disk, pgcnt_t *reference) { - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); for (int i = 0; i < disk->page_count; i++) @@ -149,12 +163,12 @@ static void testCheck(BattFsSuper *disk, pgcnt_t *reference) kprintf("%04d ", reference[i]); } kputchar('\n'); - battfs_close(disk); + battfs_umount(disk); exit(2); } } ASSERT(battfs_fsck(disk)); - battfs_close(disk); + battfs_umount(disk); } static void diskNew(BattFsSuper *disk) @@ -180,7 +194,7 @@ static void disk1File(BattFsSuper *disk) TRACEMSG("2: disk full with 1 contiguos file\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); for (int i = 0; i < PAGE_COUNT; i++) { @@ -200,7 +214,7 @@ static void diskHalfFile(BattFsSuper *disk) TRACEMSG("3: disk half full with 1 contiguos file, rest unformatted\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); for (int i = 0; i < PAGE_COUNT / 2; i++) { @@ -229,7 +243,7 @@ static void oldSeq1(BattFsSuper *disk) TRACEMSG("6: 1 file with 1 old seq num, 1 free block\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); // page, inode, seq, fill, pgoff battfs_writeTestBlock(disk, 0, 0, 0, disk->data_size, 0); battfs_writeTestBlock(disk, 1, 0, 0, disk->data_size, 1); @@ -253,7 +267,7 @@ static void oldSeq2(BattFsSuper *disk) TRACEMSG("7: 1 file with 1 old seq num, 1 free block\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); // page, inode, seq, fill, pgoff battfs_writeTestBlock(disk, 0, 0, 0, disk->data_size, 0); battfs_writeTestBlock(disk, 1, 0, 1, disk->data_size, 1); @@ -276,7 +290,7 @@ static void oldSeq3(BattFsSuper *disk) TRACEMSG("8: 1 file with 1 old seq num, 1 free block\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); // page, inode, seq, fill, pgoff disk->erase(disk, 0); @@ -301,7 +315,7 @@ static void oldSeq2File(BattFsSuper *disk) TRACEMSG("9: 2 file with old seq num, 2 free block\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); // page, inode, seq, fill, pgoff disk->erase(disk, 0); @@ -334,7 +348,7 @@ static void openFile(BattFsSuper *disk) BattFs fd2; TRACEMSG("10: open file test, inode 0 and inode 4\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; @@ -354,7 +368,8 @@ static void openFile(BattFsSuper *disk) fclose(fp); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(!battfs_fileExists(disk, INEXISTENT_INODE)); @@ -388,10 +403,12 @@ static void openFile(BattFsSuper *disk) ASSERT(LIST_HEAD(&disk->file_opened_list)->succ == &fd2.link); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(kfile_close(&fd2.fd) == 0); + ASSERT(kfile_error(&fd2.fd) == 0); ASSERT(LIST_EMPTY(&disk->file_opened_list)); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("10: passed\n"); } @@ -403,7 +420,7 @@ static void readFile(BattFsSuper *disk) TRACEMSG("11: read file test\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; @@ -421,7 +438,8 @@ static void readFile(BattFsSuper *disk) fclose(fp); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); @@ -430,8 +448,9 @@ static void readFile(BattFsSuper *disk) ASSERT(buf[i] == 0xff); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("11: passed\n"); } @@ -442,7 +461,7 @@ static void readAcross(BattFsSuper *disk) TRACEMSG("12: read file test across page boundary and seek test\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); const unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; @@ -460,7 +479,8 @@ static void readAcross(BattFsSuper *disk) fclose(fp); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); @@ -491,8 +511,9 @@ static void readAcross(BattFsSuper *disk) ASSERT(fd1.fd.seek_pos = (kfile_off_t)fd1.fd.size); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("12: passed\n"); } @@ -505,7 +526,7 @@ static void writeFile(BattFsSuper *disk) TRACEMSG("13: write file test\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; @@ -526,7 +547,8 @@ static void writeFile(BattFsSuper *disk) for (size_t i = 0; i < sizeof(buf); i++) buf[i] = i; - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); ASSERT(kfile_write(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); @@ -540,8 +562,9 @@ static void writeFile(BattFsSuper *disk) ASSERT(buf[i] == i); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("13: passed\n"); } @@ -552,7 +575,7 @@ static void writeAcross(BattFsSuper *disk) TRACEMSG("14: write file test across page boundary and seek test\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); const unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; @@ -570,7 +593,8 @@ static void writeAcross(BattFsSuper *disk) fclose(fp); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); @@ -612,8 +636,9 @@ static void writeAcross(BattFsSuper *disk) ASSERT(fd1.fd.seek_pos == (kfile_off_t)sizeof(buf) * 3); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("14: passed\n"); } @@ -632,7 +657,8 @@ static void createFile(BattFsSuper *disk) inode_t INODE = 0; unsigned int MODE = BATTFS_CREATE; - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); for (int i = 0; i < FILE_SIZE / 2; i++) @@ -641,10 +667,12 @@ static void createFile(BattFsSuper *disk) ASSERT(fd1.fd.seek_pos == FILE_SIZE / 2); ASSERT(fd1.fd.size == FILE_SIZE / 2); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, 0)); ASSERT(fd1.fd.size == FILE_SIZE / 2); @@ -659,8 +687,9 @@ static void createFile(BattFsSuper *disk) ASSERT(fd1.fd.seek_pos == FILE_SIZE / 2); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("15: passed\n"); @@ -681,7 +710,8 @@ static void multipleWrite(BattFsSuper *disk) unsigned int MODE = BATTFS_CREATE; uint8_t buf[1000]; - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); @@ -704,10 +734,12 @@ static void multipleWrite(BattFsSuper *disk) ASSERT(disk->free_bytes == disk->disk_size - sizeof(buf)); } ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(disk->free_bytes == disk->disk_size - sizeof(buf)); ASSERT(battfs_fileopen(disk, &fd1, INODE, 0)); @@ -717,8 +749,9 @@ static void multipleWrite(BattFsSuper *disk) for (unsigned i = 0; i < sizeof(buf); i++) ASSERT(buf[i] == ((j-1+i) & 0xff)); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("16: passed\n"); @@ -739,7 +772,8 @@ static void increaseFile(BattFsSuper *disk) unsigned int MODE = BATTFS_CREATE; uint8_t buf[1000]; - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE1, MODE)); ASSERT(battfs_fileopen(disk, &fd2, INODE2, MODE)); @@ -763,9 +797,11 @@ static void increaseFile(BattFsSuper *disk) ASSERT(buf[i] == (i & 0xff)); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(kfile_close(&fd2.fd) == 0); + ASSERT(kfile_error(&fd2.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("17: passed\n"); } @@ -777,7 +813,7 @@ static void readEOF(BattFsSuper *disk) TRACEMSG("18: reading over EOF test\n"); - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; @@ -795,7 +831,8 @@ static void readEOF(BattFsSuper *disk) fclose(fp); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); ASSERT(kfile_seek(&fd1.fd, fd1.fd.size + 10, SEEK_SET) == fd1.fd.size + 10); @@ -803,8 +840,9 @@ static void readEOF(BattFsSuper *disk) ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == 0); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("18: passed\n"); } @@ -827,7 +865,8 @@ static void writeEOF(BattFsSuper *disk) for (int i = 0; i < 2; i++) buf[i] = i; - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); disk_size_t prev_free = disk->free_bytes; ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); @@ -883,8 +922,9 @@ static void writeEOF(BattFsSuper *disk) ASSERT(buf[i] == (i & 0xff)); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == 0); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("19: passed\n"); @@ -896,7 +936,7 @@ static void endOfSpace(BattFsSuper *disk) BattFs fd1; uint8_t buf[(PAGE_SIZE - BATTFS_HEADER_LEN) * 5]; - fp = fopen(test_filename, "w+"); + FILE *fp = fopen(test_filename, "w+"); unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; @@ -908,7 +948,8 @@ static void endOfSpace(BattFsSuper *disk) disk->erase(disk, 3); fclose(fp); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); ASSERT(kfile_write(&fd1.fd, buf, sizeof(buf)) == PAGE_FILL * 4); @@ -917,8 +958,9 @@ static void endOfSpace(BattFsSuper *disk) ASSERT(disk->free_bytes == 0); ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(kfile_error(&fd1.fd) == BATTFS_DISK_GETNEWPAGE_ERR); ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("20: passed\n"); } @@ -939,7 +981,8 @@ static void multipleFilesRW(BattFsSuper *disk) unsigned int MODE = BATTFS_CREATE; uint32_t buf[FILE_SIZE / (4 * N_FILES * sizeof(uint32_t))]; - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); for (inode_t i = 0; i < N_FILES; i++) ASSERT(battfs_fileopen(disk, &fd[i], i, MODE)); @@ -969,12 +1012,16 @@ static void multipleFilesRW(BattFsSuper *disk) } for (inode_t i = 0; i < N_FILES; i++) + { ASSERT(kfile_close(&fd[i].fd) == 0); + ASSERT(kfile_error(&fd[i].fd) == 0); + } ASSERT(battfs_fsck(disk)); - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); - ASSERT(battfs_init(disk)); + ASSERT(disk_open(disk)); + ASSERT(battfs_mount(disk)); ASSERT(battfs_fsck(disk)); for (inode_t i = 0; i < N_FILES; i++) @@ -994,9 +1041,12 @@ static void multipleFilesRW(BattFsSuper *disk) } for (inode_t i = 0; i < N_FILES; i++) + { ASSERT(kfile_close(&fd[i].fd) == 0); + ASSERT(kfile_error(&fd[i].fd) == 0); + } - ASSERT(battfs_close(disk)); + ASSERT(battfs_umount(disk)); TRACEMSG("21: passed\n"); } @@ -1005,16 +1055,6 @@ int battfs_testRun(void) { BattFsSuper disk; - disk.page_size = PAGE_SIZE; - disk.open = disk_open; - disk.read = disk_page_read; - disk.load = disk_page_load; - disk.bufferWrite = disk_buffer_write; - disk.bufferRead = disk_buffer_read; - disk.save = disk_page_save; - disk.erase = disk_page_erase; - disk.close = disk_close; - diskNew(&disk); disk1File(&disk); diskHalfFile(&disk);