Hi;

According to Ulrich Drepper, times02 test is bogus (at least for archs which 
report return value and
error in the same value) and times has no reserved error code. So following 
patch removes times02 from testsuite and moves times03 test to times02. 

For more information please see 
http://sources.redhat.com/ml/libc-alpha/2008-04/msg00054.html and 
http://sources.redhat.com/ml/libc-alpha/2008-04/msg00055.html

Signed-off-by: S.Çağlar Onur <[EMAIL PROTECTED]>

diff -Nur ltp-full-20080331.orig/doc/testcases/kernel.txt 
ltp-full-20080331/doc/testcases/kernel.txt
--- ltp-full-20080331.orig/doc/testcases/kernel.txt     2008-03-31 
10:25:07.000000000 +0300
+++ ltp-full-20080331/doc/testcases/kernel.txt  2008-04-13 22:18:00.000000000 
+0300
@@ -3312,10 +3312,6 @@
  
   times02  
   
-       Testcase to test that times() sets errno correctly
-  
-  times03  
-  
        Testcase to check the basic functionality of the times() system call.
  
 
diff -Nur ltp-full-20080331.orig/runtest/ltplite 
ltp-full-20080331/runtest/ltplite
--- ltp-full-20080331.orig/runtest/ltplite      2008-03-31 10:25:07.000000000 
+0300
+++ ltp-full-20080331/runtest/ltplite   2008-04-13 22:18:33.000000000 +0300
@@ -908,7 +908,6 @@
 
 times01 times01
 times02 times02
-times03 times03
 
 truncate01 truncate01
 truncate02 truncate02
diff -Nur ltp-full-20080331.orig/runtest/stress.part3 
ltp-full-20080331/runtest/stress.part3
--- ltp-full-20080331.orig/runtest/stress.part3 2008-03-31 10:25:07.000000000 
+0300
+++ ltp-full-20080331/runtest/stress.part3      2008-04-13 22:18:13.000000000 
+0300
@@ -803,7 +803,6 @@
 
 times01 times01
 times02 times02
-times03 times03
 
 truncate01 truncate01
 truncate02 truncate02
diff -Nur ltp-full-20080331.orig/runtest/syscalls 
ltp-full-20080331/runtest/syscalls
--- ltp-full-20080331.orig/runtest/syscalls     2008-03-31 10:25:07.000000000 
+0300
+++ ltp-full-20080331/runtest/syscalls  2008-04-13 22:18:27.000000000 +0300
@@ -924,7 +924,6 @@
 
 times01 times01
 times02 times02
-times03 times03
 
 truncate01 truncate01
 truncate02 truncate02
diff -Nur ltp-full-20080331.orig/testcases/kernel/syscalls/times/times02.c 
ltp-full-20080331/testcases/kernel/syscalls/times/times02.c
--- ltp-full-20080331.orig/testcases/kernel/syscalls/times/times02.c    
2008-03-31 10:25:10.000000000 +0300
+++ ltp-full-20080331/testcases/kernel/syscalls/times/times02.c 2008-04-13 
22:19:40.000000000 +0300
@@ -22,18 +22,18 @@
  *     times02.c
  *
  * DESCRIPTION
- *     Testcase to test that times() sets errno correctly
+ *     Testcase to check the basic functionality of the times() system call.
  *
  * ALGORITHM
- *     block1: Pass an invalid address as the "tms" structure, and expect
- *             that times() would return EFAULT.
+ *     This testcase checks the values that times(2) system call returns.
+ *     Start a process, and spend some CPU time by performing a spin in
+ *     a for-loop. Then use the times() system call, to determine the
+ *     cpu time/sleep time, and other statistics.
  *
  * USAGE:  <for command-line>
- *     times02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
+ *     times02 [-c n] [-f] [-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.
+ *             -f   : Turn off functionality Testing.
  *             -P x : Pause for x seconds between iterations.
  *             -t   : Turn on syscall timing.
  *
@@ -45,54 +45,197 @@
  *     NONE
  */
 
+#include <sys/types.h>
 #include <sys/times.h>
 #include <errno.h>
+#include <wait.h>
+#include <time.h>
 #include <test.h>
 #include <usctest.h>
+#include <signal.h>
 
 char *TCID = "times02";
 int TST_TOTAL = 1;
 extern int Tst_count;
-int exp_enos[]={EFAULT, 0};
+int exp_enos[]={0};
+volatile int timeout;          /* Did we timeout in alarm() ? */
+
+void work(void);
+void sighandler(int signal, siginfo_t *info, void *uc);
 
 void setup(void);
 void cleanup(void);
 
-#if !defined(UCLINUX)
-
 int main(int argc, char **argv)
 {
-       int lc;                         /* loop counter */
        char *msg;                      /* message returned from parse_opts */
 
+       struct tms buf1, buf2;
+       time_t start_time, end_time;
+       int pid2, status, fail=0;
+       struct sigaction sa;
+
        /* parse standard options */
        if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) !=
                (char *)NULL) {
                tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-               /*NOTREACHED*/
+               /*NOT REACHED*/
        }
 
        setup();
 
-       /* check for looping state if -i option is given */
-       for (lc = 0; TEST_LOOPING(lc); lc++) {
-               /* reset Tst_count in case we are looping */
-               Tst_count = 0;
-
-               TEST(times((void *)-1));
-               if (TEST_RETURN == -1) {
-                       TEST_ERROR_LOG(TEST_ERRNO);
-                       if (errno != EFAULT) {
-                               tst_resm(TFAIL, "Expected EFAULT, got %d",
-                                               errno);
-                       } else {
-                               tst_resm(TPASS, "Received EFAULT as expected");
+       /* 
+        * We spend time in userspace using the following mechanism :
+        * Setup an alarm() for 3 secs and do some simple loop operations
+        * until we get the signal. This makes the test independent of 
+        * processor speed.
+        */
+       sa.sa_sigaction = sighandler;
+       sigemptyset(&sa.sa_mask);
+       sa.sa_flags = SA_SIGINFO;
+       
+       if (sigaction(SIGALRM, &sa, NULL) < 0) {
+               tst_brkm(TBROK, cleanup, "Sigaction failed !\n");
+               /* NOT REACHED */
+       }
+       
+       timeout = 0;
+       alarm(3);
+
+       work();
+
+       /*
+        * At least some CPU time must be used in system space. This is
+        * achieved by executing the times(2) call for
+        * atleast 5 secs. This logic makes it independant
+        * of the processor speed.
+        */
+       start_time = time(NULL);
+       for (;;) {
+               if (times(&buf1) == -1) {
+                       TEST_ERROR_LOG(errno);
+                       tst_resm(TFAIL, "Call to times(2) "
+                                "failed, errno = %d", errno);
+               }
+               end_time = time(NULL);
+               if ((end_time - start_time) > 5) {
+                       break;
+               }
+       }
+       if (times(&buf1) == -1) {
+               TEST_ERROR_LOG(errno);
+               tst_resm(TFAIL, "Call to times(2) failed, "
+                        "errno = %d", errno);
+       } else {
+               /*
+                * Perform functional verification if test
+                * executed without (-f) option.
+                */
+               if (STD_FUNCTIONAL_TEST) {
+                       if (buf1.tms_utime == 0) {
+                               tst_resm(TFAIL, "Error: times() report "
+                                       "0 user time");
+                               fail=1;
+                       }
+                       if (buf1.tms_stime == 0) {
+                               tst_resm(TFAIL, "Error: times() report "
+                                       "0 system time");
+                               fail=1;
+                       }
+                       if (buf1.tms_cutime != 0) {
+                               tst_resm(TFAIL, "Error: times() report "
+                                       "%d child user time",
+                                       buf1.tms_cutime);
+                               fail=1;
+                       }
+                       if (buf1.tms_cstime != 0) {
+                               tst_resm(TFAIL, "Error: times() report "        
                                                "%d child system time",
+                                               buf1.tms_cstime);
+                               fail=1;
                        }
+
+                       pid2 = FORK_OR_VFORK();
+                       if (pid2 < 0) {
+                               tst_brkm(TFAIL, cleanup, "Fork failed");
+                               /*NOTREACHED*/
+                       } else if (pid2 == 0) {
+                               
+                               /* Spend some cycles in userspace */
+
+                               timeout = 0;
+                               alarm(3);
                                
+                               work();
+
+
+                               /*
+                                * Atleast some CPU system ime must be used
+                                * even in the child process (thereby
+                                * making it independent of the
+                                * processor speed). In fact the child
+                                * uses twice as much CPU time.
+                                */
+                               start_time = time(NULL);
+                               for (;;) {
+                                       if (times(&buf2) == -1) {
+                                               tst_resm(TFAIL,
+                                                       "Call to times "
+                                                       "failed, "
+                                                       "errno = %d",
+                                                       errno);
+                                               exit(1);
+                                       }
+                                       end_time = time(NULL);
+                                       if ((end_time - start_time)
+                                                       > 10) {
+                                               break;
+                                       }
+                               }
+                               exit(0);
+                       }
+
+                       waitpid(pid2, &status, 0);
+                       if (WEXITSTATUS(status) != 0) {
+                               tst_resm(TFAIL, "Call to times(2) "
+                                               "failed in child");
+                       }
+                       if (times(&buf2) == -1) {       
+                               TEST_ERROR_LOG(TEST_ERRNO);
+                               tst_resm(TFAIL, "Call to times failed "
+                                               "errno = %d", errno);
+                               fail=1;
+                       }
+                       if (buf1.tms_utime > buf2.tms_utime) {
+                               tst_resm(TFAIL, "Error: parents's "
+                                        "user time(%d) before child "
+                                        "> parent's user time (%d) "
+                                        "after child",
+                                        buf1.tms_utime,
+                                        buf2.tms_utime);
+                               fail=1;
+                       }
+                       if (buf2.tms_cutime == 0) {
+                               tst_resm(TFAIL, "Error: times() "
+                                        "report %d child user "
+                                        "time should be > than "
+                                        "zero", buf2.tms_cutime);
+                               fail=1;
+                       }
+                       if (buf2.tms_cstime == 0) {
+                               tst_resm(TFAIL, "Error: times() "
+                                        "report %d child system time "
+                                        "should be > than zero",
+                                        buf2.tms_cstime);
+                               fail=1;
+                       }
+                       if (fail == 0) {
+                               tst_resm(TPASS, "%s: Functionality "
+                               "test passed", TCID);
+                       }
+                                       
                } else {
-                       tst_resm(TFAIL, "times(2) failed to FAIL");
+                       tst_resm(TPASS, "%s call succeeded", TCID);
                }
-
        }
        cleanup();
        /*NOTREACHED*/
@@ -101,15 +244,34 @@
 
 }
 
-#else
+/*
+ * sighandler
+ *     Set the timeout to indicate we timed out in the alarm().
+ */
 
-int main()
+void sighandler (int signal, siginfo_t *info, void *uc)
 {
-       tst_resm(TINFO, "test is not available on uClinux");
-       return 0;
+       if (signal == SIGALRM) 
+               timeout = 1;
+       else
+               tst_brkm (TBROK, cleanup, "Unexpected signal %d\n", signal);
 }
 
-#endif /* if !defined(UCLINUX) */
+/*
+ * work
+ *     Do some work in user space, until we get a timeout.
+ */
+
+void work(void)
+{
+       int i, j, k;
+
+       while (!timeout)
+               for (i = 0; i < 10000; i ++)
+                       for (j = 0; j < 100; j ++)
+                               k = i * j;
+       timeout = 0;
+}
 
 /*
  * setup()
diff -Nur ltp-full-20080331.orig/testcases/kernel/syscalls/times/times03.c 
ltp-full-20080331/testcases/kernel/syscalls/times/times03.c
--- ltp-full-20080331.orig/testcases/kernel/syscalls/times/times03.c    
2008-03-31 10:25:10.000000000 +0300
+++ ltp-full-20080331/testcases/kernel/syscalls/times/times03.c 1970-01-01 
02:00:00.000000000 +0200
@@ -1,312 +0,0 @@
-/*
- *
- *   Copyright (c) International Business Machines  Corp., 2001
- *
- *   This program is free software;  you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/*
- * NAME
- *     times03.c
- *
- * DESCRIPTION
- *     Testcase to check the basic functionality of the times() system call.
- *
- * ALGORITHM
- *     This testcase checks the values that times(2) system call returns.
- *     Start a process, and spend some CPU time by performing a spin in
- *     a for-loop. Then use the times() system call, to determine the
- *     cpu time/sleep time, and other statistics.
- *
- * USAGE:  <for command-line>
- *     times03 [-c n] [-f] [-P x] [-t]
- *     where,  -c n : Run n copies concurrently.
- *             -f   : Turn off functionality Testing.
- *             -P x : Pause for x seconds between iterations.
- *             -t   : Turn on syscall timing.
- *
- * History
- *     07/2001 John George
- *             -Ported
- *
- * Restrictions
- *     NONE
- */
-
-#include <sys/types.h>
-#include <sys/times.h>
-#include <errno.h>
-#include <wait.h>
-#include <time.h>
-#include <test.h>
-#include <usctest.h>
-#include <signal.h>
-
-char *TCID = "times03";
-int TST_TOTAL = 1;
-extern int Tst_count;
-int exp_enos[]={0};
-volatile int timeout;          /* Did we timeout in alarm() ? */
-
-void work(void);
-void sighandler(int signal, siginfo_t *info, void *uc);
-
-void setup(void);
-void cleanup(void);
-
-int main(int argc, char **argv)
-{
-       char *msg;                      /* message returned from parse_opts */
-
-       struct tms buf1, buf2;
-       time_t start_time, end_time;
-       int pid2, status, fail=0;
-       struct sigaction sa;
-
-       /* parse standard options */
-       if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) !=
-               (char *)NULL) {
-               tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-               /*NOT REACHED*/
-       }
-
-       setup();
-
-       /* 
-        * We spend time in userspace using the following mechanism :
-        * Setup an alarm() for 3 secs and do some simple loop operations
-        * until we get the signal. This makes the test independent of 
-        * processor speed.
-        */
-       sa.sa_sigaction = sighandler;
-       sigemptyset(&sa.sa_mask);
-       sa.sa_flags = SA_SIGINFO;
-       
-       if (sigaction(SIGALRM, &sa, NULL) < 0) {
-               tst_brkm(TBROK, cleanup, "Sigaction failed !\n");
-               /* NOT REACHED */
-       }
-       
-       timeout = 0;
-       alarm(3);
-
-       work();
-
-       /*
-        * At least some CPU time must be used in system space. This is
-        * achieved by executing the times(2) call for
-        * atleast 5 secs. This logic makes it independant
-        * of the processor speed.
-        */
-       start_time = time(NULL);
-       for (;;) {
-               if (times(&buf1) == -1) {
-                       TEST_ERROR_LOG(errno);
-                       tst_resm(TFAIL, "Call to times(2) "
-                                "failed, errno = %d", errno);
-               }
-               end_time = time(NULL);
-               if ((end_time - start_time) > 5) {
-                       break;
-               }
-       }
-       if (times(&buf1) == -1) {
-               TEST_ERROR_LOG(errno);
-               tst_resm(TFAIL, "Call to times(2) failed, "
-                        "errno = %d", errno);
-       } else {
-               /*
-                * Perform functional verification if test
-                * executed without (-f) option.
-                */
-               if (STD_FUNCTIONAL_TEST) {
-                       if (buf1.tms_utime == 0) {
-                               tst_resm(TFAIL, "Error: times() report "
-                                       "0 user time");
-                               fail=1;
-                       }
-                       if (buf1.tms_stime == 0) {
-                               tst_resm(TFAIL, "Error: times() report "
-                                       "0 system time");
-                               fail=1;
-                       }
-                       if (buf1.tms_cutime != 0) {
-                               tst_resm(TFAIL, "Error: times() report "
-                                       "%d child user time",
-                                       buf1.tms_cutime);
-                               fail=1;
-                       }
-                       if (buf1.tms_cstime != 0) {
-                               tst_resm(TFAIL, "Error: times() report "        
                                                "%d child system time",
-                                               buf1.tms_cstime);
-                               fail=1;
-                       }
-
-                       pid2 = FORK_OR_VFORK();
-                       if (pid2 < 0) {
-                               tst_brkm(TFAIL, cleanup, "Fork failed");
-                               /*NOTREACHED*/
-                       } else if (pid2 == 0) {
-                               
-                               /* Spend some cycles in userspace */
-
-                               timeout = 0;
-                               alarm(3);
-                               
-                               work();
-
-
-                               /*
-                                * Atleast some CPU system ime must be used
-                                * even in the child process (thereby
-                                * making it independent of the
-                                * processor speed). In fact the child
-                                * uses twice as much CPU time.
-                                */
-                               start_time = time(NULL);
-                               for (;;) {
-                                       if (times(&buf2) == -1) {
-                                               tst_resm(TFAIL,
-                                                       "Call to times "
-                                                       "failed, "
-                                                       "errno = %d",
-                                                       errno);
-                                               exit(1);
-                                       }
-                                       end_time = time(NULL);
-                                       if ((end_time - start_time)
-                                                       > 10) {
-                                               break;
-                                       }
-                               }
-                               exit(0);
-                       }
-
-                       waitpid(pid2, &status, 0);
-                       if (WEXITSTATUS(status) != 0) {
-                               tst_resm(TFAIL, "Call to times(2) "
-                                               "failed in child");
-                       }
-                       if (times(&buf2) == -1) {       
-                               TEST_ERROR_LOG(TEST_ERRNO);
-                               tst_resm(TFAIL, "Call to times failed "
-                                               "errno = %d", errno);
-                               fail=1;
-                       }
-                       if (buf1.tms_utime > buf2.tms_utime) {
-                               tst_resm(TFAIL, "Error: parents's "
-                                        "user time(%d) before child "
-                                        "> parent's user time (%d) "
-                                        "after child",
-                                        buf1.tms_utime,
-                                        buf2.tms_utime);
-                               fail=1;
-                       }
-                       if (buf2.tms_cutime == 0) {
-                               tst_resm(TFAIL, "Error: times() "
-                                        "report %d child user "
-                                        "time should be > than "
-                                        "zero", buf2.tms_cutime);
-                               fail=1;
-                       }
-                       if (buf2.tms_cstime == 0) {
-                               tst_resm(TFAIL, "Error: times() "
-                                        "report %d child system time "
-                                        "should be > than zero",
-                                        buf2.tms_cstime);
-                               fail=1;
-                       }
-                       if (fail == 0) {
-                               tst_resm(TPASS, "%s: Functionality "
-                               "test passed", TCID);
-                       }
-                                       
-               } else {
-                       tst_resm(TPASS, "%s call succeeded", TCID);
-               }
-       }
-       cleanup();
-       /*NOTREACHED*/
-
-  return(0);
-
-}
-
-/*
- * sighandler
- *     Set the timeout to indicate we timed out in the alarm().
- */
-
-void sighandler (int signal, siginfo_t *info, void *uc)
-{
-       if (signal == SIGALRM) 
-               timeout = 1;
-       else
-               tst_brkm (TBROK, cleanup, "Unexpected signal %d\n", signal);
-}
-
-/*
- * work
- *     Do some work in user space, until we get a timeout.
- */
-
-void work(void)
-{
-       int i, j, k;
-
-       while (!timeout)
-               for (i = 0; i < 10000; i ++)
-                       for (j = 0; j < 100; j ++)
-                               k = i * j;
-       timeout = 0;
-}
-
-/*
- * setup()
- *     performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
-       /* capture signals */
-       tst_sig(FORK, DEF_HANDLER, cleanup);
-
-       /* set the expected errnos... */
-       TEST_EXP_ENOS(exp_enos);
-
-       /* Pause if that option was specified
-        * TEST_PAUSE contains the code to fork the test with the -c option.
-        */
-       TEST_PAUSE;
-}
-
-/*
- * cleanup()
- *     performs all ONE TIME cleanup for this test at
- *     completion or premature exit
- */
-void
-cleanup(void)
-{
-       /*
-        * print timing stats if that option was specified.
-        * print errno log if that option was specified.
-        */
-       TEST_CLEANUP;
-
-       /* exit with return code appropriate for results */
-       tst_exit();
-       /*NOTREACHED*/
-}


Cheers
-- 
S.Çağlar Onur <[EMAIL PROTECTED]>
http://cekirdek.pardus.org.tr/~caglar/

Linux is like living in a teepee. No Windows, no Gates and an Apache in house!

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to