From 95c214043e5fbeafca5b038410fee9e087b2e8d7 Mon Sep 17 00:00:00 2001 From: Godzil Date: Fri, 27 May 2022 11:19:28 +0100 Subject: [PATCH] Add some file operation tests. We are not testing everything yet. --- test/CMakeLists.txt | 2 +- test/file_operations.cpp | 201 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 test/file_operations.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 331a561..f40068a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,7 +6,7 @@ find_package(Threads REQUIRED) include_directories(../includes) link_libraries(miniffs) -set(TESTS_SRC fs_opening.cpp) +set(TESTS_SRC fs_opening.cpp file_operations.cpp) add_executable(miniffs_test) target_compile_definitions(miniffs_test PUBLIC BUILD_PLATFORM_${BUILD_PLATFORM}) diff --git a/test/file_operations.cpp b/test/file_operations.cpp new file mode 100644 index 0000000..a36ad04 --- /dev/null +++ b/test/file_operations.cpp @@ -0,0 +1,201 @@ +/****************************************************************************** + * MiniFFS : Mini Flat File System + * This file is part of the test suite of MiniFFS + * + * Copyright (c) 2008-2022 986-Studio. All rights reserved. + * + ******************************************************************************/ + +#include + +#include +#include "get_fs.h" + +TEST(FileOperations, OpeningAFile) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + + file_t *fp = miniffs_open(fs, "HELLO.TXT"); + + ASSERT_NE(fp, nullptr); +} + +TEST(FileOperations, OpeningANonExistingFile) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + + file_t *fp = miniffs_open(fs, "FOO.BAR"); + + ASSERT_EQ(fp, nullptr); + ASSERT_EQ(miniffs_geterror(), MINIFFS_FILE_NOT_FOUND); +} + +TEST(FileOperations, UsingTheWrongNameCases) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + + file_t *fp = miniffs_open(fs, "hello.txt"); + + ASSERT_EQ(fp, nullptr); + ASSERT_EQ(miniffs_geterror(), MINIFFS_FILE_NOT_FOUND); +} + +TEST(FileOperations, TooLongFilename) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + + file_t *fp = miniffs_open(fs, "THISisNOTaVALIDname.txt"); + + ASSERT_EQ(fp, nullptr); + ASSERT_EQ(miniffs_geterror(), MINIFFS_INVALID_NAME); +} + +TEST(FileOperations, TooLongExtension) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + + file_t *fp = miniffs_open(fs, "HELLO.thisIsNotValid"); + + ASSERT_EQ(fp, nullptr); + ASSERT_EQ(miniffs_geterror(), MINIFFS_INVALID_NAME); +} + +TEST(FileOperations, ReadABytes) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + file_t *fp = miniffs_open(fs, "HELLO.TXT"); + + ASSERT_EQ(miniffs_read(fp), 'H'); + ASSERT_EQ(miniffs_read(fp), 'e'); +} + +TEST(FileOperations, TestingSeek) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + file_t *fp = miniffs_open(fs, "HELLO.TXT"); + + ASSERT_EQ(miniffs_read(fp), 'H'); + ASSERT_EQ(miniffs_read(fp), 'e'); + + miniffs_seek(fp, 0, MFFS_SEEK_SET); + + ASSERT_EQ(miniffs_read(fp), 'H'); + ASSERT_EQ(miniffs_read(fp), 'e'); + + miniffs_seek(fp, 5, MFFS_SEEK_SET); + ASSERT_EQ(miniffs_read(fp), ' '); + ASSERT_EQ(miniffs_read(fp), 'W'); + + miniffs_seek(fp, 1, MFFS_SEEK_CUR); + ASSERT_EQ(miniffs_read(fp), 'r'); + + miniffs_seek(fp, 0, MFFS_SEEK_END); + ASSERT_EQ(miniffs_read(fp), '!'); + + miniffs_seek(fp, 1, MFFS_SEEK_END); + ASSERT_EQ(miniffs_read(fp), 'd'); + ASSERT_EQ(miniffs_read(fp), '!'); +} + +TEST(FileOperations, TestingEndOfFileBoundary) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + file_t *fp = miniffs_open(fs, "HELLO.TXT"); + + + miniffs_seek(fp, 1, MFFS_SEEK_END); + ASSERT_EQ(miniffs_read(fp), 'd'); + ASSERT_EQ(miniffs_read(fp), '!'); + ASSERT_EQ(miniffs_geterror(), MINIFFS_END_OF_FILE); + ASSERT_EQ(miniffs_read(fp), '!'); + ASSERT_EQ(miniffs_geterror(), MINIFFS_END_OF_FILE); + ASSERT_EQ(miniffs_read(fp), '!'); + ASSERT_EQ(miniffs_geterror(), MINIFFS_END_OF_FILE); +} + + +TEST(FileOperations, ReadBlocks) { + miniffs_t *fs = get_fs("simple_test.mffs"); + file_t *fp = miniffs_open(fs, "HELLO.TXT"); + + char buffer[13]; + int ret; + + memset(buffer, 0, 13); + ret = miniffs_read_blocks(buffer, 4, 1, fp); + ASSERT_EQ(ret, 1); + ASSERT_EQ(buffer[0], 'H'); + ASSERT_EQ(buffer[1], 'e'); + ASSERT_EQ(buffer[2], 'l'); + ASSERT_EQ(buffer[3], 'l'); + + memset(buffer, 0, 13); + ret = miniffs_read_blocks(buffer, 4, 1, fp); + ASSERT_EQ(ret, 1); + ASSERT_EQ(buffer[0], 'o'); + ASSERT_EQ(buffer[1], ' '); + ASSERT_EQ(buffer[2], 'W'); + ASSERT_EQ(buffer[3], 'o'); +} + +TEST(FileOperations, ReadMultiplesBlocks) { + miniffs_t *fs = get_fs("simple_test.mffs"); + file_t *fp = miniffs_open(fs, "HELLO.TXT"); + + char buffer[13]; + int ret; + memset(buffer, 0, 13); + ret = miniffs_read_blocks(buffer, 4, 2, fp); + ASSERT_EQ(ret, 2); + ASSERT_EQ(buffer[0], 'H'); + ASSERT_EQ(buffer[1], 'e'); + ASSERT_EQ(buffer[2], 'l'); + ASSERT_EQ(buffer[3], 'l'); + ASSERT_EQ(buffer[4], 'o'); + ASSERT_EQ(buffer[5], ' '); + ASSERT_EQ(buffer[6], 'W'); + ASSERT_EQ(buffer[7], 'o'); + + memset(buffer, 0, 13); + miniffs_seek(fp, 0, MFFS_SEEK_SET); + ret = miniffs_read_blocks(buffer, 4, 3, fp); + ASSERT_EQ(ret, 3); + ASSERT_EQ(buffer[0], 'H'); + ASSERT_EQ(buffer[1], 'e'); + ASSERT_EQ(buffer[2], 'l'); + ASSERT_EQ(buffer[3], 'l'); + ASSERT_EQ(buffer[4], 'o'); + ASSERT_EQ(buffer[5], ' '); + ASSERT_EQ(buffer[6], 'W'); + ASSERT_EQ(buffer[7], 'o'); + ASSERT_EQ(buffer[8], 'r'); + ASSERT_EQ(buffer[9], 'l'); + ASSERT_EQ(buffer[10], 'd'); + ASSERT_EQ(buffer[11], '!'); +} + +TEST(FileOperations, ReadTooManyBlocks) +{ + miniffs_t *fs = get_fs("simple_test.mffs"); + file_t *fp = miniffs_open(fs, "HELLO.TXT"); + + char buffer[13]; + int ret; + + memset(buffer, 0, 13); + ret = miniffs_read_blocks(buffer, 4, 4, fp); + ASSERT_EQ(ret, 3); + ASSERT_EQ(buffer[0], 'H'); + ASSERT_EQ(buffer[1], 'e'); + ASSERT_EQ(buffer[2], 'l'); + ASSERT_EQ(buffer[3], 'l'); + ASSERT_EQ(buffer[4], 'o'); + ASSERT_EQ(buffer[5], ' '); + ASSERT_EQ(buffer[6], 'W'); + ASSERT_EQ(buffer[7], 'o'); + ASSERT_EQ(buffer[8], 'r'); + ASSERT_EQ(buffer[9], 'l'); + ASSERT_EQ(buffer[10], 'd'); + ASSERT_EQ(buffer[11], '!'); + +} \ No newline at end of file