X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Ffs%2Fbattfs_test.c;h=8f6cc2c4f07f060f7517e2aed1ee32cd311a8aaf;hb=202e173ecdce67ba47b646308ae713b5801c56da;hp=863f39322f1612947ac6d58fcb6a81ae53dba2e9;hpb=a73a7feb1d41ff1ec0b59c50102199c55013f464;p=bertos.git diff --git a/bertos/fs/battfs_test.c b/bertos/fs/battfs_test.c index 863f3932..8f6cc2c4 100644 --- a/bertos/fs/battfs_test.c +++ b/bertos/fs/battfs_test.c @@ -391,9 +391,9 @@ static void test10(BattFsSuper *disk) fp = fopen(test_filename, "w+"); int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; - unsigned int INODE = 0; - unsigned int INODE2 = 4; - unsigned int INEXISTENT_INODE = 123; + inode_t INODE = 0; + inode_t INODE2 = 4; + inode_t INEXISTENT_INODE = 123; unsigned int MODE = 0; // page, inode, seq, fill, pgoff @@ -458,8 +458,8 @@ static void test11(BattFsSuper *disk) fp = fopen(test_filename, "w+"); unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; - unsigned int INODE = 0; - unsigned int INODE2 = 4; + inode_t INODE = 0; + inode_t INODE2 = 4; unsigned int MODE = 0; disk->erase(disk, 0); @@ -495,8 +495,8 @@ static void test12(BattFsSuper *disk) fp = fopen(test_filename, "w+"); const unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; - unsigned int INODE = 0; - unsigned int MODE = 0; + inode_t INODE = 0; + inode_t MODE = 0; uint8_t buf[PAGE_FILL + BATTFS_HEADER_LEN / 2]; disk->erase(disk, 0); @@ -556,8 +556,8 @@ static void test13(BattFsSuper *disk) fp = fopen(test_filename, "w+"); unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; - unsigned int INODE = 0; - unsigned int INODE2 = 4; + inode_t INODE = 0; + inode_t INODE2 = 4; unsigned int MODE = 0; disk->erase(disk, 0); @@ -601,8 +601,8 @@ static void test14(BattFsSuper *disk) fp = fopen(test_filename, "w+"); const unsigned int PAGE_FILL = PAGE_SIZE - BATTFS_HEADER_LEN; - unsigned int INODE = 0; - unsigned int MODE = 0; + inode_t INODE = 0; + inode_t MODE = 0; uint8_t buf[PAGE_FILL + BATTFS_HEADER_LEN / 2]; disk->erase(disk, 0); @@ -673,20 +673,137 @@ static void test15(BattFsSuper *disk) fclose(fpt); BattFs fd1; - unsigned int INODE = 0; - unsigned int MODE = BATTFS_CREATE; + inode_t INODE = 0; + inode_t MODE = BATTFS_CREATE; ASSERT(battfs_init(disk)); ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); for (int i = 0; i < FILE_SIZE / 2; i++) ASSERT(kfile_putc(i, &fd1.fd) != EOF); + ASSERT(fd1.fd.seek_pos == FILE_SIZE / 2); + ASSERT(fd1.fd.size == FILE_SIZE / 2); ASSERT(kfile_close(&fd1.fd) == 0); ASSERT(battfs_close(disk)); + ASSERT(battfs_init(disk)); + ASSERT(battfs_fileopen(disk, &fd1, INODE, 0)); + ASSERT(fd1.fd.size == FILE_SIZE / 2); + ASSERT(fd1.fd.seek_pos == 0); + + uint8_t buf[FILE_SIZE / 2]; + memset(buf, 0, sizeof(buf)); + ASSERT(kfile_read(&fd1.fd, buf, FILE_SIZE / 2) == FILE_SIZE / 2); + + for (int i = 0; i < FILE_SIZE / 2; i++) + ASSERT(buf[i] == (i & 0xff)); + + ASSERT(fd1.fd.seek_pos == FILE_SIZE / 2); + ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(battfs_close(disk)); + + kprintf("Test15: passed\n"); } +static void test16(BattFsSuper *disk) +{ + kprintf("Test16: multiple write on file\n"); + + FILE *fpt = fopen(test_filename, "w+"); + + for (int i = 0; i < FILE_SIZE; i++) + fputc(0xff, fpt); + fclose(fpt); + + BattFs fd1; + inode_t INODE = 0; + inode_t MODE = BATTFS_CREATE; + uint8_t buf[1000]; + + ASSERT(battfs_init(disk)); + ASSERT(battfs_fileopen(disk, &fd1, INODE, MODE)); + + int j; + for (j = 1; j < 1013; j++) + { + for (int i = 0; i < sizeof(buf); i++) + buf[i] = j+i; + + ASSERT(kfile_write(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); + ASSERT(fd1.fd.seek_pos == sizeof(buf)); + ASSERT(fd1.fd.size == sizeof(buf)); + ASSERT(kfile_seek(&fd1.fd, 0, KSM_SEEK_SET) == 0); + memset(buf, 0, sizeof(buf)); + ASSERT(kfile_read(&fd1.fd, buf, sizeof(buf)) == sizeof(buf)); + ASSERT(fd1.fd.seek_pos == sizeof(buf)); + for (int i = 0; i < sizeof(buf); i++) + ASSERT(buf[i] == ((j+i) & 0xff)); + ASSERT(kfile_seek(&fd1.fd, 0, KSM_SEEK_SET) == 0); + ASSERT(disk->free_bytes == disk->disk_size - sizeof(buf)); + } + ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(battfs_close(disk)); + + ASSERT(battfs_init(disk)); + ASSERT(disk->free_bytes == disk->disk_size - sizeof(buf)); + ASSERT(battfs_fileopen(disk, &fd1, INODE, 0)); + ASSERT(fd1.fd.size == sizeof(buf)); + 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] == ((j-1+i) & 0xff)); + ASSERT(kfile_close(&fd1.fd) == 0); + ASSERT(battfs_close(disk)); + + + kprintf("Test16: passed\n"); +} + +static void test17(BattFsSuper *disk) +{ + kprintf("Test17: increasing dimension of a file with multiple open files.\n"); + + FILE *fpt = fopen(test_filename, "w+"); + + for (int i = 0; i < FILE_SIZE / 10; i++) + fputc(0xff, fpt); + fclose(fpt); + + BattFs fd1,fd2; + inode_t INODE1 = 1, INODE2 = 2; + inode_t MODE = BATTFS_CREATE; + uint8_t buf[1000]; + + ASSERT(battfs_init(disk)); + ASSERT(battfs_fileopen(disk, &fd1, INODE1, MODE)); + ASSERT(battfs_fileopen(disk, &fd2, INODE2, MODE)); + for (int i = 0; i < sizeof(buf); i++) + ASSERT(kfile_putc(i, &fd2.fd) != EOF); + ASSERT(kfile_seek(&fd2.fd, 0, KSM_SEEK_SET) == 0); + memset(buf, 0, sizeof(buf)); + ASSERT(kfile_read(&fd2.fd, buf, sizeof(buf)) == sizeof(buf)); + + for (int i = 0; i < sizeof(buf); i++) + ASSERT(buf[i] == (i & 0xff)); + ASSERT(kfile_seek(&fd2.fd, 0, KSM_SEEK_SET) == 0); + + for (int i = 0; i < sizeof(buf); i++) + ASSERT(kfile_putc(i, &fd1.fd) != EOF); + + memset(buf, 0, sizeof(buf)); + ASSERT(kfile_read(&fd2.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(kfile_close(&fd2.fd) == 0); + ASSERT(battfs_close(disk)); + + kprintf("Test17: passed\n"); +} + int battfs_testRun(void) { BattFsSuper disk; @@ -699,6 +816,7 @@ int battfs_testRun(void) disk.save = disk_page_save; disk.erase = disk_page_erase; disk.close = disk_close; + test1(&disk); test2(&disk); test3(&disk); @@ -714,6 +832,8 @@ int battfs_testRun(void) test13(&disk); test14(&disk); test15(&disk); + test16(&disk); + test17(&disk); kprintf("All tests passed!\n"); return 0;