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