zephyr/tests/subsys/fs/common/test_fs_mkfs.c
Manuel Arguelles 09dd8c74ae littlefs: translate error code when mount fails
When lfs mount fails and there is no formatting requested, the return
code must be translated to errno before being passed to the application
layer.

Additionally, only log a warning that the FS will be formatted, when the
system is not read-only.

Fixes #56378

Signed-off-by: Manuel Arguelles <manuel.arguelles@nxp.com>
2023-04-04 18:22:10 +02:00

97 lines
3.2 KiB
C

/*
* Copyright (c) 2022 Antmicro
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/ztest.h>
#include <zephyr/fs/fs.h>
/* Mount point and paths must be provided by test runner. */
extern struct fs_mount_t *fs_mkfs_mp;
extern const int fs_mkfs_type;
extern uintptr_t fs_mkfs_dev_id;
extern int fs_mkfs_flags;
extern const char *some_file_path;
extern const char *other_dir_path;
/* This test assumes that storage device is erased. */
void test_fs_mkfs_simple(void)
{
int ret = 0;
TC_PRINT("Mount with flag no format\n");
fs_mkfs_mp->flags = FS_MOUNT_FLAG_NO_FORMAT;
ret = fs_mount(fs_mkfs_mp);
if (fs_mkfs_mp->type == FS_LITTLEFS) {
zassert_equal(ret, -EFAULT, "Expected EFAULT got %d", ret);
} else if (fs_mkfs_mp->type == FS_FATFS) {
zassert_equal(ret, -ENODEV, "Expected ENODEV got %d", ret);
}
TC_PRINT("Try mkfs with RW access\n");
ret = fs_mkfs(fs_mkfs_type, fs_mkfs_dev_id, NULL, fs_mkfs_dev_id);
zassert_equal(ret, 0, "Expected successful mkfs (%d)", ret);
TC_PRINT("Mount created file system without formatting\n");
fs_mkfs_mp->flags = FS_MOUNT_FLAG_NO_FORMAT;
ret = fs_mount(fs_mkfs_mp);
zassert_equal(ret, 0, "Expected successful mount (%d)", ret);
ret = fs_unmount(fs_mkfs_mp);
zassert_equal(ret, 0, "Expected fs_unmount success (%d)", ret);
}
/* This test assumes that storage device is erased. */
void test_fs_mkfs_ops(void)
{
int ret = 0;
struct fs_file_t fs;
struct fs_dir_t dir;
struct fs_dirent entry;
fs_file_t_init(&fs);
fs_dir_t_init(&dir);
/* Format volume and add some files/dirs */
TC_PRINT("Mount to prepare tests\n");
fs_mkfs_mp->flags = 0;
ret = fs_mount(fs_mkfs_mp);
zassert_equal(ret, 0, "Expected success (%d)", ret);
TC_PRINT("Create some file\n");
ret = fs_open(&fs, some_file_path, FS_O_CREATE);
zassert_equal(ret, 0, "Expected success fs_open(FS_O_CREATE) (%d)",
ret);
ret = fs_close(&fs);
zassert_equal(ret, 0, "Expected fs_close success (%d)", ret);
TC_PRINT("Create other directory\n");
ret = fs_mkdir(other_dir_path);
zassert_equal(ret, 0, "Expected fs_mkdir success (%d)", ret);
ret = fs_unmount(fs_mkfs_mp);
zassert_equal(ret, 0, "Expected fs_umount success (%d)", ret);
/* Format file system using fs_mkfs and check if it was formatted */
TC_PRINT("Try mkfs\n");
ret = fs_mkfs(fs_mkfs_type, fs_mkfs_dev_id, NULL, fs_mkfs_dev_id);
zassert_equal(ret, 0, "Expected successful format (%d)", ret);
fs_mkfs_mp->flags = FS_MOUNT_FLAG_NO_FORMAT;
ret = fs_mount(fs_mkfs_mp);
zassert_equal(ret, 0, "Expected successful mount (%d)", ret);
ret = fs_stat(some_file_path, &entry);
zassert_equal(ret, -ENOENT, "Expected ENOENT got %d", ret);
ret = fs_stat(other_dir_path, &entry);
zassert_equal(ret, -ENOENT, "Expected ENOENT got %d", ret);
TC_PRINT("Create some file\n");
ret = fs_open(&fs, some_file_path, FS_O_CREATE);
zassert_equal(ret, 0, "Expected success fs_open(FS_O_CREATE) (%d)",
ret);
ret = fs_close(&fs);
zassert_equal(ret, 0, "Expected fs_close success (%d)", ret);
TC_PRINT("Create other directory\n");
ret = fs_mkdir(other_dir_path);
zassert_equal(ret, 0, "Expected fs_mkdir success (%d)", ret);
ret = fs_unmount(fs_mkfs_mp);
zassert_equal(ret, 0, "Expected fs_unmount success (%d)", ret);
}