aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/rootfs/filesystem.tests.cpp
blob: b013f78be07d4909f7d5b94d49acd0c79ab07071 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "kernel/filesystem/rootfs/filesystem.hpp"

#include "kernel/filesystem/filesystem.hpp"

#include <kstd/memory>
#include <kstd/print>
#include <kstd/vector>

#include <catch2/catch_test_macros.hpp>

SCENARIO("Rootfs filesystem mount and lookup", "[filesystem][rootfs][filesystem]")
{
  GIVEN("a mounted rootfs filesystem")
  {
    auto fs = kernel::filesystem::rootfs::filesystem{};
    auto result = fs.mount(nullptr);

    THEN("the filesystem can be mounted successfully")
    {
      REQUIRE(result == kernel::filesystem::filesystem::operation_result::success);
      REQUIRE(fs.root_inode() != nullptr);
    }

    THEN("looking up the 'dev' directory returns a valid inode")
    {
      auto dev_inode = fs.lookup(fs.root_inode(), "dev");
      REQUIRE(dev_inode != nullptr);
      REQUIRE(dev_inode->is_directory());
    }

    THEN("looking up a non-existent directory returns null")
    {
      auto non_existent_inode_1 = fs.lookup(fs.root_inode(), "");
      REQUIRE(non_existent_inode_1 == nullptr);
      auto non_existent_inode_2 = fs.lookup(fs.root_inode(), "nonexistent");
      REQUIRE(non_existent_inode_2 == nullptr);
    }

    THEN("looking up with a null parent inode returns null")
    {
      auto result = fs.lookup(nullptr, "dev");
      REQUIRE(result == nullptr);
    }
  }
}