public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: chrubis@suse.cz
To: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
Cc: ltp-list <ltp-list@lists.sourceforge.net>
Subject: Re: [LTP] [PATCH v2 1/2] fchownat/fchownat01.c: cleanup
Date: Tue, 25 Feb 2014 16:11:25 +0100	[thread overview]
Message-ID: <20140225151125.GA15595@rei> (raw)
In-Reply-To: <1393326701.1952.59.camel@G08JYZSD130126>

Hi!
>  #define _GNU_SOURCE
>  
> @@ -53,38 +33,40 @@
>  #include <errno.h>
>  #include <string.h>
>  #include <signal.h>
> +
>  #include "test.h"
>  #include "usctest.h"
> -#include "linux_syscall_numbers.h"
> -
> -#define TEST_CASES 6
> -#ifndef AT_FDCWD
> -#define AT_FDCWD -100
> -#endif

You should include the "lapi/fcntl.h" instead of the defines.

> -void setup();
> -void cleanup();
> -void setup_every_copy();
> +#include "safe_macros.h"
> +#include "fchownat.h"
> +
> +#define TESTFILE	"testfile"
> +#define TESTFILE2	"testfile2"
> +
> +static void setup(void);
> +static void cleanup(void);
> +
> +static int dirfd;
> +static int fd;
> +static int no_fd = -1;
> +static int cu_fd = AT_FDCWD;
> +
> +static struct test_case_t {
> +	int ret;
> +	int flag;
> +	int *fds;
> +	char *filenames;
> +} test_cases[] = {
> +	{0, 0, &dirfd, TESTFILE},
> +	{0, 0, &dirfd, TESTFILE2},

These test are identical, aren't they?

> +	{ENOTDIR, 0, &fd, TESTFILE},
> +	{EBADF, 0, &no_fd, TESTFILE},
> +	{EINVAL, 9999, &dirfd, TESTFILE},
> +	{0, 0, &cu_fd, TESTFILE},
> +};
>  
>  char *TCID = "fchownat01";
> -int TST_TOTAL = TEST_CASES;
> -char pathname[256];
> -char testfile[256];
> -char testfile2[256];
> -char testfile3[256];
> -int dirfd, fd, ret;
> -int fds[TEST_CASES];
> -char *filenames[TEST_CASES];
> -int expected_errno[TEST_CASES] = { 0, 0, ENOTDIR, EBADF, EINVAL, 0 };
> -int flags[TEST_CASES] = { 0, 0, 0, 0, 9999, 0 };
> -
> -uid_t uid;
> -gid_t gid;
> -
> -int myfchownat(int dirfd, const char *filename, uid_t owner, gid_t group,
> -	       int flags)
> -{
> -	return ltp_syscall(__NR_fchownat, dirfd, filename, owner, group, flags);
> -}
> +int TST_TOTAL = ARRAY_SIZE(test_cases);
> +static void fchownat_verify(const struct test_case_t *);
>  
>  int main(int ac, char **av)
>  {
> @@ -92,153 +74,67 @@ int main(int ac, char **av)
>  	char *msg;
>  	int i;
>  
> -	/* Disable test if the version of the kernel is less than 2.6.16 */
> -	if ((tst_kvercmp(2, 6, 16)) < 0) {
> -		tst_resm(TWARN, "This test can only run on kernels that are ");
> -		tst_resm(TWARN, "2.6.16 and higher");
> -		exit(0);
> -	}
> -
> -	/***************************************************************
> -	 * parse standard options
> -	 ***************************************************************/
>  	if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL)
>  		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
>  
> -	/***************************************************************
> -	 * perform global setup for test
> -	 ***************************************************************/
>  	setup();
>  
> -	/***************************************************************
> -	 * check looping state if -c option given
> -	 ***************************************************************/
>  	for (lc = 0; TEST_LOOPING(lc); lc++) {
> -		setup_every_copy();
> -
>  		tst_count = 0;
> -
> -		/*
> -		 * Call fchownat
> -		 */
> -		for (i = 0; i < TST_TOTAL; i++) {
> -			TEST(myfchownat
> -			     (fds[i], filenames[i], uid, gid, flags[i]));
> -
> -			/* check return code */
> -			if (TEST_ERRNO == expected_errno[i]) {
> -
> -				/***************************************************************
> -				 * only perform functional verification if flag set (-f not given)
> -				 ***************************************************************/
> -				if (STD_FUNCTIONAL_TEST) {
> -					/* No Verification test, yet... */
> -					tst_resm(TPASS,
> -						 "fchownat() returned the expected  errno %d: %s",
> -						 TEST_ERRNO,
> -						 strerror(TEST_ERRNO));
> -				}
> -			} else {
> -				TEST_ERROR_LOG(TEST_ERRNO);
> -				tst_resm(TFAIL,
> -					 "fchownat() Failed, errno=%d : %s",
> -					 TEST_ERRNO, strerror(TEST_ERRNO));
> -			}
> -		}
> -
> +		for (i = 0; i < TST_TOTAL; i++)
> +			fchownat_verify(&test_cases[i]);
>  	}
>  
> -	/***************************************************************
> -	 * cleanup and exit
> -	 ***************************************************************/
>  	cleanup();
> -
> -	return (0);
> +	tst_exit();
>  }
>  
> -void setup_every_copy()
> +static void setup(void)
>  {
> -	/* Initialize test dir and file names */
> -	sprintf(pathname, "fchownattestdir%d", getpid());
> -	sprintf(testfile, "fchownattestfile%d.txt", getpid());
> -	sprintf(testfile2, "/tmp/fchownattestfile%d.txt", getpid());
> -	sprintf(testfile3, "fchownattestdir%d/fchownattestfile%d.txt", getpid(),
> -		getpid());
> -
> -	ret = mkdir(pathname, 0700);
> -	if (ret < 0) {
> -		perror("mkdir: ");
> -		exit(-1);
> -	}
> +	if ((tst_kvercmp(2, 6, 16)) < 0)
> +		tst_brkm(TCONF, NULL, "This test needs kernel 2.6.16 or newer");
>  
> -	dirfd = open(pathname, O_DIRECTORY);
> -	if (dirfd < 0) {
> -		perror("open: ");
> -		exit(-1);
> -	}
> +	tst_sig(NOFORK, DEF_HANDLER, cleanup);
>  
> -	fd = open(testfile, O_CREAT | O_RDWR, 0600);
> -	if (fd < 0) {
> -		perror("open: ");
> -		exit(-1);
> -	}
> +	TEST_PAUSE;
>  
> -	fd = open(testfile2, O_CREAT | O_RDWR, 0600);
> -	if (fd < 0) {
> -		perror("open: ");
> -		exit(-1);
> -	}
> +	tst_tmpdir();
>  
> -	fd = open(testfile3, O_CREAT | O_RDWR, 0600);
> -	if (fd < 0) {
> -		perror("open: ");
> -		exit(-1);
> -	}
> +	dirfd = SAFE_OPEN(cleanup, "./", O_DIRECTORY);
>  
> -	fds[0] = fds[1] = fds[4] = dirfd;
> -	fds[2] = fd;
> -	fds[3] = 100;
> -	fds[5] = AT_FDCWD;
> +	SAFE_TOUCH(cleanup, TESTFILE, 0600, NULL);
>  
> -	filenames[0] = filenames[2] = filenames[3] = filenames[4] =
> -	    filenames[5] = testfile;
> -	filenames[1] = testfile2;
> +	SAFE_TOUCH(cleanup, TESTFILE2, 0600, NULL);
> +
> +	fd = SAFE_OPEN(cleanup, "testfile3", O_CREAT | O_RDWR, 0600);
>  }
>  
> -/***************************************************************
> - * setup() - performs all ONE TIME setup for this test.
> - ***************************************************************/
> -void setup()
> +static void fchownat_verify(const struct test_case_t *test)
>  {
> -	/* Set uid and gid */
> -	uid = geteuid();
> -	gid = getegid();
> -
> -	tst_sig(NOFORK, DEF_HANDLER, cleanup);
> -
> -	TEST_PAUSE;
> +	TEST(fchownat(*(test->fds), test->filenames, geteuid(),
> +		      getegid(), test->flag));

You are not checking the TEST_RETURN here as well. Given that there are
both possitive and negative testcases it should be 0 if expected errno
is 0 and -1 if expected errno is non-zero.


> +	if (TEST_ERRNO == test->ret) {

Can you also please rename the test->ret to test->exp_errno?

> +		tst_resm(TPASS | TTERRNO,
> +			 "fchownat() returned the expected errno %d: %s",
> +			 TEST_ERRNO, strerror(TEST_ERRNO));
> +	} else {
> +		TEST_ERROR_LOG(TEST_ERRNO);
> +		tst_resm(TFAIL | TTERRNO,
> +			 "fchownat() Failed, errno=%d : %s",
> +			 TEST_ERRNO, strerror(TEST_ERRNO));
> +	}
>  }
>  
> -/***************************************************************
> - * cleanup() - performs all ONE TIME cleanup for this test at
> - *		completion or premature exit.
> - ***************************************************************/
> -void cleanup()
> +static void cleanup(void)
>  {
> -	/* Remove them */
> -	char tmppathname[256];
> -	strcpy(tmppathname, pathname);
> -
> -	close(fd);
> -	unlink(testfile);
> -	unlink(testfile2);
> -	unlink(testfile3);
> -	rmdir(pathname);
> -
> -	/*
> -	 * print timing stats if that option was specified.
> -	 * print errno log if that option was specified.
> -	 */
> -	TEST_CLEANUP;
> +	if (fd > 0)
> +		close(fd);
> +
> +	if (dirfd > 0)
> +		close(dirfd);
>  
> +	tst_rmdir();
> +
> +	TEST_CLEANUP;
>  }
> -- 
> 1.8.4.2
> 
> 
> 

-- 
Cyril Hrubis
chrubis@suse.cz

------------------------------------------------------------------------------
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis & security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

  parent reply	other threads:[~2014-02-25 15:11 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-26  5:25 [LTP] [PATCH] fchownat/fchownat01.c: cleanup zenglg.jy
2013-12-10 13:17 ` chrubis
     [not found]   ` <129748009.2529202.1386682206895.JavaMail.root@redhat.com>
2013-12-10 13:46     ` chrubis
     [not found]   ` <1393326701.1952.59.camel@G08JYZSD130126>
2014-02-25 15:11     ` chrubis [this message]
     [not found]     ` <1393326785.1952.61.camel@G08JYZSD130126>
2014-02-25 15:45       ` [LTP] [PATCH v2 2/2] fchownat/fchownat02.c: add a new test chrubis
     [not found]         ` <1393407258.2066.5.camel@G08JYZSD130126>
2014-02-26 12:41           ` [LTP] [PATCH v3 1/3] include/safe_macros.h: fix mistakes chrubis
     [not found]           ` <1393407370.2066.7.camel@G08JYZSD130126>
2014-02-26 12:41             ` [LTP] [PATCH v3 3/3] fchownat/fchownat02.c: add a new test chrubis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140225151125.GA15595@rei \
    --to=chrubis@suse.cz \
    --cc=ltp-list@lists.sourceforge.net \
    --cc=zenglg.jy@cn.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox