aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/src/main.cpp168
1 files changed, 1 insertions, 167 deletions
diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp
index ffea979..bfb731a 100644
--- a/kernel/src/main.cpp
+++ b/kernel/src/main.cpp
@@ -21,173 +21,11 @@
#include <kstd/units>
#include <kstd/vector>
-#include <algorithm>
#include <cstddef>
#include <string_view>
using namespace kstd::units_literals;
-auto test_device_names() -> void
-{
- auto storage_mgmt = kernel::devices::storage::management::get();
- std::ranges::for_each(storage_mgmt.all_controllers(), [](auto const & controller) {
- std::ranges::for_each(controller->all_devices(),
- [](auto const & device) { kstd::println("{}", device->name().view()); });
- });
-}
-
-auto test_file_descriptor_manually() -> void
-{
- // setup
- auto fd_table = kernel::filesystem::open_file_table::get();
- auto storage_mgmt = kernel::devices::storage::management::get();
- auto device = storage_mgmt.device_by_major_minor(1, 0);
-
- auto dev_node = kstd::make_shared<kernel::filesystem::device_inode>(device);
-
- auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dev_node);
- auto fd_index = fd_table.add_file(ofd);
-
- // use: read two bytes and write two again
- auto fd = fd_table.get_file(fd_index);
- if (!fd)
- {
- kstd::os::panic("test code failed");
- }
-
- kstd::vector<std::byte> buffer{2};
- auto number_of_read_bytes = fd->read(buffer.data(), buffer.size());
- kstd::println("read bytes: {}", number_of_read_bytes);
- kstd::println("buffer: {::#04x}", buffer);
-
- // write half of the file new
- auto const value1 = std::byte{0xAA};
- auto const value2 = std::byte{0xBB};
- kstd::vector<std::byte> write_buffer{value1, value2};
- auto written_bytes = fd->write(write_buffer.data(), write_buffer.size());
-
- kstd::println("written bytes: {}", written_bytes);
-
- fd_table.remove_file(fd_index);
-
- // use: read four bytes again -> two old bytes two new bytes
- auto ofd1 = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dev_node);
- fd_index = fd_table.add_file(ofd1);
- auto fd1 = fd_table.get_file(fd_index);
-
- if (!fd1)
- {
- kstd::os::panic("test code failed");
- }
-
- kstd::vector<std::byte> buffer1{4};
- number_of_read_bytes = fd1->read(buffer1.data(), buffer1.size());
- kstd::println("read bytes: {}", number_of_read_bytes);
- kstd::println("buffer: {::#04x}", buffer1);
-}
-
-auto test_device_with_vfs() -> void
-{
- auto vfs = kernel::filesystem::vfs::get();
- auto dentry = vfs.open("/dev/ram0");
- if (!dentry)
- {
- kstd::os::panic("test code failed");
- }
-
- auto fd_table = kernel::filesystem::open_file_table::get();
- auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dentry->get_inode());
- auto fd = fd_table.add_file(ofd);
- kstd::vector<std::byte> buffer{2};
- auto file = fd_table.get_file(fd);
- if (!file)
- {
- kstd::os::panic("test code failed");
- }
-
- auto number_of_read_bytes = file->read(buffer.data(), buffer.size());
- kstd::println("read bytes: {}", number_of_read_bytes);
- kstd::println("buffer: {::#04x}", buffer);
-}
-
-auto test_file_lookup() -> void
-{
- auto vfs = kernel::filesystem::vfs::get();
- auto read_and_write_file = [&vfs](std::string_view path) {
- kstd::println("[TEST] Reading and writing file at path: {}", path);
- auto dentry = vfs.open(path);
- if (!dentry)
- {
- kstd::os::panic("test code failed");
- }
-
- kstd::vector<std::byte> buffer{32};
- auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dentry->get_inode());
- auto number_of_read_bytes = ofd->read(buffer.data(), buffer.size());
- kstd::println("read bytes: {}", number_of_read_bytes);
- kstd::println("buffer: {::#04x}", buffer);
-
- std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), number_of_read_bytes};
- kstd::println("buffer_as_str: {}", buffer_as_str);
- };
-
- read_and_write_file("/info.txt");
- read_and_write_file("/enclosures/info.txt");
- read_and_write_file("/enclosures/aquarium/tank_1/fish_4.txt");
- read_and_write_file("/enclosures/elephant_house/elephant_1.txt");
- read_and_write_file(
- "/enclosures/aquarium/tank_2/"
- "this_is_a_very_very_long_fish_filename_that_keeps_going_and_going_until_it_almost_breaks_linux_filesystem_"
- "limits_for_testing_purposes_and_we_add_more_characters_to_make_it_even_longer_30.txt");
-
- vfs.do_mount("/dev/ram16", "/enclosures/aquarium");
- read_and_write_file("/enclosures/aquarium/closed.txt");
- read_and_write_file("/enclosures/aquarium/information/info_2.txt");
-
- vfs.unmount("/enclosures/aquarium");
- read_and_write_file("/enclosures/aquarium/tank_1/fish_4.txt");
-
- vfs.do_mount("/dev/ram32", "/enclosures/elephant_house");
- read_and_write_file("/enclosures/elephant_house/monkey_house/infrastructure/info.txt");
-
- vfs.do_mount("/dev/ram16", "/enclosures/elephant_house/monkey_house");
- read_and_write_file("/enclosures/elephant_house/monkey_house/information/info_2.txt");
-
- auto result = vfs.unmount("/enclosures/elephant_house");
- if (result == kernel::filesystem::vfs::operation_result::unmount_failed)
- {
- kstd::println("[TEST] Unmount failed as expected due to active child mount.");
- }
-
- vfs.unmount("/enclosures/elephant_house/monkey_house");
- result = vfs.unmount("/enclosures/elephant_house");
- if (result == kernel::filesystem::vfs::operation_result::success)
- {
- kstd::println("[TEST] Unmount succeeded after unmounting child mount.");
- }
-}
-
-auto run_test_code() -> void
-{
- kstd::println("[TEST] Running test code...");
-
- kstd::println("[TEST] device names");
- test_device_names();
- kstd::println("---------------------------------");
-
- kstd::println("[TEST] file descriptor manually");
- test_file_descriptor_manually();
- kstd::println("---------------------------------");
-
- kstd::println("[TEST] device with VFS");
- test_device_with_vfs();
- kstd::println("---------------------------------");
-
- kstd::println("[TEST] file lookup");
- test_file_lookup();
- kstd::println("---------------------------------");
-}
-
auto run_demo() -> void
{
// 1) open a file
@@ -280,12 +118,8 @@ auto main() -> int
kernel::filesystem::vfs::init();
kstd::println("[OS] Virtual filesystem initialized.");
- // TODO BA-FS26 remove demo and test code again?
+ // TODO BA-FS26 remove demo code?
// run_demo();
- // TODO BA-FS26 remove demo and test code again?
- run_test_code();
- kstd::println("[TEST] All tests completed.");
-
kapi::system::panic("Returning from kernel main!");
}