~aleteoryx/muditaos

26b791702caeb56e2ee4f064c1ecfa5d013f7273 — Lucjan Bryndza 5 years ago a036b75
[EGD-4758] Add unit tests for littlefs

Some tests passed but it needs some work...
M module-vfs/drivers/include/purefs/fs/drivers/mount_point_littlefs.hpp => module-vfs/drivers/include/purefs/fs/drivers/mount_point_littlefs.hpp +1 -1
@@ 30,7 30,7 @@ namespace purefs::fs::drivers
      private:
        auto native_root() const noexcept -> std::string_view override
        {
            return "/";
            return "";
        }
        struct lfs_config m_lfs_conf
        {};

M module-vfs/include/internal/purefs/fs/mount_point.hpp => module-vfs/include/internal/purefs/fs/mount_point.hpp +4 -1
@@ 48,7 48,10 @@ namespace purefs::fs::internal
        {
            const auto n1 = full_path.find(m_path);
            if (n1 == 0) {
                return std::string(native_root()).append(full_path.substr(m_path.size()));
                auto ret = std::string(native_root()).append(full_path.substr(m_path.size()));
                if (ret.empty())
                    ret.append("/");
                return ret;
            }
            else {
                return {};

M module-vfs/tests/genlfstestimg.sh => module-vfs/tests/genlfstestimg.sh +2 -2
@@ 37,7 37,7 @@ sfdisk $IMAGE_FILE << ==sfdisk
label: dos
unit: sectors

/dev/sdz1 : start=      2048, size=$SECTOR_END, type=9e, bootable
/dev/sdz1 : start=$SECTOR_START, size=$SECTOR_END, type=9e
==sfdisk
./genlittlefs --image $IMAGE_FILE --block_size=4096  --overwrite  --partition_num 1 -- assets/*
./genlittlefs --image $IMAGE_FILE --block_size=4096  --overwrite  --partition_num 1 -- assets/* .boot.json


M module-vfs/tests/unittest_filesystem_littlefs.cpp => module-vfs/tests/unittest_filesystem_littlefs.cpp +59 -0
@@ 43,3 43,62 @@ TEST_CASE("Littlefs: Basic mount and functionality")
    ret = fscore.umount("/path");
    REQUIRE(ret == 0);
}

TEST_CASE("littlefs: Basic API test")
{
    using namespace purefs;
    auto dm   = std::make_shared<blkdev::disk_manager>();
    auto disk = std::make_shared<blkdev::disk_image>(disk_image);
    REQUIRE(disk);
    REQUIRE(dm->register_device(disk, "emmc0") == 0);
    purefs::fs::filesystem fscore(dm);
    const auto vfs_vfat = std::make_shared<fs::drivers::filesystem_littlefs>();
    REQUIRE(vfs_vfat->mount_count() == 0);
    auto ret = fscore.register_filesystem("littlefs", vfs_vfat);
    REQUIRE(ret == 0);
    // List partitions
    for (const auto &part : dm->partitions("emmc0")) {
        std::cout << part.name << " " << part.bootable << std::endl;
    }
    ret = fscore.mount("emmc0part0", "/sys", "littlefs");
    REQUIRE(ret == 0);
    {
        struct statvfs ssv;
        ret = fscore.stat_vfs("/sys/", ssv);
        REQUIRE(ret == 0);
    }
    {
        ret = fscore.open("/sys/ala/ma/kota/", 0, 0);
        REQUIRE(ret == -ENOENT);
        // Simple file test
        int hwnd = fscore.open("/sys/.boot.json", 0, 0);
        REQUIRE(hwnd >= 3);
        std::cout << "File open handle " << hwnd << std::endl;
        struct stat st;
        ret = fscore.fstat(hwnd, st);
        REQUIRE(ret == 0);
        std::cout << "File size " << st.st_size << std::endl;
        char buf[4096]{};
        ret = fscore.read(hwnd, buf, sizeof buf);
        REQUIRE(ret > 0);
        ret = fscore.close(hwnd);
        REQUIRE(ret == 0);
        {
            // Simple directory test
            auto dirhandle = fscore.diropen("/sys");
            REQUIRE(dirhandle);
            REQUIRE(dirhandle->error() == 0);
            for (std::string fnm;;) {
                if (fscore.dirnext(dirhandle, fnm, st) != 0) {
                    break;
                }
                else {
                    std::cout << "name " << fnm << " size " << st.st_size << std::endl;
                }
            }
            fscore.dirclose(dirhandle);
        }
        ret = fscore.umount("/sys");
        REQUIRE(ret == 0);
    }
}