X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Ffs%2Fbattfs_test.c;h=0df504cd72fc5cb31983deea18410fdc7638d6ae;hb=661b0df2a780f14694463915ae6103e58a69cd12;hp=cbbadeb9ee9da896c0c12ce1899c4224c6ef95e4;hpb=e168c669eb9a7b0e47a12046649761c1d953a970;p=bertos.git diff --git a/bertos/fs/battfs_test.c b/bertos/fs/battfs_test.c index cbbadeb9..0df504cd 100644 --- a/bertos/fs/battfs_test.c +++ b/bertos/fs/battfs_test.c @@ -440,7 +440,7 @@ static void readAcross(BattFsSuper *disk) const unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; - inode_t MODE = 0; + unsigned int MODE = 0; uint8_t buf[PAGE_FILL + BATTFS_HEADER_LEN / 2]; disk->erase(disk, 0); @@ -546,7 +546,7 @@ static void writeAcross(BattFsSuper *disk) const unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; inode_t INODE = 0; - inode_t MODE = 0; + unsigned int MODE = 0; uint8_t buf[PAGE_FILL + BATTFS_HEADER_LEN / 2]; disk->erase(disk, 0); @@ -618,7 +618,7 @@ static void createFile(BattFsSuper *disk) BattFs fd1; inode_t INODE = 0; - inode_t MODE = BATTFS_CREATE; + unsigned int MODE = BATTFS_CREATE; ASSERT(battfs_init(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); @@ -662,7 +662,7 @@ static void multipleWrite(BattFsSuper *disk) BattFs fd1; inode_t INODE = 0; - inode_t MODE = BATTFS_CREATE; + unsigned int MODE = BATTFS_CREATE; uint8_t buf[1000]; ASSERT(battfs_init(disk)); @@ -716,7 +716,7 @@ static void increaseFile(BattFsSuper *disk) BattFs fd1,fd2; inode_t INODE1 = 1, INODE2 = 2; - inode_t MODE = BATTFS_CREATE; + unsigned int MODE = BATTFS_CREATE; uint8_t buf[1000]; ASSERT(battfs_init(disk)); @@ -748,6 +748,123 @@ static void increaseFile(BattFsSuper *disk) TRACEMSG("17: passed\n"); } +static void readEOF(BattFsSuper *disk) +{ + BattFs fd1; + uint8_t buf[16]; + + TRACEMSG("18: reading over EOF test\n"); + + fp = fopen(test_filename, "w+"); + + unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; + inode_t INODE = 0; + inode_t INODE2 = 4; + unsigned int MODE = 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); + 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); + + fclose(fp); + + ASSERT(battfs_init(disk)); + ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); + ASSERT(kfile_seek(&fd1.fd, fd1.fd.size + 10, SEEK_SET) == fd1.fd.size + 10); + ASSERT(fd1.fd.seek_pos == fd1.fd.size + 10); + ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == 0); + + ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(battfs_close(disk)); + + TRACEMSG("18: passed\n"); +} + +static void writeEOF(BattFsSuper *disk) +{ + TRACEMSG("19: writing over EOF test\n"); + + FILE *fpt = fopen(test_filename, "w+"); + + for (int i = 0; i < FILE_SIZE / 5; i++) + fputc(0xff, fpt); + fclose(fpt); + + BattFs fd1; + inode_t INODE = 0; + unsigned int MODE = BATTFS_CREATE; + uint8_t buf[FILE_SIZE / 13]; + + for (int i = 0; i < 2; i++) + buf[i] = i; + + ASSERT(battfs_init(disk)); + disk_size_t prev_free = disk->free_bytes; + ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); + ASSERT(fd1.fd.size == 0); + + ASSERT(kfile_seek(&fd1.fd, 2, KSM_SEEK_END) == 2); + ASSERT(kfile_write(&fd1.fd, buf, 2)); + ASSERT(fd1.fd.seek_pos == 4); + ASSERT(fd1.fd.size == 4); + ASSERT(disk->free_bytes == prev_free - 4); + ASSERT(kfile_seek(&fd1.fd, 0, KSM_SEEK_SET) == 0); + memset(buf, 0, 2); + ASSERT(kfile_read(&fd1.fd, buf, 2) == 2); + for (int i = 0; i < 2; i++) + ASSERT(buf[i] == 0xff); + + memset(buf, 0, 2); + ASSERT(kfile_read(&fd1.fd, buf, 2) == 2); + for (int i = 0; i < 2; i++) + ASSERT(buf[i] == (i & 0xff)); + + ASSERT(kfile_seek(&fd1.fd, sizeof(buf), KSM_SEEK_END) == sizeof(buf) + 4); + for (int i = 0; i < sizeof(buf); i++) + buf[i] = i; + ASSERT(kfile_write(&fd1.fd, buf, sizeof(buf))); + ASSERT(fd1.fd.seek_pos == sizeof(buf) * 2 + 4); + ASSERT(fd1.fd.size == sizeof(buf) * 2 + 4); + ASSERT(disk->free_bytes == prev_free - sizeof(buf) * 2 - 4); + + ASSERT(kfile_seek(&fd1.fd, 0, KSM_SEEK_SET) == 0); + + memset(buf, 0, 2); + ASSERT(kfile_read(&fd1.fd, buf, 2) == 2); + ASSERT(fd1.fd.seek_pos == 2); + for (int i = 0; i < 2; i++) + ASSERT(buf[i] == 0xff); + + memset(buf, 0, 2); + ASSERT(kfile_read(&fd1.fd, buf, 2) == 2); + ASSERT(fd1.fd.seek_pos == 4); + for (int i = 0; i < 2; i++) + ASSERT(buf[i] == (i & 0xff)); + + memset(buf, 0, 4); + ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); + ASSERT(fd1.fd.seek_pos == sizeof(buf) + 4); + for (int i = 0; i < sizeof(buf); i++) + ASSERT(buf[i] == 0xff); + + memset(buf, 0, sizeof(buf)); + ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); + for (int i = 0; i < sizeof(buf); i++) + ASSERT(buf[i] == (i & 0xff)); + + ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(battfs_close(disk)); + + TRACEMSG("19: passed\n"); + +} + + int battfs_testRun(void) { BattFsSuper disk; @@ -776,6 +893,8 @@ int battfs_testRun(void) createFile(&disk); multipleWrite(&disk); increaseFile(&disk); + readEOF(&disk); + writeEOF(&disk); kprintf("All tests passed!\n");