public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [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

* [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 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 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 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

* 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