/* * Copyright (c) 2023 Antmicro * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include "utils.h" ZTEST(ext2tests, test_mount_only) { struct fs_mount_t *mp = &testfs_mnt; int ret = 0; /* Test FS_MOUNT_FLAG_NO_FORMAT flag */ mp->flags |= FS_MOUNT_FLAG_NO_FORMAT; ret = fs_mount(mp); TC_PRINT("Mount unformatted with FS_MOUNT_FLAG_NO_FORMAT set\n"); zassert_false(ret == 0, "Expected failure (ret=%d)", ret); /* Test FS_MOUNT_FLAG_READ_ONLY on non-formatted volume*/ mp->flags = FS_MOUNT_FLAG_READ_ONLY; ret = fs_mount(mp); TC_PRINT("Mount unformatted with FS_MOUNT_FLAG_READ_ONLY set\n"); zassert_false(ret == 0, "Expected failure (ret=%d)", ret); /* Format volume and add some files/dirs to check read-only flag */ mp->flags = 0; ret = fs_mount(mp); TC_PRINT("Mount again to format volume\n"); zassert_equal(ret, 0, "Expected success (ret=%d)", ret); TC_PRINT("Create some file\n"); ret = fs_unmount(mp); zassert_equal(ret, 0, "Expected success (ret=%d)", ret); /* Check fs operation on volume mounted with FS_MOUNT_FLAG_READ_ONLY */ mp->flags = FS_MOUNT_FLAG_READ_ONLY; TC_PRINT("Mount as read-only\n"); ret = fs_mount(mp); zassert_equal(ret, 0, "Expected success (ret=%d)", ret); ret = fs_unmount(mp); zassert_equal(ret, 0, "Expected success (ret=%d)", ret); } ZTEST(ext2tests, test_statvfs) { int ret = 0; struct fs_statvfs sbuf; struct fs_mount_t *mp = &testfs_mnt; size_t partition_size = MIN(0x800000, get_partition_size((uintptr_t)mp->storage_dev)); mp->flags = 0; ret = fs_mount(mp); zassert_equal(ret, 0, "Expected success (ret=%d)", ret); ret = fs_statvfs(mp->mnt_point, &sbuf); zassert_equal(ret, 0, "Expected success (ret=%d)", ret); TC_PRINT("Mounted file system: bsize:%lu frsize:%lu blocks:%lu, bfree:%lu\n", sbuf.f_bsize, sbuf.f_frsize, sbuf.f_blocks, sbuf.f_bfree); zassert_equal(sbuf.f_bsize, 1024, "Wrong block size %lu (expected %lu)", sbuf.f_bsize, 1024); zassert_equal(sbuf.f_frsize, 1024, "Wrong frag size %lu (expected %lu)", sbuf.f_frsize, 1024); zassert_equal(sbuf.f_blocks, partition_size / 1024, "Wrong block count %lu (expected %lu)", sbuf.f_blocks, partition_size / 1024); ret = fs_unmount(mp); zassert_equal(ret, 0, "Expected success (ret=%d)", ret); } /* Tests from common directory */ void test_fs_mkfs_simple(void); /* Global variables expected by tests */ struct fs_mount_t *fs_mkfs_mp = &testfs_mnt; const int fs_mkfs_type = FS_EXT2; uintptr_t fs_mkfs_dev_id; int fs_mkfs_flags; ZTEST(ext2tests, test_mkfs_simple) { struct fs_mount_t *mp = &testfs_mnt; fs_mkfs_dev_id = (uintptr_t) mp->storage_dev; fs_mkfs_flags = 0; test_fs_mkfs_simple(); } void mkfs_custom_config(struct ext2_cfg *cfg) { int ret = 0; struct fs_statvfs sbuf; struct fs_mount_t *mp = &testfs_mnt; size_t partition_size = MIN(cfg->fs_size, get_partition_size((uintptr_t)mp->storage_dev)); ret = fs_mkfs(FS_EXT2, (uintptr_t)mp->storage_dev, cfg, 0); zassert_equal(ret, 0, "Failed to mkfs with 2K blocks"); mp->flags = FS_MOUNT_FLAG_NO_FORMAT; ret = fs_mount(mp); zassert_equal(ret, 0, "Mount failed (ret=%d)", ret); ret = fs_statvfs(mp->mnt_point, &sbuf); zassert_equal(ret, 0, "Statvfs failed (ret=%d)", ret); TC_PRINT("Mounted file system: bsize:%lu frsize:%lu blocks:%lu, bfree:%lu\n", sbuf.f_bsize, sbuf.f_frsize, sbuf.f_blocks, sbuf.f_bfree); zassert_equal(sbuf.f_bsize, cfg->block_size, "Wrong block size %lu (expected %lu)", sbuf.f_bsize, cfg->block_size); zassert_equal(sbuf.f_frsize, cfg->block_size, "Wrong frag size %lu (expected %lu)", sbuf.f_frsize, cfg->block_size); zassert_equal(sbuf.f_blocks, partition_size / cfg->block_size, "Wrong block count %lu (expected %lu)", sbuf.f_blocks, partition_size / cfg->block_size); ret = fs_unmount(mp); zassert_equal(ret, 0, "Unmount failed (ret=%d)", ret); } #if defined(CONFIG_APP_TEST_BIG) ZTEST(ext2tests, test_mkfs_custom_2K) { struct ext2_cfg config = { .block_size = 2048, .fs_size = 0x2000000, .bytes_per_inode = 0, .volume_name[0] = 0, .set_uuid = false, }; mkfs_custom_config(&config); } ZTEST(ext2tests, test_mkfs_custom_4K) { struct ext2_cfg config = { .block_size = 4096, .fs_size = 0x8000000, .bytes_per_inode = 0, .volume_name[0] = 0, .set_uuid = false, }; mkfs_custom_config(&config); } #endif