* [LTP] [PATCH v2 0/2] shutdown testing suite
@ 2024-06-07 8:13 Andrea Cervesato
2024-06-07 8:13 ` [LTP] [PATCH v2 1/2] Add shutdown01 test Andrea Cervesato
2024-06-07 8:13 ` [LTP] [PATCH v2 2/2] Add shutdown02 test Andrea Cervesato
0 siblings, 2 replies; 8+ messages in thread
From: Andrea Cervesato @ 2024-06-07 8:13 UTC (permalink / raw)
To: ltp
This testing suite is meant to test shutdown() syscall functionalities.
The current LTP version uses shutdown() inside many tests, but none of
them is specifically running unit tests for it.
This suite comes with both unit tests for shutdown() flags and error
codes.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Changes in v2:
- shutdown01: move test cases inside .test / .tcnt
- shutdown01: usage of SAFE_RECV / SAFE_SEND
- shutdown01: fixed documentation formatting
- shutdown02: fixed documentation formatting
- Link to v1: https://lore.kernel.org/r/20240527-shutdown-v1-0-1feffca5e3df@suse.com
---
Andrea Cervesato (2):
Add shutdown01 test
Add shutdown02 test
runtest/syscalls | 3 +
testcases/kernel/syscalls/shutdown/.gitignore | 2 +
testcases/kernel/syscalls/shutdown/Makefile | 7 ++
testcases/kernel/syscalls/shutdown/shutdown01.c | 121 ++++++++++++++++++++++++
testcases/kernel/syscalls/shutdown/shutdown02.c | 76 +++++++++++++++
5 files changed, 209 insertions(+)
---
base-commit: 0358f7a2788eed0cbff7f8519b1a0f7f89d36c13
change-id: 20240524-shutdown-c8d7580e916a
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread* [LTP] [PATCH v2 1/2] Add shutdown01 test 2024-06-07 8:13 [LTP] [PATCH v2 0/2] shutdown testing suite Andrea Cervesato @ 2024-06-07 8:13 ` Andrea Cervesato 2024-06-10 13:13 ` Petr Vorel 2024-06-10 13:52 ` Petr Vorel 2024-06-07 8:13 ` [LTP] [PATCH v2 2/2] Add shutdown02 test Andrea Cervesato 1 sibling, 2 replies; 8+ messages in thread From: Andrea Cervesato @ 2024-06-07 8:13 UTC (permalink / raw) To: ltp From: Andrea Cervesato <andrea.cervesato@suse.com> This test verifies the following shutdown() functionalities: - SHUT_RD should enable send() ops but disable recv() ops - SHUT_WR should enable recv() ops but disable send() ops - SHUT_RDWR should disable both recv() and send() ops Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com> --- runtest/syscalls | 2 + testcases/kernel/syscalls/shutdown/.gitignore | 1 + testcases/kernel/syscalls/shutdown/Makefile | 7 ++ testcases/kernel/syscalls/shutdown/shutdown01.c | 121 ++++++++++++++++++++++++ 4 files changed, 131 insertions(+) diff --git a/runtest/syscalls b/runtest/syscalls index cf06ee563..dc396415e 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -1465,6 +1465,8 @@ shmget04 shmget04 shmget05 shmget05 shmget06 shmget06 +shutdown01 shutdown01 + sigaction01 sigaction01 sigaction02 sigaction02 diff --git a/testcases/kernel/syscalls/shutdown/.gitignore b/testcases/kernel/syscalls/shutdown/.gitignore new file mode 100644 index 000000000..2df24d1ab --- /dev/null +++ b/testcases/kernel/syscalls/shutdown/.gitignore @@ -0,0 +1 @@ +shutdown01 diff --git a/testcases/kernel/syscalls/shutdown/Makefile b/testcases/kernel/syscalls/shutdown/Makefile new file mode 100644 index 000000000..8cf1b9024 --- /dev/null +++ b/testcases/kernel/syscalls/shutdown/Makefile @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com> + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk +include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/syscalls/shutdown/shutdown01.c b/testcases/kernel/syscalls/shutdown/shutdown01.c new file mode 100644 index 000000000..ba3853d9c --- /dev/null +++ b/testcases/kernel/syscalls/shutdown/shutdown01.c @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2024 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com> + */ + +/*\ + * [Description] + * + * This test verifies the following shutdown() functionalities: + * + * - SHUT_RD should enable send() ops but disable recv() ops + * - SHUT_WR should enable recv() ops but disable send() ops + * - SHUT_RDWR should disable both recv() and send() ops + */ + +#include "tst_test.h" +#include "tst_safe_net.h" + +#define MSGSIZE 4 +#define SOCKETFILE "socket" + +static struct tcase { + int shutdown_op; + int recv_flag; + int recv_err; + int send_flag; + int send_err; + char *flag_str; +} tcases[] = { + {SHUT_RD, 0, 0, 0, 0, "SHUT_RD"}, + {SHUT_WR, MSG_DONTWAIT, EWOULDBLOCK, MSG_NOSIGNAL, EPIPE, "SHUT_WR"}, + {SHUT_RDWR, 0, 0, MSG_NOSIGNAL, EPIPE, "SHUT_RDWR"} +}; + +static struct sockaddr_un *sock_addr; + +static void run_server(void) +{ + int server_sock; + + server_sock = SAFE_SOCKET(sock_addr->sun_family, SOCK_STREAM, 0); + + SAFE_BIND(server_sock, + (struct sockaddr *)sock_addr, + sizeof(struct sockaddr_un)); + SAFE_LISTEN(server_sock, 10); + + tst_res(TINFO, "Running server on socket file"); + + TST_CHECKPOINT_WAKE_AND_WAIT(0); + + SAFE_CLOSE(server_sock); + SAFE_UNLINK(SOCKETFILE); +} + +static int start_test(void) +{ + int client_sock; + + if (!SAFE_FORK()) { + run_server(); + _exit(0); + } + + TST_CHECKPOINT_WAIT(0); + + tst_res(TINFO, "Connecting to the server"); + + client_sock = SAFE_SOCKET(sock_addr->sun_family, SOCK_STREAM, 0); + SAFE_CONNECT(client_sock, + (struct sockaddr *)sock_addr, + sizeof(struct sockaddr_un)); + + return client_sock; +} + +static void run(unsigned int n) +{ + struct tcase *tc = &tcases[n]; + int client_sock; + char buff[MSGSIZE] = {0}; + + client_sock = start_test(); + + tst_res(TINFO, "Testing %s flag", tc->flag_str); + + TST_EXP_PASS(shutdown(client_sock, tc->shutdown_op)); + + if (!tc->recv_err) + SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); + else + TST_EXP_FAIL(recv(client_sock, buff, MSGSIZE, tc->recv_flag), tc->recv_err); + + if (!tc->send_err) + SAFE_SEND(MSGSIZE, client_sock, buff, MSGSIZE, tc->send_flag); + else + TST_EXP_FAIL(send(client_sock, buff, MSGSIZE, tc->send_flag), tc->send_err); + + SAFE_CLOSE(client_sock); + TST_CHECKPOINT_WAKE(0); + +} + +static void setup(void) +{ + sock_addr->sun_family = AF_UNIX; + memcpy(sock_addr->sun_path, SOCKETFILE, sizeof(SOCKETFILE)); +} + +static struct tst_test test = { + .test = run, + .tcnt = ARRAY_SIZE(tcases), + .setup = setup, + .forks_child = 1, + .needs_checkpoints = 1, + .needs_tmpdir = 1, + .bufs = (struct tst_buffers []) { + {&sock_addr, .size = sizeof(struct sockaddr_un)}, + {} + } +}; -- 2.35.3 -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 1/2] Add shutdown01 test 2024-06-07 8:13 ` [LTP] [PATCH v2 1/2] Add shutdown01 test Andrea Cervesato @ 2024-06-10 13:13 ` Petr Vorel 2024-06-10 13:17 ` Andrea Cervesato via ltp 2024-06-10 13:52 ` Petr Vorel 1 sibling, 1 reply; 8+ messages in thread From: Petr Vorel @ 2024-06-10 13:13 UTC (permalink / raw) To: Andrea Cervesato; +Cc: ltp Hi Andrea, TL;DR: generally LGTM, I have few minor details, which I offer to fix before merge (diff below). Reviewed-by: Petr Vorel <pvorel@suse.cz> > +++ b/testcases/kernel/syscalls/shutdown/shutdown01.c ... > +static struct tcase { > + int shutdown_op; > + int recv_flag; > + int recv_err; > + int send_flag; > + int send_err; > + char *flag_str; > +} tcases[] = { > + {SHUT_RD, 0, 0, 0, 0, "SHUT_RD"}, > + {SHUT_WR, MSG_DONTWAIT, EWOULDBLOCK, MSG_NOSIGNAL, EPIPE, "SHUT_WR"}, > + {SHUT_RDWR, 0, 0, MSG_NOSIGNAL, EPIPE, "SHUT_RDWR"} Would you mind to use 1) designated initializers (e.g. .recv_flag = MSG_DONTWAIT,) 2) stringify macro IMHO it helps readability, that's why it's often used. #define OP_DESC(x) .shutdown_op = x, .desc = #x static struct tcase { int shutdown_op; int recv_flag; int recv_err; int send_flag; int send_err; char *desc; } tcases[] = { {OP_DESC(SHUT_RD)}, {OP_DESC(SHUT_WR), .recv_flag = MSG_DONTWAIT, .recv_err = EWOULDBLOCK, .send_flag = MSG_NOSIGNAL, .send_err = EPIPE}, {OP_DESC(SHUT_RDWR), .send_flag = MSG_NOSIGNAL, .send_err = EPIPE} }; > +}; > + > +static struct sockaddr_un *sock_addr; > + > +static void run_server(void) > +{ > + int server_sock; > + > + server_sock = SAFE_SOCKET(sock_addr->sun_family, SOCK_STREAM, 0); > + > + SAFE_BIND(server_sock, > + (struct sockaddr *)sock_addr, > + sizeof(struct sockaddr_un)); > + SAFE_LISTEN(server_sock, 10); > + > + tst_res(TINFO, "Running server on socket file"); > + > + TST_CHECKPOINT_WAKE_AND_WAIT(0); > + > + SAFE_CLOSE(server_sock); > + SAFE_UNLINK(SOCKETFILE); > +} > + > +static int start_test(void) > +{ > + int client_sock; > + > + if (!SAFE_FORK()) { > + run_server(); > + _exit(0); > + } > + > + TST_CHECKPOINT_WAIT(0); > + > + tst_res(TINFO, "Connecting to the server"); > + > + client_sock = SAFE_SOCKET(sock_addr->sun_family, SOCK_STREAM, 0); > + SAFE_CONNECT(client_sock, > + (struct sockaddr *)sock_addr, > + sizeof(struct sockaddr_un)); > + > + return client_sock; > +} > + > +static void run(unsigned int n) > +{ > + struct tcase *tc = &tcases[n]; > + int client_sock; > + char buff[MSGSIZE] = {0}; > + > + client_sock = start_test(); > + > + tst_res(TINFO, "Testing %s flag", tc->flag_str); > + > + TST_EXP_PASS(shutdown(client_sock, tc->shutdown_op)); > + > + if (!tc->recv_err) > + SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); > + else > + TST_EXP_FAIL(recv(client_sock, buff, MSGSIZE, tc->recv_flag), tc->recv_err); very nit: if (tc->recv_err) TST_EXP_FAIL(recv(client_sock, buff, MSGSIZE, tc->recv_flag), tc->recv_err); else SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); If you agree, I can merge with following changes. Kind regards, Petr diff --git testcases/kernel/syscalls/shutdown/shutdown01.c testcases/kernel/syscalls/shutdown/shutdown01.c index ba3853d9c..8e58f23e6 100644 --- testcases/kernel/syscalls/shutdown/shutdown01.c +++ testcases/kernel/syscalls/shutdown/shutdown01.c @@ -19,17 +19,19 @@ #define MSGSIZE 4 #define SOCKETFILE "socket" +#define OP_DESC(x) .shutdown_op = x, .desc = #x static struct tcase { int shutdown_op; int recv_flag; int recv_err; int send_flag; int send_err; - char *flag_str; + char *desc; } tcases[] = { - {SHUT_RD, 0, 0, 0, 0, "SHUT_RD"}, - {SHUT_WR, MSG_DONTWAIT, EWOULDBLOCK, MSG_NOSIGNAL, EPIPE, "SHUT_WR"}, - {SHUT_RDWR, 0, 0, MSG_NOSIGNAL, EPIPE, "SHUT_RDWR"} + {OP_DESC(SHUT_RD)}, + {OP_DESC(SHUT_WR), .recv_flag = MSG_DONTWAIT, .recv_err = EWOULDBLOCK, + .send_flag = MSG_NOSIGNAL, .send_err = EPIPE}, + {OP_DESC(SHUT_RDWR), .send_flag = MSG_NOSIGNAL, .send_err = EPIPE} }; static struct sockaddr_un *sock_addr; @@ -82,23 +84,22 @@ static void run(unsigned int n) client_sock = start_test(); - tst_res(TINFO, "Testing %s flag", tc->flag_str); + tst_res(TINFO, "Testing %s flag", tc->desc); TST_EXP_PASS(shutdown(client_sock, tc->shutdown_op)); - if (!tc->recv_err) - SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); - else + if (tc->recv_err) TST_EXP_FAIL(recv(client_sock, buff, MSGSIZE, tc->recv_flag), tc->recv_err); - - if (!tc->send_err) - SAFE_SEND(MSGSIZE, client_sock, buff, MSGSIZE, tc->send_flag); else + SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); + + if (tc->send_err) TST_EXP_FAIL(send(client_sock, buff, MSGSIZE, tc->send_flag), tc->send_err); + else + SAFE_SEND(MSGSIZE, client_sock, buff, MSGSIZE, tc->send_flag); SAFE_CLOSE(client_sock); TST_CHECKPOINT_WAKE(0); - } static void setup(void) -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 1/2] Add shutdown01 test 2024-06-10 13:13 ` Petr Vorel @ 2024-06-10 13:17 ` Andrea Cervesato via ltp 0 siblings, 0 replies; 8+ messages in thread From: Andrea Cervesato via ltp @ 2024-06-10 13:17 UTC (permalink / raw) To: Petr Vorel, Andrea Cervesato; +Cc: ltp Hi Petr, I agree with the proposed changes. Thanks, feel free to merge. Acked-by: Andrea Cervesato <andrea.cervesato@suse.com> On 6/10/24 15:13, Petr Vorel wrote: > Hi Andrea, > > TL;DR: generally LGTM, I have few minor details, which I offer to fix before > merge (diff below). > > Reviewed-by: Petr Vorel <pvorel@suse.cz> > >> +++ b/testcases/kernel/syscalls/shutdown/shutdown01.c > ... >> +static struct tcase { >> + int shutdown_op; >> + int recv_flag; >> + int recv_err; >> + int send_flag; >> + int send_err; >> + char *flag_str; >> +} tcases[] = { >> + {SHUT_RD, 0, 0, 0, 0, "SHUT_RD"}, >> + {SHUT_WR, MSG_DONTWAIT, EWOULDBLOCK, MSG_NOSIGNAL, EPIPE, "SHUT_WR"}, >> + {SHUT_RDWR, 0, 0, MSG_NOSIGNAL, EPIPE, "SHUT_RDWR"} > Would you mind to use > 1) designated initializers (e.g. .recv_flag = MSG_DONTWAIT,) > 2) stringify macro > > IMHO it helps readability, that's why it's often used. > > #define OP_DESC(x) .shutdown_op = x, .desc = #x > static struct tcase { > int shutdown_op; > int recv_flag; > int recv_err; > int send_flag; > int send_err; > char *desc; > } tcases[] = { > {OP_DESC(SHUT_RD)}, > {OP_DESC(SHUT_WR), .recv_flag = MSG_DONTWAIT, .recv_err = EWOULDBLOCK, > .send_flag = MSG_NOSIGNAL, .send_err = EPIPE}, > {OP_DESC(SHUT_RDWR), .send_flag = MSG_NOSIGNAL, .send_err = EPIPE} > }; > >> +}; >> + >> +static struct sockaddr_un *sock_addr; >> + >> +static void run_server(void) >> +{ >> + int server_sock; >> + >> + server_sock = SAFE_SOCKET(sock_addr->sun_family, SOCK_STREAM, 0); >> + >> + SAFE_BIND(server_sock, >> + (struct sockaddr *)sock_addr, >> + sizeof(struct sockaddr_un)); >> + SAFE_LISTEN(server_sock, 10); >> + >> + tst_res(TINFO, "Running server on socket file"); >> + >> + TST_CHECKPOINT_WAKE_AND_WAIT(0); >> + >> + SAFE_CLOSE(server_sock); >> + SAFE_UNLINK(SOCKETFILE); >> +} >> + >> +static int start_test(void) >> +{ >> + int client_sock; >> + >> + if (!SAFE_FORK()) { >> + run_server(); >> + _exit(0); >> + } >> + >> + TST_CHECKPOINT_WAIT(0); >> + >> + tst_res(TINFO, "Connecting to the server"); >> + >> + client_sock = SAFE_SOCKET(sock_addr->sun_family, SOCK_STREAM, 0); >> + SAFE_CONNECT(client_sock, >> + (struct sockaddr *)sock_addr, >> + sizeof(struct sockaddr_un)); >> + >> + return client_sock; >> +} >> + >> +static void run(unsigned int n) >> +{ >> + struct tcase *tc = &tcases[n]; >> + int client_sock; >> + char buff[MSGSIZE] = {0}; >> + >> + client_sock = start_test(); >> + >> + tst_res(TINFO, "Testing %s flag", tc->flag_str); >> + >> + TST_EXP_PASS(shutdown(client_sock, tc->shutdown_op)); >> + >> + if (!tc->recv_err) >> + SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); >> + else >> + TST_EXP_FAIL(recv(client_sock, buff, MSGSIZE, tc->recv_flag), tc->recv_err); > very nit: > > if (tc->recv_err) > TST_EXP_FAIL(recv(client_sock, buff, MSGSIZE, tc->recv_flag), tc->recv_err); > else > SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); > > If you agree, I can merge with following changes. > > Kind regards, > Petr > > diff --git testcases/kernel/syscalls/shutdown/shutdown01.c testcases/kernel/syscalls/shutdown/shutdown01.c > index ba3853d9c..8e58f23e6 100644 > --- testcases/kernel/syscalls/shutdown/shutdown01.c > +++ testcases/kernel/syscalls/shutdown/shutdown01.c > @@ -19,17 +19,19 @@ > #define MSGSIZE 4 > #define SOCKETFILE "socket" > > +#define OP_DESC(x) .shutdown_op = x, .desc = #x > static struct tcase { > int shutdown_op; > int recv_flag; > int recv_err; > int send_flag; > int send_err; > - char *flag_str; > + char *desc; > } tcases[] = { > - {SHUT_RD, 0, 0, 0, 0, "SHUT_RD"}, > - {SHUT_WR, MSG_DONTWAIT, EWOULDBLOCK, MSG_NOSIGNAL, EPIPE, "SHUT_WR"}, > - {SHUT_RDWR, 0, 0, MSG_NOSIGNAL, EPIPE, "SHUT_RDWR"} > + {OP_DESC(SHUT_RD)}, > + {OP_DESC(SHUT_WR), .recv_flag = MSG_DONTWAIT, .recv_err = EWOULDBLOCK, > + .send_flag = MSG_NOSIGNAL, .send_err = EPIPE}, > + {OP_DESC(SHUT_RDWR), .send_flag = MSG_NOSIGNAL, .send_err = EPIPE} > }; > > static struct sockaddr_un *sock_addr; > @@ -82,23 +84,22 @@ static void run(unsigned int n) > > client_sock = start_test(); > > - tst_res(TINFO, "Testing %s flag", tc->flag_str); > + tst_res(TINFO, "Testing %s flag", tc->desc); > > TST_EXP_PASS(shutdown(client_sock, tc->shutdown_op)); > > - if (!tc->recv_err) > - SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); > - else > + if (tc->recv_err) > TST_EXP_FAIL(recv(client_sock, buff, MSGSIZE, tc->recv_flag), tc->recv_err); > - > - if (!tc->send_err) > - SAFE_SEND(MSGSIZE, client_sock, buff, MSGSIZE, tc->send_flag); > else > + SAFE_RECV(0, client_sock, buff, MSGSIZE, tc->recv_flag); > + > + if (tc->send_err) > TST_EXP_FAIL(send(client_sock, buff, MSGSIZE, tc->send_flag), tc->send_err); > + else > + SAFE_SEND(MSGSIZE, client_sock, buff, MSGSIZE, tc->send_flag); > > SAFE_CLOSE(client_sock); > TST_CHECKPOINT_WAKE(0); > - > } > > static void setup(void) Andrea -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 1/2] Add shutdown01 test 2024-06-07 8:13 ` [LTP] [PATCH v2 1/2] Add shutdown01 test Andrea Cervesato 2024-06-10 13:13 ` Petr Vorel @ 2024-06-10 13:52 ` Petr Vorel 1 sibling, 0 replies; 8+ messages in thread From: Petr Vorel @ 2024-06-10 13:52 UTC (permalink / raw) To: Andrea Cervesato; +Cc: ltp Hi Andrea, this patch merged, thank you! Kind regards, Petr -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply [flat|nested] 8+ messages in thread
* [LTP] [PATCH v2 2/2] Add shutdown02 test 2024-06-07 8:13 [LTP] [PATCH v2 0/2] shutdown testing suite Andrea Cervesato 2024-06-07 8:13 ` [LTP] [PATCH v2 1/2] Add shutdown01 test Andrea Cervesato @ 2024-06-07 8:13 ` Andrea Cervesato 2024-06-10 13:44 ` Petr Vorel 1 sibling, 1 reply; 8+ messages in thread From: Andrea Cervesato @ 2024-06-07 8:13 UTC (permalink / raw) To: ltp From: Andrea Cervesato <andrea.cervesato@suse.com> This test verifies the following shutdown() errors: - EBADF sockfd is not a valid file descriptor - EINVAL An invalid value was specified in how - ENOTCONN The specified socket is not connected - ENOTSOCK The file descriptor sockfd does not refer to a socket Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com> --- runtest/syscalls | 1 + testcases/kernel/syscalls/shutdown/.gitignore | 1 + testcases/kernel/syscalls/shutdown/shutdown02.c | 76 +++++++++++++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/runtest/syscalls b/runtest/syscalls index dc396415e..44a577db3 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -1466,6 +1466,7 @@ shmget05 shmget05 shmget06 shmget06 shutdown01 shutdown01 +shutdown02 shutdown02 sigaction01 sigaction01 sigaction02 sigaction02 diff --git a/testcases/kernel/syscalls/shutdown/.gitignore b/testcases/kernel/syscalls/shutdown/.gitignore index 2df24d1ab..fd1ed807d 100644 --- a/testcases/kernel/syscalls/shutdown/.gitignore +++ b/testcases/kernel/syscalls/shutdown/.gitignore @@ -1 +1,2 @@ shutdown01 +shutdown02 diff --git a/testcases/kernel/syscalls/shutdown/shutdown02.c b/testcases/kernel/syscalls/shutdown/shutdown02.c new file mode 100644 index 000000000..4aae8469f --- /dev/null +++ b/testcases/kernel/syscalls/shutdown/shutdown02.c @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2024 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com> + */ + +/*\ + * [Description] + * + * This test verifies the following shutdown() errors: + * + * - EBADF sockfd is not a valid file descriptor + * - EINVAL An invalid value was specified in how + * - ENOTCONN The specified socket is not connected + * - ENOTSOCK The file descriptor sockfd does not refer to a socket + */ + +#include "tst_test.h" + +static int file_desc = -1; +static int valid_sock = -1; +static int invalid_sock = -1; + +static struct sockaddr_in *server_addr; + +static struct tcase { + int *socket; + int flags; + int error; +} tcases[] = { + {&invalid_sock, PF_INET, EBADF}, + {&valid_sock, -1, EINVAL}, + {&valid_sock, PF_INET, ENOTCONN}, + {&file_desc, PF_INET, ENOTSOCK}, +}; + +static void run(unsigned int n) +{ + struct tcase *tc = &tcases[n]; + + TST_EXP_FAIL(shutdown(*tc->socket, tc->flags), tc->error); +} + +static void setup(void) +{ + file_desc = SAFE_OPEN("notasocket", O_CREAT, 0640); + valid_sock = SAFE_SOCKET(PF_INET, SOCK_STREAM, 0); + + server_addr->sin_family = AF_INET; + server_addr->sin_port = 0; + server_addr->sin_addr.s_addr = INADDR_ANY; + + SAFE_BIND(valid_sock, + (struct sockaddr *)server_addr, + sizeof(struct sockaddr_in)); +} + +static void cleanup(void) +{ + if (valid_sock != -1) + SAFE_CLOSE(valid_sock); + + if (file_desc != -1) + SAFE_CLOSE(file_desc); +} + +static struct tst_test test = { + .test = run, + .tcnt = ARRAY_SIZE(tcases), + .setup = setup, + .cleanup = cleanup, + .needs_tmpdir = 1, + .bufs = (struct tst_buffers []) { + {&server_addr, .size = sizeof(struct sockaddr_in)}, + {} + } +}; -- 2.35.3 -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 2/2] Add shutdown02 test 2024-06-07 8:13 ` [LTP] [PATCH v2 2/2] Add shutdown02 test Andrea Cervesato @ 2024-06-10 13:44 ` Petr Vorel 2024-06-10 14:07 ` Andrea Cervesato via ltp 0 siblings, 1 reply; 8+ messages in thread From: Petr Vorel @ 2024-06-10 13:44 UTC (permalink / raw) To: Andrea Cervesato; +Cc: ltp Hi Andrea, ... > +static int file_desc = -1; > +static int valid_sock = -1; > +static int invalid_sock = -1; FYI many LTP tests (or even lib/tst_cgroup.c) just expect that 0 is for stdin, thus they happily expect 0 is invalid). e.g. static int file_desc; Then in cleanup: if (valid_sock > 0) SAFE_CLOSE(valid_sock); Sure, your way is correct, but I'd be also OK with 0. (SAFE_SOCKET() and SAFE_CLOSE() also checks it should be >= 0 for valid file descriptor or just -1 for error). Reviewed-by: Petr Vorel <pvorel@suse.cz> Kind regards, Petr -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 2/2] Add shutdown02 test 2024-06-10 13:44 ` Petr Vorel @ 2024-06-10 14:07 ` Andrea Cervesato via ltp 0 siblings, 0 replies; 8+ messages in thread From: Andrea Cervesato via ltp @ 2024-06-10 14:07 UTC (permalink / raw) To: Petr Vorel, Andrea Cervesato; +Cc: ltp Hi Petr, On 6/10/24 15:44, Petr Vorel wrote: > Hi Andrea, > > ... >> +static int file_desc = -1; >> +static int valid_sock = -1; >> +static int invalid_sock = -1; > FYI many LTP tests (or even lib/tst_cgroup.c) just expect that 0 is for stdin, > thus they happily expect 0 is invalid). e.g. > > static int file_desc; > > Then in cleanup: > if (valid_sock > 0) > SAFE_CLOSE(valid_sock); > > Sure, your way is correct, but I'd be also OK with 0. > > (SAFE_SOCKET() and SAFE_CLOSE() also checks it should be >= 0 for valid file > descriptor or just -1 for error). > > Reviewed-by: Petr Vorel <pvorel@suse.cz> > > Kind regards, > Petr I will fix it now Andrea -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-06-10 14:07 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-06-07 8:13 [LTP] [PATCH v2 0/2] shutdown testing suite Andrea Cervesato 2024-06-07 8:13 ` [LTP] [PATCH v2 1/2] Add shutdown01 test Andrea Cervesato 2024-06-10 13:13 ` Petr Vorel 2024-06-10 13:17 ` Andrea Cervesato via ltp 2024-06-10 13:52 ` Petr Vorel 2024-06-07 8:13 ` [LTP] [PATCH v2 2/2] Add shutdown02 test Andrea Cervesato 2024-06-10 13:44 ` Petr Vorel 2024-06-10 14:07 ` Andrea Cervesato via ltp
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox