Add regression test for mknod and unix socket for ext2

This commit is contained in:
jiangjianfeng 2025-12-02 11:54:33 +00:00 committed by Tate, Hongliang Tian
parent 13ecabcb46
commit 35708f9485
5 changed files with 123 additions and 0 deletions

View File

@ -22,6 +22,7 @@ TEST_APPS := \
eventfd2 \
execve \
exit \
ext2 \
fdatasync \
file_io \
fork_c \

View File

@ -0,0 +1,3 @@
# SPDX-License-Identifier: MPL-2.0
include ../test_common.mk

View File

@ -0,0 +1,63 @@
// SPDX-License-Identifier: MPL-2.0
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/sysmacros.h>
#include "../test.h"
#define NULL_DEVICE_PATH "/ext2/my_null_device"
#define ZERO_DEVICE_PATH "/ext2/my_zero_device"
#define FIFO_PATH "/ext2/myfifo.fifo"
FN_TEST(make_device_node)
{
char buffer[1] = { 'a' };
TEST_SUCC(mknod(NULL_DEVICE_PATH, S_IFCHR | 0666, makedev(1, 3)));
int null_fd = TEST_SUCC(open(NULL_DEVICE_PATH, O_RDWR));
TEST_RES(write(null_fd, buffer, sizeof(buffer)),
_ret == sizeof(buffer));
TEST_RES(read(null_fd, buffer, sizeof(buffer)), _ret == 0);
TEST_SUCC(close(null_fd));
TEST_SUCC(unlink(NULL_DEVICE_PATH));
TEST_SUCC(mknod(ZERO_DEVICE_PATH, S_IFCHR | 0666, makedev(1, 5)));
int zero_fd = TEST_SUCC(open(ZERO_DEVICE_PATH, O_RDWR));
TEST_RES(write(zero_fd, buffer, sizeof(buffer)),
_ret == sizeof(buffer));
TEST_RES(read(zero_fd, buffer, sizeof(buffer)),
_ret == sizeof(buffer) && buffer[0] == 0);
TEST_SUCC(close(zero_fd));
TEST_SUCC(unlink(ZERO_DEVICE_PATH));
}
END_TEST()
FN_TEST(make_fifo_node)
{
char write_buffer[2] = { 'a', 'b' };
char read_buffer[1] = { 0 };
TEST_SUCC(mkfifo(FIFO_PATH, 0666));
TEST_ERRNO(open(FIFO_PATH, O_WRONLY | O_NONBLOCK), ENXIO);
int reader_fd = TEST_SUCC(open(FIFO_PATH, O_RDONLY | O_NONBLOCK));
int writer_fd = TEST_SUCC(open(FIFO_PATH, O_WRONLY));
TEST_RES(write(writer_fd, write_buffer, sizeof(write_buffer)),
_ret == sizeof(write_buffer));
TEST_RES(read(reader_fd, read_buffer, sizeof(read_buffer)),
_ret == sizeof(read_buffer) && read_buffer[0] == 'a');
TEST_RES(read(reader_fd, read_buffer, sizeof(read_buffer)),
_ret == sizeof(read_buffer) && read_buffer[0] == 'b');
TEST_SUCC(close(reader_fd));
TEST_SUCC(close(writer_fd));
TEST_SUCC(unlink(FIFO_PATH));
}
END_TEST()

View File

@ -0,0 +1,54 @@
// SPDX-License-Identifier: MPL-2.0
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include "../test.h"
#define SERVER_ADDRESS "/ext2/my_unix_server"
FN_TEST(ext2_unix_socket)
{
int sk_server = TEST_SUCC(socket(AF_UNIX, SOCK_STREAM, 0));
struct sockaddr_un server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sun_family = AF_UNIX;
strncpy(server_addr.sun_path, SERVER_ADDRESS,
sizeof(server_addr.sun_path) - 1);
TEST_SUCC(bind(sk_server, (struct sockaddr *)&server_addr,
sizeof(server_addr)));
TEST_SUCC(listen(sk_server, 3));
if (TEST_SUCC(fork()) == 0) {
int sk_client = CHECK(socket(AF_UNIX, SOCK_STREAM, 0));
CHECK(connect(sk_client, (struct sockaddr *)&server_addr,
sizeof(server_addr)));
char buf[1];
CHECK_WITH(read(sk_client, buf, sizeof(buf)),
_ret == 1 && buf[0] == 'a');
buf[0] = 'b';
CHECK_WITH(write(sk_client, buf, sizeof(buf)), _ret == 1);
close(sk_client);
exit(EXIT_SUCCESS);
}
int sk_accepted = TEST_SUCC(accept(sk_server, NULL, NULL));
char buf[1] = { 'a' };
TEST_RES(write(sk_accepted, buf, sizeof(buf)), _ret == 1);
TEST_RES(read(sk_accepted, buf, sizeof(buf)),
_ret == 1 && buf[0] == 'b');
TEST_SUCC(close(sk_accepted));
TEST_SUCC(close(sk_server));
TEST_SUCC(unlink(SERVER_ADDRESS));
}
END_TEST()

View File

@ -88,6 +88,8 @@ test_mount_bind_file() {
echo "Start ext2 fs test......"
test_ext2 "/ext2" "test_file.txt"
ext2/mknod
ext2/unix_socket
echo "All ext2 fs test passed."
echo "Start fdatasync test......"