On Wed, Feb 24, 2010 at 11:07 PM, Garrett Cooper <[email protected]> wrote: > On Wed, Feb 24, 2010 at 10:40 PM, Silesh C V <[email protected]> wrote: >> Hi Garrett, >> >> Thanks for the review and suggestions. >> >> On 2/25/10, Garrett Cooper <[email protected]> wrote: >>> On Wed, Feb 24, 2010 at 4:10 AM, Silesh C V <[email protected]> wrote: >>>> >>>> Hi , >>>> >>>> This patch contains tests for the linux RTC driver.The patch is taken >>>> against feb intermediate release.I have also attached the patch.Please >>>> find >>>> the test log at the end of this mail.Build/Run instructions are explained >>>> in >>>> the README. >>>> >>>> >>>> Signed-off-By: Silesh C V <[email protected]> >>>> -- >>>> diff -purN ltp-intermediate-20100228. >>>> orig/testcases/kernel/device-drivers/rtc/Makefile >>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/Makefile >>>> --- >>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/Makefile >>>> 1970-01-01 05:30:00.000000000 +0530 >>>> +++ ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/Makefile >>>> 2010-02-24 15:21:33.000000000 +0530 >>>> @@ -0,0 +1,28 @@ >>>> +# >>>> +# Copyright (c) Larsen & Toubro Infotech Ltd., 2010 >>>> +# >>>> +# 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 = -O2 -Wall >>>> +SRC = test_rtc.c >>>> + >>>> + >>>> +all: $(SRC) >>>> + $(CC) $(CFLAGS) $(SRC) -o rtc-test >>>> + >>>> +clean: >>>> + rm -f rtc-test >>> >>> Please integrate into the Makefile infrastructure. See README.mk-devel >>> for more details. >> >> I can see that under kernel/ directory, the device-drivers directory >> does not follow the new Makefile infrastructure. I tried adding >> device-drivers SUBDIRS to testcases/kernel/Makefile. As none of the >> other device driver test cases follow this Makefile approach, the >> build breaks . > > Because those are kernel modules, and don't yet have an appropriate > template for LTP with the new Makefile infrastructure. Your test uses > straight ioctl(2) calls and doesn't need to be built with kernel > sources, s.t. it can be built perfectly fine within the new makefile > infrastructure. > >>>> diff -purN >>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/README >>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/README >>>> --- >>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/README >>>> 1970-01-01 05:30:00.000000000 +0530 >>>> +++ ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/README >>>> 2010-02-24 14:34:01.000000000 +0530 >>>> @@ -0,0 +1,29 @@ >>>> +test_rtc.c : Test the Real Time Clock driver >>>> + >>>> +Tests supported as of now >>>> +-------------------------- >>>> +1. Read test : This reads the time/date from the RTC >>>> + ioctls tested :- RTC_RD_TIME. >>>> + >>>> +2. Alarm Test: Sets the alarm to 5 seconds in future and makes sure it >>>> rings. >>>> + ioctls tested :- RTC_ALM_SET, RTC_ALM_READ, RTC_AIE_ON, RTC_AIE_OFF. >>>> + >>>> +3. Update interrupts test : Sets Update interrupts enable on, waits for >>>> five >>>> + interrupts and then turns it off. >>>> + ioctls tested :- RTC_UIE_ON, RTC_UIE_OFF. >>>> + >>>> + >>>> +How to Build >>>> +------------ >>>> + >>>> +Enter rtc directory and issue a 'make' . >>>> + >>>> +How to Run >>>> +---------- >>>> + >>>> + The tests assume the rtc device node to be "/dev/rtc". If you have >>>> a >>>> +different node run the test with the name of the node as a parameter. >>>> + >>>> +Eg. If your node is /dev/rtc0, then run the test as >>>> + >>>> + $ ./rtc-test /dev/rtc0 >>>> diff -purN >>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/test_rtc.c >>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/test_rtc.c >>>> --- >>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/test_rtc.c >>>> 1970-01-01 05:30:00.000000000 +0530 >>>> +++ >>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/test_rtc.c >>>> 2010-02-24 15:17:59.000000000 +0530 >>>> @@ -0,0 +1,175 @@ >>>> +/* test_rtc.c >>>> + * >>>> + * Copyright (c) Larsen & Toubro Infotech Ltd., 2010 >>>> + * >>>> + * Contact : Silesh C V <[email protected]> >>>> + * >>>> + * 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 >>>> + * >>>> + */ >>>> + >>>> +#include <sys/ioctl.h> >>>> +#include <stdio.h> >>>> +#include <stdlib.h> >>>> +#include <fcntl.h> >>>> +#include <unistd.h> >>>> +#include <linux/rtc.h> >>>> +#include <errno.h> >>>> + >>>> +int rtc_fd = -1; >>>> + >>>> +void read_alarm_test(void) >>>> +{ >>>> + struct rtc_time rtc_tm; >>>> + int ret; >>>> + unsigned long data; >>>> + >>>> + printf("\nRTC READ TEST:\n"); >>>> + >>>> + /*Read RTC Time*/ >>>> + ret = ioctl(rtc_fd, RTC_RD_TIME, &rtc_tm); >>>> + if (ret == -1) { >>>> + perror("RTC_RD_TIME ioctl"); >>>> + printf("RTC READ TEST Failed\n"); >>>> + return; >>>> + } >>>> + >>>> + printf("RTC READ TEST Passed"); >>>> + printf("\nCurrent RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n", >>>> + rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900, >>>> + rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec); >>> >>> strftime(3) ? >> >> >> OK. Coming in the next patch. > > Awesome :). > >>>> + printf("\nRTC ALARM TEST :\n"); >>>> + >>>> + /*set Alarm to 5 Seconds*/ >>>> + rtc_tm.tm_sec += 5; >>>> + if (rtc_tm.tm_sec >= 60) { >>>> + rtc_tm.tm_sec %= 60; >>>> + rtc_tm.tm_min++; >>>> + } >>>> + >>>> + if (rtc_tm.tm_min == 60) { >>>> + rtc_tm.tm_min = 0; >>>> + rtc_tm.tm_hour++; >>>> + } >>>> + >>>> + if (rtc_tm.tm_hour == 24) >>>> + rtc_tm.tm_hour = 0; >>>> + >>>> + ret = ioctl(rtc_fd, RTC_ALM_SET, &rtc_tm); >>>> + if (ret == -1) { >>>> + perror("RTC_ALM_SET ioctl"); >>>> + printf("RTC ALARM TEST Failed\n"); >>>> + return; >>>> + } >>>> + >>>> + /*Read current alarm time*/ >>>> + ret = ioctl(rtc_fd, RTC_ALM_READ, &rtc_tm); >>>> + if (ret == -1) { >>>> + perror("RTC_ALM_READ ioctl"); >>>> + printf("RTC ALARM TEST Failed\n"); >>>> + return; >>>> + } >>>> + >>>> + printf("Alarm time set to %02d:%02d:%02d.\n", >>>> + rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec); >>>> + /* Enable alarm interrupts */ >>>> + ret = ioctl(rtc_fd, RTC_AIE_ON, 0); >>>> + if (ret == -1) { >>>> + perror("RTC_AIE_ON ioctl"); >>>> + printf("RTC ALARM TEST Failed\n"); >>>> + return; >>>> + } >>>> + >>>> + printf("Waiting 5 seconds for the alarm...\n"); >>>> + ret = read(rtc_fd, &data, sizeof(unsigned long)); >>>> + if (ret == -1) { >>>> + perror("read"); >>>> + printf("RTC ALARM TEST Failed\n"); >>>> + return; >>>> + } >>>> + >>>> + printf("Alarm rang.\n"); >>>> + /* Disable alarm interrupts */ >>>> + ret = ioctl(rtc_fd, RTC_AIE_OFF, 0); >>>> + if (ret == -1) { >>>> + perror("RTC_AIE_OFF ioctl"); >>>> + printf("RTC ALARM TEST Failed\n"); >>>> + return; >>>> + } >>>> + >>>> + printf("RTC ALARM TEST Passed\n"); >>>> +} >>>> + >>>> +void update_interrupts_test(void) >>>> +{ >>>> + int ret, i; >>>> + unsigned long data; >>>> + >>>> + printf("\nRTC UPDATE INTERRUPTS TEST :\n"); >>>> + /*Turn on update interrupts*/ >>>> + ret = ioctl(rtc_fd, RTC_UIE_ON, 0); >>>> + if (ret == -1) { >>>> + perror("RTC_UIE_ON ioctl"); >>>> + printf("RTC UPDATE INTERRUPTS TEST Failed\n"); >>>> + return; >>>> + } >>>> + >>>> + printf("Waiting for 5 update interrupts...\n"); >>>> + for (i = 1; i < 6; i++) { >>>> + ret = read(rtc_fd, &data, sizeof(unsigned long)); >>>> + if (ret == -1) { >>>> + perror("read"); >>>> + printf("RTC UPDATE INTERRUPTS TEST Failed\n"); >>>> + return; >>>> + } >>>> + printf("Update interrupt %d\n", i); >>>> + } >>>> + >>>> + /* Turn off update interrupts */ >>>> + ret = ioctl(rtc_fd, RTC_UIE_OFF, 0); >>>> + if (ret == -1) { >>>> + perror("RTC_UIE_OFF ioctl"); >>>> + printf("RTC UPDATE INTERRUPTS TEST Failed\n"); >>>> + return; >>>> + } >>>> + printf("RTC UPDATE INTERRUPTS TEST Passed\n"); >>> >>> tst_resm(ret == -1 ? TFAIL : TPASS, "RTC update interrupts test %s", >>> ret == -1 ? "failed" : "passed"); >>> >> >> This can be done only when we build the test along with LTP .But as >> the problem I mentioned >> earlier the device-driver directory is still out of the overall LTP build . > > As said before, getting this in the standard build is trivial and the > other pieces aren't in the standard build because of the reasons I > mentioned earlier. > >>>> +} >>>> + >>>> +int main(int argc, char **argv) >>>> +{ >>>> + char *rtc_dev = "/dev/rtc" >>>> + >>>> + >>>> + if (argc == 2) >>>> + rtc_dev = argv[1]; >>>> + >>>> + rtc_fd = open(rtc_dev, O_RDONLY); >>>> + if (rtc_fd < 0) { >>>> + perror(rtc_dev); >>> >>> tst_brkm(TBROK | TERRNO, tst_exit, "couldn't open %s", rtc_dev); >> >> Same here. >> >>> >>>> + exit(errno); >>>> + } >>>> + >>>> + /*Read and alarm tests*/ >>>> + read_alarm_test(); >>>> + >>>> + /*Update interrupts test*/ >>>> + update_interrupts_test(); >>>> + >>>> + close(rtc_fd); >>>> + >>>> + printf("\nRTC Tests Done!\n"); >>>> + return 0; >>>> +} >>> >>> 1. Please rename the test sourcefile to rtc-test.c because the current >>> naming is unnecessarily inconsistent. >> >> OK. >> >>> 2. Please replace printfs with tst_res(3) calls so this can be >>> properly integrated into LTP. >> >> Same issue as I explained earlier. >> >>> >>> Thanks! >>> -Garrett >> >> Thanks, >> >> Silesh. >> >>> >>>> -- >>>> test log >>>> ------------------------------ >>>> RTC READ TEST: >>>> RTC READ TEST Passed >>>> Current RTC date/time is 24-2-2010, 17:03:05. >>>> >>>> RTC ALARM TEST : >>>> Alarm time set to 17:03:10. >>>> Waiting 5 seconds for the alarm... >>>> Alarm rang. >>>> RTC ALARM TEST Passed >>>> >>>> RTC UPDATE INTERRUPTS TEST : >>>> Waiting for 5 update interrupts... >>>> Update interrupt 1 >>>> Update interrupt 2 >>>> Update interrupt 3 >>>> Update interrupt 4 >>>> Update interrupt 5 >>>> RTC UPDATE INTERRUPTS TEST Passed >>>> >>>> RTC Tests Done! > > The end goal is to have these tests fit directly into LTP without > having to fudge around writing a secondary driver, thus maintaining > two pieces of dependent code [which is of course more complicated than > one piece of code], and thus is more of a pain to maintain longterm. > There's a lot of code in the repository like this that was ported and > subsequently not properly adapted to the existing infrastructure, thus > creating additional headache for maintainers and end-users.
Ok -- I take that back. I have no idea wtf is going on in this directory nor the ultimate intent of the tests in here, apart from being a lot of ad hoc pain in the arse-ness. I've learned enough to keep my hands off this because it looks like a mess. Thanks, -Garrett ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
