All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP
@ 2009-06-12 17:51 Manas Kumar Nayak
  2009-06-12 17:51 ` [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall Manas Kumar Nayak
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: Manas Kumar Nayak @ 2009-06-12 17:51 UTC (permalink / raw)
  To: LTP List; +Cc: Manas Kumar Nayak

Hi,

As promised earlier, here lies the final bunch of test cases from
Crackerjack. I would however keep contributing new tests to LTP.

>On Wed, 2009-05-27 at 15:36 +0530, Manas Kumar Nayak wrote:
>Hi,
> 
> >On Tue, 2009-05-19 at 00:39 +0530, Manas Kumar Nayak wrote:
> >Hi,
> > 
> > I have ported the following tests from Crackerjack to LTP.
> > Kindly include them to LTP:
> > 
> > [PATCH 01/21] Add add_key01 test for add_key syscall
> > [PATCH 02/21] Add add_key02 test for add_key syscall
> > [PATCH 03/21] Add bdflush01 test for bdflush syscall
> > [PATCH 04/21] Add exit_group01 test for exit_group syscall
> > [PATCH 05/21] Add keyctl01 test for keyctl syscall
> > [PATCH 06/21] Add newuname01 test for newuname syscall
> > [PATCH 07/21] Add rt_sigaction01 test for rt_sigaction syscall
> > [PATCH 08/21] Add rt_sigprocmask01 test for rt_sigprocmask syscall
> > [PATCH 09/21] Add rt_sigprocmask02 test for rt_sigprocmask syscall
> > [PATCH 10/21] Add rt_sigqueueinfo01 test for rt_sigqueueinfo syscall
> > [PATCH 11/21] Add rt_sigsuspend01 test for rt_sigsuspend syscall
> > [PATCH 12/21] Add set_thread_area01 test for set_thread_area syscall
> > [PATCH 13/21] Add set_thread_area02 test for set_thread_area syscall
> > [PATCH 14/21] Add set_tid_address01 test for set_tid_address syscall
> > [PATCH 15/21] Add sgetmask01 test for sgetmask syscall
> > [PATCH 16/21] Add sigreturn01 test for sigreturn syscall
> > [PATCH 17/21] Add ssetmask01 test for ssetmask syscall
> > [PATCH 18/21] Add timer_getoverrun01 test for timer_getoverrun01 syscall
> > [PATCH 19/21] Add timer_gettime01 test for timer_gettime syscall
> > [PATCH 20/21] Add tkill01 test for tkill syscall
> > [PATCH 21/21] Add tkill02 test for tkill syscall
> > 
> > Todo:
> > 	1) Port the Remaining ones (next week),
> 
> As promised earlier, here remains the 2nd Bunch of tests ported
> from Crackerjack to LTP:
> 
> __001_Add_Utility_Headers_for_these_set_of_tests.patch
> __002_Add_get_mempolicy01_test_for_get_mempolicy_syscall.patch
> __003_Add_clock_getres01_test_for_clock_getres_syscall.patch
> __004_Add_clock_nanosleep01_test_for_clock_nanosleep_syscall.patch
> __005_Add_mq_notify01_test_for_mq_notify_syscall.patch
> __006_Add_ppoll01_test_for_ppoll_syscall.patch
> __007_Add_mq_open01_test_for_mq_open_syscall.patch
> __008_Add_mq_timedreceive01_test_for_mq_timedreceive_syscall.patch
> __009_Add_utimes01_test_for_utimes_syscall.patch
> __010_Add_mq_unlink01_test_for_mq_unlink_syscall.patch
> __011_Add_mq_timedsend01_test_for_mq_timedsend_syscall.patch
> __012_Add_unshare01_test_for_unshare_syscall.patch
> __013_Add_unshare02_test_for_unshare_syscall.patch
> 
> Still TODO:
> -> The remaining testcases will be ported soon.

[PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP
[PATCH 01/05] Add/Port mbind01 test for mbind() syscall
[PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall
[PATCH 03/05] Add/Port waitid01 test for waitid() syscall
[PATCH 04/05] Add/Port waitid02 test for waitid() syscall
[PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall

Regards--
Manas

> 
> Regards--
> Manas
> 
> > 
> > Regards--
> > Manas
> > 

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall
  2009-06-12 17:51 [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Manas Kumar Nayak
@ 2009-06-12 17:51 ` Manas Kumar Nayak
  2009-06-15 19:15   ` Subrata Modak
  2009-06-15 19:15   ` Subrata Modak
  2009-06-12 17:52 ` [LTP] [PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall Manas Kumar Nayak
                   ` (4 subsequent siblings)
  5 siblings, 2 replies; 14+ messages in thread
From: Manas Kumar Nayak @ 2009-06-12 17:51 UTC (permalink / raw)
  To: LTP List; +Cc: Manas Kumar Nayak

Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>
To: LTP List <ltp-list@lists.sourceforge.net>
Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
Cc: Masatake YAMATO <yamato@redhat.com>
---

--- ltp-full-20090531.orig/testcases/kernel/syscalls/mbind/Makefile	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/mbind/Makefile	2009-06-12 16:30:33.000000000 +0530
@@ -0,0 +1,31 @@
+#
+#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+CFLAGS += -I../../../../include -I../utils/ -Wall -O2
+LDLIBS += -L../../../../lib -lltp
+
+SRCS    = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS))
+
+all: $(TARGETS)
+
+install:
+	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+	rm -f $(TARGETS)
--- ltp-full-20090531.orig/testcases/kernel/syscalls/mbind/mbind01.c	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/mbind/mbind01.c	2009-06-12 16:58:30.000000000 +0530
@@ -0,0 +1,415 @@
+/******************************************************************************/
+/* Copyright (c) Crackerjack Project., 2007-2008                              */
+/* Author(s): Takahiro Yasui <takahiro.yasui.mp@hitachi.com>,		      */
+/*            Yumiko Sugita <yumiko.sugita.yf@hitachi.com>,		      */
+/*            Satoshi Fujiwara <sa-fuji@sdl.hitachi.co.jp>  		      */
+/*                                                                            */
+/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
+/*                                                                            */
+/******************************************************************************/
+/******************************************************************************/
+/*                                                                            */
+/* File:        mbind01.c                                           */
+/*                                                                            */
+/* Description: This tests the mbind() syscall                      */
+/*                                                                            */
+/* Usage:  <for command-line>                                                 */
+/* mbind01 [-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:   mbind01                                             */
+/* History:     Porting from Crackerjack to LTP is done by                    */
+/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
+/******************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <getopt.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "numaif.h"
+#include "include_j_h.h"
+
+/* Harness Specific Include Files. */
+#include "test.h"
+#include "usctest.h"
+#include "linux_syscall_numbers.h"
+
+/* Extern Global Variables */
+extern int Tst_count;           /* counter for tst_xxx routines.         */
+extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
+
+/* Global Variables */
+char *TCID = "mbind01";  /* Test program identifier.*/
+int  testno;
+int  TST_TOTAL = 2;                   /* total number of tests in this file.   */
+
+/* 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.  */
+/*                                                                            */
+/******************************************************************************/
+extern void cleanup() {
+        /* Remove tmp dir and all files in it */
+        TEST_CLEANUP;
+        tst_rmdir();
+
+        /* Exit with appropriate return code. */
+        tst_exit();
+}
+
+/* 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() {
+        /* Capture signals if any */
+        /* Create temporary directories */
+        TEST_PAUSE;
+        tst_tmpdir();
+}
+
+int sig_count = 0;
+
+void sig_action(int sig) {
+        sig_count = 1;
+}
+
+/*
+ * Macros
+ */
+#define SYSCALL_NAME    "mbind"
+
+/*
+ * Global variables
+ */
+static int opt_debug;
+static char *progname;
+
+enum test_type {
+        NORMAL,
+        INVALID_POINTER,
+};
+
+enum from_node {
+        NONE,
+        SELF,
+};
+
+/*
+ * Data Structure
+ */
+struct test_case {
+        int ttype;
+        int policy;
+        int from_node;
+        unsigned flags;
+        int ret;
+        int err;
+};
+
+/* Test cases
+ *
+ *   test status of errors on man page
+ *
+ *   EFAULT             v (detect unmapped hole or invalid pointer)
+ *   EINVAL             v (invalid arguments)
+ *   ENOMEM             can't check because it's difficult to create no-memory
+ *   EIO                can't check because we don't have N-node NUMA system
+ *                      (only we can do is simulate 1-node NUMA)
+ */
+
+static struct test_case tcase[] = {
+        { // case00
+                .policy         = MPOL_DEFAULT,
+                .from_node      = NONE,
+                .ret            = 0,
+                .err            = 0,
+        },
+        { // case01
+                .policy         = MPOL_DEFAULT,
+                .from_node      = SELF, // target exists
+                .ret            = -1,
+                .err            = EINVAL,
+        },
+        { // case02
+                .policy         = MPOL_BIND,
+                .from_node      = NONE, // no target
+                .ret            = -1,
+                .err            = EINVAL,
+        },
+	{ // case03
+                .policy         = MPOL_BIND,
+                .from_node      = SELF,
+                .ret            = 0,
+                .err            = 0,
+        },
+        { // case04
+                .policy         = MPOL_INTERLEAVE,
+                .from_node      = NONE, // no target
+                .ret            = -1,
+                .err            = EINVAL,
+        },
+        { // case05
+                .policy         = MPOL_INTERLEAVE,
+                .from_node      = SELF,
+                .ret            = 0,
+                .err            = 0,
+        },
+        { // case06
+                .policy         = MPOL_PREFERRED,
+                .from_node      = NONE,
+                .ret            = 0,
+                .err            = 0,
+        },
+        { // case07
+                .policy         = MPOL_PREFERRED,
+                .from_node      = SELF,
+                .ret            = 0,
+                .err            = 0,
+	},
+        { // case08
+                .policy         = -1, // unknown policy
+                .from_node      = NONE,
+                .ret            = -1,
+                .err            = EINVAL,
+        },
+        { // case09
+                .policy         = MPOL_DEFAULT,
+                .from_node      = NONE,
+                .flags          = -1, // invalid flags
+                .ret            = -1,
+                .err            = EINVAL,
+        },
+        { // case10
+                .ttype          = INVALID_POINTER,
+                .policy         = MPOL_DEFAULT,
+                .from_node      = NONE,
+                .ret            = -1,
+                .err            = EFAULT,
+        },
+};
+
+#define MEM_LENGTH              (4 * 1024 * 1024)
+/*
+ * do_test()
+ *
+ *   Input  : TestCase Data
+ *   Return : RESULT_OK(0), RESULT_NG(1)
+ *
+ */
+
+static int do_test(struct test_case *tc) {
+        int sys_ret;
+        int sys_errno;
+        int result = RESULT_OK;
+        int rc, policy, cmp_ok = 1;
+        char *p = NULL;
+        nodemask_t nodemask, getnodemask;
+        unsigned long maxnode = NUMA_NUM_NODES;
+        unsigned long len = MEM_LENGTH;
+
+        /* We assume that there is only one node(node0). */
+        nodemask_zero(&nodemask);
+        nodemask_set(&nodemask, 0);
+        nodemask_zero(&getnodemask);
+
+        /*
+         * mmap memory
+         */
+        p = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,0, 0);
+        if (p == (void*)-1) {
+		tst_resm(TFAIL, "malloc failed - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
+		cleanup();
+                tst_exit();
+        }
+        if(tc->ttype == INVALID_POINTER)
+                p = (char*)0xc0000000;
+/*
+         * Execute system call
+         */
+        errno = 0;
+        if (tc->from_node == NONE)
+                TEST(sys_ret = syscall(__NR_mbind, p, len, tc->policy,NULL, 0, tc->flags));
+        else
+                TEST(sys_ret = syscall(__NR_mbind, p, len, tc->policy,&nodemask, maxnode, tc->flags));
+        sys_errno = errno;
+        if (sys_ret < 0)
+                goto TEST_END;
+
+        /*
+         * Check policy of the allocated memory
+         */
+        TEST(rc = syscall(__NR_get_mempolicy, &policy, &getnodemask, maxnode,p, MPOL_F_ADDR));
+        if (rc < 0) {
+		tst_resm(TFAIL, "get_mempolicy failed - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
+                result = 1;
+                tst_exit();
+        }
+
+// When policy equals MPOL_DEFAULT, then get_mempolicy not return node
+        if (tc->policy == MPOL_DEFAULT)
+		nodemask_zero(&nodemask);
+	cmp_ok = ((tc->policy == policy) && nodemask_equal(&nodemask,&getnodemask));
+        if (opt_debug) {
+		nodemask_dump("nodemask Expect:", &nodemask);
+		nodemask_dump("nodemask Result:", &getnodemask);
+		tst_resm(TINFO,"policy E:%d R:%d", tc->policy, policy);
+        }
+
+
+TEST_END:
+        /*
+         * Check results
+         */
+        result |= ((sys_errno != tc->err) || (!cmp_ok));
+        PRINT_RESULT_CMP(0, tc->ret, tc->err, sys_ret, sys_errno, cmp_ok);
+        return result;
+}
+
+/*
+ * usage()
+ */
+static void usage(char *progname) {
+	tst_resm(TINFO,"usage: %s [options]", progname);
+	tst_resm(TINFO,"This is a regression test program of %s system call.",SYSCALL_NAME);
+	tst_resm(TINFO,"options:");
+	tst_resm(TINFO,"    -d --debug           Show debug messages");
+        tst_resm(TINFO,"    -h --help            Show this message");
+	tst_resm(TINFO,"NG");
+        exit(1);
+}
+
+
+
+
+
+int main(int ac, char **av) {
+	int result = 0;
+	int lc, i;                 /* loop counter */
+	char *msg;              /* message returned from parse_opts */
+
+	struct option long_options[] = {
+                { "debug", no_argument, 0, 'd' },
+                { "help",  no_argument, 0, 'h' },
+                { NULL, 0, NULL, 0 }
+	};
+	
+        /* parse standard options */
+	if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
+		tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
+		tst_exit();
+	}
+
+        setup();
+
+	progname = strchr(av[0],'/');
+	progname = (progname ? progname + 1 : av[0]);
+
+        /* Check looping state if -i option given */
+        for (lc = 0; TEST_LOOPING(lc); ++lc) {
+                Tst_count = 0;
+                for (testno = 0; testno < TST_TOTAL; ++testno) {
+			TEST(getopt_long(ac, av, "dh", long_options, NULL));
+			while (TEST_RETURN != -1){
+				switch(TEST_RETURN) {
+				case 'd':
+					opt_debug = 1;
+					break;
+				default:
+					usage(progname);
+				}
+			} /* end of while */
+			if(ac != optind) {
+				tst_resm(TFAIL, "Options are not match - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
+				usage(progname);
+				cleanup();
+				tst_exit();
+        		}
+			
+			/*
+		         * Execute test
+		         */
+        		for (i = 0; i < (int)(sizeof(tcase) / sizeof(tcase[0])); i++) {
+        		        int ret;
+	        	        tst_resm(TINFO,"(case%02d) START", i);
+        	        	ret = do_test(&tcase[i]);
+	        	        tst_resm(TINFO,"(case%02d) END => %s", i, ( TEST_RETURN== 0) ? "OK" : "NG");
+	                	result |= ret;
+        		}
+
+			 /*
+		         * Check results
+		         */
+		        switch(result) {
+        		case RESULT_OK:
+					tst_resm(TPASS, "mbind call succeeded --OK-- ");
+
+		        default:
+                		tst_resm(TFAIL, "%s failed - errno = %d : %s --NG--", TCID, TEST_ERRNO, strerror(TEST_ERRNO));
+				cleanup();
+				tst_exit();
+		        }
+
+
+                }
+        }	
+        cleanup();
+	tst_exit();
+}
+
--- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 16:11:03.000000000 +0530
+++ ltp-full-20090531/runtest/syscalls	2009-06-12 16:59:58.000000000 +0530
@@ -506,6 +506,8 @@ lstat03_64 lstat03_64
 
 mallopt01 mallopt01
 
+mbind01 mbind01
+
 memset01 memset01
 memcmp01 memcmp01
 memcpy01 memcpy01

---
Regards--
Manas


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* [LTP] [PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall
  2009-06-12 17:51 [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Manas Kumar Nayak
  2009-06-12 17:51 ` [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall Manas Kumar Nayak
@ 2009-06-12 17:52 ` Manas Kumar Nayak
  2009-06-15 19:16   ` Subrata Modak
  2009-06-12 17:52 ` [LTP] [PATCH 03/05] Add/Port waitid01 test for waitid() syscall Manas Kumar Nayak
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Manas Kumar Nayak @ 2009-06-12 17:52 UTC (permalink / raw)
  To: LTP List; +Cc: Manas Kumar Nayak

Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>
To: LTP List <ltp-list@lists.sourceforge.net>
Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
Cc: Masatake YAMATO <yamato@redhat.com>
---

--- ltp-full-20090531.orig/testcases/kernel/syscalls/sched_getaffinity/Makefile	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/sched_getaffinity/Makefile	2009-03-29 16:54:46.000000000 +0530
@@ -0,0 +1,31 @@
+#
+#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+CFLAGS += -I../../../../include -Wall
+LDLIBS += -L../../../../lib -lltp
+
+SRCS    = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS))
+
+all: $(TARGETS)
+
+install:
+	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+	rm -f $(TARGETS)
--- ltp-full-20090531.orig/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c	2009-06-12 20:57:03.000000000 +0530
@@ -0,0 +1,197 @@
+/******************************************************************************/
+/* Copyright (c) Crackerjack Project., 2007                                   */
+/*                                                                            */
+/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
+/*                                                                            */
+/******************************************************************************/
+/******************************************************************************/
+/*                                                                            */
+/* File:        sched_getaffinity01.c                                         */
+/*                                                                            */
+/* Description: This tests the sched_getaffinity() syscall                    */
+/*                                                                            */
+/* Usage:  <for command-line>                                                 */
+/* sched_getaffinity01 [-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:   sched_getaffinity01                                           */
+/* History:     Porting from Crackerjack to LTP is done by                    */
+/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
+/******************************************************************************/
+#include<stdlib.h>
+#include<stdio.h>
+#include<sys/types.h>
+#include<unistd.h>
+#define _GNU_SOURCE 
+#define __USE_GNU
+#include<sched.h>
+#include<string.h>
+#include <errno.h>
+
+/* Harness Specific Include Files. */
+#include "test.h"
+#include "usctest.h"
+#include "linux_syscall_numbers.h"
+
+/* Extern Global Variables */
+extern int Tst_count;           /* counter for tst_xxx routines.         */
+extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
+
+/* Global Variables */
+char *TCID = "sched_getaffinity01";  /* Test program identifier.*/
+int  testno;
+int  TST_TOTAL = 1;                   /* total number of tests in this file.   */
+
+/* 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.  */
+/*                                                                            */
+/******************************************************************************/
+extern void cleanup() {
+        /* Remove tmp dir and all files in it */
+        TEST_CLEANUP;
+        tst_rmdir();
+
+        /* Exit with appropriate return code. */
+        tst_exit();
+}
+
+/* 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() {
+        /* Capture signals if any */
+        /* Create temporary directories */
+        TEST_PAUSE;
+        tst_tmpdir();
+}
+
+int errnochoose(void)  // choose the relative errno
+{
+        switch errno
+        {
+                case EFAULT: 
+			perror("EFAULT");
+                        break;
+                case EINVAL: perror("EINVAL");
+                        break;
+                case EPERM: perror("EPERM");
+                        break;
+                case ESRCH: perror("ESRCH");
+                        break;
+                default: perror("other errno");
+                        break;
+        }
+        return 0 ;
+}
+
+
+int main(int ac, char **av) {
+        int lc,num,i;                 /* loop counter */
+        char *msg;              /* message returned from parse_opts */
+	cpu_set_t mask;
+	unsigned int len = sizeof(cpu_set_t);
+
+	
+        /* parse standard options */
+        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
+             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
+             tst_exit();
+           }
+
+        setup();
+
+	TEST(num=sysconf(_SC_NPROCESSORS_CONF));  //the number of processor(s)
+        tst_resm(TINFO,"system has %d processor(s).", num);
+
+        /* Check looping state if -i option given */
+        for (lc = 0; TEST_LOOPING(lc); ++lc) {
+                Tst_count = 0;
+                for (testno = 0; testno < TST_TOTAL; ++testno) {
+                     TEST(sched_getaffinity(0,len,(cpu_set_t *)-1));     //call sched_getaffinity()
+                     if(TEST_RETURN == -1) {
+			errnochoose();
+                     }
+		
+                     TEST(sched_getaffinity(0,0,&mask));     //call sched_getaffinity()
+                     if(TEST_RETURN == -1) {
+			errnochoose();
+                     }
+
+                     TEST(sched_getaffinity(getpid()+1,len,&mask));     //call sched_getaffinity()
+                     if(TEST_RETURN == -1) {
+			errnochoose();
+                     }
+			
+		     CPU_ZERO(&mask); //clear
+                     TEST(sched_getaffinity(0,len,&mask));     //call sched_getaffinity()
+		     if(TEST_RETURN == -1) {
+                 	   tst_resm(TFAIL, "%s failed -could not get cpu affinity errno = %d : %s", TCID, TEST_ERRNO, strerror(TEST_ERRNO));
+			errnochoose();
+			cleanup();
+			tst_exit();
+                     } else {
+				tst_resm(TINFO,"cpusetsize is %d cpu_set_t mask is %d",len,mask);
+				tst_resm(TINFO,"mask.__bits[0] = %lu ",mask.__bits[0]);
+				for(i=0;i<num;i++){    // check the processor
+	                        	TEST(CPU_ISSET(i,&mask));
+					if (TEST_RETURN != -1 ){
+                                	tst_resm(TPASS,"sched_getaffinity() succeed ,this process %d is running processor: %d",getpid(), i);
+					}
+			        }
+	                    }
+
+
+                     }
+		}
+        cleanup();
+	tst_exit();
+}
+
--- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:02:30.000000000 +0530
+++ ltp-full-20090531/runtest/syscalls	2009-06-12 20:58:25.000000000 +0530
@@ -837,6 +837,8 @@ sched_setscheduler02 sched_setscheduler0
 
 sched_yield01 sched_yield01
 
+sched_getaffinity01 sched_getaffinity01
+
 select01 select01
 select02 select02
 select03 select03

---
Regards--
Manas


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* [LTP] [PATCH 03/05] Add/Port waitid01 test for waitid() syscall
  2009-06-12 17:51 [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Manas Kumar Nayak
  2009-06-12 17:51 ` [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall Manas Kumar Nayak
  2009-06-12 17:52 ` [LTP] [PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall Manas Kumar Nayak
@ 2009-06-12 17:52 ` Manas Kumar Nayak
  2009-06-15 19:16   ` Subrata Modak
  2009-06-12 17:52 ` [LTP] [PATCH 04/05] Add/Port waitid02 " Manas Kumar Nayak
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Manas Kumar Nayak @ 2009-06-12 17:52 UTC (permalink / raw)
  To: LTP List; +Cc: Manas Kumar Nayak

Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>
To: LTP List <ltp-list@lists.sourceforge.net>
Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
Cc: Masatake YAMATO <yamato@redhat.com>
---

--- ltp-full-20090531.orig/testcases/kernel/syscalls/waitid/Makefile	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/waitid/Makefile	2009-06-12 15:49:28.000000000 +0530
@@ -0,0 +1,31 @@
+#
+#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+CFLAGS += -I../../../../include -Wall 
+LDLIBS += -L../../../../lib -lltp
+
+SRCS    = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS))
+
+all: $(TARGETS)
+
+install:
+	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+	rm -f $(TARGETS)
--- ltp-full-20090531.orig/testcases/kernel/syscalls/waitid/waitid01.c	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/waitid/waitid01.c	2009-06-12 21:21:13.000000000 +0530
@@ -0,0 +1,204 @@
+/******************************************************************************/
+/* Copyright (c) Crackerjack Project., 2007                                   */
+/*                                                                            */
+/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
+/*                                                                            */
+/******************************************************************************/
+/******************************************************************************/
+/*                                                                            */
+/* File:        waitid01.c                                                    */
+/*                                                                            */
+/* Description: This tests the waitid() syscall                               */
+/*                                                                            */
+/* Usage:  <for command-line>                                                 */
+/* waitid01 [-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:   waitid01                                                      */
+/* History:     Porting from Crackerjack to LTP is done by                    */
+/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
+/******************************************************************************/
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+/* Harness Specific Include Files. */
+#include "test.h"
+#include "usctest.h"
+#include "linux_syscall_numbers.h"
+
+/* Extern Global Variables */
+extern int Tst_count;           /* counter for tst_xxx routines.         */
+extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
+
+/* Global Variables */
+char *TCID = "waitid01";  /* Test program identifier.*/
+int  testno;
+int  TST_TOTAL = 3;                   /* total number of tests in this file.   */
+
+/* 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.  */
+/*                                                                            */
+/******************************************************************************/
+extern void cleanup() {
+        /* Remove tmp dir and all files in it */
+        TEST_CLEANUP;
+        tst_rmdir();
+
+        /* Exit with appropriate return code. */
+        tst_exit();
+}
+
+/* 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() {
+        /* Capture signals if any */
+        /* Create temporary directories */
+        TEST_PAUSE;
+        tst_tmpdir();
+}
+
+
+int errnochoose(void){   //choose the relative errno
+
+    switch (TEST_ERRNO){
+        case    0:      tst_exit();
+        case    ECHILD: strerror((int)"ECHILD");
+        	        break;
+        case    EINTR:  strerror((int)"EINTR");
+                	break;
+        case    EINVAL: strerror((int)"EINVAL");
+                	break;
+        default:     strerror((int)"Other Error");
+                     break;
+   }
+        TEST_RETURN = 0;
+        tst_exit() ;
+}
+
+void display_status(siginfo_t *infop)
+{
+        tst_resm(TINFO,"Process %d terminated:", infop->si_pid);
+        tst_resm(TINFO,"code = %d",infop->si_code);
+        if(infop->si_code == CLD_EXITED)
+                tst_resm(TINFO,"exit value = %d",infop->si_status);
+        else
+		tst_resm(TINFO,"signal = %d",infop->si_status);
+}
+
+int main(int ac, char **av) {
+	id_t pid;
+        siginfo_t infop;
+        int lc;                 /* loop counter */
+        char *msg;              /* message returned from parse_opts */
+	
+        /* parse standard options */
+        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
+             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
+             tst_exit();
+           }
+
+        setup();
+
+        /* Check looping state if -i option given */
+        for (lc = 0; TEST_LOOPING(lc); ++lc) {
+                Tst_count = 0;
+                for (testno = 0; testno < TST_TOTAL; ++testno) {
+                     
+	TEST(fork());
+	if(TEST_RETURN == 0){
+                exit(123);
+        }
+        else{
+                TEST(waitid(P_ALL,getpid(),&infop,WEXITED));
+		if(TEST_RETURN == -1){
+                        TEST(errnochoose());
+		}else 
+		    display_status(&infop); //CLD_EXITED = 1
+        }
+
+        TEST(fork());
+        if(TEST_RETURN == 0){
+		int a, b = 0;
+                a = 1/b;
+                tst_exit();
+        } else{
+                TEST(waitid(P_ALL,0,&infop,WEXITED));
+		if(TEST_RETURN == -1)
+                        TEST(errnochoose());
+                else
+			display_status(&infop); //CLD_DUMPED = 3 ; SIGFPE = 8
+        }
+
+        TEST(pid = fork());
+	if(TEST_RETURN == 0){
+                TEST(sleep(10));
+                tst_exit();
+        }
+        TEST(kill(pid,SIGHUP));
+        TEST(waitid(P_ALL,0,&infop,WEXITED));
+	if(TEST_RETURN == -1)
+                TEST(errnochoose());
+        else 
+		display_status(&infop); //CLD_KILLED = 2 ; SIGHUP = 1
+                }
+        }	
+        tst_resm(TPASS, "waitid(): system call passed");
+	cleanup();
+        tst_exit();
+}
+
--- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:08:46.000000000 +0530
+++ ltp-full-20090531/runtest/syscalls	2009-06-12 21:22:40.000000000 +0530
@@ -1271,6 +1271,8 @@ waitpid11 waitpid11
 waitpid12 waitpid12
 waitpid13 waitpid13
 
+waitid01 waitid01
+
 write01 write01
 write02 write02
 write03 write03

---
Regards--
Manas

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* [LTP] [PATCH 04/05] Add/Port waitid02 test for waitid() syscall
  2009-06-12 17:51 [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Manas Kumar Nayak
                   ` (2 preceding siblings ...)
  2009-06-12 17:52 ` [LTP] [PATCH 03/05] Add/Port waitid01 test for waitid() syscall Manas Kumar Nayak
@ 2009-06-12 17:52 ` Manas Kumar Nayak
  2009-06-15 19:16   ` Subrata Modak
  2009-06-15 19:16   ` Subrata Modak
  2009-06-12 17:52 ` [LTP] [PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall Manas Kumar Nayak
  2009-06-15 19:15 ` [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Subrata Modak
  5 siblings, 2 replies; 14+ messages in thread
From: Manas Kumar Nayak @ 2009-06-12 17:52 UTC (permalink / raw)
  To: LTP List; +Cc: Manas Kumar Nayak

Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>
To: LTP List <ltp-list@lists.sourceforge.net>
Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
Cc: Masatake YAMATO <yamato@redhat.com>
---

--- ltp-full-20090531.orig/testcases/kernel/syscalls/waitid/waitid02.c	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/waitid/waitid02.c	2009-06-12 21:38:01.000000000 +0530
@@ -0,0 +1,222 @@
+/******************************************************************************/
+/* Copyright (c) Crackerjack Project., 2007                                   */
+/*                                                                            */
+/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
+/*                                                                            */
+/******************************************************************************/
+/******************************************************************************/
+/*                                                                            */
+/* File:        waitid02.c                                           	      */
+/*                                                                            */
+/* Description: This tests the waitid() syscall                               */
+/*                                                                            */
+/* Usage:  <for command-line>                                                 */
+/* waitid02 [-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:   waitid02                                                      */
+/* History:     Porting from Crackerjack to LTP is done by                    */
+/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
+/******************************************************************************/
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+/* Harness Specific Include Files. */
+#include "test.h"
+#include "usctest.h"
+#include "linux_syscall_numbers.h"
+
+/* Extern Global Variables */
+extern int Tst_count;           /* counter for tst_xxx routines.         */
+extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
+
+/* Global Variables */
+char *TCID = "waitid02";  /* Test program identifier.*/
+int  testno;
+int  TST_TOTAL = 7;                   /* total number of tests in this file.   */
+
+/* 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.  */
+/*                                                                            */
+/******************************************************************************/
+extern void cleanup() {
+        /* Remove tmp dir and all files in it */
+        TEST_CLEANUP;
+        tst_rmdir();
+
+        /* Exit with appropriate return code. */
+        tst_exit();
+}
+
+/* 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() {
+        /* Capture signals if any */
+        /* Create temporary directories */
+        TEST_PAUSE;
+        tst_tmpdir();
+}
+
+
+int errnochoose(void){   //choose the relative errno
+
+    switch (TEST_ERRNO){
+        case    0:      tst_exit();
+        case    ECHILD:  strerror((int)"ECHILD");
+                tst_exit();
+        case    EINTR:  strerror((int)"EINTR");
+                tst_exit();
+        case    EINVAL: strerror((int)"EINVAL");
+                tst_exit();
+        default:     strerror((int)"Other Error");
+                tst_exit();
+   }
+        TEST_RETURN = 0;
+        //tst_exit() ;
+}
+
+
+int main(int ac, char **av) {
+	id_t cpid;
+        id_t id1,id2,id3;
+	id_t gid1,gid2,gid3;
+        siginfo_t infop;
+        int i = 0;
+
+        int lc;                 /* loop counter */
+        char *msg;              /* message returned from parse_opts */
+	
+        /* parse standard options */
+        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
+             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
+             tst_exit();
+           }
+
+        setup();
+
+        /* Check looping state if -i option given */
+
+        for (lc = 0; TEST_LOOPING(lc); ++lc) {
+                Tst_count = 0;
+                for (testno = 0; testno < TST_TOTAL; ++testno) {
+                     
+	
+	TEST(waitid(P_ALL,0,&infop,WNOHANG));
+	if(TEST_RETURN == 0)
+                tst_resm(TPASS,"Success !");
+        else{
+                tst_resm(TFAIL,"Error. is your system >2.6.9 ?");
+                errnochoose();
+        }
+
+// option == WEXITED | WCONTINUED | WSTOPPED | WNOHANG | WNOWAIT ;
+
+	TEST(fork());
+	if(TEST_RETURN == 0){
+                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id1=getpid(),gid1=getpgid(0));
+		exit(5);
+        }
+        
+	TEST(fork());
+	if(TEST_RETURN == 0){
+                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id2=getpid(),gid2=getpgid(0));
+		exit(7);
+        }
+
+	TEST(fork());
+	if(TEST_RETURN == 0){
+                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id3=getpid(),gid3=getpgid(0));
+		exit(6);
+        }
+
+        tst_resm(TINFO,"I'm a father %d",cpid=getpid());
+
+        TEST(waitid(P_PGID,cpid,&infop,WEXITED));
+	if(TEST_RETURN == 0){				
+	 tst_resm(TPASS,"Success ... 0 is returned.");
+         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
+	}else {
+		tst_resm(TFAIL,"Fail...  %d is returned",TEST_RETURN);
+                errnochoose();
+	     }
+
+        TEST(waitid(P_PGID,id2,&infop,WEXITED));
+	if(TEST_RETURN == 0){				//NOCHILD
+         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
+	 tst_resm(TPASS,"Success2 ... 0 is returned");
+	}else {
+		tst_resm(TFAIL,"Fail...  %d is returned",TEST_RETURN);
+                errnochoose();
+	     }
+
+        TEST(i = waitid(P_PID,id1,&infop,WCONTINUED));
+	if(TEST_RETURN == 0){				//EINVAL
+         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
+	 tst_resm(TPASS,"Success3 ... 0 is returned");
+	}else {
+		tst_resm(TFAIL,"Fail...  %d is returned",i);
+                errnochoose();
+	     }
+          }
+     }	
+        cleanup();
+	tst_exit();
+}
+
+
+
--- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:28:39.000000000 +0530
+++ ltp-full-20090531/runtest/syscalls	2009-06-12 21:39:15.000000000 +0530
@@ -1272,6 +1272,7 @@ waitpid12 waitpid12
 waitpid13 waitpid13
 
 waitid01 waitid01
+waitid02 waitid02
 
 write01 write01
 write02 write02

---
Regards--
Manas


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* [LTP] [PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall
  2009-06-12 17:51 [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Manas Kumar Nayak
                   ` (3 preceding siblings ...)
  2009-06-12 17:52 ` [LTP] [PATCH 04/05] Add/Port waitid02 " Manas Kumar Nayak
@ 2009-06-12 17:52 ` Manas Kumar Nayak
  2009-06-15 19:16   ` Subrata Modak
  2009-06-15 19:15 ` [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Subrata Modak
  5 siblings, 1 reply; 14+ messages in thread
From: Manas Kumar Nayak @ 2009-06-12 17:52 UTC (permalink / raw)
  To: LTP List; +Cc: Manas Kumar Nayak

Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>
To: LTP List <ltp-list@lists.sourceforge.net>
Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
Cc: Masatake YAMATO <yamato@redhat.com>
---

--- ltp-full-20090531.orig/testcases/kernel/syscalls/quotactl/Makefile	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/quotactl/Makefile	2009-06-12 21:44:37.000000000 +0530
@@ -0,0 +1,31 @@
+#
+#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+CFLAGS += -I../../../../include -Wall
+LDLIBS += -L../../../../lib -lltp
+
+SRCS    = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS))
+
+all: $(TARGETS)
+
+install:
+	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+	rm -f $(TARGETS)
--- ltp-full-20090531.orig/testcases/kernel/syscalls/quotactl/quotactl01.c	1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20090531/testcases/kernel/syscalls/quotactl/quotactl01.c	2009-06-12 22:51:19.000000000 +0530
@@ -0,0 +1,168 @@
+/******************************************************************************/
+/* Copyright (c) Crackerjack Project., 2007                                   */
+/*                                                                            */
+/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
+/*                                                                            */
+/******************************************************************************/
+/******************************************************************************/
+/*                                                                            */
+/* File:        quotactl01.c                                                  */
+/*                                                                            */
+/* Description: This tests the quotactl() syscall                             */
+/*                                                                            */
+/* Usage:  <for command-line>                                                 */
+/* quotactl01 [-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:   quotactl01                                                    */
+/* History:     Porting from Crackerjack to LTP is done by                    */
+/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
+/******************************************************************************/
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <stdio.h>
+#include <errno.h>
+#include <linux/fs.h>
+#include <sys/quota.h>
+#include <sys/types.h>
+
+
+/* Harness Specific Include Files. */
+#include "test.h"
+#include "usctest.h"
+#include "linux_syscall_numbers.h"
+
+/* Extern Global Variables */
+extern int Tst_count;           /* counter for tst_xxx routines.         */
+extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
+
+/* Global Variables */
+char *TCID = "quotactl01";  /* Test program identifier.*/
+int  testno;
+int  TST_TOTAL = 1;                   /* total number of tests in this file.   */
+
+/* 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.  */
+/*                                                                            */
+/******************************************************************************/
+extern void cleanup() {
+        /* Remove tmp dir and all files in it */
+        TEST_CLEANUP;
+        tst_rmdir();
+
+        /* Exit with appropriate return code. */
+        tst_exit();
+}
+
+/* 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() {
+        /* Capture signals if any */
+        /* Create temporary directories */
+        TEST_PAUSE;
+        tst_tmpdir();
+}
+
+/*
+*  WARNING!! This test may cause the potential harm to the system, we DO NOT
+*  provide any warranty for the safety!!
+*/
+/*
+* To use this testcase , the quota function must be turned on and the user must be * the super user
+*/
+
+int cmd[] = {Q_QUOTAON, Q_QUOTAOFF, Q_GETQUOTA, Q_SETQUOTA, Q_GETINFO, Q_SETINFO, Q_GETFMT, Q_SYNC};
+int retval = 0, id = 0, i = 0;
+
+int main(int ac, char **av) {
+        int newtid = -1;
+        int result;
+        int lc;                 /* loop counter */
+        char *msg;              /* message returned from parse_opts */
+	
+        /* parse standard options */
+        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
+             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
+             tst_exit();
+           }
+
+        setup();
+
+        /* Check looping state if -i option given */
+        for (lc = 0; TEST_LOOPING(lc); ++lc) {
+                Tst_count = 0;
+                for (testno = 0; testno < TST_TOTAL; ++testno) {
+        
+		id = getuid();
+                for (i = 0; i <= 7; i++){
+                        TEST(retval = syscall(__NR_quotactl, cmd[i], (const char *)NULL, id, (caddr_t)NULL));
+			if(TEST_RETURN != 0){
+                 	   	tst_resm(TFAIL, "%s failed - errno = %d : %s ...cmderror=%s", TCID, TEST_ERRNO, strerror(TEST_ERRNO),cmd[i]);
+                        }else{
+        			tst_resm(TPASS, "quotactl call succeeded");
+                        }
+                }
+	             TEST(result = syscall(258, &newtid));     //call quotactl()
+                     if(TEST_RETURN == getpid()) {
+                        cleanup();
+                     }
+                     else {
+                           cleanup();
+	  	           tst_exit();
+                     }
+                }
+        }	
+        cleanup();
+	tst_exit();
+}
+
--- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:42:54.000000000 +0530
+++ ltp-full-20090531/runtest/syscalls	2009-06-12 22:54:14.000000000 +0530
@@ -742,6 +742,7 @@ pwrite02 pwrite02
 pwrite03 pwrite03
 pwrite04 pwrite04
 
+quotactl01 quotactl01
 
 read01 read01
 read02 read02

---
Regards--
Manas


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP
  2009-06-12 17:51 [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Manas Kumar Nayak
                   ` (4 preceding siblings ...)
  2009-06-12 17:52 ` [LTP] [PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall Manas Kumar Nayak
@ 2009-06-15 19:15 ` Subrata Modak
  5 siblings, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:15 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:21 +0530, Manas Kumar Nayak wrote: 
> Hi,
> 
> As promised earlier, here lies the final bunch of test cases from
> Crackerjack. I would however keep contributing new tests to LTP.

Great.

Regards--
Subrata

> 
> >On Wed, 2009-05-27 at 15:36 +0530, Manas Kumar Nayak wrote:
> >Hi,
> > 
> > >On Tue, 2009-05-19 at 00:39 +0530, Manas Kumar Nayak wrote:
> > >Hi,
> > > 
> > > I have ported the following tests from Crackerjack to LTP.
> > > Kindly include them to LTP:
> > > 
> > > [PATCH 01/21] Add add_key01 test for add_key syscall
> > > [PATCH 02/21] Add add_key02 test for add_key syscall
> > > [PATCH 03/21] Add bdflush01 test for bdflush syscall
> > > [PATCH 04/21] Add exit_group01 test for exit_group syscall
> > > [PATCH 05/21] Add keyctl01 test for keyctl syscall
> > > [PATCH 06/21] Add newuname01 test for newuname syscall
> > > [PATCH 07/21] Add rt_sigaction01 test for rt_sigaction syscall
> > > [PATCH 08/21] Add rt_sigprocmask01 test for rt_sigprocmask syscall
> > > [PATCH 09/21] Add rt_sigprocmask02 test for rt_sigprocmask syscall
> > > [PATCH 10/21] Add rt_sigqueueinfo01 test for rt_sigqueueinfo syscall
> > > [PATCH 11/21] Add rt_sigsuspend01 test for rt_sigsuspend syscall
> > > [PATCH 12/21] Add set_thread_area01 test for set_thread_area syscall
> > > [PATCH 13/21] Add set_thread_area02 test for set_thread_area syscall
> > > [PATCH 14/21] Add set_tid_address01 test for set_tid_address syscall
> > > [PATCH 15/21] Add sgetmask01 test for sgetmask syscall
> > > [PATCH 16/21] Add sigreturn01 test for sigreturn syscall
> > > [PATCH 17/21] Add ssetmask01 test for ssetmask syscall
> > > [PATCH 18/21] Add timer_getoverrun01 test for timer_getoverrun01 syscall
> > > [PATCH 19/21] Add timer_gettime01 test for timer_gettime syscall
> > > [PATCH 20/21] Add tkill01 test for tkill syscall
> > > [PATCH 21/21] Add tkill02 test for tkill syscall
> > > 
> > > Todo:
> > > 	1) Port the Remaining ones (next week),
> > 
> > As promised earlier, here remains the 2nd Bunch of tests ported
> > from Crackerjack to LTP:
> > 
> > __001_Add_Utility_Headers_for_these_set_of_tests.patch
> > __002_Add_get_mempolicy01_test_for_get_mempolicy_syscall.patch
> > __003_Add_clock_getres01_test_for_clock_getres_syscall.patch
> > __004_Add_clock_nanosleep01_test_for_clock_nanosleep_syscall.patch
> > __005_Add_mq_notify01_test_for_mq_notify_syscall.patch
> > __006_Add_ppoll01_test_for_ppoll_syscall.patch
> > __007_Add_mq_open01_test_for_mq_open_syscall.patch
> > __008_Add_mq_timedreceive01_test_for_mq_timedreceive_syscall.patch
> > __009_Add_utimes01_test_for_utimes_syscall.patch
> > __010_Add_mq_unlink01_test_for_mq_unlink_syscall.patch
> > __011_Add_mq_timedsend01_test_for_mq_timedsend_syscall.patch
> > __012_Add_unshare01_test_for_unshare_syscall.patch
> > __013_Add_unshare02_test_for_unshare_syscall.patch
> > 
> > Still TODO:
> > -> The remaining testcases will be ported soon.
> 
> [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP
> [PATCH 01/05] Add/Port mbind01 test for mbind() syscall
> [PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall
> [PATCH 03/05] Add/Port waitid01 test for waitid() syscall
> [PATCH 04/05] Add/Port waitid02 test for waitid() syscall
> [PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall
> 
> Regards--
> Manas
> 
> > 
> > Regards--
> > Manas
> > 
> > > 
> > > Regards--
> > > Manas
> > > 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall
  2009-06-12 17:51 ` [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall Manas Kumar Nayak
@ 2009-06-15 19:15   ` Subrata Modak
  2009-06-15 19:15   ` Subrata Modak
  1 sibling, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:15 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:21 +0530, Manas Kumar Nayak wrote: 
> Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>

Thanks.

Regards--
Subrata

> To: LTP List <ltp-list@lists.sourceforge.net>
> Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
> Cc: Masatake YAMATO <yamato@redhat.com>
> ---
> 
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/mbind/Makefile	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/mbind/Makefile	2009-06-12 16:30:33.000000000 +0530
> @@ -0,0 +1,31 @@
> +#
> +#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
> +#
> +
> +CFLAGS += -I../../../../include -I../utils/ -Wall -O2
> +LDLIBS += -L../../../../lib -lltp
> +
> +SRCS    = $(wildcard *.c)
> +TARGETS = $(patsubst %.c,%,$(SRCS))
> +
> +all: $(TARGETS)
> +
> +install:
> +	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
> +
> +clean:
> +	rm -f $(TARGETS)
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/mbind/mbind01.c	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/mbind/mbind01.c	2009-06-12 16:58:30.000000000 +0530
> @@ -0,0 +1,415 @@
> +/******************************************************************************/
> +/* Copyright (c) Crackerjack Project., 2007-2008                              */
> +/* Author(s): Takahiro Yasui <takahiro.yasui.mp@hitachi.com>,		      */
> +/*            Yumiko Sugita <yumiko.sugita.yf@hitachi.com>,		      */
> +/*            Satoshi Fujiwara <sa-fuji@sdl.hitachi.co.jp>  		      */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/******************************************************************************/
> +/******************************************************************************/
> +/*                                                                            */
> +/* File:        mbind01.c                                           */
> +/*                                                                            */
> +/* Description: This tests the mbind() syscall                      */
> +/*                                                                            */
> +/* Usage:  <for command-line>                                                 */
> +/* mbind01 [-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:   mbind01                                             */
> +/* History:     Porting from Crackerjack to LTP is done by                    */
> +/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
> +/******************************************************************************/
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <errno.h>
> +#include <unistd.h>
> +
> +#include <sys/syscall.h>
> +#include <sys/types.h>
> +#include <sys/mman.h>
> +#include <getopt.h>
> +#include <string.h>
> +#include <stdlib.h>
> +#include <errno.h>
> +#include <stdio.h>
> +#include <unistd.h>
> +#include "numaif.h"
> +#include "include_j_h.h"
> +
> +/* Harness Specific Include Files. */
> +#include "test.h"
> +#include "usctest.h"
> +#include "linux_syscall_numbers.h"
> +
> +/* Extern Global Variables */
> +extern int Tst_count;           /* counter for tst_xxx routines.         */
> +extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
> +
> +/* Global Variables */
> +char *TCID = "mbind01";  /* Test program identifier.*/
> +int  testno;
> +int  TST_TOTAL = 2;                   /* total number of tests in this file.   */
> +
> +/* 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.  */
> +/*                                                                            */
> +/******************************************************************************/
> +extern void cleanup() {
> +        /* Remove tmp dir and all files in it */
> +        TEST_CLEANUP;
> +        tst_rmdir();
> +
> +        /* Exit with appropriate return code. */
> +        tst_exit();
> +}
> +
> +/* 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() {
> +        /* Capture signals if any */
> +        /* Create temporary directories */
> +        TEST_PAUSE;
> +        tst_tmpdir();
> +}
> +
> +int sig_count = 0;
> +
> +void sig_action(int sig) {
> +        sig_count = 1;
> +}
> +
> +/*
> + * Macros
> + */
> +#define SYSCALL_NAME    "mbind"
> +
> +/*
> + * Global variables
> + */
> +static int opt_debug;
> +static char *progname;
> +
> +enum test_type {
> +        NORMAL,
> +        INVALID_POINTER,
> +};
> +
> +enum from_node {
> +        NONE,
> +        SELF,
> +};
> +
> +/*
> + * Data Structure
> + */
> +struct test_case {
> +        int ttype;
> +        int policy;
> +        int from_node;
> +        unsigned flags;
> +        int ret;
> +        int err;
> +};
> +
> +/* Test cases
> + *
> + *   test status of errors on man page
> + *
> + *   EFAULT             v (detect unmapped hole or invalid pointer)
> + *   EINVAL             v (invalid arguments)
> + *   ENOMEM             can't check because it's difficult to create no-memory
> + *   EIO                can't check because we don't have N-node NUMA system
> + *                      (only we can do is simulate 1-node NUMA)
> + */
> +
> +static struct test_case tcase[] = {
> +        { // case00
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = NONE,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case01
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = SELF, // target exists
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case02
> +                .policy         = MPOL_BIND,
> +                .from_node      = NONE, // no target
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +	{ // case03
> +                .policy         = MPOL_BIND,
> +                .from_node      = SELF,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case04
> +                .policy         = MPOL_INTERLEAVE,
> +                .from_node      = NONE, // no target
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case05
> +                .policy         = MPOL_INTERLEAVE,
> +                .from_node      = SELF,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case06
> +                .policy         = MPOL_PREFERRED,
> +                .from_node      = NONE,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case07
> +                .policy         = MPOL_PREFERRED,
> +                .from_node      = SELF,
> +                .ret            = 0,
> +                .err            = 0,
> +	},
> +        { // case08
> +                .policy         = -1, // unknown policy
> +                .from_node      = NONE,
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case09
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = NONE,
> +                .flags          = -1, // invalid flags
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case10
> +                .ttype          = INVALID_POINTER,
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = NONE,
> +                .ret            = -1,
> +                .err            = EFAULT,
> +        },
> +};
> +
> +#define MEM_LENGTH              (4 * 1024 * 1024)
> +/*
> + * do_test()
> + *
> + *   Input  : TestCase Data
> + *   Return : RESULT_OK(0), RESULT_NG(1)
> + *
> + */
> +
> +static int do_test(struct test_case *tc) {
> +        int sys_ret;
> +        int sys_errno;
> +        int result = RESULT_OK;
> +        int rc, policy, cmp_ok = 1;
> +        char *p = NULL;
> +        nodemask_t nodemask, getnodemask;
> +        unsigned long maxnode = NUMA_NUM_NODES;
> +        unsigned long len = MEM_LENGTH;
> +
> +        /* We assume that there is only one node(node0). */
> +        nodemask_zero(&nodemask);
> +        nodemask_set(&nodemask, 0);
> +        nodemask_zero(&getnodemask);
> +
> +        /*
> +         * mmap memory
> +         */
> +        p = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,0, 0);
> +        if (p == (void*)-1) {
> +		tst_resm(TFAIL, "malloc failed - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
> +		cleanup();
> +                tst_exit();
> +        }
> +        if(tc->ttype == INVALID_POINTER)
> +                p = (char*)0xc0000000;
> +/*
> +         * Execute system call
> +         */
> +        errno = 0;
> +        if (tc->from_node == NONE)
> +                TEST(sys_ret = syscall(__NR_mbind, p, len, tc->policy,NULL, 0, tc->flags));
> +        else
> +                TEST(sys_ret = syscall(__NR_mbind, p, len, tc->policy,&nodemask, maxnode, tc->flags));
> +        sys_errno = errno;
> +        if (sys_ret < 0)
> +                goto TEST_END;
> +
> +        /*
> +         * Check policy of the allocated memory
> +         */
> +        TEST(rc = syscall(__NR_get_mempolicy, &policy, &getnodemask, maxnode,p, MPOL_F_ADDR));
> +        if (rc < 0) {
> +		tst_resm(TFAIL, "get_mempolicy failed - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
> +                result = 1;
> +                tst_exit();
> +        }
> +
> +// When policy equals MPOL_DEFAULT, then get_mempolicy not return node
> +        if (tc->policy == MPOL_DEFAULT)
> +		nodemask_zero(&nodemask);
> +	cmp_ok = ((tc->policy == policy) && nodemask_equal(&nodemask,&getnodemask));
> +        if (opt_debug) {
> +		nodemask_dump("nodemask Expect:", &nodemask);
> +		nodemask_dump("nodemask Result:", &getnodemask);
> +		tst_resm(TINFO,"policy E:%d R:%d", tc->policy, policy);
> +        }
> +
> +
> +TEST_END:
> +        /*
> +         * Check results
> +         */
> +        result |= ((sys_errno != tc->err) || (!cmp_ok));
> +        PRINT_RESULT_CMP(0, tc->ret, tc->err, sys_ret, sys_errno, cmp_ok);
> +        return result;
> +}
> +
> +/*
> + * usage()
> + */
> +static void usage(char *progname) {
> +	tst_resm(TINFO,"usage: %s [options]", progname);
> +	tst_resm(TINFO,"This is a regression test program of %s system call.",SYSCALL_NAME);
> +	tst_resm(TINFO,"options:");
> +	tst_resm(TINFO,"    -d --debug           Show debug messages");
> +        tst_resm(TINFO,"    -h --help            Show this message");
> +	tst_resm(TINFO,"NG");
> +        exit(1);
> +}
> +
> +
> +
> +
> +
> +int main(int ac, char **av) {
> +	int result = 0;
> +	int lc, i;                 /* loop counter */
> +	char *msg;              /* message returned from parse_opts */
> +
> +	struct option long_options[] = {
> +                { "debug", no_argument, 0, 'd' },
> +                { "help",  no_argument, 0, 'h' },
> +                { NULL, 0, NULL, 0 }
> +	};
> +	
> +        /* parse standard options */
> +	if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
> +		tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
> +		tst_exit();
> +	}
> +
> +        setup();
> +
> +	progname = strchr(av[0],'/');
> +	progname = (progname ? progname + 1 : av[0]);
> +
> +        /* Check looping state if -i option given */
> +        for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +                Tst_count = 0;
> +                for (testno = 0; testno < TST_TOTAL; ++testno) {
> +			TEST(getopt_long(ac, av, "dh", long_options, NULL));
> +			while (TEST_RETURN != -1){
> +				switch(TEST_RETURN) {
> +				case 'd':
> +					opt_debug = 1;
> +					break;
> +				default:
> +					usage(progname);
> +				}
> +			} /* end of while */
> +			if(ac != optind) {
> +				tst_resm(TFAIL, "Options are not match - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
> +				usage(progname);
> +				cleanup();
> +				tst_exit();
> +        		}
> +			
> +			/*
> +		         * Execute test
> +		         */
> +        		for (i = 0; i < (int)(sizeof(tcase) / sizeof(tcase[0])); i++) {
> +        		        int ret;
> +	        	        tst_resm(TINFO,"(case%02d) START", i);
> +        	        	ret = do_test(&tcase[i]);
> +	        	        tst_resm(TINFO,"(case%02d) END => %s", i, ( TEST_RETURN== 0) ? "OK" : "NG");
> +	                	result |= ret;
> +        		}
> +
> +			 /*
> +		         * Check results
> +		         */
> +		        switch(result) {
> +        		case RESULT_OK:
> +					tst_resm(TPASS, "mbind call succeeded --OK-- ");
> +
> +		        default:
> +                		tst_resm(TFAIL, "%s failed - errno = %d : %s --NG--", TCID, TEST_ERRNO, strerror(TEST_ERRNO));
> +				cleanup();
> +				tst_exit();
> +		        }
> +
> +
> +                }
> +        }	
> +        cleanup();
> +	tst_exit();
> +}
> +
> --- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 16:11:03.000000000 +0530
> +++ ltp-full-20090531/runtest/syscalls	2009-06-12 16:59:58.000000000 +0530
> @@ -506,6 +506,8 @@ lstat03_64 lstat03_64
> 
>  mallopt01 mallopt01
> 
> +mbind01 mbind01
> +
>  memset01 memset01
>  memcmp01 memcmp01
>  memcpy01 memcpy01
> 
> ---
> Regards--
> Manas
> 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall
  2009-06-12 17:51 ` [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall Manas Kumar Nayak
  2009-06-15 19:15   ` Subrata Modak
@ 2009-06-15 19:15   ` Subrata Modak
  1 sibling, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:15 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:21 +0530, Manas Kumar Nayak wrote: 
> Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>

Thanks.

Regards--
Subrata

> To: LTP List <ltp-list@lists.sourceforge.net>
> Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
> Cc: Masatake YAMATO <yamato@redhat.com>
> ---
> 
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/mbind/Makefile	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/mbind/Makefile	2009-06-12 16:30:33.000000000 +0530
> @@ -0,0 +1,31 @@
> +#
> +#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
> +#
> +
> +CFLAGS += -I../../../../include -I../utils/ -Wall -O2
> +LDLIBS += -L../../../../lib -lltp
> +
> +SRCS    = $(wildcard *.c)
> +TARGETS = $(patsubst %.c,%,$(SRCS))
> +
> +all: $(TARGETS)
> +
> +install:
> +	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
> +
> +clean:
> +	rm -f $(TARGETS)
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/mbind/mbind01.c	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/mbind/mbind01.c	2009-06-12 16:58:30.000000000 +0530
> @@ -0,0 +1,415 @@
> +/******************************************************************************/
> +/* Copyright (c) Crackerjack Project., 2007-2008                              */
> +/* Author(s): Takahiro Yasui <takahiro.yasui.mp@hitachi.com>,		      */
> +/*            Yumiko Sugita <yumiko.sugita.yf@hitachi.com>,		      */
> +/*            Satoshi Fujiwara <sa-fuji@sdl.hitachi.co.jp>  		      */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/******************************************************************************/
> +/******************************************************************************/
> +/*                                                                            */
> +/* File:        mbind01.c                                           */
> +/*                                                                            */
> +/* Description: This tests the mbind() syscall                      */
> +/*                                                                            */
> +/* Usage:  <for command-line>                                                 */
> +/* mbind01 [-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:   mbind01                                             */
> +/* History:     Porting from Crackerjack to LTP is done by                    */
> +/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
> +/******************************************************************************/
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <errno.h>
> +#include <unistd.h>
> +
> +#include <sys/syscall.h>
> +#include <sys/types.h>
> +#include <sys/mman.h>
> +#include <getopt.h>
> +#include <string.h>
> +#include <stdlib.h>
> +#include <errno.h>
> +#include <stdio.h>
> +#include <unistd.h>
> +#include "numaif.h"
> +#include "include_j_h.h"
> +
> +/* Harness Specific Include Files. */
> +#include "test.h"
> +#include "usctest.h"
> +#include "linux_syscall_numbers.h"
> +
> +/* Extern Global Variables */
> +extern int Tst_count;           /* counter for tst_xxx routines.         */
> +extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
> +
> +/* Global Variables */
> +char *TCID = "mbind01";  /* Test program identifier.*/
> +int  testno;
> +int  TST_TOTAL = 2;                   /* total number of tests in this file.   */
> +
> +/* 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.  */
> +/*                                                                            */
> +/******************************************************************************/
> +extern void cleanup() {
> +        /* Remove tmp dir and all files in it */
> +        TEST_CLEANUP;
> +        tst_rmdir();
> +
> +        /* Exit with appropriate return code. */
> +        tst_exit();
> +}
> +
> +/* 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() {
> +        /* Capture signals if any */
> +        /* Create temporary directories */
> +        TEST_PAUSE;
> +        tst_tmpdir();
> +}
> +
> +int sig_count = 0;
> +
> +void sig_action(int sig) {
> +        sig_count = 1;
> +}
> +
> +/*
> + * Macros
> + */
> +#define SYSCALL_NAME    "mbind"
> +
> +/*
> + * Global variables
> + */
> +static int opt_debug;
> +static char *progname;
> +
> +enum test_type {
> +        NORMAL,
> +        INVALID_POINTER,
> +};
> +
> +enum from_node {
> +        NONE,
> +        SELF,
> +};
> +
> +/*
> + * Data Structure
> + */
> +struct test_case {
> +        int ttype;
> +        int policy;
> +        int from_node;
> +        unsigned flags;
> +        int ret;
> +        int err;
> +};
> +
> +/* Test cases
> + *
> + *   test status of errors on man page
> + *
> + *   EFAULT             v (detect unmapped hole or invalid pointer)
> + *   EINVAL             v (invalid arguments)
> + *   ENOMEM             can't check because it's difficult to create no-memory
> + *   EIO                can't check because we don't have N-node NUMA system
> + *                      (only we can do is simulate 1-node NUMA)
> + */
> +
> +static struct test_case tcase[] = {
> +        { // case00
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = NONE,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case01
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = SELF, // target exists
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case02
> +                .policy         = MPOL_BIND,
> +                .from_node      = NONE, // no target
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +	{ // case03
> +                .policy         = MPOL_BIND,
> +                .from_node      = SELF,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case04
> +                .policy         = MPOL_INTERLEAVE,
> +                .from_node      = NONE, // no target
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case05
> +                .policy         = MPOL_INTERLEAVE,
> +                .from_node      = SELF,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case06
> +                .policy         = MPOL_PREFERRED,
> +                .from_node      = NONE,
> +                .ret            = 0,
> +                .err            = 0,
> +        },
> +        { // case07
> +                .policy         = MPOL_PREFERRED,
> +                .from_node      = SELF,
> +                .ret            = 0,
> +                .err            = 0,
> +	},
> +        { // case08
> +                .policy         = -1, // unknown policy
> +                .from_node      = NONE,
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case09
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = NONE,
> +                .flags          = -1, // invalid flags
> +                .ret            = -1,
> +                .err            = EINVAL,
> +        },
> +        { // case10
> +                .ttype          = INVALID_POINTER,
> +                .policy         = MPOL_DEFAULT,
> +                .from_node      = NONE,
> +                .ret            = -1,
> +                .err            = EFAULT,
> +        },
> +};
> +
> +#define MEM_LENGTH              (4 * 1024 * 1024)
> +/*
> + * do_test()
> + *
> + *   Input  : TestCase Data
> + *   Return : RESULT_OK(0), RESULT_NG(1)
> + *
> + */
> +
> +static int do_test(struct test_case *tc) {
> +        int sys_ret;
> +        int sys_errno;
> +        int result = RESULT_OK;
> +        int rc, policy, cmp_ok = 1;
> +        char *p = NULL;
> +        nodemask_t nodemask, getnodemask;
> +        unsigned long maxnode = NUMA_NUM_NODES;
> +        unsigned long len = MEM_LENGTH;
> +
> +        /* We assume that there is only one node(node0). */
> +        nodemask_zero(&nodemask);
> +        nodemask_set(&nodemask, 0);
> +        nodemask_zero(&getnodemask);
> +
> +        /*
> +         * mmap memory
> +         */
> +        p = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,0, 0);
> +        if (p == (void*)-1) {
> +		tst_resm(TFAIL, "malloc failed - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
> +		cleanup();
> +                tst_exit();
> +        }
> +        if(tc->ttype == INVALID_POINTER)
> +                p = (char*)0xc0000000;
> +/*
> +         * Execute system call
> +         */
> +        errno = 0;
> +        if (tc->from_node == NONE)
> +                TEST(sys_ret = syscall(__NR_mbind, p, len, tc->policy,NULL, 0, tc->flags));
> +        else
> +                TEST(sys_ret = syscall(__NR_mbind, p, len, tc->policy,&nodemask, maxnode, tc->flags));
> +        sys_errno = errno;
> +        if (sys_ret < 0)
> +                goto TEST_END;
> +
> +        /*
> +         * Check policy of the allocated memory
> +         */
> +        TEST(rc = syscall(__NR_get_mempolicy, &policy, &getnodemask, maxnode,p, MPOL_F_ADDR));
> +        if (rc < 0) {
> +		tst_resm(TFAIL, "get_mempolicy failed - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
> +                result = 1;
> +                tst_exit();
> +        }
> +
> +// When policy equals MPOL_DEFAULT, then get_mempolicy not return node
> +        if (tc->policy == MPOL_DEFAULT)
> +		nodemask_zero(&nodemask);
> +	cmp_ok = ((tc->policy == policy) && nodemask_equal(&nodemask,&getnodemask));
> +        if (opt_debug) {
> +		nodemask_dump("nodemask Expect:", &nodemask);
> +		nodemask_dump("nodemask Result:", &getnodemask);
> +		tst_resm(TINFO,"policy E:%d R:%d", tc->policy, policy);
> +        }
> +
> +
> +TEST_END:
> +        /*
> +         * Check results
> +         */
> +        result |= ((sys_errno != tc->err) || (!cmp_ok));
> +        PRINT_RESULT_CMP(0, tc->ret, tc->err, sys_ret, sys_errno, cmp_ok);
> +        return result;
> +}
> +
> +/*
> + * usage()
> + */
> +static void usage(char *progname) {
> +	tst_resm(TINFO,"usage: %s [options]", progname);
> +	tst_resm(TINFO,"This is a regression test program of %s system call.",SYSCALL_NAME);
> +	tst_resm(TINFO,"options:");
> +	tst_resm(TINFO,"    -d --debug           Show debug messages");
> +        tst_resm(TINFO,"    -h --help            Show this message");
> +	tst_resm(TINFO,"NG");
> +        exit(1);
> +}
> +
> +
> +
> +
> +
> +int main(int ac, char **av) {
> +	int result = 0;
> +	int lc, i;                 /* loop counter */
> +	char *msg;              /* message returned from parse_opts */
> +
> +	struct option long_options[] = {
> +                { "debug", no_argument, 0, 'd' },
> +                { "help",  no_argument, 0, 'h' },
> +                { NULL, 0, NULL, 0 }
> +	};
> +	
> +        /* parse standard options */
> +	if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
> +		tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
> +		tst_exit();
> +	}
> +
> +        setup();
> +
> +	progname = strchr(av[0],'/');
> +	progname = (progname ? progname + 1 : av[0]);
> +
> +        /* Check looping state if -i option given */
> +        for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +                Tst_count = 0;
> +                for (testno = 0; testno < TST_TOTAL; ++testno) {
> +			TEST(getopt_long(ac, av, "dh", long_options, NULL));
> +			while (TEST_RETURN != -1){
> +				switch(TEST_RETURN) {
> +				case 'd':
> +					opt_debug = 1;
> +					break;
> +				default:
> +					usage(progname);
> +				}
> +			} /* end of while */
> +			if(ac != optind) {
> +				tst_resm(TFAIL, "Options are not match - errno = %d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
> +				usage(progname);
> +				cleanup();
> +				tst_exit();
> +        		}
> +			
> +			/*
> +		         * Execute test
> +		         */
> +        		for (i = 0; i < (int)(sizeof(tcase) / sizeof(tcase[0])); i++) {
> +        		        int ret;
> +	        	        tst_resm(TINFO,"(case%02d) START", i);
> +        	        	ret = do_test(&tcase[i]);
> +	        	        tst_resm(TINFO,"(case%02d) END => %s", i, ( TEST_RETURN== 0) ? "OK" : "NG");
> +	                	result |= ret;
> +        		}
> +
> +			 /*
> +		         * Check results
> +		         */
> +		        switch(result) {
> +        		case RESULT_OK:
> +					tst_resm(TPASS, "mbind call succeeded --OK-- ");
> +
> +		        default:
> +                		tst_resm(TFAIL, "%s failed - errno = %d : %s --NG--", TCID, TEST_ERRNO, strerror(TEST_ERRNO));
> +				cleanup();
> +				tst_exit();
> +		        }
> +
> +
> +                }
> +        }	
> +        cleanup();
> +	tst_exit();
> +}
> +
> --- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 16:11:03.000000000 +0530
> +++ ltp-full-20090531/runtest/syscalls	2009-06-12 16:59:58.000000000 +0530
> @@ -506,6 +506,8 @@ lstat03_64 lstat03_64
> 
>  mallopt01 mallopt01
> 
> +mbind01 mbind01
> +
>  memset01 memset01
>  memcmp01 memcmp01
>  memcpy01 memcpy01
> 
> ---
> Regards--
> Manas
> 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall
  2009-06-12 17:52 ` [LTP] [PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall Manas Kumar Nayak
@ 2009-06-15 19:16   ` Subrata Modak
  0 siblings, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:16 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:22 +0530, Manas Kumar Nayak wrote: 
> Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>

Thanks.

Regards--
Subrata

> To: LTP List <ltp-list@lists.sourceforge.net>
> Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
> Cc: Masatake YAMATO <yamato@redhat.com>
> ---
> 
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/sched_getaffinity/Makefile	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/sched_getaffinity/Makefile	2009-03-29 16:54:46.000000000 +0530
> @@ -0,0 +1,31 @@
> +#
> +#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
> +#
> +
> +CFLAGS += -I../../../../include -Wall
> +LDLIBS += -L../../../../lib -lltp
> +
> +SRCS    = $(wildcard *.c)
> +TARGETS = $(patsubst %.c,%,$(SRCS))
> +
> +all: $(TARGETS)
> +
> +install:
> +	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
> +
> +clean:
> +	rm -f $(TARGETS)
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c	2009-06-12 20:57:03.000000000 +0530
> @@ -0,0 +1,197 @@
> +/******************************************************************************/
> +/* Copyright (c) Crackerjack Project., 2007                                   */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/******************************************************************************/
> +/******************************************************************************/
> +/*                                                                            */
> +/* File:        sched_getaffinity01.c                                         */
> +/*                                                                            */
> +/* Description: This tests the sched_getaffinity() syscall                    */
> +/*                                                                            */
> +/* Usage:  <for command-line>                                                 */
> +/* sched_getaffinity01 [-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:   sched_getaffinity01                                           */
> +/* History:     Porting from Crackerjack to LTP is done by                    */
> +/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
> +/******************************************************************************/
> +#include<stdlib.h>
> +#include<stdio.h>
> +#include<sys/types.h>
> +#include<unistd.h>
> +#define _GNU_SOURCE 
> +#define __USE_GNU
> +#include<sched.h>
> +#include<string.h>
> +#include <errno.h>
> +
> +/* Harness Specific Include Files. */
> +#include "test.h"
> +#include "usctest.h"
> +#include "linux_syscall_numbers.h"
> +
> +/* Extern Global Variables */
> +extern int Tst_count;           /* counter for tst_xxx routines.         */
> +extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
> +
> +/* Global Variables */
> +char *TCID = "sched_getaffinity01";  /* Test program identifier.*/
> +int  testno;
> +int  TST_TOTAL = 1;                   /* total number of tests in this file.   */
> +
> +/* 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.  */
> +/*                                                                            */
> +/******************************************************************************/
> +extern void cleanup() {
> +        /* Remove tmp dir and all files in it */
> +        TEST_CLEANUP;
> +        tst_rmdir();
> +
> +        /* Exit with appropriate return code. */
> +        tst_exit();
> +}
> +
> +/* 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() {
> +        /* Capture signals if any */
> +        /* Create temporary directories */
> +        TEST_PAUSE;
> +        tst_tmpdir();
> +}
> +
> +int errnochoose(void)  // choose the relative errno
> +{
> +        switch errno
> +        {
> +                case EFAULT: 
> +			perror("EFAULT");
> +                        break;
> +                case EINVAL: perror("EINVAL");
> +                        break;
> +                case EPERM: perror("EPERM");
> +                        break;
> +                case ESRCH: perror("ESRCH");
> +                        break;
> +                default: perror("other errno");
> +                        break;
> +        }
> +        return 0 ;
> +}
> +
> +
> +int main(int ac, char **av) {
> +        int lc,num,i;                 /* loop counter */
> +        char *msg;              /* message returned from parse_opts */
> +	cpu_set_t mask;
> +	unsigned int len = sizeof(cpu_set_t);
> +
> +	
> +        /* parse standard options */
> +        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
> +             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
> +             tst_exit();
> +           }
> +
> +        setup();
> +
> +	TEST(num=sysconf(_SC_NPROCESSORS_CONF));  //the number of processor(s)
> +        tst_resm(TINFO,"system has %d processor(s).", num);
> +
> +        /* Check looping state if -i option given */
> +        for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +                Tst_count = 0;
> +                for (testno = 0; testno < TST_TOTAL; ++testno) {
> +                     TEST(sched_getaffinity(0,len,(cpu_set_t *)-1));     //call sched_getaffinity()
> +                     if(TEST_RETURN == -1) {
> +			errnochoose();
> +                     }
> +		
> +                     TEST(sched_getaffinity(0,0,&mask));     //call sched_getaffinity()
> +                     if(TEST_RETURN == -1) {
> +			errnochoose();
> +                     }
> +
> +                     TEST(sched_getaffinity(getpid()+1,len,&mask));     //call sched_getaffinity()
> +                     if(TEST_RETURN == -1) {
> +			errnochoose();
> +                     }
> +			
> +		     CPU_ZERO(&mask); //clear
> +                     TEST(sched_getaffinity(0,len,&mask));     //call sched_getaffinity()
> +		     if(TEST_RETURN == -1) {
> +                 	   tst_resm(TFAIL, "%s failed -could not get cpu affinity errno = %d : %s", TCID, TEST_ERRNO, strerror(TEST_ERRNO));
> +			errnochoose();
> +			cleanup();
> +			tst_exit();
> +                     } else {
> +				tst_resm(TINFO,"cpusetsize is %d cpu_set_t mask is %d",len,mask);
> +				tst_resm(TINFO,"mask.__bits[0] = %lu ",mask.__bits[0]);
> +				for(i=0;i<num;i++){    // check the processor
> +	                        	TEST(CPU_ISSET(i,&mask));
> +					if (TEST_RETURN != -1 ){
> +                                	tst_resm(TPASS,"sched_getaffinity() succeed ,this process %d is running processor: %d",getpid(), i);
> +					}
> +			        }
> +	                    }
> +
> +
> +                     }
> +		}
> +        cleanup();
> +	tst_exit();
> +}
> +
> --- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:02:30.000000000 +0530
> +++ ltp-full-20090531/runtest/syscalls	2009-06-12 20:58:25.000000000 +0530
> @@ -837,6 +837,8 @@ sched_setscheduler02 sched_setscheduler0
> 
>  sched_yield01 sched_yield01
> 
> +sched_getaffinity01 sched_getaffinity01
> +
>  select01 select01
>  select02 select02
>  select03 select03
> 
> ---
> Regards--
> Manas
> 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 03/05] Add/Port waitid01 test for waitid() syscall
  2009-06-12 17:52 ` [LTP] [PATCH 03/05] Add/Port waitid01 test for waitid() syscall Manas Kumar Nayak
@ 2009-06-15 19:16   ` Subrata Modak
  0 siblings, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:16 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:22 +0530, Manas Kumar Nayak wrote: 
> Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>

Thanks.

Regards--
Subrata

> To: LTP List <ltp-list@lists.sourceforge.net>
> Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
> Cc: Masatake YAMATO <yamato@redhat.com>
> ---
> 
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/waitid/Makefile	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/waitid/Makefile	2009-06-12 15:49:28.000000000 +0530
> @@ -0,0 +1,31 @@
> +#
> +#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
> +#
> +
> +CFLAGS += -I../../../../include -Wall 
> +LDLIBS += -L../../../../lib -lltp
> +
> +SRCS    = $(wildcard *.c)
> +TARGETS = $(patsubst %.c,%,$(SRCS))
> +
> +all: $(TARGETS)
> +
> +install:
> +	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
> +
> +clean:
> +	rm -f $(TARGETS)
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/waitid/waitid01.c	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/waitid/waitid01.c	2009-06-12 21:21:13.000000000 +0530
> @@ -0,0 +1,204 @@
> +/******************************************************************************/
> +/* Copyright (c) Crackerjack Project., 2007                                   */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/******************************************************************************/
> +/******************************************************************************/
> +/*                                                                            */
> +/* File:        waitid01.c                                                    */
> +/*                                                                            */
> +/* Description: This tests the waitid() syscall                               */
> +/*                                                                            */
> +/* Usage:  <for command-line>                                                 */
> +/* waitid01 [-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:   waitid01                                                      */
> +/* History:     Porting from Crackerjack to LTP is done by                    */
> +/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
> +/******************************************************************************/
> +
> +#include <stdio.h>
> +#include <errno.h>
> +#include <stdlib.h>
> +#include <sys/wait.h>
> +#include <sys/types.h>
> +#include <unistd.h>
> +#include <sys/stat.h>
> +
> +/* Harness Specific Include Files. */
> +#include "test.h"
> +#include "usctest.h"
> +#include "linux_syscall_numbers.h"
> +
> +/* Extern Global Variables */
> +extern int Tst_count;           /* counter for tst_xxx routines.         */
> +extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
> +
> +/* Global Variables */
> +char *TCID = "waitid01";  /* Test program identifier.*/
> +int  testno;
> +int  TST_TOTAL = 3;                   /* total number of tests in this file.   */
> +
> +/* 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.  */
> +/*                                                                            */
> +/******************************************************************************/
> +extern void cleanup() {
> +        /* Remove tmp dir and all files in it */
> +        TEST_CLEANUP;
> +        tst_rmdir();
> +
> +        /* Exit with appropriate return code. */
> +        tst_exit();
> +}
> +
> +/* 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() {
> +        /* Capture signals if any */
> +        /* Create temporary directories */
> +        TEST_PAUSE;
> +        tst_tmpdir();
> +}
> +
> +
> +int errnochoose(void){   //choose the relative errno
> +
> +    switch (TEST_ERRNO){
> +        case    0:      tst_exit();
> +        case    ECHILD: strerror((int)"ECHILD");
> +        	        break;
> +        case    EINTR:  strerror((int)"EINTR");
> +                	break;
> +        case    EINVAL: strerror((int)"EINVAL");
> +                	break;
> +        default:     strerror((int)"Other Error");
> +                     break;
> +   }
> +        TEST_RETURN = 0;
> +        tst_exit() ;
> +}
> +
> +void display_status(siginfo_t *infop)
> +{
> +        tst_resm(TINFO,"Process %d terminated:", infop->si_pid);
> +        tst_resm(TINFO,"code = %d",infop->si_code);
> +        if(infop->si_code == CLD_EXITED)
> +                tst_resm(TINFO,"exit value = %d",infop->si_status);
> +        else
> +		tst_resm(TINFO,"signal = %d",infop->si_status);
> +}
> +
> +int main(int ac, char **av) {
> +	id_t pid;
> +        siginfo_t infop;
> +        int lc;                 /* loop counter */
> +        char *msg;              /* message returned from parse_opts */
> +	
> +        /* parse standard options */
> +        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
> +             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
> +             tst_exit();
> +           }
> +
> +        setup();
> +
> +        /* Check looping state if -i option given */
> +        for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +                Tst_count = 0;
> +                for (testno = 0; testno < TST_TOTAL; ++testno) {
> +                     
> +	TEST(fork());
> +	if(TEST_RETURN == 0){
> +                exit(123);
> +        }
> +        else{
> +                TEST(waitid(P_ALL,getpid(),&infop,WEXITED));
> +		if(TEST_RETURN == -1){
> +                        TEST(errnochoose());
> +		}else 
> +		    display_status(&infop); //CLD_EXITED = 1
> +        }
> +
> +        TEST(fork());
> +        if(TEST_RETURN == 0){
> +		int a, b = 0;
> +                a = 1/b;
> +                tst_exit();
> +        } else{
> +                TEST(waitid(P_ALL,0,&infop,WEXITED));
> +		if(TEST_RETURN == -1)
> +                        TEST(errnochoose());
> +                else
> +			display_status(&infop); //CLD_DUMPED = 3 ; SIGFPE = 8
> +        }
> +
> +        TEST(pid = fork());
> +	if(TEST_RETURN == 0){
> +                TEST(sleep(10));
> +                tst_exit();
> +        }
> +        TEST(kill(pid,SIGHUP));
> +        TEST(waitid(P_ALL,0,&infop,WEXITED));
> +	if(TEST_RETURN == -1)
> +                TEST(errnochoose());
> +        else 
> +		display_status(&infop); //CLD_KILLED = 2 ; SIGHUP = 1
> +                }
> +        }	
> +        tst_resm(TPASS, "waitid(): system call passed");
> +	cleanup();
> +        tst_exit();
> +}
> +
> --- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:08:46.000000000 +0530
> +++ ltp-full-20090531/runtest/syscalls	2009-06-12 21:22:40.000000000 +0530
> @@ -1271,6 +1271,8 @@ waitpid11 waitpid11
>  waitpid12 waitpid12
>  waitpid13 waitpid13
> 
> +waitid01 waitid01
> +
>  write01 write01
>  write02 write02
>  write03 write03
> 
> ---
> Regards--
> Manas


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 04/05] Add/Port waitid02 test for waitid() syscall
  2009-06-12 17:52 ` [LTP] [PATCH 04/05] Add/Port waitid02 " Manas Kumar Nayak
@ 2009-06-15 19:16   ` Subrata Modak
  2009-06-15 19:16   ` Subrata Modak
  1 sibling, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:16 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:22 +0530, Manas Kumar Nayak wrote: 
> Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>

Thanks.

Regards--
Subrata

> To: LTP List <ltp-list@lists.sourceforge.net>
> Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
> Cc: Masatake YAMATO <yamato@redhat.com>
> ---
> 
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/waitid/waitid02.c	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/waitid/waitid02.c	2009-06-12 21:38:01.000000000 +0530
> @@ -0,0 +1,222 @@
> +/******************************************************************************/
> +/* Copyright (c) Crackerjack Project., 2007                                   */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/******************************************************************************/
> +/******************************************************************************/
> +/*                                                                            */
> +/* File:        waitid02.c                                           	      */
> +/*                                                                            */
> +/* Description: This tests the waitid() syscall                               */
> +/*                                                                            */
> +/* Usage:  <for command-line>                                                 */
> +/* waitid02 [-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:   waitid02                                                      */
> +/* History:     Porting from Crackerjack to LTP is done by                    */
> +/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
> +/******************************************************************************/
> +
> +#include <stdio.h>
> +#include <errno.h>
> +#include <stdlib.h>
> +#include <sys/wait.h>
> +#include <sys/types.h>
> +#include <unistd.h>
> +#include <sys/stat.h>
> +
> +/* Harness Specific Include Files. */
> +#include "test.h"
> +#include "usctest.h"
> +#include "linux_syscall_numbers.h"
> +
> +/* Extern Global Variables */
> +extern int Tst_count;           /* counter for tst_xxx routines.         */
> +extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
> +
> +/* Global Variables */
> +char *TCID = "waitid02";  /* Test program identifier.*/
> +int  testno;
> +int  TST_TOTAL = 7;                   /* total number of tests in this file.   */
> +
> +/* 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.  */
> +/*                                                                            */
> +/******************************************************************************/
> +extern void cleanup() {
> +        /* Remove tmp dir and all files in it */
> +        TEST_CLEANUP;
> +        tst_rmdir();
> +
> +        /* Exit with appropriate return code. */
> +        tst_exit();
> +}
> +
> +/* 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() {
> +        /* Capture signals if any */
> +        /* Create temporary directories */
> +        TEST_PAUSE;
> +        tst_tmpdir();
> +}
> +
> +
> +int errnochoose(void){   //choose the relative errno
> +
> +    switch (TEST_ERRNO){
> +        case    0:      tst_exit();
> +        case    ECHILD:  strerror((int)"ECHILD");
> +                tst_exit();
> +        case    EINTR:  strerror((int)"EINTR");
> +                tst_exit();
> +        case    EINVAL: strerror((int)"EINVAL");
> +                tst_exit();
> +        default:     strerror((int)"Other Error");
> +                tst_exit();
> +   }
> +        TEST_RETURN = 0;
> +        //tst_exit() ;
> +}
> +
> +
> +int main(int ac, char **av) {
> +	id_t cpid;
> +        id_t id1,id2,id3;
> +	id_t gid1,gid2,gid3;
> +        siginfo_t infop;
> +        int i = 0;
> +
> +        int lc;                 /* loop counter */
> +        char *msg;              /* message returned from parse_opts */
> +	
> +        /* parse standard options */
> +        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
> +             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
> +             tst_exit();
> +           }
> +
> +        setup();
> +
> +        /* Check looping state if -i option given */
> +
> +        for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +                Tst_count = 0;
> +                for (testno = 0; testno < TST_TOTAL; ++testno) {
> +                     
> +	
> +	TEST(waitid(P_ALL,0,&infop,WNOHANG));
> +	if(TEST_RETURN == 0)
> +                tst_resm(TPASS,"Success !");
> +        else{
> +                tst_resm(TFAIL,"Error. is your system >2.6.9 ?");
> +                errnochoose();
> +        }
> +
> +// option == WEXITED | WCONTINUED | WSTOPPED | WNOHANG | WNOWAIT ;
> +
> +	TEST(fork());
> +	if(TEST_RETURN == 0){
> +                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id1=getpid(),gid1=getpgid(0));
> +		exit(5);
> +        }
> +        
> +	TEST(fork());
> +	if(TEST_RETURN == 0){
> +                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id2=getpid(),gid2=getpgid(0));
> +		exit(7);
> +        }
> +
> +	TEST(fork());
> +	if(TEST_RETURN == 0){
> +                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id3=getpid(),gid3=getpgid(0));
> +		exit(6);
> +        }
> +
> +        tst_resm(TINFO,"I'm a father %d",cpid=getpid());
> +
> +        TEST(waitid(P_PGID,cpid,&infop,WEXITED));
> +	if(TEST_RETURN == 0){				
> +	 tst_resm(TPASS,"Success ... 0 is returned.");
> +         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
> +	}else {
> +		tst_resm(TFAIL,"Fail...  %d is returned",TEST_RETURN);
> +                errnochoose();
> +	     }
> +
> +        TEST(waitid(P_PGID,id2,&infop,WEXITED));
> +	if(TEST_RETURN == 0){				//NOCHILD
> +         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
> +	 tst_resm(TPASS,"Success2 ... 0 is returned");
> +	}else {
> +		tst_resm(TFAIL,"Fail...  %d is returned",TEST_RETURN);
> +                errnochoose();
> +	     }
> +
> +        TEST(i = waitid(P_PID,id1,&infop,WCONTINUED));
> +	if(TEST_RETURN == 0){				//EINVAL
> +         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
> +	 tst_resm(TPASS,"Success3 ... 0 is returned");
> +	}else {
> +		tst_resm(TFAIL,"Fail...  %d is returned",i);
> +                errnochoose();
> +	     }
> +          }
> +     }	
> +        cleanup();
> +	tst_exit();
> +}
> +
> +
> +
> --- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:28:39.000000000 +0530
> +++ ltp-full-20090531/runtest/syscalls	2009-06-12 21:39:15.000000000 +0530
> @@ -1272,6 +1272,7 @@ waitpid12 waitpid12
>  waitpid13 waitpid13
> 
>  waitid01 waitid01
> +waitid02 waitid02
> 
>  write01 write01
>  write02 write02
> 
> ---
> Regards--
> Manas
> 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 04/05] Add/Port waitid02 test for waitid() syscall
  2009-06-12 17:52 ` [LTP] [PATCH 04/05] Add/Port waitid02 " Manas Kumar Nayak
  2009-06-15 19:16   ` Subrata Modak
@ 2009-06-15 19:16   ` Subrata Modak
  1 sibling, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:16 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:22 +0530, Manas Kumar Nayak wrote: 
> Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>

Thanks.

Regards--
Subrata

> To: LTP List <ltp-list@lists.sourceforge.net>
> Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
> Cc: Masatake YAMATO <yamato@redhat.com>
> ---
> 
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/waitid/waitid02.c	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/waitid/waitid02.c	2009-06-12 21:38:01.000000000 +0530
> @@ -0,0 +1,222 @@
> +/******************************************************************************/
> +/* Copyright (c) Crackerjack Project., 2007                                   */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/******************************************************************************/
> +/******************************************************************************/
> +/*                                                                            */
> +/* File:        waitid02.c                                           	      */
> +/*                                                                            */
> +/* Description: This tests the waitid() syscall                               */
> +/*                                                                            */
> +/* Usage:  <for command-line>                                                 */
> +/* waitid02 [-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:   waitid02                                                      */
> +/* History:     Porting from Crackerjack to LTP is done by                    */
> +/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
> +/******************************************************************************/
> +
> +#include <stdio.h>
> +#include <errno.h>
> +#include <stdlib.h>
> +#include <sys/wait.h>
> +#include <sys/types.h>
> +#include <unistd.h>
> +#include <sys/stat.h>
> +
> +/* Harness Specific Include Files. */
> +#include "test.h"
> +#include "usctest.h"
> +#include "linux_syscall_numbers.h"
> +
> +/* Extern Global Variables */
> +extern int Tst_count;           /* counter for tst_xxx routines.         */
> +extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
> +
> +/* Global Variables */
> +char *TCID = "waitid02";  /* Test program identifier.*/
> +int  testno;
> +int  TST_TOTAL = 7;                   /* total number of tests in this file.   */
> +
> +/* 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.  */
> +/*                                                                            */
> +/******************************************************************************/
> +extern void cleanup() {
> +        /* Remove tmp dir and all files in it */
> +        TEST_CLEANUP;
> +        tst_rmdir();
> +
> +        /* Exit with appropriate return code. */
> +        tst_exit();
> +}
> +
> +/* 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() {
> +        /* Capture signals if any */
> +        /* Create temporary directories */
> +        TEST_PAUSE;
> +        tst_tmpdir();
> +}
> +
> +
> +int errnochoose(void){   //choose the relative errno
> +
> +    switch (TEST_ERRNO){
> +        case    0:      tst_exit();
> +        case    ECHILD:  strerror((int)"ECHILD");
> +                tst_exit();
> +        case    EINTR:  strerror((int)"EINTR");
> +                tst_exit();
> +        case    EINVAL: strerror((int)"EINVAL");
> +                tst_exit();
> +        default:     strerror((int)"Other Error");
> +                tst_exit();
> +   }
> +        TEST_RETURN = 0;
> +        //tst_exit() ;
> +}
> +
> +
> +int main(int ac, char **av) {
> +	id_t cpid;
> +        id_t id1,id2,id3;
> +	id_t gid1,gid2,gid3;
> +        siginfo_t infop;
> +        int i = 0;
> +
> +        int lc;                 /* loop counter */
> +        char *msg;              /* message returned from parse_opts */
> +	
> +        /* parse standard options */
> +        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
> +             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
> +             tst_exit();
> +           }
> +
> +        setup();
> +
> +        /* Check looping state if -i option given */
> +
> +        for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +                Tst_count = 0;
> +                for (testno = 0; testno < TST_TOTAL; ++testno) {
> +                     
> +	
> +	TEST(waitid(P_ALL,0,&infop,WNOHANG));
> +	if(TEST_RETURN == 0)
> +                tst_resm(TPASS,"Success !");
> +        else{
> +                tst_resm(TFAIL,"Error. is your system >2.6.9 ?");
> +                errnochoose();
> +        }
> +
> +// option == WEXITED | WCONTINUED | WSTOPPED | WNOHANG | WNOWAIT ;
> +
> +	TEST(fork());
> +	if(TEST_RETURN == 0){
> +                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id1=getpid(),gid1=getpgid(0));
> +		exit(5);
> +        }
> +        
> +	TEST(fork());
> +	if(TEST_RETURN == 0){
> +                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id2=getpid(),gid2=getpgid(0));
> +		exit(7);
> +        }
> +
> +	TEST(fork());
> +	if(TEST_RETURN == 0){
> +                tst_resm(TINFO,"I'm a child,my id is %d,gpid is %d",id3=getpid(),gid3=getpgid(0));
> +		exit(6);
> +        }
> +
> +        tst_resm(TINFO,"I'm a father %d",cpid=getpid());
> +
> +        TEST(waitid(P_PGID,cpid,&infop,WEXITED));
> +	if(TEST_RETURN == 0){				
> +	 tst_resm(TPASS,"Success ... 0 is returned.");
> +         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
> +	}else {
> +		tst_resm(TFAIL,"Fail...  %d is returned",TEST_RETURN);
> +                errnochoose();
> +	     }
> +
> +        TEST(waitid(P_PGID,id2,&infop,WEXITED));
> +	if(TEST_RETURN == 0){				//NOCHILD
> +         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
> +	 tst_resm(TPASS,"Success2 ... 0 is returned");
> +	}else {
> +		tst_resm(TFAIL,"Fail...  %d is returned",TEST_RETURN);
> +                errnochoose();
> +	     }
> +
> +        TEST(i = waitid(P_PID,id1,&infop,WCONTINUED));
> +	if(TEST_RETURN == 0){				//EINVAL
> +         tst_resm(TINFO,"si_pid = %d ; si_code = %d ; si_status = %d",infop.si_pid,infop.si_code,infop.si_status);
> +	 tst_resm(TPASS,"Success3 ... 0 is returned");
> +	}else {
> +		tst_resm(TFAIL,"Fail...  %d is returned",i);
> +                errnochoose();
> +	     }
> +          }
> +     }	
> +        cleanup();
> +	tst_exit();
> +}
> +
> +
> +
> --- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:28:39.000000000 +0530
> +++ ltp-full-20090531/runtest/syscalls	2009-06-12 21:39:15.000000000 +0530
> @@ -1272,6 +1272,7 @@ waitpid12 waitpid12
>  waitpid13 waitpid13
> 
>  waitid01 waitid01
> +waitid02 waitid02
> 
>  write01 write01
>  write02 write02
> 
> ---
> Regards--
> Manas
> 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall
  2009-06-12 17:52 ` [LTP] [PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall Manas Kumar Nayak
@ 2009-06-15 19:16   ` Subrata Modak
  0 siblings, 0 replies; 14+ messages in thread
From: Subrata Modak @ 2009-06-15 19:16 UTC (permalink / raw)
  To: Manas Kumar Nayak; +Cc: LTP List

On Fri, 2009-06-12 at 23:22 +0530, Manas Kumar Nayak wrote: 
> Signed-off-by: Manas Kumar Nayak <maknayak@in.ibm.com>

Thanks.

Regards--
Subrata

> To: LTP List <ltp-list@lists.sourceforge.net>
> Cc: Subrata Modak <subrata@linux.vnet.ibm.com>
> Cc: Masatake YAMATO <yamato@redhat.com>
> ---
> 
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/quotactl/Makefile	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/quotactl/Makefile	2009-06-12 21:44:37.000000000 +0530
> @@ -0,0 +1,31 @@
> +#
> +#  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 St, Fifth Floor, Boston, MA  02110-1301  USA
> +#
> +
> +CFLAGS += -I../../../../include -Wall
> +LDLIBS += -L../../../../lib -lltp
> +
> +SRCS    = $(wildcard *.c)
> +TARGETS = $(patsubst %.c,%,$(SRCS))
> +
> +all: $(TARGETS)
> +
> +install:
> +	@set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
> +
> +clean:
> +	rm -f $(TARGETS)
> --- ltp-full-20090531.orig/testcases/kernel/syscalls/quotactl/quotactl01.c	1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20090531/testcases/kernel/syscalls/quotactl/quotactl01.c	2009-06-12 22:51:19.000000000 +0530
> @@ -0,0 +1,168 @@
> +/******************************************************************************/
> +/* Copyright (c) Crackerjack Project., 2007                                   */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/******************************************************************************/
> +/******************************************************************************/
> +/*                                                                            */
> +/* File:        quotactl01.c                                                  */
> +/*                                                                            */
> +/* Description: This tests the quotactl() syscall                             */
> +/*                                                                            */
> +/* Usage:  <for command-line>                                                 */
> +/* quotactl01 [-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:   quotactl01                                                    */
> +/* History:     Porting from Crackerjack to LTP is done by                    */
> +/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
> +/******************************************************************************/
> +#include <fcntl.h>
> +#include <unistd.h>
> +#include <sys/syscall.h>
> +#include <stdio.h>
> +#include <errno.h>
> +#include <linux/fs.h>
> +#include <sys/quota.h>
> +#include <sys/types.h>
> +
> +
> +/* Harness Specific Include Files. */
> +#include "test.h"
> +#include "usctest.h"
> +#include "linux_syscall_numbers.h"
> +
> +/* Extern Global Variables */
> +extern int Tst_count;           /* counter for tst_xxx routines.         */
> +extern char *TESTDIR;           /* temporary dir created by tst_tmpdir() */
> +
> +/* Global Variables */
> +char *TCID = "quotactl01";  /* Test program identifier.*/
> +int  testno;
> +int  TST_TOTAL = 1;                   /* total number of tests in this file.   */
> +
> +/* 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.  */
> +/*                                                                            */
> +/******************************************************************************/
> +extern void cleanup() {
> +        /* Remove tmp dir and all files in it */
> +        TEST_CLEANUP;
> +        tst_rmdir();
> +
> +        /* Exit with appropriate return code. */
> +        tst_exit();
> +}
> +
> +/* 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() {
> +        /* Capture signals if any */
> +        /* Create temporary directories */
> +        TEST_PAUSE;
> +        tst_tmpdir();
> +}
> +
> +/*
> +*  WARNING!! This test may cause the potential harm to the system, we DO NOT
> +*  provide any warranty for the safety!!
> +*/
> +/*
> +* To use this testcase , the quota function must be turned on and the user must be * the super user
> +*/
> +
> +int cmd[] = {Q_QUOTAON, Q_QUOTAOFF, Q_GETQUOTA, Q_SETQUOTA, Q_GETINFO, Q_SETINFO, Q_GETFMT, Q_SYNC};
> +int retval = 0, id = 0, i = 0;
> +
> +int main(int ac, char **av) {
> +        int newtid = -1;
> +        int result;
> +        int lc;                 /* loop counter */
> +        char *msg;              /* message returned from parse_opts */
> +	
> +        /* parse standard options */
> +        if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
> +             tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
> +             tst_exit();
> +           }
> +
> +        setup();
> +
> +        /* Check looping state if -i option given */
> +        for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +                Tst_count = 0;
> +                for (testno = 0; testno < TST_TOTAL; ++testno) {
> +        
> +		id = getuid();
> +                for (i = 0; i <= 7; i++){
> +                        TEST(retval = syscall(__NR_quotactl, cmd[i], (const char *)NULL, id, (caddr_t)NULL));
> +			if(TEST_RETURN != 0){
> +                 	   	tst_resm(TFAIL, "%s failed - errno = %d : %s ...cmderror=%s", TCID, TEST_ERRNO, strerror(TEST_ERRNO),cmd[i]);
> +                        }else{
> +        			tst_resm(TPASS, "quotactl call succeeded");
> +                        }
> +                }
> +	             TEST(result = syscall(258, &newtid));     //call quotactl()
> +                     if(TEST_RETURN == getpid()) {
> +                        cleanup();
> +                     }
> +                     else {
> +                           cleanup();
> +	  	           tst_exit();
> +                     }
> +                }
> +        }	
> +        cleanup();
> +	tst_exit();
> +}
> +
> --- ltp-full-20090531.orig/runtest/syscalls	2009-06-12 21:42:54.000000000 +0530
> +++ ltp-full-20090531/runtest/syscalls	2009-06-12 22:54:14.000000000 +0530
> @@ -742,6 +742,7 @@ pwrite02 pwrite02
>  pwrite03 pwrite03
>  pwrite04 pwrite04
> 
> +quotactl01 quotactl01
> 
>  read01 read01
>  read02 read02
> 
> ---
> Regards--
> Manas
> 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

end of thread, other threads:[~2009-06-15 20:38 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-12 17:51 [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Manas Kumar Nayak
2009-06-12 17:51 ` [LTP] [PATCH 01/05] Add/Port mbind01 test for mbind() syscall Manas Kumar Nayak
2009-06-15 19:15   ` Subrata Modak
2009-06-15 19:15   ` Subrata Modak
2009-06-12 17:52 ` [LTP] [PATCH 02/05] Add/Port sched_getaffinity01 test for sched_getaffinity() syscall Manas Kumar Nayak
2009-06-15 19:16   ` Subrata Modak
2009-06-12 17:52 ` [LTP] [PATCH 03/05] Add/Port waitid01 test for waitid() syscall Manas Kumar Nayak
2009-06-15 19:16   ` Subrata Modak
2009-06-12 17:52 ` [LTP] [PATCH 04/05] Add/Port waitid02 " Manas Kumar Nayak
2009-06-15 19:16   ` Subrata Modak
2009-06-15 19:16   ` Subrata Modak
2009-06-12 17:52 ` [LTP] [PATCH 05/05] Add/Port quotactl01 test for quotactl() syscall Manas Kumar Nayak
2009-06-15 19:16   ` Subrata Modak
2009-06-15 19:15 ` [LTP] [PATCH 00/05] [3rd Bunch] Port Crackerjack Syscall tests(missing) to LTP Subrata Modak

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.