mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 08:48:11 +00:00
Tests/Kernel: Add a very simple test for posix_fallocate()
This commit is contained in:
parent
4277e2d58f
commit
e2771db50d
2 changed files with 75 additions and 0 deletions
|
@ -40,6 +40,7 @@ set(LIBTEST_BASED_SOURCES
|
||||||
TestEmptySharedInodeVMObject.cpp
|
TestEmptySharedInodeVMObject.cpp
|
||||||
TestInvalidUIDSet.cpp
|
TestInvalidUIDSet.cpp
|
||||||
TestSharedInodeVMObject.cpp
|
TestSharedInodeVMObject.cpp
|
||||||
|
TestPosixFallocate.cpp
|
||||||
TestPrivateInodeVMObject.cpp
|
TestPrivateInodeVMObject.cpp
|
||||||
TestKernelAlarm.cpp
|
TestKernelAlarm.cpp
|
||||||
TestKernelFilePermissions.cpp
|
TestKernelFilePermissions.cpp
|
||||||
|
|
74
Tests/Kernel/TestPosixFallocate.cpp
Normal file
74
Tests/Kernel/TestPosixFallocate.cpp
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <LibCore/System.h>
|
||||||
|
#include <LibTest/TestCase.h>
|
||||||
|
|
||||||
|
TEST_CASE(posix_fallocate_basics)
|
||||||
|
{
|
||||||
|
char pattern[] = "/tmp/posix_fallocate.XXXXXX";
|
||||||
|
auto fd = MUST(Core::System::mkstemp(pattern));
|
||||||
|
VERIFY(fd >= 0);
|
||||||
|
|
||||||
|
{
|
||||||
|
// Valid use, grows file to new size.
|
||||||
|
auto result = Core::System::posix_fallocate(fd, 0, 1024);
|
||||||
|
EXPECT_EQ(result.is_error(), false);
|
||||||
|
|
||||||
|
auto stat = MUST(Core::System::fstat(fd));
|
||||||
|
EXPECT_EQ(stat.st_size, 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Invalid fd (-1)
|
||||||
|
auto result = Core::System::posix_fallocate(-1, 0, 1024);
|
||||||
|
EXPECT_EQ(result.is_error(), true);
|
||||||
|
EXPECT_EQ(result.error().code(), EBADF);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Invalid length (-1)
|
||||||
|
auto result = Core::System::posix_fallocate(fd, 0, -1);
|
||||||
|
EXPECT_EQ(result.is_error(), true);
|
||||||
|
EXPECT_EQ(result.error().code(), EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Invalid length (0)
|
||||||
|
auto result = Core::System::posix_fallocate(fd, 0, 0);
|
||||||
|
EXPECT_EQ(result.is_error(), true);
|
||||||
|
EXPECT_EQ(result.error().code(), EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Invalid offset (-1)
|
||||||
|
auto result = Core::System::posix_fallocate(fd, -1, 1024);
|
||||||
|
EXPECT_EQ(result.is_error(), true);
|
||||||
|
EXPECT_EQ(result.error().code(), EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
MUST(Core::System::close(fd));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(posix_fallocate_on_device_file)
|
||||||
|
{
|
||||||
|
auto fd = MUST(Core::System::open("/dev/zero"sv, O_RDWR));
|
||||||
|
VERIFY(fd >= 0);
|
||||||
|
auto result = Core::System::posix_fallocate(fd, 0, 100);
|
||||||
|
EXPECT_EQ(result.is_error(), true);
|
||||||
|
EXPECT_EQ(result.error().code(), ENODEV);
|
||||||
|
MUST(Core::System::close(fd));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(posix_fallocate_on_pipe)
|
||||||
|
{
|
||||||
|
auto pipefds = MUST(Core::System::pipe2(0));
|
||||||
|
auto result = Core::System::posix_fallocate(pipefds[1], 0, 100);
|
||||||
|
EXPECT_EQ(result.is_error(), true);
|
||||||
|
EXPECT_EQ(result.error().code(), ESPIPE);
|
||||||
|
MUST(Core::System::close(pipefds[0]));
|
||||||
|
MUST(Core::System::close(pipefds[1]));
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue