sl@0: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Name : ttimerblocks.cpp sl@0: // Test cases for blocking signal api's sl@0: // sl@0: sl@0: sl@0: sl@0: #include "ttimer.h" sl@0: #include "ttimerthread.h" sl@0: #define Maxtimerid 512 sl@0: int timer_value = 0; sl@0: sl@0: RSemaphore iLock; sl@0: void CreateLock() sl@0: { sl@0: iLock.CreateLocal(0); sl@0: } sl@0: void ReleaseLock() sl@0: { sl@0: iLock.Signal(); sl@0: } sl@0: void AcquireLock() sl@0: { sl@0: iLock.Wait(); sl@0: } sl@0: sl@0: //signal handler sl@0: void sig_handler(int sig) sl@0: { sl@0: timer_value = sig; sl@0: ReleaseLock(); sl@0: } sl@0: sl@0: //overrun signal handler sl@0: void overrun_handler(int sig) sl@0: { sl@0: timer_value = sig; sl@0: sleep(1); sl@0: } sl@0: sl@0: //notification function sl@0: void notifyfunc(union sigval val) sl@0: { sl@0: timer_value = val.sival_int; sl@0: } sl@0: sl@0: void alarm_handler(int sig) sl@0: { sl@0: timer_value = sig; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi1 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: Test case to create a timer with NONE as sigev_notify parameter sl@0: // TIMER_ABSTIME not set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi1 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: timer_value = 0; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: timer_t timerid; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,0,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi2 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: Test case to create a timer with NONE as sigev_notify parameter sl@0: // TIMER_ABSTIME set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi2 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: struct timespec curtmspec; sl@0: timer_value = 0; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: timer_t timerid; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: ret = clock_gettime(CLOCK_REALTIME,&curtmspec); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the time of specified clock id and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: timerspec.it_value.tv_sec = curtmspec.tv_sec + Valuesec; sl@0: timerspec.it_value.tv_nsec = curtmspec.tv_nsec + Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,TIMER_ABSTIME,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"), errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi3 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer with SIGEV_SIGNAL as sigev_notify parameter sl@0: // TIMER_ABSTIME not set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi3 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec, Signum, Maxsig, Sigval; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: timer_t timerid; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Sigval"), Sigval); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read signal number")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Maxsig"), Maxsig); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read maximum signal number")) ; sl@0: return -1; sl@0: } sl@0: for(Signum=Sigval; Signum <= Maxsig; Signum++) sl@0: { sl@0: if((Signum == SIGSTOP) || (Signum == SIGKILL)) sl@0: { sl@0: continue; sl@0: } sl@0: timer_value = 0; sl@0: if(signal(Signum,sig_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF2(_L("Error in signal trapping function and errno is %d"), errno) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_SIGNAL; sl@0: sigev.sigev_signo = Signum; sl@0: sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: timer_value = 0; sl@0: CreateLock(); sl@0: ret = timer_settime(timerid,0,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to set the timer for signal %d and errno is %d"),Signum,errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: // sleep(2); sl@0: sl@0: AcquireLock(); sl@0: if(timer_value != Signum) sl@0: { sl@0: ERR_PRINTF2(_L("The expected and timer_value are not same for signal %d"),Signum); sl@0: goto close; sl@0: } sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to delete the timer for signal %d and errno is %d"),Signum, errno); sl@0: return -1; sl@0: } sl@0: } sl@0: INFO_PRINTF1(_L("Relative time")); sl@0: INFO_PRINTF1(_L("Successfully able to create a timer with SIGEV_SIGNAL as sigev_notify parameter validated for all signals")); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi4 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer with SIGEV_SIGNAL as sigev_notify parameter sl@0: // TIMER_ABSTIME set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi4 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec, Signum, Maxsig, Sigval; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: struct timespec curtmspec; sl@0: timer_t timerid; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Sigval"), Sigval); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read signal number")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Maxsig"), Maxsig); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read maximum signal number")) ; sl@0: return ret1; sl@0: } sl@0: for(Signum=Sigval; Signum <= Maxsig; Signum++) sl@0: { sl@0: if((Signum == SIGSTOP) || (Signum == SIGKILL)) sl@0: { sl@0: continue; sl@0: } sl@0: timer_value = 0; sl@0: if(signal(Signum,sig_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF2(_L("Error in signal trapping function and errno is %d"), errno) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_SIGNAL; sl@0: sigev.sigev_signo = Signum; sl@0: sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to create a timer for signal %d and errno is %d"),Signum,errno); sl@0: return -1; sl@0: } sl@0: ret = clock_gettime(CLOCK_REALTIME,&curtmspec); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to get the time of specified clock id for signal %d and errno is %d"),Signum,errno); sl@0: goto close; sl@0: } sl@0: timerspec.it_value.tv_sec = curtmspec.tv_sec + Valuesec; sl@0: timerspec.it_value.tv_nsec = curtmspec.tv_nsec + Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: timer_value = 0; sl@0: ret = timer_settime(timerid,TIMER_ABSTIME,&timerspec,NULL); sl@0: //sleep(2); sl@0: AcquireLock(); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to set the timer for signal %d and errno is %d"),Signum,errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: if(timer_value != Signum) sl@0: { sl@0: ERR_PRINTF2(_L("The expected and timer_value are not same for signal %d"),Signum); sl@0: goto close; sl@0: } sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to delete the timer for signal %d and errno is %d"),Signum, errno); sl@0: return -1; sl@0: } sl@0: } sl@0: INFO_PRINTF1(_L("Absolute time")); sl@0: INFO_PRINTF1(_L("Successfully able to create a timer with SIGEV_SIGNAL as sigev_notify parameter validated for all signals")); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi5 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer with SIGEV_THREAD as sigev_notify parameter sl@0: // TIMER_ABSTIME not set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi5 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct sched_param parm; sl@0: pthread_attr_t attr; sl@0: struct itimerspec timerspec; sl@0: timer_t timerid; sl@0: pthread_attr_init( &attr ); sl@0: parm.sched_priority = 255; //raise the priority.. sl@0: pthread_attr_setschedparam(&attr, &parm); sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: timer_value = 0; sl@0: sigev.sigev_notify = SIGEV_THREAD; sl@0: sigev.sigev_value.sival_int = 100; sl@0: sigev.sigev_notify_function = notifyfunc ; sl@0: sigev.sigev_notify_attributes = &attr; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,0,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: if(timer_value != 100) sl@0: { sl@0: ERR_PRINTF1(_L("The expected and timer_value are not same")); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi6 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer with SIGEV_THREAD as sigev_notify parameter sl@0: // TIMER_ABSTIME set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi6 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: struct timespec curtmspec; sl@0: timer_t timerid; sl@0: struct sched_param parm; sl@0: pthread_attr_t attr; sl@0: pthread_attr_init( &attr ); sl@0: parm.sched_priority = 255; sl@0: pthread_attr_setschedparam(&attr, &parm); sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: timer_value = 0; sl@0: sigev.sigev_notify = SIGEV_THREAD; sl@0: sigev.sigev_value.sival_int = 100; sl@0: sigev.sigev_notify_function = notifyfunc ; sl@0: sigev.sigev_notify_attributes = &attr; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: ret = clock_gettime(CLOCK_REALTIME,&curtmspec); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the time of specified clock id and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: timerspec.it_value.tv_sec = curtmspec.tv_sec + Valuesec; sl@0: timerspec.it_value.tv_nsec = curtmspec.tv_nsec + Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,TIMER_ABSTIME,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: if(timer_value != 100) sl@0: { sl@0: ERR_PRINTF1(_L("The expected and timer_value are not same")); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi7 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer for CLOCK_REALTIME id using timer_create() with sigevent argument as NULL sl@0: // TIMER_ABSTIME not set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi7 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: timer_t timerid; sl@0: struct itimerspec timerspec; sl@0: timer_value = 0; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return -1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return -1; sl@0: } sl@0: if(signal(SIGALRM, alarm_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF2(_L("Error in signal trapping function and errno is %d"), errno) ; sl@0: return ret1; sl@0: } sl@0: ret = timer_create(CLOCK_REALTIME,NULL,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,0,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: if(timer_value != SIGALRM) sl@0: { sl@0: ERR_PRINTF1(_L("Error in raising the signal after timer expire")); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer with the default signal as SIGALRM") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi8 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer for CLOCK_REALTIME id using timer_create() with sigevent argument as NULL sl@0: // TIMER_ABSTIME set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi8 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: timer_t timerid; sl@0: struct itimerspec timerspec; sl@0: struct timespec curtmspec; sl@0: timer_value = 0; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: if(signal(SIGALRM, alarm_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF2(_L("Error in signal trapping function and errno is %d"),errno) ; sl@0: return ret1; sl@0: } sl@0: ret = timer_create(CLOCK_REALTIME,NULL,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: ret = clock_gettime(CLOCK_REALTIME,&curtmspec); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the time of specified clock id and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: timerspec.it_value.tv_sec = curtmspec.tv_sec + Valuesec; sl@0: timerspec.it_value.tv_nsec = curtmspec.tv_nsec + Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,TIMER_ABSTIME,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: if(timer_value != SIGALRM) sl@0: { sl@0: ERR_PRINTF1(_L("Error in raising the signal after timer expire")); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer with the default signal as SIGALRM") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi9 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create() sl@0: // Description: Negative Test-Trying to create the timer for an invalid clock id using timer_create() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi9 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Invalidclockid; sl@0: timer_t timerid; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Invalidclockid"), Invalidclockid); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = timer_create(Invalidclockid,NULL,&timerid); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_create() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_create() successfully returned EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi10 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create() sl@0: // Description: Timer id as NULL in timer_create() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi10 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral; sl@0: ret = timer_create(CLOCK_REALTIME,NULL,NULL); sl@0: if((ret != -1) || (errno != EFAULT)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_create() failed to return EFAULT on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_create() successfully returned EFAULT on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi11 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create() sl@0: // Description: Timer id as NULL & an invalid clockid in timer_create() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi11 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral; sl@0: ret = timer_create(CLOCK_MONOTONIC,NULL,NULL); sl@0: if((ret != -1) || (errno != EFAULT)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_create() failed to return EFAULT on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_create() successfully returned EFAULT on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi12 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create() sl@0: // Description: Trying to create more than maximum no. of timer's possible per process using timer_create() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi12 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, i, j; sl@0: timer_t timerid[Maxtimerid + 1]; sl@0: for (i = 0; i <= Maxtimerid ; i++) sl@0: { sl@0: ret = timer_create(CLOCK_REALTIME,NULL,&timerid[i]); sl@0: if((ret == -1) && (errno == EAGAIN) && (i == Maxtimerid) ) sl@0: { sl@0: INFO_PRINTF3(_L("timer_create() has successfully returned EAGAIN on negative test %d %d"),errno,i); sl@0: ret1 = KErrNone; sl@0: break; sl@0: } sl@0: else if(ret < 0) sl@0: { sl@0: INFO_PRINTF3(_L("timer_create() has failed with error %d %d"),errno,i); sl@0: } sl@0: } sl@0: for(j = 0; j <= Maxtimerid-1; j++) sl@0: { sl@0: ret = timer_delete(timerid[j]); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to delete the timer and errno is %d %d"),errno, j); sl@0: ret1 = KErrGeneral; sl@0: break; sl@0: } sl@0: } sl@0: INFO_PRINTF1(_L("timer_delete() has successfully deleted all the timers negative test")); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi13 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_delete() sl@0: // Description: To delete the timer with an invalid timer id using timer_delete() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi13 ( ) sl@0: { sl@0: timer_t timerid; sl@0: int ret, ret1 = KErrGeneral; sl@0: ret = timer_create(CLOCK_REALTIME,NULL,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Able to create the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: /*Deleting a timer id again expected result = -1 and errno = EINVAL */ sl@0: ret = timer_delete(timerid); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_delete() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_delete() successfully returned EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi14 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_delete() sl@0: // Description: To delete the timer with NULL using timer_delete() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi14 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral; sl@0: ret = timer_delete(NULL); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_delete() failed to return EFAULT on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_delete() successfully returned EFAULT on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi15 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_settime() sl@0: // Description: Trying to set the timer for an invalid timer id using timer_settime() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi15 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec, Timerflag; sl@0: timer_t timerid; sl@0: struct itimerspec timerspec; sl@0: timer_value = 0; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Timerflag"), Timerflag); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read the timer flag")) ; sl@0: return ret1; sl@0: } sl@0: if(signal(SIGALRM, alarm_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF2(_L("Error in signal trapping function and errno is %d"), errno) ; sl@0: return ret1; sl@0: } sl@0: ret = timer_create(CLOCK_REALTIME,NULL,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,Timerflag,&timerspec,NULL); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_settime() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_settime() successfully able to return EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: RThread athr; sl@0: if(athr.Open(_L("LibrtTimerServ")) == KErrNone) sl@0: { sl@0: athr.Close(); sl@0: } sl@0: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi16 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_settime() sl@0: // Description: Trying to set the timer with an invalid tv_nsec parameter using timer_settime() sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi16 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec, Signum, Maxsig, Timerflag, Sigval; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: timer_t timerid; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")); sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Sigval"), Sigval); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read signal number")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Maxsig"), Maxsig); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read maximum signal number")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Timerflag"), Timerflag); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read the timer flag")) ; sl@0: return ret1; sl@0: } sl@0: for(Signum=Sigval; Signum <= Maxsig; Signum++) sl@0: { sl@0: if((Signum == SIGSTOP) || (Signum == SIGKILL)) sl@0: { sl@0: continue; sl@0: } sl@0: timer_value = 0; sl@0: if(signal(Signum,sig_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF3(_L("Error in signal trapping function for signal is %d and errno is %d"),Signum, errno) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_SIGNAL; sl@0: sigev.sigev_signo = Signum; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to create a timer %d and errno is %d"),Signum, errno); sl@0: return -1; sl@0: } sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,Timerflag,&timerspec,NULL); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_settime() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF3(_L("Failed to delete the timer %d and errno is %d"),Signum,errno); sl@0: return -1; sl@0: } sl@0: } sl@0: INFO_PRINTF1(_L("timer_settime() successfully able to return EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi17 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer with SIGEV_SIGNAL as sigev_notify parameter sl@0: // TIMER_ABSTIME not set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi17 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: timer_value = 0; sl@0: if(signal(SIGUSR1,overrun_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF2(_L("Error in signal trapping function and errno is %d"), errno) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_SIGNAL; sl@0: sigev.sigev_signo = SIGUSR1; sl@0: timer_t timerid; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: timer_value = 0; sl@0: ret = timer_settime(timerid,0,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the time of specified clock id and errno is %d "),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: if(timer_value != SIGUSR1) sl@0: { sl@0: ERR_PRINTF1(_L("The expected and timer_value are not same for signal")); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: ret = timer_getoverrun(timerid); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Error in timer_getoverrun() and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Relative Timer") ); sl@0: INFO_PRINTF1(_L("Successfully able to create a timer with SIGEV_SIGNAL as sigev_notify parameter") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi18 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create(), timer_delete() sl@0: // Description: To create a timer with SIGEV_SIGNAL as sigev_notify parameter sl@0: // TIMER_ABSTIME set sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi18 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec, oldtimerspec; sl@0: struct timespec curtmspec; sl@0: timer_t timerid; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: timer_value = 0; sl@0: if(signal(SIGUSR1,overrun_handler) == SIG_ERR) sl@0: { sl@0: ERR_PRINTF2(_L("Error in signal trapping function and errno is %d"), errno) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_SIGNAL; sl@0: sigev.sigev_signo = SIGUSR1; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: ret = clock_gettime(CLOCK_REALTIME,&curtmspec); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the time of specified clock id and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: timerspec.it_value.tv_sec = curtmspec.tv_sec + Valuesec; sl@0: timerspec.it_value.tv_nsec = curtmspec.tv_nsec + Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: timer_value = 0; sl@0: ret = timer_settime(timerid,TIMER_ABSTIME,&timerspec,&oldtimerspec); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer for signal and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(2); sl@0: if(timer_value != SIGUSR1) sl@0: { sl@0: ERR_PRINTF2(_L("The expected and timer_value are not same for signal %d"),errno); sl@0: goto close; sl@0: } sl@0: ret = timer_getoverrun(timerid); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Error in timer_getoverrun() and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: } sl@0: INFO_PRINTF1(_L("Absolute Timer") ); sl@0: INFO_PRINTF1(_L("Successfully able to create a timer with SIGEV_SIGNAL as sigev_notify parameter") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi19 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_overrun(), timer_gettime() sl@0: // Description: Negative test: timer_overrun(), timer_gettime() with an invalid timerid sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi19 ( ) sl@0: { sl@0: timer_t timerid; sl@0: int ret, ret1 = KErrGeneral; sl@0: struct itimerspec timerspec; sl@0: ret = timer_create(CLOCK_REALTIME,NULL,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("successfully able to create the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret = timer_gettime(timerid,&timerspec); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_gettime() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_gettime() successfully returned EINVAL on negative test") ); sl@0: ret = timer_getoverrun(timerid); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_getoverrun() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_getoverrun() successfully returned EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi20 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create() sl@0: // Description: Negative test: timer_create() with an invalid signal sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi20 ( ) sl@0: { sl@0: timer_t timerid; sl@0: int ret, ret1 = KErrGeneral, Sigval; sl@0: struct sigevent sigev; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Sigval"), Sigval); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read signal number")) ; sl@0: return -1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_SIGNAL; sl@0: sigev.sigev_signo = Sigval; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_create() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("timer_create() with an invalid sigev_signo member") ); sl@0: INFO_PRINTF1(_L("timer_create() successfully returned EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi21 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_create() sl@0: // Description: Negative test: timer_create() with an invalid sigev_notify member sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi21 ( ) sl@0: { sl@0: timer_t timerid; sl@0: int ret, ret1 = KErrGeneral, Sigval, Signum, Maxsig, Notify; sl@0: struct sigevent sigev; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Sigval"), Sigval); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read signal number")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Maxsig"), Maxsig); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read maximum signal number")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Notify"), Notify); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read an invalid notify value")) ; sl@0: return ret1; sl@0: } sl@0: for(Signum=Sigval; Signum <= Maxsig; Signum++) sl@0: { sl@0: if((Signum == SIGSTOP) || (Signum == SIGKILL)) sl@0: { sl@0: continue; sl@0: } sl@0: sigev.sigev_notify = Notify; sl@0: sigev.sigev_signo = Signum; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_create() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: } sl@0: INFO_PRINTF1(_L("timer_create() with an invalid sigev_notify member") ); sl@0: INFO_PRINTF1(_L("timer_create() successfully returned EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: sl@0: close: sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi22 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_settime() sl@0: // Description: Negative test: timer_settime() with an input itimerspec value as NULL sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi22 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: timer_t timerid; sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"), errno ); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: ret = timer_settime(timerid,0,NULL,&timerspec); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_settime() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: sleep(2); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("timer_settime() with itimerspec input as NULL") ); sl@0: INFO_PRINTF1(_L("timer_settime() successfully returned EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi23 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_settime() sl@0: // Description: Negative test: timer_settime() with an invalid flag member sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi23 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: timer_t timerid; sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"),errno ); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: timerspec.it_value.tv_sec = 1; sl@0: timerspec.it_value.tv_nsec = 0; sl@0: timerspec.it_interval.tv_sec = 0; sl@0: timerspec.it_interval.tv_nsec = 0; sl@0: ret = timer_settime(timerid,-1,NULL,&timerspec); sl@0: if((ret != -1) || (errno != EINVAL)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_settime() failed to return EINVAL on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: sleep(3); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("timer_settime() with an invalid flag value") ); sl@0: INFO_PRINTF1(_L("timer_settime() successfully returned EINVAL on negative test") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi24 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_gettime() sl@0: // Description: Negative test: timer_gettime() with an input itimerspec value as NULL sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi24 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec; sl@0: timer_t timerid; sl@0: timer_value = 0; sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to create a timer") ); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: timerspec.it_value.tv_sec = 1; sl@0: timerspec.it_value.tv_nsec = 0; sl@0: timerspec.it_interval.tv_sec = 1; sl@0: timerspec.it_interval.tv_nsec = 0; sl@0: ret = timer_settime(timerid,0,&timerspec,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: ret = timer_gettime(timerid,NULL); sl@0: if((ret != -1) || (errno != EFAULT)) sl@0: { sl@0: ERR_PRINTF2(_L("timer_gettime() failed to return EFAULT on negative test and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: INFO_PRINTF1(_L("timer_gettime() with an input itimerspec value as NULL") ); sl@0: INFO_PRINTF1(_L("timer_gettime() successfully returned EFAULT on negative test") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi25 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_settime(),timer_gettime() sl@0: // Description: To retreive the amount of time until the timer expires sl@0: // Relative timer sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi25 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec, gettime, oldtimerspec; sl@0: timer_value = 0; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: timer_t timerid; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"), errno ); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: timerspec.it_value.tv_sec = Valuesec; sl@0: timerspec.it_value.tv_nsec = Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,0,&timerspec,&oldtimerspec); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"), errno ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(1); sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: ret = timer_gettime(timerid,&gettime); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the timer and the errno is %d"),errno ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: if((gettime.it_value.tv_sec > (timerspec.it_value.tv_sec-1)) || (gettime.it_value.tv_nsec > (timerspec.it_value.tv_nsec))|| (gettime.it_interval.tv_sec != timerspec.it_interval.tv_sec) || (gettime.it_interval.tv_nsec != timerspec.it_interval.tv_nsec)) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to get the timer value") ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to get the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1;; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi26 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_settime(),timer_gettime() sl@0: // Description: To retreive the amount of time until the timer expires sl@0: // Absolute timer sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi26 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral, Intervalsec, Intervalnanosec, Valuesec, Valuenanosec; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec, gettime, oldtimerspec; sl@0: struct timespec curtmspec; sl@0: timer_value = 0; sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuesec"), Valuesec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Valuenanosec"), Valuenanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_value")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalsec"), Intervalsec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: ret = GetIntFromConfig(ConfigSection(), _L("Intervalnanosec"), Intervalnanosec); sl@0: if(ret == 0) sl@0: { sl@0: ERR_PRINTF1(_L("Unable to read nano seconds value of it_interval")) ; sl@0: return ret1; sl@0: } sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: timer_t timerid; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"), errno ); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: ret = clock_gettime(CLOCK_REALTIME,&curtmspec); sl@0: if (ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the time of specified clock id and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: timerspec.it_value.tv_sec = curtmspec.tv_sec + Valuesec; sl@0: timerspec.it_value.tv_nsec = curtmspec.tv_nsec + Valuenanosec; sl@0: timerspec.it_interval.tv_sec = Intervalsec; sl@0: timerspec.it_interval.tv_nsec = Intervalnanosec; sl@0: ret = timer_settime(timerid,TIMER_ABSTIME,&timerspec,&oldtimerspec); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"), errno ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sleep(1); sl@0: INFO_PRINTF1(_L("Successfully able to set the timer") ); sl@0: ret = timer_gettime(timerid,&gettime); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the timer and errno is %d"), errno ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: if((gettime.it_value.tv_sec > (Valuesec-1)) || (gettime.it_value.tv_nsec > (Valuenanosec))|| (gettime.it_interval.tv_sec != Intervalsec) || (gettime.it_interval.tv_nsec != Intervalnanosec)) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to get the timer value") ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to get the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTesttimer::Testtimerapi27 sl@0: // Test Case ID: OPENENV-LIBC-CIT-5946 sl@0: // API tested: timer_settime(),timer_gettime() sl@0: // Description: To retreive the amount of time until the timer expires using timer_settime() sl@0: // Absolute timer sl@0: // ----------------------------------------------------------------------------- sl@0: sl@0: TInt CTesttimer::Testtimerapi27 ( ) sl@0: { sl@0: int ret, ret1 = KErrGeneral; sl@0: struct sigevent sigev; sl@0: struct itimerspec timerspec1, gettime, oldtimerspec; sl@0: timer_value = 0; sl@0: sigev.sigev_notify = SIGEV_NONE; sl@0: timer_t timerid; sl@0: ret = timer_create(CLOCK_REALTIME,&sigev,&timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to create a timer and errno is %d"), errno ); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to create a timer") ); sl@0: timerspec1.it_value.tv_sec = 5; sl@0: timerspec1.it_value.tv_nsec = 0; sl@0: timerspec1.it_interval.tv_sec = 0; sl@0: timerspec1.it_interval.tv_nsec = 0; sl@0: ret = timer_settime(timerid,0,&timerspec1,NULL); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"), errno ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer for the first time") ); sl@0: sleep(1); sl@0: timerspec1.it_value.tv_sec = 3; sl@0: timerspec1.it_value.tv_nsec = 0; sl@0: timerspec1.it_interval.tv_sec = 0; sl@0: timerspec1.it_interval.tv_nsec = 0; sl@0: ret = timer_settime(timerid,0,&timerspec1,&oldtimerspec); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"), errno ); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to set the timer for the second time") ); sl@0: if(oldtimerspec.it_value.tv_sec > 4) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to set the timer value") ); sl@0: goto close; sl@0: } sl@0: sleep(1); sl@0: timerspec1.it_value.tv_sec = 0; sl@0: timerspec1.it_value.tv_nsec = 0; sl@0: timerspec1.it_interval.tv_sec = 0; sl@0: timerspec1.it_interval.tv_nsec = 0; sl@0: ret = timer_settime(timerid,0,&timerspec1,&oldtimerspec); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"),errno); sl@0: goto close; sl@0: } sl@0: if(oldtimerspec.it_value.tv_sec > 2) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to set the timer value") ); sl@0: goto close; sl@0: } sl@0: timerspec1.it_value.tv_sec = 2; sl@0: timerspec1.it_value.tv_nsec = 0; sl@0: timerspec1.it_interval.tv_sec = 5; sl@0: timerspec1.it_interval.tv_nsec = 0; sl@0: ret = timer_settime(timerid,0,&timerspec1,&oldtimerspec); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to set the timer and errno is %d"), errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: if(oldtimerspec.it_value.tv_sec != 0) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to set the timer value") ); sl@0: goto close; sl@0: } sl@0: ret = timer_gettime(timerid,&gettime); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to get the timer and errno is %d"),errno); sl@0: ret1 = -1; sl@0: goto close; sl@0: } sl@0: sl@0: if((gettime.it_value.tv_sec > 2) || (gettime.it_interval.tv_sec != timerspec1.it_interval.tv_sec) || (gettime.it_interval.tv_nsec != timerspec1.it_interval.tv_nsec)) sl@0: { sl@0: ERR_PRINTF1(_L("Failed to get the timer value") ); sl@0: goto close; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to get the timer") ); sl@0: ret = timer_delete(timerid); sl@0: if(ret != 0) sl@0: { sl@0: ERR_PRINTF2(_L("Failed to delete the timer and errno is %d"),errno); sl@0: return -1; sl@0: } sl@0: INFO_PRINTF1(_L("Successfully able to delete the timer") ); sl@0: ret1 = KErrNone; sl@0: return ret1; sl@0: close: sl@0: timer_delete(timerid); sl@0: return ret1; sl@0: } sl@0: TInt CTesttimer::Testtimerapi28( ) sl@0: { sl@0: TInt err; sl@0: sl@0: TRequestStatus timerThreadStatus1; sl@0: RThread timerThread1; sl@0: TTimerTestThreadParams paramsTimerThread1(*this); sl@0: sl@0: TRequestStatus timerThreadStatus2; sl@0: RThread timerThread2; sl@0: TTimerTestThreadParams paramsTimerThread2(*this); sl@0: sl@0: Logger().ShareAuto(); sl@0: //Create the Thread to create shared mem and write to it. sl@0: err = timerThread1.Create(_L("TimerThread1"), (TThreadFunction)CTimerTestThread::OEEntry, KDefaultStackSize, KMinHeapSize, 1024*1024,¶msTimerThread1); sl@0: if(err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L("Timer Thread1 Not created - %d"), err); sl@0: SetTestStepResult(EFail); sl@0: return EFail; sl@0: sl@0: } sl@0: INFO_PRINTF1(_L("Timer Thread1 created ")); sl@0: //Create the thread to open shared mem and read from it. sl@0: err = timerThread2.Create(_L("TimerThread2"), (TThreadFunction)CTimerTestThread::OEEntry, KDefaultStackSize, KMinHeapSize, 1024*1024,¶msTimerThread2); sl@0: if(err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L("Timer Thread 2 Not created - %d"), err); sl@0: SetTestStepResult(EFail); sl@0: //Close the Write Thread created previously sl@0: timerThread1.Close(); sl@0: return EFail; sl@0: sl@0: } sl@0: INFO_PRINTF1(_L("Timer Thread created ")); sl@0: sl@0: timerThread1.SetPriority(EPriorityNormal); sl@0: timerThread2.SetPriority(EPriorityNormal); sl@0: sl@0: timerThread1.Logon(timerThreadStatus1); sl@0: timerThread2.Logon(timerThreadStatus2); sl@0: sl@0: timerThread1.Resume(); sl@0: timerThread2.Resume(); sl@0: sl@0: User::WaitForRequest(timerThreadStatus1); sl@0: User::WaitForRequest(timerThreadStatus2); sl@0: sl@0: timerThread1.Close(); sl@0: timerThread2.Close(); sl@0: sl@0: //Check the status of the threads.. sl@0: if(!paramsTimerThread1.iTestResult ) sl@0: { sl@0: ERR_PRINTF1(_L("Timer Thread 1 Not successful")); sl@0: SetTestStepResult(EFail); sl@0: } sl@0: if(!paramsTimerThread2.iTestResult ) sl@0: { sl@0: ERR_PRINTF1(_L("Timer Thread 2 Not successful")); sl@0: SetTestStepResult(EFail); sl@0: } sl@0: sl@0: return TestStepResult(); sl@0: sl@0: sl@0: } sl@0: //End of a file sl@0: sl@0: sl@0: sl@0: