sl@0: /* 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:test cases for concurrency test for timer_settime ,timer_gettime sl@0: * Name : ttimerthread.cpp sl@0: * sl@0: * sl@0: */ sl@0: sl@0: #include "ttimerthread.h" sl@0: #include sl@0: sl@0: CTimerTestThread* CTimerTestThread::NewL(TTimerTestThreadParams& aParams) sl@0: { sl@0: CTimerTestThread* self = new (ELeave) CTimerTestThread(aParams); sl@0: return self; sl@0: } sl@0: CTimerTestThread::CTimerTestThread(TTimerTestThreadParams& aParams) sl@0: :iParentStep(aParams.iTestStep),iParams(aParams) sl@0: { sl@0: } sl@0: sl@0: CTimerTestThread::~CTimerTestThread() sl@0: { sl@0: } sl@0: sl@0: TInt CTimerTestThread::OEEntry(TAny* aData) sl@0: { sl@0: TTimerTestThreadParams* params = static_cast(aData); sl@0: CTrapCleanup* cleanup = CTrapCleanup::New(); sl@0: if (!cleanup) sl@0: { sl@0: return KErrNoMemory; sl@0: } sl@0: sl@0: TRAPD(err, OEMainL(*params)); sl@0: delete cleanup; sl@0: return err; sl@0: } sl@0: void CTimerTestThread::OEMainL(TTimerTestThreadParams& aParams) sl@0: { sl@0: sl@0: CTimerTestThread* timerThread = CTimerTestThread::NewL(aParams); sl@0: timerThread->doOperation(); sl@0: delete timerThread; sl@0: } sl@0: void CTimerTestThread::doOperation() sl@0: { sl@0: timer_t timerid; sl@0: struct itimerspec timeSpec1; sl@0: struct itimerspec timeSpec2; sl@0: sl@0: iParams.iTestResult=EFalse; sl@0: sl@0: int ret = timer_create(CLOCK_REALTIME, NULL, &timerid); sl@0: if(ret != -1) sl@0: { sl@0: iParams.iTestStep.INFO_PRINTF1(_L("Timer Created")); sl@0: sl@0: timeSpec1.it_value.tv_sec = 10; sl@0: /* 500 million nsecs = .5 secs */ sl@0: timeSpec1.it_value.tv_nsec = 500000000; sl@0: sl@0: timeSpec1.it_interval.tv_sec = 10; sl@0: /* 500 million nsecs = .5 secs */ sl@0: timeSpec1.it_interval.tv_nsec = 500000000; sl@0: sl@0: ret = timer_settime(timerid, 0, &timeSpec1, NULL); sl@0: if (ret == -1) sl@0: { sl@0: sl@0: iParams.iTestStep.ERR_PRINTF2(_L("Timer Set Time Failed - %d"), errno); sl@0: return; sl@0: } sl@0: iParams.iTestStep.INFO_PRINTF1(_L("Set Timer Success")); sl@0: sl@0: // get_timer() sl@0: ret = timer_gettime(timerid, &timeSpec2); sl@0: sl@0: if(ret == -1) sl@0: { sl@0: iParams.iTestStep.ERR_PRINTF2(_L("Timer Get Time Failed - %d"), errno); sl@0: return; sl@0: sl@0: } sl@0: iParams.iTestStep.INFO_PRINTF1(_L("Get Timer Success")); sl@0: sl@0: compareTimeSpec(timeSpec1, timeSpec2); sl@0: sl@0: ret = timer_delete(timerid); sl@0: sl@0: if(ret == -1) sl@0: { sl@0: iParams.iTestStep.ERR_PRINTF2(_L("Timer Get Time Failed - %d"), errno); sl@0: return; sl@0: sl@0: } sl@0: iParams.iTestStep.INFO_PRINTF1(_L("Timer Deleted")); sl@0: sl@0: sl@0: } sl@0: else sl@0: { sl@0: iParams.iTestStep.ERR_PRINTF2(_L("Timer Create Failed - %d"), errno); sl@0: return; sl@0: sl@0: } sl@0: iParams.iTestResult=ETrue; sl@0: return; sl@0: sl@0: } sl@0: sl@0: TBool CTimerTestThread::compareTimeSpec(struct itimerspec timeSpec1, struct itimerspec timeSpec2) sl@0: { sl@0: sl@0: if((timeSpec1.it_value.tv_sec == timeSpec2.it_value.tv_sec ) sl@0: && (timeSpec1.it_value.tv_nsec == timeSpec2.it_value.tv_nsec ) sl@0: && (timeSpec1.it_interval.tv_sec == timeSpec2.it_interval.tv_sec ) sl@0: && (timeSpec1.it_interval.tv_nsec == timeSpec2.it_interval.tv_nsec )) sl@0: { sl@0: iParams.iTestStep.INFO_PRINTF1(_L("Timer Spec Matched")); sl@0: return ETrue; sl@0: sl@0: } sl@0: else sl@0: { sl@0: iParams.iTestStep.INFO_PRINTF1(_L("Timer spec Not Matched")); sl@0: return EFalse; sl@0: } sl@0: sl@0: sl@0: }