[LTP] [PATCH v1 1/2] syscalls/socketcall02: Cleanup && rewrite to new API

Yang Xu xuyang2018.jy@cn.fujitsu.com
Mon Feb 10 04:26:07 CET 2020


> Also add EFAULT error test.
> 
> Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
> ---
>   .../kernel/syscalls/socketcall/socketcall02.c | 173 ++++--------------
>   1 file changed, 37 insertions(+), 136 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/socketcall/socketcall02.c b/testcases/kernel/syscalls/socketcall/socketcall02.c
> index 7574782ff..6a9d51f4e 100644
> --- a/testcases/kernel/syscalls/socketcall/socketcall02.c
> +++ b/testcases/kernel/syscalls/socketcall/socketcall02.c
> @@ -1,163 +1,64 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
>   /*
>    * Copyright (c) Wipro Technologies Ltd, 2002.  All Rights Reserved.
> + * Copyright (c) 2020 Yang Xu <xuyang2018.jy@cn.fujitsu.com>
> + * Author: Sowmya Adiga <sowmya.adiga@wipro.com>
>    *
> - * This program is free software; you can redistribute it and/or modify it
> - * under the terms of version 2 of the GNU General Public License as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it would be useful, but
> - * WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> - *
> - * You should have received a copy of the GNU General Public License along
> - * with this program; if not, write the Free Software Foundation, Inc.,
> - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> - *
> + * This is a error test for the socketcall(2) system call.
>    */
> -/**************************************************************************
> - *
> - *    TEST IDENTIFIER	: socketcall02
> - *
> - *    EXECUTED BY	: All user
> - *
> - *    TEST TITLE	: Error test for socketcall(2)
> - *
> - *    TEST CASE TOTAL	: 1
> - *
> - *    AUTHOR		: sowmya adiga<sowmya.adiga@wipro.com>
> - *
> - *    SIGNALS
> - *	Uses SIGUSR1 to pause before test if option set.
> - *	(See the parse_opts(3) man page).
> - *
> - *    DESCRIPTION
> - *	verify socketcall(2) returns -1 and sets errno
> - *	appropriately if argument passed is invalid.
> - *
> - *
> - *	Setup:
> - *	  Setup signal handling.
> - *	  Pause for SIGUSR1 if option specified.
> - *
> - *	Test:
> - *	  Loop if the proper option is given.
> - *	  Execute system call.
> - *	  Check return code, If system call failed (return == -1) &&
> - *				(errno set == expected errno)
> - *	  Issue sys call pass with expected error
> - *	  otherwise
> - *	  Issue sys call fails with unexpected error
> - *
> - *	Cleanup:
> - *	  Print errno log and/or timing stats if options given
> - *
> - * USAGE:  <for command-line>
> - *  socketcall02 [-c n] [-e] [-i n] [-I x] [-p x] [-t]
> - *		where,		-c n : Run n copies concurrently
> - *				-e   : Turn on errno logging.
> - *				-h   : Show this help screen
> - *				-i n : Execute test n times.
> - *				-I x : Execute test for x seconds.
> - *				-p   : Pause for SIGUSR1 before starting
> - *				-P x : Pause for x seconds between iterations.
> - *				-t   : Turn on syscall timing.
> - *
> - * RESTRICTIONS
> - * None
> - *****************************************************************************/
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <errno.h>
> -#include <sys/syscall.h>
> +
>   #include <unistd.h>
> +#include <errno.h>
>   #include <sys/types.h>
>   #include <sys/socket.h>
>   #include <linux/net.h>
>   #include <sys/un.h>
>   #include <netinet/in.h>
>   
> -#include "test.h"
> -
> -char *TCID = "socketcall02";
> -
> -#ifdef __NR_socketcall
> +#include "tst_test.h"
> +#include "lapi/syscalls.h"
>   
> -#define socketcall(call, args) syscall(__NR_socketcall, call, args)
> -
> -void setup();
> -void cleanup();
> -
> -int TST_TOTAL = 1;
> +static unsigned long args_valid[3] = {PF_INET, SOCK_STREAM, 0};
>   
>   struct test_case_t {
>   	int call;
> -	unsigned long args[3];
> -	int retval;
> -	int experrno;
> +	unsigned long *args;
> +	int exp_err;
>   	char *desc;
> -} TC = {
> -	-1, {
> -PF_INET, SOCK_STREAM, 0}, -1, EINVAL, "invalid call"};
> +} TC[] = {
> +	{0, args_valid, EINVAL, "invalid call(0)"},
"invalid call(<1)" is more correc.
> +	{21, args_valid, EINVAL, "invalid call(21)"},
"invalid call(>20)" is more correct.
> +	{SYS_SOCKET, NULL, EFAULT, "invalid args address"},
> +};
>   
> -int main(int ac, char **av)
> +static void verify_socketcall(unsigned int i)
>   {
> -	int lc;
> -
> -	tst_parse_opts(ac, av, NULL, NULL);
> -
> -	setup();
> -
> -	/* check looping state */
> -	for (lc = 0; TEST_LOOPING(lc); lc++) {
> +	tst_res(TINFO, "%s", TC[i].desc);
>   
> -		tst_count = 0;
> -
> -		TEST(socketcall(TC.call, TC.args));
> -
> -		/* check return code */
> -		if ((TEST_RETURN == -1)
> -		    && (TEST_ERRNO == TC.experrno)) {
> -			tst_resm(TPASS, "socketcall() failed"
> -				 " as expected for %s", TC.desc);
> -		} else {
> -			tst_brkm(TFAIL, NULL, "socketcall()"
> -				 " Failed with wrong experrno"
> -				 " =%d got: errno=%d : %s",
> -				 TC.experrno, TEST_ERRNO, strerror(TEST_ERRNO));
> -		}
> +	TEST(tst_syscall(__NR_socketcall, TC[i].call, TC[i].args));
> +	if (TST_RET != -1) {
> +		tst_res(TFAIL, "socketcall() succeeded unexpectedly");
> +		return;
>   	}
> -
> -	/* cleanup and exit */
> -	cleanup();
> -
> -	tst_exit();
> +	if (TST_ERR == TC[i].exp_err)
> +		tst_res(TPASS | TTERRNO, "socketcall() failed as expected ");
> +	else
> +		tst_res(TFAIL | TTERRNO, "socketcall fail expected %s got", tst_strerrno(TC[i].exp_err));
>   }
>   
> -/* setup() - performs all ONE TIME setup for this test. */
> -void setup(void)
> +static void setup(void)
>   {
> +	unsigned int i;
>   
> -	tst_sig(NOFORK, DEF_HANDLER, cleanup);
> -
> -	TEST_PAUSE;
> -}
> -
> -/*
> - * cleanup() - performs all ONE TIME cleanup for this test at
> - *		completion or premature exit.
> - */
> -void cleanup(void)
> -{
> +	for (i = 0; i < ARRAY_SIZE(TC); i++) {
> +		if (!TC[i].args)
> +			TC[i].args = tst_get_bad_addr(NULL);
> +	}
>   }
>   
> -#else
> -
> -int TST_TOTAL = 0;
> -
> -int main(void)
> -{
> -	tst_resm(TCONF, "socket call test on this architecture disabled.");
> -	tst_exit();
> -}
> +static struct tst_test test = {
> +	.setup = setup,
> +	.test = verify_socketcall,
> +	.tcnt = ARRAY_SIZE(TC),
> +};
>   
> -#endif
> 




More information about the ltp mailing list