Skip to content
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions src/tests/fs_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@ pub mod fs_tests {
ut_lind_fs_sem_trytimed();
ut_lind_fs_sem_test();
ut_lind_fs_tmp_file_test();

//mkdir_syscall_tests
ut_lind_fs_mkdir_empty_directory();
ut_lind_fs_mkdir_nonexisting_directory();
ut_lind_fs_mkdir_existing_directory();
ut_lind_fs_mkdir_invalid_modebits();
ut_lind_fs_mkdir_success();
ut_lind_fs_mkdir_using_symlink();
}

pub fn ut_lind_fs_simple() {
Expand Down Expand Up @@ -1237,6 +1245,81 @@ pub mod fs_tests {
// Check if file is still there (it shouldn't be, assert no)
assert_eq!(cage.access_syscall(file_path, F_OK), -2);

lindrustfinalize();
}

pub fn ut_lind_fs_mkdir_empty_directory() {
lindrustinit(0);
let cage = interface::cagetable_getref(1);
let path = "";
// Check for error when directory is empty
assert_eq!(cage.mkdir_syscall(path, S_IRWXA), -(Errno::ENOENT as i32));
assert_eq!(cage.exit_syscall(EXIT_SUCCESS), EXIT_SUCCESS);
lindrustfinalize();
}

pub fn ut_lind_fs_mkdir_nonexisting_directory() {
lindrustinit(0);
let cage = interface::cagetable_getref(1);
let path = "/parentdir/dir";
// Check for error when both parent and child directories don't exist
assert_eq!(cage.mkdir_syscall(path, S_IRWXA), -(Errno::ENOENT as i32));
assert_eq!(cage.exit_syscall(EXIT_SUCCESS), EXIT_SUCCESS);
lindrustfinalize();
}

pub fn ut_lind_fs_mkdir_existing_directory() {
lindrustinit(0);
let cage = interface::cagetable_getref(1);
let path = "/parentdir";
// Create a parent directory
cage.mkdir_syscall(path, S_IRWXA);
// Check for error when the same directory is created again
assert_eq!(cage.mkdir_syscall(path, S_IRWXA), -(Errno::EEXIST as i32));
assert_eq!(cage.exit_syscall(EXIT_SUCCESS), EXIT_SUCCESS);
lindrustfinalize();
}

pub fn ut_lind_fs_mkdir_invalid_modebits() {
lindrustinit(0);
let cage = interface::cagetable_getref(1);
let path = "/parentdir";
let invalid_mode = 0o77777; // Invalid mode bits
// Create a parent directory
cage.mkdir_syscall(path, S_IRWXA);
// Check for error when a directory is being created with invalid mode
assert_eq!(cage.mkdir_syscall("/parentdir/dir", invalid_mode), -(Errno::EPERM as i32));
assert_eq!(cage.exit_syscall(EXIT_SUCCESS), EXIT_SUCCESS);
lindrustfinalize();
}

pub fn ut_lind_fs_mkdir_success() {
lindrustinit(0);
let cage = interface::cagetable_getref(1);
let path = "/parentdir";
// Create a parent directory
cage.mkdir_syscall(path, S_IRWXA);
// Create a child directory inside parent directory with valid mode bits
assert_eq!(cage.mkdir_syscall("/parentdir/dir", S_IRWXA), 0);
assert_eq!(cage.exit_syscall(EXIT_SUCCESS), EXIT_SUCCESS);
lindrustfinalize();
}

pub fn ut_lind_fs_mkdir_using_symlink() {
lindrustinit(0);
let cage = interface::cagetable_getref(1);

// Create a directory which will be referred to as originaldir
let fd = cage.open_syscall("/originaldir", O_CREAT | O_EXCL | O_WRONLY, S_IRWXA);
assert_eq!(cage.write_syscall(fd, str2cbuf("hi"), 2), 2);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This creates a file, not a directory, right?

Copy link
Copy Markdown
Contributor Author

@namanlalitnyu namanlalitnyu May 30, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This creates a file, not a directory, right?
Sorry, my bad...I just rechecked the other references for this function call and it creates a file, not a directory. Updated the changes.


// Create a link between two directories where the symlinkdir is originally not present
// But while linking, symlinkdir will get created
assert_eq!(cage.link_syscall("/originaldir", "/symlinkdir"), 0);

// Check for error while creating the symlinkdir again as it would already be created while linking the two directories above.
assert_eq!(cage.mkdir_syscall("/symlinkdir", S_IRWXA), -(Errno::EEXIST as i32));
assert_eq!(cage.exit_syscall(EXIT_SUCCESS), EXIT_SUCCESS);
lindrustfinalize();
}
}