X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Ffs%2Fbattfs_test.c;h=1bcb037eaf0254c170f1b523f84648590ff22047;hb=c36d4b6e73fd7e760f1a99fd2d87d7083fd87933;hp=f84f7fdf30f32022b914fa719118c62083a15380;hpb=a4c1f94d9cf7f430e50b857335b3c99447396f0d;p=bertos.git diff --git a/bertos/fs/battfs_test.c b/bertos/fs/battfs_test.c index f84f7fdf..1bcb037e 100644 --- a/bertos/fs/battfs_test.c +++ b/bertos/fs/battfs_test.c @@ -53,6 +53,7 @@ FILE *fp; const char test_filename[]="battfs_disk.bin"; +static uint8_t page_buffer[PAGE_SIZE]; static bool disk_open(struct BattFsSuper *d) { @@ -68,16 +69,32 @@ static bool disk_open(struct BattFsSuper *d) 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\n", page, addr, size); + TRACEMSG("page:%d, addr:%d, size:%d", page, addr, size); fseek(fp, page * d->page_size + addr, SEEK_SET); return fread(buf, 1, size, fp); } -static size_t disk_page_write(struct BattFsSuper *d, pgcnt_t page, pgaddr_t addr, const void *buf, size_t size) +static size_t disk_buffer_write(struct BattFsSuper *d, pgaddr_t addr, const void *buf, size_t size) { - //TRACEMSG("page:%d, addr:%d, size:%d\n", page, addr, size); - fseek(fp, page * d->page_size + addr, SEEK_SET); - return fwrite(buf, 1, size, fp); + TRACEMSG("addr:%d, size:%d", addr, size); + ASSERT(addr + size <= d->page_size); + memcpy(&page_buffer[addr], buf, size); + + return size; +} + +static bool disk_page_load(struct BattFsSuper *d, pgcnt_t page) +{ + TRACEMSG("page:%d", page); + fseek(fp, page * d->page_size, SEEK_SET); + return fread(page_buffer, 1, d->page_size, fp) == d->page_size; +} + +static bool disk_page_save(struct BattFsSuper *d, pgcnt_t page) +{ + TRACEMSG("page:%d", page); + fseek(fp, page * d->page_size, SEEK_SET); + return fwrite(page_buffer, 1, d->page_size, fp) == d->page_size; } static bool disk_page_erase(struct BattFsSuper *d, pgcnt_t page) @@ -258,7 +275,7 @@ static void test6(BattFsSuper *disk) fp = fopen(test_filename, "w+"); - + // page, inode, seq, fill, pgoff battfs_writeTestBlock(disk, 0, 0, 0, 0, 0); battfs_writeTestBlock(disk, 1, 0, 0, 0, 1); battfs_writeTestBlock(disk, 2, 0, 1, 0, 1); @@ -268,8 +285,8 @@ static void test6(BattFsSuper *disk) fclose(fp); ref[0] = 0; ref[1] = 2; - ref[2] = 3; - ref[3] = 1; + ref[2] = 1; + ref[3] = 3; testCheck(disk, ref); kprintf("Test6: passed\n"); @@ -282,17 +299,17 @@ static void test7(BattFsSuper *disk) fp = fopen(test_filename, "w+"); - + // page, inode, seq, fill, pgoff battfs_writeTestBlock(disk, 0, 0, 0, 0, 0); battfs_writeTestBlock(disk, 1, 0, 1, 0, 1); battfs_writeTestBlock(disk, 2, 0, 0, 0, 1); - battfs_writeTestBlock(disk, 3, 0, 0, 0, 0); + disk->erase(disk, 3); fclose(fp); ref[0] = 0; ref[1] = 1; - ref[2] = 3; - ref[3] = 2; + ref[2] = 2; + ref[3] = 3; testCheck(disk, ref); kprintf("Test7: passed\n"); @@ -306,7 +323,8 @@ static void test8(BattFsSuper *disk) fp = fopen(test_filename, "w+"); - battfs_writeTestBlock(disk, 0, 0, 0, 0, 0); + // page, inode, seq, fill, pgoff + disk->erase(disk, 0); battfs_writeTestBlock(disk, 1, 0, 0, 0, 0); battfs_writeTestBlock(disk, 2, 0, 1, 0, 1); battfs_writeTestBlock(disk, 3, 0, 0, 0, 1); @@ -330,11 +348,12 @@ static void test9(BattFsSuper *disk) fp = fopen(test_filename, "w+"); - battfs_writeTestBlock(disk, 0, 0, 0, 0, 0); + // page, inode, seq, fill, pgoff + disk->erase(disk, 0); battfs_writeTestBlock(disk, 1, 0, 0, 0, 0); battfs_writeTestBlock(disk, 2, 0, 3, 0, 1); battfs_writeTestBlock(disk, 3, 0, 0, 0, 1); - battfs_writeTestBlock(disk, 4, 0, 0, 0, 0); + disk->erase(disk, 4); battfs_writeTestBlock(disk, 5, 4, 0, 0, 0); battfs_writeTestBlock(disk, 6, 4, 1, 0, 1); battfs_writeTestBlock(disk, 7, 4, 0, 0, 1); @@ -342,12 +361,12 @@ static void test9(BattFsSuper *disk) fclose(fp); ref[0] = 1; - ref[1] = 3; + ref[1] = 2; ref[2] = 5; ref[3] = 6; ref[4] = 0; - ref[5] = 4; - ref[6] = 2; + ref[5] = 3; + ref[6] = 4; ref[7] = 7; testCheck(disk, ref); @@ -362,17 +381,18 @@ static void test10(BattFsSuper *disk) fp = fopen(test_filename, "w+"); - int PAGE_FILL = 116; + int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; unsigned int INODE = 0; unsigned int INODE2 = 4; unsigned int INEXISTENT_INODE = 123; unsigned int MODE = 0; - battfs_writeTestBlock(disk, 0, 123, 0, PAGE_FILL, 0); + // page, inode, seq, fill, pgoff + disk->erase(disk, 0); battfs_writeTestBlock(disk, 1, INODE, 0, PAGE_FILL, 0); battfs_writeTestBlock(disk, 2, INODE, 3, PAGE_FILL, 1); battfs_writeTestBlock(disk, 3, INODE, 0, PAGE_FILL, 1); - battfs_writeTestBlock(disk, 4, INODE2, 0, PAGE_FILL, 0); + disk->erase(disk, 4); battfs_writeTestBlock(disk, 5, INODE2, 0, PAGE_FILL, 0); battfs_writeTestBlock(disk, 6, INODE2, 1, PAGE_FILL, 1); battfs_writeTestBlock(disk, 7, INODE2, 0, PAGE_FILL, 1); @@ -428,16 +448,16 @@ static void test11(BattFsSuper *disk) fp = fopen(test_filename, "w+"); - unsigned int PAGE_FILL = 116; + unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; unsigned int INODE = 0; unsigned int INODE2 = 4; unsigned int MODE = 0; - battfs_writeTestBlock(disk, 0, 123, 0, PAGE_FILL, 0); + disk->erase(disk, 0); battfs_writeTestBlock(disk, 1, INODE, 0, PAGE_FILL, 0); battfs_writeTestBlock(disk, 2, INODE, 3, PAGE_FILL, 1); battfs_writeTestBlock(disk, 3, INODE, 0, PAGE_FILL, 1); - battfs_writeTestBlock(disk, 4, INODE2, 0, PAGE_FILL, 0); + disk->erase(disk, 4); battfs_writeTestBlock(disk, 5, INODE2, 0, PAGE_FILL, 0); battfs_writeTestBlock(disk, 6, INODE2, 1, PAGE_FILL, 1); battfs_writeTestBlock(disk, 7, INODE2, 0, PAGE_FILL, 1); @@ -449,7 +469,7 @@ static void test11(BattFsSuper *disk) ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); ASSERT(fd1.fd.seek_pos == sizeof(buf)); for (size_t i = 0; i < sizeof(buf); i++) - ASSERT(buf[i] == 0); + ASSERT(buf[i] == 0xff); ASSERT(kfile_close(&fd1.fd) == 0); ASSERT(battfs_close(disk)); @@ -465,16 +485,16 @@ static void test12(BattFsSuper *disk) fp = fopen(test_filename, "w+"); - const unsigned int PAGE_FILL = 116; + const unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; unsigned int INODE = 0; unsigned int MODE = 0; - uint8_t buf[PAGE_FILL + 10]; + uint8_t buf[PAGE_FILL + BATTFS_HEADER_LEN / 2]; - battfs_writeTestBlock(disk, 0, 123, 0, PAGE_FILL, 0); + disk->erase(disk, 0); battfs_writeTestBlock(disk, 1, INODE, 0, PAGE_FILL, 0); battfs_writeTestBlock(disk, 2, INODE, 3, PAGE_FILL, 1); battfs_writeTestBlock(disk, 3, INODE, 0, PAGE_FILL, 1); - battfs_writeTestBlock(disk, 4, INODE, 0, PAGE_FILL, 0); + disk->erase(disk, 4); battfs_writeTestBlock(disk, 5, INODE, 0, PAGE_FILL, 2); battfs_writeTestBlock(disk, 6, INODE, 1, PAGE_FILL, 3); battfs_writeTestBlock(disk, 7, INODE, 0, PAGE_FILL, 3); @@ -487,22 +507,22 @@ static void test12(BattFsSuper *disk) ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); ASSERT(fd1.fd.seek_pos == (kfile_off_t)sizeof(buf)); for (size_t i = 0; i < sizeof(buf); i++) - ASSERT(buf[i] == 0); + ASSERT(buf[i] == 0xff); ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); ASSERT(fd1.fd.seek_pos == (kfile_off_t)sizeof(buf) * 2); for (size_t i = 0; i < sizeof(buf); i++) - ASSERT(buf[i] == 0); + ASSERT(buf[i] == 0xff); ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); ASSERT(fd1.fd.seek_pos == (kfile_off_t)sizeof(buf) * 3); for (size_t i = 0; i < sizeof(buf); i++) - ASSERT(buf[i] == 0); + ASSERT(buf[i] == 0xff); - ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == 86); + ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == PAGE_FILL * 4 - sizeof(buf) * 3); ASSERT(fd1.fd.seek_pos == (kfile_off_t)fd1.fd.size); - for (size_t i = 0; i < 86; i++) - ASSERT(buf[i] == 0); + for (size_t i = 0; i < PAGE_FILL * 4 - sizeof(buf) * 3; i++) + ASSERT(buf[i] == 0xff); ASSERT(kfile_seek(&fd1.fd, 0, KSM_SEEK_SET) == 0); ASSERT(fd1.fd.seek_pos == 0); @@ -523,7 +543,9 @@ int battfs_testRun(void) disk.open = disk_open; disk.read = disk_page_read; - disk.write = disk_page_write; + disk.load = disk_page_load; + disk.bufferWrite = disk_buffer_write; + disk.save = disk_page_save; disk.erase = disk_page_erase; disk.close = disk_close; test1(&disk);