aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/support/grub.cfg.in2
-rw-r--r--arch/x86_64/support/modules/fat12.img3
-rw-r--r--arch/x86_64/support/modules/fat16.img3
-rw-r--r--kernel/kernel/filesystems/fat32/filesystem.tests.cpp40
l---------kernel/kernel/test_support/vfs/test_assets/fat12.img1
l---------kernel/kernel/test_support/vfs/test_assets/fat16.img1
6 files changed, 48 insertions, 2 deletions
diff --git a/arch/x86_64/support/grub.cfg.in b/arch/x86_64/support/grub.cfg.in
index 135dc107..d470345d 100644
--- a/arch/x86_64/support/grub.cfg.in
+++ b/arch/x86_64/support/grub.cfg.in
@@ -6,6 +6,8 @@ menuentry "TeachOS" {
module2 /modules/ext2_4KB_fs.img type=ramdisk
module2 /modules/ext2_1KB_fs.img type=ramdisk
module2 /modules/ext2_2KB_fs.img type=ramdisk
+ module2 /modules/fat12.img type=ramdisk
+ module2 /modules/fat16.img type=ramdisk
module2 /modules/fat32.img type=ramdisk
boot
} \ No newline at end of file
diff --git a/arch/x86_64/support/modules/fat12.img b/arch/x86_64/support/modules/fat12.img
new file mode 100644
index 00000000..0f1b9814
--- /dev/null
+++ b/arch/x86_64/support/modules/fat12.img
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b50de11a2c3b681b57560fcbe9cb49da08672d150ac58152f7cb201bc45bc7c1
+size 1048576
diff --git a/arch/x86_64/support/modules/fat16.img b/arch/x86_64/support/modules/fat16.img
new file mode 100644
index 00000000..7a4fee36
--- /dev/null
+++ b/arch/x86_64/support/modules/fat16.img
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c47570127cc88ca429b762e17dfeb295bb48dd5c773f5b967ff7a3e60877ba0f
+size 3145728
diff --git a/kernel/kernel/filesystems/fat32/filesystem.tests.cpp b/kernel/kernel/filesystems/fat32/filesystem.tests.cpp
index b71a4150..ce267584 100644
--- a/kernel/kernel/filesystems/fat32/filesystem.tests.cpp
+++ b/kernel/kernel/filesystems/fat32/filesystem.tests.cpp
@@ -134,10 +134,10 @@ SCENARIO("Fat32 filesystem mount validates the boot sector", "[filesystem][fat32
SCENARIO_METHOD(kernel::tests::vfs::storage_boot_module_fixture, "Fat32 filesystem probe with real image",
"[filesystem][fat32][filesystem][img]")
{
- auto const image_path = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "fat32.img";
-
GIVEN("a block device containing a fat32 image")
{
+ auto const image_path = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "fat32.img";
+
REQUIRE(std::filesystem::exists(image_path));
REQUIRE_NOTHROW(setup_modules_from_img({"test_img_module"}, {image_path}));
@@ -152,6 +152,42 @@ SCENARIO_METHOD(kernel::tests::vfs::storage_boot_module_fixture, "Fat32 filesyst
REQUIRE(fs->probe(dev_inode));
}
}
+
+ GIVEN("a block device containing a fat12 image"){
+ auto const image_path = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "fat12.img";
+
+ REQUIRE(std::filesystem::exists(image_path));
+ REQUIRE_NOTHROW(setup_modules_from_img({"test_img_module"}, {image_path}));
+
+ auto boot_device = kernel::devices::storage::determine_boot_device();
+ REQUIRE(boot_device);
+
+ auto dev_inode = kstd::make_shared<kernel::vfs::device_inode>(boot_device);
+ auto fs = kstd::make_shared<kernel::filesystems::fat32::filesystem>();
+
+ THEN("probe accepts the boot sector")
+ {
+ REQUIRE(fs->probe(dev_inode).error() == kernel::filesystems::fat32::errc::invalid_boot_sector);
+ }
+ }
+
+ GIVEN("a block device containing a fat16 image"){
+ auto const image_path = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "fat16.img";
+
+ REQUIRE(std::filesystem::exists(image_path));
+ REQUIRE_NOTHROW(setup_modules_from_img({"test_img_module"}, {image_path}));
+
+ auto boot_device = kernel::devices::storage::determine_boot_device();
+ REQUIRE(boot_device);
+
+ auto dev_inode = kstd::make_shared<kernel::vfs::device_inode>(boot_device);
+ auto fs = kstd::make_shared<kernel::filesystems::fat32::filesystem>();
+
+ THEN("probe accepts the boot sector")
+ {
+ REQUIRE(fs->probe(dev_inode).error() == kernel::filesystems::fat32::errc::invalid_boot_sector);
+ }
+ }
}
SCENARIO("Fat32 filesystem rejects invalid boot signature", "[filesystem][fat32][filesystem]")
diff --git a/kernel/kernel/test_support/vfs/test_assets/fat12.img b/kernel/kernel/test_support/vfs/test_assets/fat12.img
new file mode 120000
index 00000000..12e3798e
--- /dev/null
+++ b/kernel/kernel/test_support/vfs/test_assets/fat12.img
@@ -0,0 +1 @@
+../../../../../arch/x86_64/support/modules/fat12.img \ No newline at end of file
diff --git a/kernel/kernel/test_support/vfs/test_assets/fat16.img b/kernel/kernel/test_support/vfs/test_assets/fat16.img
new file mode 120000
index 00000000..e2c34da0
--- /dev/null
+++ b/kernel/kernel/test_support/vfs/test_assets/fat16.img
@@ -0,0 +1 @@
+../../../../../arch/x86_64/support/modules/fat16.img \ No newline at end of file