From: Subrata <sub...@us...> - 2008-02-26 11:14:52
|
Update of /cvsroot/ltp/ltp/testcases/kernel/timers/clock_settime In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv729/ltp/testcases/kernel/timers/clock_settime Modified Files: clock_settime03.c Log Message: CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID are also supported besides CLOCK_REALTIME and CLOCK_MONOTONIC. That's the cause of the failure of clock_gettime03, timer_create02 and timer_create04. Another cause is that struct sigevent evp is assigned with invalid values when option is 1. That's the cause of the failure of timer_create02 and timer_create03. CLOCK_REALTIME_HR and CLOCK_MONOTONIC_HR have been removed in the later kernel versions, hence the failures in the test. I am still trying to find out if any kernel versions used to support these. CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID are supported from 2.6.12 kernel version onwards and the test case needs to be modified for this change. Also in timer_create02.c, setup_test() case1 needs to be modified so as to make evp NULL instead of its members. Since the testcase behaves differently for different kernel versions, a version check needs to be added for making it pass across versions. I'm removing the HR clocks from the tests along with other changes, by, Anoop V. Chakkalakkal <ano...@in...> Index: clock_settime03.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/timers/clock_settime/clock_settime03.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** clock_settime03.c 22 Aug 2006 05:57:53 -0000 1.5 --- clock_settime03.c 26 Feb 2008 11:14:45 -0000 1.6 *************** *** 92,100 **** static struct timespec spec, *temp, saved; ! clockid_t clocks[11] = { ! CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, ! CLOCK_THREAD_CPUTIME_ID, CLOCK_REALTIME_HR, CLOCK_MONOTONIC_HR, ! MAX_CLOCKS, MAX_CLOCKS + 1, CLOCK_REALTIME, CLOCK_REALTIME, ! CLOCK_REALTIME }; --- 92,105 ---- static struct timespec spec, *temp, saved; ! clockid_t clocks[] = { ! CLOCK_REALTIME, ! CLOCK_MONOTONIC, ! MAX_CLOCKS, ! MAX_CLOCKS + 1, ! CLOCK_REALTIME, ! CLOCK_REALTIME, ! CLOCK_REALTIME, ! CLOCK_PROCESS_CPUTIME_ID, ! CLOCK_THREAD_CPUTIME_ID }; *************** *** 103,118 **** int exp_errno; /* expected error number */ char *exp_errval; /* Expected errorvalue string */ ! } testcase[] = { ! {"Bad address", EFAULT, "EFAULT"}, /* tp bad * */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* MONOTONIC */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* PROCESS_CPUTIME_ID*/ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* THREAD_CPUTIME_ID */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* REALTIME_HR */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* MONOTONIC_HR */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* MAX_CLOCKS */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* MAX_CLOCKS + 1 */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* Invalid timespec */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* NSEC_PER_SEC + 1 */ ! {"Operation not permitted", EPERM, "EPERM"} /* non-root user */ }; --- 108,119 ---- int exp_errno; /* expected error number */ char *exp_errval; /* Expected errorvalue string */ ! } testcase[9] = { ! {"Bad address", EFAULT, "EFAULT"}, /* tp bad */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* CLOCK_MONOTONIC */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* MAX_CLOCKS */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* MAX_CLOCKS + 1 */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* Invalid timespec */ ! {"Invalid parameter", EINVAL, "EINVAL"}, /* NSEC_PER_SEC + 1 */ ! {"Operation not permitted", EPERM, "EPERM"} /* non-root user */ }; *************** *** 131,134 **** --- 132,155 ---- TST_TOTAL = sizeof(testcase) / sizeof(testcase[0]); + /* PROCESS_CPUTIME_ID & THREAD_CPUTIME_ID are not supported on + * kernel versions lower than 2.6.12 + */ + if((tst_kvercmp(2, 6, 12)) < 0) { + testcase[7].err_desc = "Invalid parameter"; /* PROCESS_CPUTIME_ID */ + testcase[7].exp_errno = EINVAL; + testcase[7].exp_errval = "EINVAL"; + testcase[8].err_desc = "Invalid parameter"; /* THREAD_CPUTIME_ID */ + testcase[8].exp_errno = EINVAL; + testcase[8].exp_errval = "EINVAL"; + } + else { + testcase[7].err_desc = "Bad address"; /* Bad timespec pointer */ + testcase[7].exp_errno = EFAULT; + testcase[7].exp_errval = "EFAULT"; + testcase[8].err_desc = "Bad address"; /* Bad timespec pointer */ + testcase[8].exp_errno = EFAULT; + testcase[8].exp_errval = "EFAULT"; + } + /* perform global setup for test */ setup(); *************** *** 204,208 **** --- 225,233 ---- setup_test(int option) { + /* valid timespec */ + spec = saved; + temp = &spec; + /* error sceanrios */ switch (option) { case 0: *************** *** 210,225 **** temp = (struct timespec *) -1; break; ! case 1: ! temp = &spec; ! break; ! case 8: /* Make the parameter of timespec invalid */ spec.tv_nsec = -1; break; ! case 9: /* Make the parameter of timespec invalid */ spec.tv_nsec = NSEC_PER_SEC + 1; break; ! case 10: /* change the User to non-root */ spec.tv_nsec = 0; --- 235,247 ---- temp = (struct timespec *) -1; break; ! case 4: /* Make the parameter of timespec invalid */ spec.tv_nsec = -1; break; ! case 5: /* Make the parameter of timespec invalid */ spec.tv_nsec = NSEC_PER_SEC + 1; break; ! case 6: /* change the User to non-root */ spec.tv_nsec = 0; *************** *** 237,240 **** --- 259,268 ---- } break; + case 7: + case 8: + if (tst_kvercmp(2, 6, 12) >= 0) { + /* Make tp argument bad pointer */ + temp = (struct timespec *) -1; + } } return 0; |