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.
Thanks!
-Garrett

------------------------------------------------------------------------------
Download Intel&#174; 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

Reply via email to