All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH 1/4] syscalls/socket01: convert to new API
@ 2016-06-24  9:04 Xiao Yang
  2016-06-24  9:04 ` [LTP] [PATCH 2/4] syscalls/socket02: reconstruct and " Xiao Yang
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Xiao Yang @ 2016-06-24  9:04 UTC (permalink / raw)
  To: ltp

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 testcases/kernel/syscalls/socket/socket01.c | 171 ++++++++++------------------
 1 file changed, 62 insertions(+), 109 deletions(-)

diff --git a/testcases/kernel/syscalls/socket/socket01.c b/testcases/kernel/syscalls/socket/socket01.c
index f471d8b..ad36aca 100644
--- a/testcases/kernel/syscalls/socket/socket01.c
+++ b/testcases/kernel/syscalls/socket/socket01.c
@@ -1,127 +1,80 @@
 /*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+* Copyright (c) International Business Machines  Corp., 2001
+*
+* This program is free software;  you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY;  without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+* the GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.
+*/
 
 /*
- * Test Name: socket01
- *
- * Test Description:
- *  Verify that socket() returns the proper errno for various failure cases
- *
- * Usage:  <for command-line>
- *  socket01 [-c n] [-e][-i n] [-I x] [-p x] [-t]
- *	where,  -c n : Run n copies concurrently.
- *		-e   : Turn on errno logging.
- *		-i n : Execute test n times.
- *		-I x : Execute test for x seconds.
- *		-P x : Pause for x seconds between iterations.
- *		-t   : Turn on syscall timing.
- *
- * History
- *	07/2001 John George
- *		-Ported
- *
- * Restrictions:
- *  None.
- *
- */
+* Test Name: socket01
+*
+* Test Description:
+* Verify that socket() returns the proper errno for various failure cases
+*
+*/
 
 #include <stdio.h>
 #include <unistd.h>
 #include <errno.h>
-
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
-
 #include <netinet/in.h>
-
-#include "test.h"
-
-char *TCID = "socket01";
-int testno;
-
-void setup(void), cleanup(void);
-
-struct test_case_t {		/* test case structure */
-	int domain;		/* PF_INET, PF_UNIX, ... */
-	int type;		/* SOCK_STREAM, SOCK_DGRAM ... */
-	int proto;		/* protocol number (usually 0 = default) */
-	int retval;		/* syscall return value */
-	int experrno;		/* expected errno */
+#include "tst_test.h"
+
+struct test_case_t {
+	int domain;
+	int type;
+	int proto;
+	int retval;
+	int experrno;
 	char *desc;
 } tdat[] = {
-	{
-	0, SOCK_STREAM, 0, -1, EAFNOSUPPORT, "invalid domain"}, {
-	PF_INET, 75, 0, -1, EINVAL, "invalid type"}, {
-	PF_UNIX, SOCK_DGRAM, 0, 0, 0, "UNIX domain dgram"}, {
-	PF_INET, SOCK_RAW, 0, -1, ESOCKTNOSUPPORT, "raw open as non-root"},
-	{
-	PF_INET, SOCK_DGRAM, 17, 0, 0, "UDP socket"}, {
-	PF_INET, SOCK_STREAM, 17, -1, ESOCKTNOSUPPORT, "UDP stream"}, {
-	PF_INET, SOCK_DGRAM, 6, -1, ESOCKTNOSUPPORT, "TCP dgram"}, {
-	PF_INET, SOCK_STREAM, 6, 0, 0, "TCP socket"}, {
-PF_INET, SOCK_STREAM, 1, -1, ESOCKTNOSUPPORT, "ICMP stream"},};
-
-int TST_TOTAL = sizeof(tdat) / sizeof(tdat[0]);
-
-int main(int argc, char *argv[])
+	{0, SOCK_STREAM, 0, -1, EAFNOSUPPORT, "invalid domain"},
+	{PF_INET, 75, 0, -1, EINVAL, "invalid type"},
+	{PF_UNIX, SOCK_DGRAM, 0, 0, 0, "UNIX domain dgram"},
+	{PF_INET, SOCK_RAW, 0, -1, ESOCKTNOSUPPORT, "raw open as non-root"},
+	{PF_INET, SOCK_DGRAM, 17, 0, 0, "UDP socket"},
+	{PF_INET, SOCK_STREAM, 17, -1, ESOCKTNOSUPPORT, "UDP stream"},
+	{PF_INET, SOCK_DGRAM, 6, -1, ESOCKTNOSUPPORT, "TCP dgram"},
+	{PF_INET, SOCK_STREAM, 6, 0, 0, "TCP socket"},
+	{PF_INET, SOCK_STREAM, 1, -1, ESOCKTNOSUPPORT, "ICMP stream"}
+};
+
+static void verify_socket(unsigned int n)
 {
-	int lc;
-	int s;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
-		for (testno = 0; testno < TST_TOTAL; ++testno) {
-			TEST((s = socket(tdat[testno].domain, tdat[testno].type,
-					 tdat[testno].proto)));
-			if (TEST_RETURN >= 0) {
-				TEST_RETURN = 0;	/* > 0 equivalent */
-			} else {
-			}
-			if (TEST_RETURN != tdat[testno].retval || (TEST_RETURN < 0 && (TEST_ERRNO != tdat[testno].experrno && TEST_ERRNO != EPROTONOSUPPORT))) {	/* Change for defect 21065 for kernel change */
-				tst_resm(TFAIL, "%s ; returned"	/* of return code for this test but don't want */
-					 " %d (expected %d), errno %d (expected"	/* to break on older kernels */
-					 " %d)", tdat[testno].desc,
-					 s, tdat[testno].retval,
-					 TEST_ERRNO, tdat[testno].experrno);
-			} else {
-				tst_resm(TPASS, "%s successful",
-					 tdat[testno].desc);
-			}
-			(void)close(s);
-		}
+	int fd;
+	struct test_case_t *tc = &tdat[n];
+
+	TEST(fd = socket(tc->domain, tc->type, tc->proto));
+	if (TEST_RETURN >= 0)
+		TEST_RETURN = 0;
+
+	if (TEST_RETURN != tc->retval || (TEST_RETURN < 0 &&
+	   (TEST_ERRNO != tc->experrno && TEST_ERRNO != EPROTONOSUPPORT))) {
+		tst_res(TFAIL, "%s returned %d (expected %d), errno %d "
+			"(expected %d)", tc->desc, fd, tc->retval, TEST_ERRNO,
+			tc->experrno);
+	} else {
+		tst_res(TPASS, "%s successful", tc->desc);
 	}
-	cleanup();
-	tst_exit();
-
-}
 
-void setup(void)
-{
-
-	TEST_PAUSE;
+	if (fd > 0)
+		SAFE_CLOSE(fd);
 }
 
-void cleanup(void)
-{
-}
+static struct tst_test test = {
+	.tid = "socket01",
+	.tcnt = ARRAY_SIZE(tdat),
+	.test = verify_socket
+};
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [LTP] [PATCH 2/4] syscalls/socket02: reconstruct and convert to new API
  2016-06-24  9:04 [LTP] [PATCH 1/4] syscalls/socket01: convert to new API Xiao Yang
@ 2016-06-24  9:04 ` Xiao Yang
  2016-07-26 11:40   ` Cyril Hrubis
  2016-06-24  9:04 ` [LTP] [PATCH 3/4] syscalls/socketpair01: " Xiao Yang
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Xiao Yang @ 2016-06-24  9:04 UTC (permalink / raw)
  To: ltp

1) take use of some SAFE Marcos
2) remove SOCK_CLOEXEC introduced in socketpair()
3) merge socket03 into socket02

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 runtest/syscalls                            |   1 -
 testcases/kernel/syscalls/.gitignore        |   1 -
 testcases/kernel/syscalls/socket/socket02.c | 276 ++++++++--------------------
 testcases/kernel/syscalls/socket/socket03.c | 168 -----------------
 4 files changed, 78 insertions(+), 368 deletions(-)
 delete mode 100644 testcases/kernel/syscalls/socket/socket03.c

diff --git a/runtest/syscalls b/runtest/syscalls
index 428b774..bf4338d 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -1188,7 +1188,6 @@ sigsuspend01 sigsuspend01
 
 socket01 socket01
 socket02 socket02
-socket03 socket03
 
 socketcall01 socketcall01
 socketcall02 socketcall02
diff --git a/testcases/kernel/syscalls/.gitignore b/testcases/kernel/syscalls/.gitignore
index 81f4890..7fe87d2 100644
--- a/testcases/kernel/syscalls/.gitignore
+++ b/testcases/kernel/syscalls/.gitignore
@@ -948,7 +948,6 @@
 /sigwaitinfo/sigwaitinfo01
 /socket/socket01
 /socket/socket02
-/socket/socket03
 /socketcall/socketcall01
 /socketcall/socketcall02
 /socketcall/socketcall03
diff --git a/testcases/kernel/syscalls/socket/socket02.c b/testcases/kernel/syscalls/socket/socket02.c
index 259f0e3..f6473d5 100644
--- a/testcases/kernel/syscalls/socket/socket02.c
+++ b/testcases/kernel/syscalls/socket/socket02.c
@@ -1,219 +1,99 @@
-/******************************************************************************/
-/*                                                                            */
-/* Copyright (c) Ulrich Drepper <drepper@redhat.com>                          */
-/* Copyright (c) International Business Machines  Corp., 2009                 */
-/*                                                                            */
-/* This program is free software;  you can redistribute it and/or modify      */
-/* it under the terms of the GNU General Public License as published by       */
-/* the Free Software Foundation; either version 2 of the License, or          */
-/* (at your option) any later version.                                        */
-/*                                                                            */
-/* This program is distributed in the hope that it will be useful,            */
-/* but WITHOUT ANY WARRANTY;  without even the implied warranty of            */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  */
-/* the GNU General Public License for more details.                           */
-/*                                                                            */
-/* You should have received a copy of the GNU General Public License          */
-/* along with this program;  if not, write to the Free Software               */
-/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    */
-/*                                                                            */
-/******************************************************************************/
-/******************************************************************************/
-/*                                                                            */
-/* File:        socket02.c                                                    */
-/*                                                                            */
-/* Description: This program tests the new flag SOCK_CLOEXEC introduced in    */
-/*              socket() & socketpair() and in kernel 2.6.27. Ulrich´s comment*/
-/*              as in:                                                        */
-/*              http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a677a039be7243357d93502bff2b40850c942e2d */
-/*              says:                                                         */
-/*                                                                            */
-/*              flag parameters: socket and socketpair                        */
-/*              This patch adds support for flag values which are ORed to the */
-/*              type passwd to socket and socketpair.  The additional code is */
-/*              minimal. The flag values in this implementation can and must  */
-/*              match the O_* flags. This avoids overhead in the conversion.  */
-/*              The internal functions sock_alloc_fd and sock_map_fd get a new*/
-/*              parameters and all callers are changed.                       */
-/*                                                                            */
-/* Usage:  <for command-line>                                                 */
-/*  socket02 [-c n] [-e][-i n] [-I x] [-p x] [-t]                             */
-/*      where,  -c n : Run n copies concurrently.                             */
-/*              -e   : Turn on errno logging.                                 */
-/*              -i n : Execute test n times.                                  */
-/*              -I x : Execute test for x seconds.                            */
-/*              -P x : Pause for x seconds between iterations.                */
-/*              -t   : Turn on syscall timing.                                */
-/*                                                                            */
-/* Total Tests: 1                                                             */
-/*                                                                            */
-/* Test Name:   socket02                                                      */
-/*                                                                            */
-/* Author:      Ulrich Drepper <drepper@redhat.com>                           */
-/*                                                                            */
-/* History:     Created - Jan 05 2009 - Ulrich Drepper <drepper@redhat.com>   */
-/*              Ported to LTP                                                 */
-/*                      - Jan 05 2009 - Subrata <subrata@linux.vnet.ibm.com>  */
-/******************************************************************************/
+/*
+* Copyright (c) Ulrich Drepper <drepper@redhat.com>
+* Copyright (c) International Business Machines  Corp., 2009
+*
+* This program is free software;  you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY;  without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+* the GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.
+*/
+
+/*
+* Test Name:	socket02
+*
+* Description:
+* This program tests the new flag SOCK_CLOEXEC and SOCK_NONBLOCK introduced
+* in socket() in kernel 2.6.27.
+*/
 
 #include <fcntl.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <netinet/in.h>
 #include <sys/socket.h>
-
-#include "test.h"
 #include "lapi/fcntl.h"
+#include "tst_test.h"
 
-#define PORT 57392
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 02000000
+#endif
 
-/* For Linux these must be the same.  */
 #ifndef SOCK_CLOEXEC
 #define SOCK_CLOEXEC O_CLOEXEC
 #endif
 
-char *TCID = "socket02";
-int testno;
-int TST_TOTAL = 1;
-
-/* Extern Global Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    cleanup                                                       */
-/*                                                                            */
-/* Description: Performs all one time clean up for this test on successful    */
-/*              completion,  premature exit or  failure. Closes all temporary */
-/*              files, removes all temporary directories exits the test with  */
-/*              appropriate return code by calling tst_exit() function.       */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits calling tst_exit(). Non '0' return code.   */
-/*              On success - Exits calling tst_exit(). With '0' return code.  */
-/*                                                                            */
-/******************************************************************************/
-void cleanup(void)
-{
+#ifndef SOCK_NONBLOCK
+#define SOCK_NONBLOCK O_NONBLOCK
+#endif
 
-	tst_rmdir();
+static int fd;
 
-}
+static struct tcase {
+	int type;
+	int flag;
+	int fl_flag;
+	char *des;
+} tcases[] = {
+	{SOCK_STREAM, 0, F_GETFD, "no close-on-exec"},
+	{SOCK_STREAM | SOCK_CLOEXEC, FD_CLOEXEC, F_GETFD, "close-on-exec"},
+	{SOCK_STREAM, 0, F_GETFL, "no non-blocking"},
+	{SOCK_STREAM | SOCK_NONBLOCK, O_NONBLOCK, F_GETFL, "non-blocking"}
+};
 
-/* Local  Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    setup                                                         */
-/*                                                                            */
-/* Description: Performs all one time setup for this test. This function is   */
-/*              typically used to capture signals, create temporary dirs      */
-/*              and temporary files that may be used in the course of this    */
-/*              test.                                                         */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits by calling cleanup().                      */
-/*              On success - returns 0.                                       */
-/*                                                                            */
-/******************************************************************************/
-void setup(void)
+static void verify_socket(unsigned int n)
 {
-	/* Capture signals if any */
-	/* Create temporary directories */
-	TEST_PAUSE;
-	tst_tmpdir();
-}
+	int res;
+	struct tcase *tc = &tcases[n];
 
-int main(int argc, char *argv[])
-{
-	int fd, fds[2], i, coe;
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-	if ((tst_kvercmp(2, 6, 27)) < 0) {
-		tst_brkm(TCONF,
-			 NULL,
-			 "This test can only run on kernels that are 2.6.27 and higher");
+	fd = socket(PF_INET, tc->type, 0);
+	if (fd == -1)
+		tst_brk(TFAIL | TERRNO, "socket() failed");
+
+	res = SAFE_FCNTL(fd, tc->fl_flag);
+
+	if (tc->flag != 0 && (res & tc->flag) == 0) {
+		tst_res(TFAIL, "socket() failed to set %s flag", tc->des);
+		return;
 	}
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
-		for (testno = 0; testno < TST_TOTAL; ++testno) {
-			fd = socket(PF_INET, SOCK_STREAM, 0);
-			if (fd == -1) {
-				tst_brkm(TBROK, cleanup, "socket(0) failed");
-			}
-			coe = fcntl(fd, F_GETFD);
-			if (coe == -1) {
-				tst_brkm(TBROK, cleanup, "fcntl failed");
-			}
-			if (coe & FD_CLOEXEC) {
-				tst_brkm(TFAIL,
-					 cleanup,
-					 "socket(0) set close-on-exec flag");
-			}
-			close(fd);
-
-			fd = socket(PF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
-			if (fd == -1) {
-				tst_brkm(TFAIL, cleanup,
-					 "socket(SOCK_CLOEXEC) failed");
-			}
-			coe = fcntl(fd, F_GETFD);
-			if (coe == -1) {
-				tst_brkm(TBROK, cleanup, "fcntl failed");
-			}
-			if ((coe & FD_CLOEXEC) == 0) {
-				tst_brkm(TFAIL,
-					 cleanup,
-					 "socket(SOCK_CLOEXEC) does not set close-on-exec flag");
-			}
-			close(fd);
-
-			if (socketpair(PF_UNIX, SOCK_STREAM, 0, fds) == -1) {
-				tst_brkm(TBROK, cleanup,
-					 "socketpair(0) failed");
-			}
-			for (i = 0; i < 2; ++i) {
-				coe = fcntl(fds[i], F_GETFD);
-				if (coe == -1) {
-					tst_brkm(TBROK, cleanup,
-						 "fcntl failed");
-				}
-				if (coe & FD_CLOEXEC) {
-					tst_brkm(TFAIL,
-						 cleanup, "socketpair(0) set close-on-exec flag for fds[%d]\n",
-						 i);
-				}
-				close(fds[i]);
-			}
-
-			if (socketpair
-			    (PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0,
-			     fds) == -1) {
-				tst_brkm(TBROK, cleanup,
-					 "socketpair(SOCK_CLOEXEC) failed");
-			}
-			for (i = 0; i < 2; ++i) {
-				coe = fcntl(fds[i], F_GETFD);
-				if (coe == -1) {
-					tst_brkm(TBROK, cleanup,
-						 "fcntl failed");
-				}
-				if ((coe & FD_CLOEXEC) == 0) {
-					tst_brkm(TFAIL,
-						 cleanup, "socketpair(SOCK_CLOEXEC) does not set close-on-exec flag for fds[%d]\n",
-						 i);
-				}
-				close(fds[i]);
-			}
-			tst_resm(TPASS, "socket(SOCK_CLOEXEC) PASSED");
-			cleanup();
-		}
+
+	if (tc->flag == 0 && (res & tc->flag) != 0) {
+		tst_res(TFAIL, "socket() failed to set %s flag", tc->des);
+		return;
 	}
-	tst_exit();
+
+	tst_res(TPASS, "socket() passed to set %s flag", tc->des);
+
+	SAFE_CLOSE(fd);
 }
+
+static void cleanup(void)
+{
+	if (fd > 0 && close(fd))
+		tst_res(TWARN | TERRNO, "failed to close file");
+}
+
+static struct tst_test test = {
+	.tid = "socket02",
+	.tcnt = ARRAY_SIZE(tcases),
+	.test = verify_socket,
+	.min_kver = "2.6.27",
+	.cleanup = cleanup
+};
diff --git a/testcases/kernel/syscalls/socket/socket03.c b/testcases/kernel/syscalls/socket/socket03.c
deleted file mode 100644
index 2f069f2..0000000
--- a/testcases/kernel/syscalls/socket/socket03.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/******************************************************************************/
-/*                                                                            */
-/* Copyright (c) Ulrich Drepper <drepper@redhat.com>                          */
-/* Copyright (c) International Business Machines  Corp., 2009                 */
-/*                                                                            */
-/* This program is free software;  you can redistribute it and/or modify      */
-/* it under the terms of the GNU General Public License as published by       */
-/* the Free Software Foundation; either version 2 of the License, or          */
-/* (at your option) any later version.                                        */
-/*                                                                            */
-/* This program is distributed in the hope that it will be useful,            */
-/* but WITHOUT ANY WARRANTY;  without even the implied warranty of            */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  */
-/* the GNU General Public License for more details.                           */
-/*                                                                            */
-/* You should have received a copy of the GNU General Public License          */
-/* along with this program;  if not, write to the Free Software               */
-/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    */
-/*                                                                            */
-/******************************************************************************/
-/******************************************************************************/
-/*                                                                            */
-/* File:        socket03.c                                                    */
-/*                                                                            */
-/* Description: This Program tests the new system call introduced in 2.6.27.  */
-/*              Ulrich´s comment as in:                                       */
-/* http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=77d2720059618b9b6e827a8b73831eb6c6fad63c */
-/*                                                                            */
-/* Usage:  <for command-line>                                                 */
-/* socket03 [-c n] [-e][-i n] [-I x] [-p x] [-t]                      */
-/*      where,  -c n : Run n copies concurrently.                             */
-/*              -e   : Turn on errno logging.                                 */
-/*              -i n : Execute test n times.                                  */
-/*              -I x : Execute test for x seconds.                            */
-/*              -P x : Pause for x seconds between iterations.                */
-/*              -t   : Turn on syscall timing.                                */
-/*                                                                            */
-/* Total Tests: 1                                                             */
-/*                                                                            */
-/* Test Name:   socket03                                                      */
-/*                                                                            */
-/* Author:      Ulrich Drepper <drepper@redhat.com>                           */
-/*                                                                            */
-/* History:     Created - Jan 13 2009 - Ulrich Drepper <drepper@redhat.com>   */
-/*              Ported to LTP                                                 */
-/*                      - Jan 13 2009 - Subrata <subrata@linux.vnet.ibm.com>  */
-/******************************************************************************/
-#include <fcntl.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <sys/syscall.h>
-
-#include "test.h"
-
-#ifndef SOCK_NONBLOCK
-#define SOCK_NONBLOCK O_NONBLOCK
-#endif
-
-char *TCID = "socket03";
-int testno;
-int TST_TOTAL = 1;
-
-/* Extern Global Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    cleanup                                                       */
-/*                                                                            */
-/* Description: Performs all one time clean up for this test on successful    */
-/*              completion,  premature exit or  failure. Closes all temporary */
-/*              files, removes all temporary directories exits the test with  */
-/*              appropriate return code by calling tst_exit() function.       */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits calling tst_exit(). Non '0' return code.   */
-/*              On success - Exits calling tst_exit(). With '0' return code.  */
-/*                                                                            */
-/******************************************************************************/
-void cleanup(void)
-{
-
-	tst_rmdir();
-
-}
-
-/* Local  Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    setup                                                         */
-/*                                                                            */
-/* Description: Performs all one time setup for this test. This function is   */
-/*              typically used to capture signals, create temporary dirs      */
-/*              and temporary files that may be used in the course of this    */
-/*              test.                                                         */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits by calling cleanup().                      */
-/*              On success - returns 0.                                       */
-/*                                                                            */
-/******************************************************************************/
-void setup(void)
-{
-	/* Capture signals if any */
-	/* Create temporary directories */
-	TEST_PAUSE;
-	tst_tmpdir();
-}
-
-int main(int argc, char *argv[])
-{
-	int fd, fl;
-	int lc;
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-	if ((tst_kvercmp(2, 6, 27)) < 0) {
-		tst_brkm(TCONF,
-			 NULL,
-			 "This test can only run on kernels that are 2.6.27 and higher");
-	}
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
-		for (testno = 0; testno < TST_TOTAL; ++testno) {
-			fd = socket(PF_INET, SOCK_STREAM, 0);
-			if (fd == -1) {
-				tst_brkm(TFAIL, cleanup, "socket(0) failed");
-			}
-			fl = fcntl(fd, F_GETFL);
-			if (fl == -1) {
-				tst_brkm(TBROK, cleanup, "fcntl failed");
-			}
-			if (fl & O_NONBLOCK) {
-				tst_brkm(TFAIL,
-					 cleanup,
-					 "socket(0) set non-blocking mode");
-			}
-			close(fd);
-
-			fd = socket(PF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
-			if (fd == -1) {
-				tst_brkm(TFAIL, cleanup,
-					 "socket(SOCK_NONBLOCK) failed");
-			}
-			fl = fcntl(fd, F_GETFL);
-			if (fl == -1) {
-				tst_brkm(TBROK, cleanup, "fcntl failed");
-			}
-			if ((fl & O_NONBLOCK) == 0) {
-				tst_brkm(TFAIL,
-					 cleanup,
-					 "socket(SOCK_NONBLOCK) does not set non-blocking mode");
-			}
-			close(fd);
-			tst_resm(TPASS, "socket(SOCK_NONBLOCK) PASSED");
-			cleanup();
-		}
-	}
-	tst_exit();
-}
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [LTP] [PATCH 3/4] syscalls/socketpair01: convert to new API
  2016-06-24  9:04 [LTP] [PATCH 1/4] syscalls/socket01: convert to new API Xiao Yang
  2016-06-24  9:04 ` [LTP] [PATCH 2/4] syscalls/socket02: reconstruct and " Xiao Yang
@ 2016-06-24  9:04 ` Xiao Yang
  2016-07-26 11:57   ` Cyril Hrubis
  2016-06-24  9:04 ` [LTP] [PATCH 4/4] syscalls/socketpair02: reconstruct and " Xiao Yang
  2016-07-25 16:21 ` [LTP] [PATCH 1/4] syscalls/socket01: " Cyril Hrubis
  3 siblings, 1 reply; 8+ messages in thread
From: Xiao Yang @ 2016-06-24  9:04 UTC (permalink / raw)
  To: ltp

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 .../kernel/syscalls/socketpair/socketpair01.c      | 180 +++++++--------------
 1 file changed, 62 insertions(+), 118 deletions(-)

diff --git a/testcases/kernel/syscalls/socketpair/socketpair01.c b/testcases/kernel/syscalls/socketpair/socketpair01.c
index 3a045b7..be7bcfb 100644
--- a/testcases/kernel/syscalls/socketpair/socketpair01.c
+++ b/testcases/kernel/syscalls/socketpair/socketpair01.c
@@ -1,144 +1,88 @@
 /*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+* Copyright (c) International Business Machines  Corp., 2001
+*
+* This program is free software;  you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY;  without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+* the GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.
+*/
 
 /*
- * Test Name: socketpair01
- *
- * Test Description:
- *  Verify that socketpair() returns the proper errno for various failure cases
- *
- * Usage:  <for command-line>
- *  socketpair01 [-c n] [-e] [-i n] [-I x] [-p x] [-t]
- *	where,  -c n : Run n copies concurrently.
- *		-e   : Turn on errno logging.
- *		-i n : Execute test n times.
- *		-I x : Execute test for x seconds.
- *		-P x : Pause for x seconds between iterations.
- *		-t   : Turn on syscall timing.
- *
- * History
- *	07/2001 John George
- *		-Ported
- *
- * Restrictions:
- *  None.
- *
- */
+* Test Name: socketpair01
+*
+* Test Description:
+* Verify that socketpair() returns the proper errno for various failure cases
+*/
 
 #include <stdio.h>
 #include <unistd.h>
 #include <errno.h>
-
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
-
 #include <netinet/in.h>
+#include "tst_test.h"
 
-#include "test.h"
-
-char *TCID = "socketpair01";
-int testno;
-
-int sv[2];
+static int fds[2];
 
-void setup(void), cleanup(void);
-
-struct test_case_t {		/* test case structure */
-	int domain;		/* PF_INET, PF_UNIX, ... */
-	int type;		/* SOCK_STREAM, SOCK_DGRAM ... */
-	int proto;		/* protocol number (usually 0 = default) */
-	int *sv;		/* socket descriptor vector */
-	int retval;		/* syscall return value */
-	int experrno;		/* expected errno */
+struct test_case_t {
+	int domain;
+	int type;
+	int proto;
+	int *sv;
+	int retval;
+	int experrno;
 	char *desc;
 } tdat[] = {
-	{
-	0, SOCK_STREAM, 0, sv, -1, EAFNOSUPPORT, "invalid domain"}, {
-	PF_INET, 75, 0, sv, -1, EINVAL, "invalid type"}, {
-	PF_UNIX, SOCK_DGRAM, 0, sv, 0, 0, "UNIX domain dgram"}, {
-	PF_INET, SOCK_RAW, 0, sv, -1, ESOCKTNOSUPPORT,
-		    "raw open as non-root"},
+	{0, SOCK_STREAM, 0, fds, -1, EAFNOSUPPORT, "invalid domain"},
+	{PF_INET, 75, 0, fds, -1, EINVAL, "invalid type"},
+	{PF_UNIX, SOCK_DGRAM, 0, fds, 0, 0, "UNIX domain dgram"},
+	{PF_INET, SOCK_RAW, 0, fds, -1, ESOCKTNOSUPPORT, "raw open as non-root"},
 #ifndef UCLINUX
-	    /* Skip since uClinux does not implement memory protection */
-	{
-	PF_UNIX, SOCK_STREAM, 0, 0, -1, EFAULT, "bad aligned pointer"}, {
-	PF_UNIX, SOCK_STREAM, 0, (int *)7, -1, EFAULT,
-		    "bad unaligned pointer"},
+	{PF_UNIX, SOCK_STREAM, 0, 0, -1, EFAULT, "bad aligned pointer"},
+	{PF_UNIX, SOCK_STREAM, 0, (int *)7, -1, EFAULT, "bad unaligned pointer"},
 #endif
-	{
-	PF_INET, SOCK_DGRAM, 17, sv, -1, EOPNOTSUPP, "UDP socket"}, {
-	PF_INET, SOCK_DGRAM, 6, sv, -1, ESOCKTNOSUPPORT, "TCP dgram"}, {
-	PF_INET, SOCK_STREAM, 6, sv, -1, EOPNOTSUPP, "TCP socket"}, {
-PF_INET, SOCK_STREAM, 1, sv, -1, ESOCKTNOSUPPORT, "ICMP stream"},};
-
-int TST_TOTAL = sizeof(tdat) / sizeof(tdat[0]);
+	{PF_INET, SOCK_DGRAM, 17, fds, -1, EOPNOTSUPP, "UDP socket"},
+	{PF_INET, SOCK_DGRAM, 6, fds, -1, ESOCKTNOSUPPORT, "TCP dgram"},
+	{PF_INET, SOCK_STREAM, 6, fds, -1, EOPNOTSUPP, "TCP socket"},
+	{PF_INET, SOCK_STREAM, 1, fds, -1, ESOCKTNOSUPPORT, "ICMP stream"}
+};
 
-int main(int argc, char *argv[])
+static void verify_socketpair(unsigned int n)
 {
-	int lc;
-	int s;
+	int res;
+	struct test_case_t *tc = &tdat[n];
 
-	tst_parse_opts(argc, argv, NULL, NULL);
+	TEST(res = socketpair(tc->domain, tc->type, tc->proto, tc->sv));
 
-	setup();
+	if (TEST_RETURN >= 0)
+		TEST_RETURN = 0;
 
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
-		for (testno = 0; testno < TST_TOTAL; ++testno) {
-			TEST((s = socketpair(tdat[testno].domain,
-					     tdat[testno].type,
-					     tdat[testno].proto,
-					     tdat[testno].sv)));
-			if (TEST_RETURN >= 0) {
-				TEST_RETURN = 0;	/* > 0 equivalent */
-			} else {
-			}
-			if (TEST_RETURN != tdat[testno].retval ||
-			    (TEST_RETURN &&
-			     (TEST_ERRNO != tdat[testno].experrno
-			      && TEST_ERRNO != EPROTONOSUPPORT))) {
-				tst_resm(TFAIL,
-					 "%s ; returned"
-					 " %d (expected %d), errno %d (expected"
-					 " %d)", tdat[testno].desc, s,
-					 tdat[testno].retval, TEST_ERRNO,
-					 tdat[testno].experrno);
-			} else {
-				tst_resm(TPASS, "%s successful",
-					 tdat[testno].desc);
-			}
-			(void)close(s);
-		}
+	if (TEST_RETURN != tc->retval || (TEST_RETURN &&
+	   (TEST_ERRNO != tc->experrno && TEST_ERRNO != EPROTONOSUPPORT))) {
+		tst_res(TFAIL, "%s returned %d (expected %d), errno %d "
+			"(expected %d)", tc->desc, res, tc->retval, TEST_ERRNO,
+			tc->experrno);
+	}  else {
+		tst_res(TPASS, "%s successful", tc->desc);
 	}
 
-	cleanup();
-
-	tst_exit();
-}
-
-void setup(void)
-{
-
-	TEST_PAUSE;
+	if (res > 0) {
+		SAFE_CLOSE(fds[0]);
+		SAFE_CLOSE(fds[1]);
+	}
 }
 
-void cleanup(void)
-{
-}
+static struct tst_test test = {
+	.tid = "sokcetpair01",
+	.tcnt = ARRAY_SIZE(tdat),
+	.test = verify_socketpair
+};
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [LTP] [PATCH 4/4] syscalls/socketpair02: reconstruct and convert to new API
  2016-06-24  9:04 [LTP] [PATCH 1/4] syscalls/socket01: convert to new API Xiao Yang
  2016-06-24  9:04 ` [LTP] [PATCH 2/4] syscalls/socket02: reconstruct and " Xiao Yang
  2016-06-24  9:04 ` [LTP] [PATCH 3/4] syscalls/socketpair01: " Xiao Yang
@ 2016-06-24  9:04 ` Xiao Yang
  2016-07-26 12:09   ` Cyril Hrubis
  2016-07-25 16:21 ` [LTP] [PATCH 1/4] syscalls/socket01: " Cyril Hrubis
  3 siblings, 1 reply; 8+ messages in thread
From: Xiao Yang @ 2016-06-24  9:04 UTC (permalink / raw)
  To: ltp

1) take use of some SAFE Marcos
2) add SOCK_CLOEXEC introduced in socketpair()

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 .../kernel/syscalls/socketpair/socketpair02.c      | 221 ++++++++-------------
 1 file changed, 86 insertions(+), 135 deletions(-)

diff --git a/testcases/kernel/syscalls/socketpair/socketpair02.c b/testcases/kernel/syscalls/socketpair/socketpair02.c
index f1ff463..be545b2 100644
--- a/testcases/kernel/syscalls/socketpair/socketpair02.c
+++ b/testcases/kernel/syscalls/socketpair/socketpair02.c
@@ -1,50 +1,30 @@
-/******************************************************************************/
-/*                                                                            */
-/* Copyright (c) Ulrich Drepper <drepper@redhat.com>                          */
-/* Copyright (c) International Business Machines  Corp., 2009                 */
-/*                                                                            */
-/* This program is free software;  you can redistribute it and/or modify      */
-/* it under the terms of the GNU General Public License as published by       */
-/* the Free Software Foundation; either version 2 of the License, or          */
-/* (at your option) any later version.                                        */
-/*                                                                            */
-/* This program is distributed in the hope that it will be useful,            */
-/* but WITHOUT ANY WARRANTY;  without even the implied warranty of            */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  */
-/* the GNU General Public License for more details.                           */
-/*                                                                            */
-/* You should have received a copy of the GNU General Public License          */
-/* along with this program;  if not, write to the Free Software               */
-/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    */
-/*                                                                            */
-/******************************************************************************/
-/******************************************************************************/
-/*                                                                            */
-/* File:        socketpair02.c                                                */
-/*                                                                            */
-/* Description: This Program tests the new system call introduced in 2.6.27.  */
-/*              Ulrich´s comment as in:                                       */
-/* http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=77d2720059618b9b6e827a8b73831eb6c6fad63c */
-/*                                                                            */
-/* Usage:  <for command-line>                                                 */
-/* socketpair02 [-c n] [-e][-i n] [-I x] [-p x] [-t]                          */
-/*      where,  -c n : Run n copies concurrently.                             */
-/*              -e   : Turn on errno logging.                                 */
-/*              -i n : Execute test n times.                                  */
-/*              -I x : Execute test for x seconds.                            */
-/*              -P x : Pause for x seconds between iterations.                */
-/*              -t   : Turn on syscall timing.                                */
-/*                                                                            */
-/* Total Tests: 1                                                             */
-/*                                                                            */
-/* Test Name:   socketpair02                                                  */
-/*                                                                            */
-/* Author:      Ulrich Drepper <drepper@redhat.com>                           */
-/*                                                                            */
-/* History:     Created - Jan 13 2009 - Ulrich Drepper <drepper@redhat.com>   */
-/*              Ported to LTP                                                 */
-/*                      - Jan 13 2009 - Subrata <subrata@linux.vnet.ibm.com>  */
-/******************************************************************************/
+/*
+* Copyright (c) Ulrich Drepper <drepper@redhat.com>
+* Copyright (c) International Business Machines  Corp., 2009
+*
+* This program is free software;  you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY;  without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+* the GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.
+*/
+
+/*
+* Test Name:	socketpair02
+*
+* Description:
+* This Program tests the new flag SOCK_CLOEXEC and SOCK_NONBLOCK introduced
+* in socketpair() in kernel 2.6.27.
+*/
+
+#include <errno.h>
 #include <fcntl.h>
 #include <pthread.h>
 #include <stdio.h>
@@ -52,108 +32,79 @@
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <sys/syscall.h>
+#include "tst_test.h"
+
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 02000000
+#endif
 
-#include "test.h"
+#ifndef SOCK_CLOEXEC
+#define SOCK_CLOEXEC O_CLOEXEC
+#endif
 
 #ifndef SOCK_NONBLOCK
 #define SOCK_NONBLOCK O_NONBLOCK
 #endif
 
-int TST_TOTAL = 2;
-char *TCID = "socketpair02";
-
-/* Extern Global Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    cleanup                                                       */
-/*                                                                            */
-/* Description: Performs all one time clean up for this test on successful    */
-/*              completion,  premature exit or  failure. Closes all temporary */
-/*              files, removes all temporary directories exits the test with  */
-/*              appropriate return code by calling tst_exit() function.       */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits calling tst_exit(). Non '0' return code.   */
-/*              On success - Exits calling tst_exit(). With '0' return code.  */
-/*                                                                            */
-/******************************************************************************/
-void cleanup(void)
-{
+static int fds[2];
 
-	tst_rmdir();
-}
+static struct tcase {
+	int type;
+	int flag;
+	int fl_flag;
+	char *des;
+} tcases[] = {
+	{SOCK_STREAM, 0, F_GETFD, "no close-on-exec"},
+	{SOCK_STREAM | SOCK_CLOEXEC, FD_CLOEXEC, F_GETFD, "close-on-exec"},
+	{SOCK_STREAM, 0, F_GETFL, "no non-blocking"},
+	{SOCK_STREAM | SOCK_NONBLOCK, O_NONBLOCK, F_GETFL, "non-blocking"}
+};
 
-/* Local  Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    setup                                                         */
-/*                                                                            */
-/* Description: Performs all one time setup for this test. This function is   */
-/*              typically used to capture signals, create temporary dirs      */
-/*              and temporary files that may be used in the course of this    */
-/*              test.                                                         */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits by calling cleanup().                      */
-/*              On success - returns 0.                                       */
-/*                                                                            */
-/******************************************************************************/
-void setup(void)
+static void verify_socketpair(unsigned int n)
 {
-	/* Capture signals if any */
-	/* Create temporary directories */
-	TEST_PAUSE;
-	tst_tmpdir();
-}
+	int res, i;
+	struct tcase *tc = &tcases[n];
 
-int main(int argc, char *argv[])
-{
-	int fds[2], fl, i;
+	TEST(socketpair(PF_UNIX, tc->type, 0, fds));
 
-	if ((tst_kvercmp(2, 6, 27)) < 0) {
-		tst_brkm(TCONF, NULL,
-			 "This test can only run on kernels that are 2.6.27 and higher");
-	}
-	setup();
+	if (TEST_RETURN == -1)
+		tst_brk(TFAIL | TTERRNO, "socketpair() failed");
 
-	if (socketpair(PF_UNIX, SOCK_STREAM, 0, fds) == -1) {
-		tst_brkm(TFAIL, cleanup, "socketpair(0) failed");
-	}
-	for (i = 0; i < ARRAY_SIZE(fds); i++) {
-		fl = fcntl(fds[i], F_GETFL);
-		if (fl == -1) {
-			tst_brkm(TBROK, cleanup, "fcntl failed");
-		}
-		if (fl & O_NONBLOCK) {
-			tst_brkm(TFAIL, cleanup,
-				 "socketpair(0) set non-blocking mode for fds[%d]",
-				 i);
-		}
-		close(fds[i]);
-	}
+	for (i = 0; i < 2; i++) {
+		res = SAFE_FCNTL(fds[i], tc->fl_flag);
 
-	if (socketpair(PF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0, fds) == -1) {
-		tst_brkm(TFAIL, cleanup, "socketpair(SOCK_NONBLOCK) failed");
-	}
-	for (i = 0; i < ARRAY_SIZE(fds); i++) {
-		fl = fcntl(fds[i], F_GETFL);
-		if (fl == -1) {
-			tst_brkm(TBROK, cleanup, "fcntl failed");
+		if (tc->flag != 0 && (res & tc->flag) == 0) {
+			tst_brk(TFAIL, "socketpair() failed to set %s flag for fds[%d]",
+				tc->des, i);
+			return;
 		}
-		if ((fl & O_NONBLOCK) == 0) {
-			tst_brkm(TFAIL, cleanup,
-				 "socketpair(SOCK_NONBLOCK) didn't set non-blocking "
-				 "mode for fds[%d]", i);
+
+		if (tc->flag == 0 && (res & tc->flag) != 0) {
+			tst_brk(TFAIL, "socketpair() failed to set %s flag for fds[%d]",
+				tc->des, i);
+			return;
 		}
-		close(fds[i]);
 	}
-	tst_resm(TPASS, "socketpair(SOCK_NONBLOCK) PASSED");
-	cleanup();
-	tst_exit();
+
+	tst_res(TPASS, "socketpair() passed to set %s flag", tc->des);
+
+	SAFE_CLOSE(fds[0]);
+	SAFE_CLOSE(fds[1]);
 }
+
+static void cleanup(void)
+{
+	if (fds[0] > 0 && close(fds[0]))
+		tst_res(TWARN | TERRNO, "failed to close file");
+
+	if (fds[1] > 0 && close(fds[1]))
+		tst_res(TWARN | TERRNO, "failed to close file");
+}
+
+static struct tst_test test = {
+	.tid = "socketpair02",
+	.tcnt = ARRAY_SIZE(tcases),
+	.test = verify_socketpair,
+	.min_kver = "2.6.27",
+	.cleanup = cleanup
+};
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [LTP] [PATCH 1/4] syscalls/socket01: convert to new API
  2016-06-24  9:04 [LTP] [PATCH 1/4] syscalls/socket01: convert to new API Xiao Yang
                   ` (2 preceding siblings ...)
  2016-06-24  9:04 ` [LTP] [PATCH 4/4] syscalls/socketpair02: reconstruct and " Xiao Yang
@ 2016-07-25 16:21 ` Cyril Hrubis
  3 siblings, 0 replies; 8+ messages in thread
From: Cyril Hrubis @ 2016-07-25 16:21 UTC (permalink / raw)
  To: ltp

Hi!
I've traced down the kernel patch that changed the ESOCKTNOSUPPORT to
EPROTONOSUPPORT and changed the testcase to expect the only correct
errno EPROTONOSUPPORT from 2.6.16 on.

Pushed, thanks.

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [LTP] [PATCH 2/4] syscalls/socket02: reconstruct and convert to new API
  2016-06-24  9:04 ` [LTP] [PATCH 2/4] syscalls/socket02: reconstruct and " Xiao Yang
@ 2016-07-26 11:40   ` Cyril Hrubis
  0 siblings, 0 replies; 8+ messages in thread
From: Cyril Hrubis @ 2016-07-26 11:40 UTC (permalink / raw)
  To: ltp

Hi!
> -/* For Linux these must be the same.  */
>  #ifndef SOCK_CLOEXEC
>  #define SOCK_CLOEXEC O_CLOEXEC
>  #endif
>
> +#ifndef SOCK_NONBLOCK
> +#define SOCK_NONBLOCK O_NONBLOCK
> +#endif

I've moved these definitions to lapi/fcntl.h (so that we have only one
place that defines these) and pushed, thanks.

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [LTP] [PATCH 3/4] syscalls/socketpair01: convert to new API
  2016-06-24  9:04 ` [LTP] [PATCH 3/4] syscalls/socketpair01: " Xiao Yang
@ 2016-07-26 11:57   ` Cyril Hrubis
  0 siblings, 0 replies; 8+ messages in thread
From: Cyril Hrubis @ 2016-07-26 11:57 UTC (permalink / raw)
  To: ltp

Hi!
I've did the same changes as for the socket01.c, i.e. expecting exact
errno based on kernel version and also fixed the socketpair() return
value handling. It returns 0 on success, so for instance the file
descriptors were not closed in the verify function at all.

Pushed, thanks.

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [LTP] [PATCH 4/4] syscalls/socketpair02: reconstruct and convert to new API
  2016-06-24  9:04 ` [LTP] [PATCH 4/4] syscalls/socketpair02: reconstruct and " Xiao Yang
@ 2016-07-26 12:09   ` Cyril Hrubis
  0 siblings, 0 replies; 8+ messages in thread
From: Cyril Hrubis @ 2016-07-26 12:09 UTC (permalink / raw)
  To: ltp

Hi!
I've made use of the lapi/fcntl.h and removed the fallback definitions
and also changed the tst_brk() for tst_res() in the verify function
(otherwise the test would exit which does not seem to be the expected
behavior here as it was followed by return) and made sure the fds are
closed when failure is reported.

Pushed, thanks.

-- 
Cyril Hrubis
chrubis@suse.cz

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-07-26 12:09 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-24  9:04 [LTP] [PATCH 1/4] syscalls/socket01: convert to new API Xiao Yang
2016-06-24  9:04 ` [LTP] [PATCH 2/4] syscalls/socket02: reconstruct and " Xiao Yang
2016-07-26 11:40   ` Cyril Hrubis
2016-06-24  9:04 ` [LTP] [PATCH 3/4] syscalls/socketpair01: " Xiao Yang
2016-07-26 11:57   ` Cyril Hrubis
2016-06-24  9:04 ` [LTP] [PATCH 4/4] syscalls/socketpair02: reconstruct and " Xiao Yang
2016-07-26 12:09   ` Cyril Hrubis
2016-07-25 16:21 ` [LTP] [PATCH 1/4] syscalls/socket01: " Cyril Hrubis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.