diff -r 000000000000 -r bde4ae8d615e os/ossrv/genericservices/taskscheduler/Test/ScheduledTaskTest/TU_TSCH_ScheduledTaskTest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/genericservices/taskscheduler/Test/ScheduledTaskTest/TU_TSCH_ScheduledTaskTest.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,343 @@ +// Copyright (c) 2005-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: +// + +#include +#include +#include +#include +#include +#include +#include "Thelpers.h" + +_LIT(KHBufTest, "This is a CScheduledTask test"); +_LIT(KTestName, "Scheduled Task"); +RTest TheTest(KTestName); + +// persistent file for externalize and internalize test +_LIT(KFileName,"_:\\CSheduledTask.dat"); +static TBuf<32> fileName; + +LOCAL_D RFs TheFsSession; + +//Test macroses and functions +static void Check(TInt aValue, TInt aLine) + { + if(!aValue) + { + (void)TheFsSession.Delete(fileName); + TheTest(EFalse, aLine); + } + } +static void Check(TInt aValue, TInt aExpected, TInt aLine) + { + if(aValue != aExpected) + { + RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue); + (void)TheFsSession.Delete(fileName); + TheTest(EFalse, aLine); + } + } +#define TEST(arg) ::Check((arg), __LINE__) +#define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__) + + + +/** +@file +@SYMTestCaseID SYSLIB-SCHSVR-CT-0202 +@SYMTestCaseDesc Check that externalize executes correctly for tasks with local based times +@SYMTestPriority low +@SYMTestActions Create a local time based instance of CSheduledTask and externalize +@SYMTestExpectedResults The test must not fail. +@SYMPREQ PREQ234 +*/ +LOCAL_D void doLocalTimeExternalizeTestL() + { + TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-0202 CScheduledTask Externalize Test (local time) ")); + + TheTest.Printf(_L("Tests with timezone set to Europe, London")); + RTz tz; + tz.Connect(); + CTzId* tzId = CTzId::NewL(2592); //set the timezone to Europe/London + CleanupStack::PushL(tzId); + tz.SetTimeZoneL(*tzId); + + TheTest.Printf(_L("Tests with DST on")); + //set the current utc time to 8.55am, 15 May 2005 -Daylight savings apply on this date + TDateTime date(2005, EMay, 15, 8, 55, 0, 0); + TTime time(date); + TInt err = SchSvrHelpers::SetUTCTimeL(time); + TEST(err == 0); + User::After(KOneSecond * 3); + // set data for CScheduledTask construction + TTaskInfo taskInfo; + + HBufC* taskdata = HBufC::NewLC(KHBufTest().Length()); + TPtr pData(taskdata->Des()); + pData.Append(KHBufTest); + + TSecurityInfo securityInfo; + + CScheduledTask* extTask = new(ELeave) CScheduledTask(taskInfo, + taskdata, + ETimeSchedule, + securityInfo); + CleanupStack::Pop(taskdata); //taskdata now owned by newTask + CleanupStack::PushL(extTask); + + // set due time, 63284489700000000 microseconds since 1st Jan 0 AD + // This is local time + TDateTime extDate(2005, EMay, 15, 8, 55, 0, 0); + TTime extTime(extDate); + TTime extDueTime(extTime); + extTask->OnDue(TTsTime(extDueTime,EFalse)); + + // externalize + RFile extFile; + TFileName extFileName(fileName); + TEST2(extFile.Replace(TheFsSession,extFileName,EFileWrite), KErrNone); + RFileBuf extBuf; + CleanupClosePushL(extBuf); + extBuf.Attach(extFile); + RWriteStream extStream(&extBuf); + + TRAP(err, extTask->ExternalizeL(extStream)); + TEST(err == KErrNone); + + CleanupStack::PopAndDestroy(3, tzId); + } + +/** +@file +@SYMTestCaseID SYSLIB-SCHSVR-CT-0203 +@SYMTestCaseDesc Check that internalize executes correctly for tasks with local based times +@SYMTestPriority low +@SYMTestActions Create a local time based instance of CSheduledTask which does an internalize +@SYMTestExpectedResults The test must not fail. +@SYMPREQ PREQ234 +*/ +LOCAL_D void doLocalTimeInternalizeTestL() + { + TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-0203 CScheduledTask Internalize Test (local time) ")); + + // internalize + RFile intFile; + TFileName intFileName(fileName); + TEST2(intFile.Open(TheFsSession,intFileName,EFileRead), KErrNone); + RFileBuf intBuf; + CleanupClosePushL(intBuf); + intBuf.Attach(intFile); + RReadStream intStream(&intBuf); + + CScheduledTask* intTask = CScheduledTask::NewLC(intStream); + + // due date/time is 8.55am, 15 May 2005 -Daylight savings apply on this date + TTsTime ttime = intTask->ValidUntil(); + TTime time = ttime.GetLocalTime(); + TDateTime dtime = time.DateTime(); + + TEST(dtime.Year() == 2005); + TEST(dtime.Month() == EMay); + TEST(dtime.Day() == 15); + TEST(dtime.Hour() == 8); + TEST(dtime.Minute() == 55); + TEST(dtime.Second() == 0); + TEST(dtime.MicroSecond() == 0); + + // test offset - 3600 seconds (1 hour) because time of device is in BST + TTimeIntervalSeconds offset(3600); + TEST(ttime.GetOffset() == offset); + + // test difference between returned values + TTime utcTime = intTask->ValidUntil().GetUtcTime(); + TTime localTime = intTask->ValidUntil().GetLocalTime(); + Int64 t = localTime.Int64() - utcTime.Int64(); + TTimeIntervalSeconds diff((localTime.Int64() - utcTime.Int64())/1000000); + TEST(diff == offset); + + // test that this instance is home time and not UTC + TEST(ttime.IsUtc() == EFalse); + + // test data + HBufC* data = const_cast(&(intTask->Data())); + TEST(data->Compare(KHBufTest) == 0); + + CleanupStack::PopAndDestroy(2, &intBuf); + } + +/** +@file +@SYMTestCaseID SYSLIB-SCHSVR-CT-0239 +@SYMTestCaseDesc Check that externalize executes correctly for tasks with UTC based times +@SYMTestPriority low +@SYMTestActions Create a UTC time based instance of CSheduledTask and externalize +@SYMTestExpectedResults The test must not fail. +@SYMPREQ PREQ234 +*/ +LOCAL_D void doUtcExternalizeTestL() + { + TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-0239 CScheduledTask Externalize Test (UTC) ")); + + TheTest.Printf(_L("Tests with timezone set to Europe, London")); + RTz tz; + tz.Connect(); + CTzId* tzId = CTzId::NewL(2592); //set the timezone to Europe/London + CleanupStack::PushL(tzId); + tz.SetTimeZoneL(*tzId); + + TheTest.Printf(_L("Tests with DST on")); + //set the current utc time to 8.55am, 15 May 2005 -Daylight savings apply on this date + TDateTime date(2005, EMay, 15, 8, 55, 0, 0); + TTime time(date); + TInt err = SchSvrHelpers::SetUTCTimeL(time); + TEST(err == 0); + User::After(KOneSecond * 3); + // set data for CScheduledTask construction + TTaskInfo taskInfo; + + HBufC* taskdata = HBufC::NewLC(KHBufTest().Length()); + TPtr pData(taskdata->Des()); + pData.Append(KHBufTest); + + TSecurityInfo securityInfo; + + CScheduledTask* extTask = new(ELeave) CScheduledTask(taskInfo, + taskdata, + ETimeSchedule, + securityInfo); + CleanupStack::Pop(taskdata); //taskdata now owned by newTask + CleanupStack::PushL(extTask); + + // set due time, 63284489700000000 microseconds since 1st Jan 0 AD + // This is UTC time + TDateTime extDate(2005, EMay, 15, 8, 55, 0, 0); + TTime extTime(extDate); + TTime extDueTime(extTime); + extTask->OnDue(TTsTime(extDueTime,ETrue)); + + // externalize + RFile extFile; + TFileName extFileName(fileName); + TEST2(extFile.Replace(TheFsSession,extFileName,EFileWrite), KErrNone); + RFileBuf extBuf; + CleanupClosePushL(extBuf); + extBuf.Attach(extFile); + RWriteStream extStream(&extBuf); + + TRAP(err, extTask->ExternalizeL(extStream)); + TEST(err == KErrNone); + + CleanupStack::PopAndDestroy(3, tzId); + } + +/** +@file +@SYMTestCaseID SYSLIB-SCHSVR-CT-0240 +@SYMTestCaseDesc Check that internalize executes correctly for tasks with UTC times +@SYMTestPriority low +@SYMTestActions Create a UTC based instance of CSheduledTask which does an internalize +@SYMTestExpectedResults The test must not fail. +@SYMPREQ PREQ234 +*/ +LOCAL_D void doUtcInternalizeTestL() + { + TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-0240 CScheduledTask Internalize Test (UTC) ")); + + // internalize + RFile intFile; + TFileName intFileName(fileName); + TEST2(intFile.Open(TheFsSession,intFileName,EFileRead), KErrNone); + RFileBuf intBuf; + CleanupClosePushL(intBuf); + intBuf.Attach(intFile); + RReadStream intStream(&intBuf); + + CScheduledTask* intTask = CScheduledTask::NewLC(intStream); + + // due date/time is 8.55am, 15 May 2005 -Daylight savings apply on this date + TTsTime ttime = intTask->ValidUntil(); + TTime time = ttime.GetUtcTime(); + TDateTime dtime = time.DateTime(); + + TEST(dtime.Year() == 2005); + TEST(dtime.Month() == EMay); + TEST(dtime.Day() == 15); + TEST(dtime.Hour() == 8); + TEST(dtime.Minute() == 55); + TEST(dtime.Second() == 0); + TEST(dtime.MicroSecond() == 0); + + // test offset - should be zero because the object is UTC based + TTimeIntervalSeconds offset(0); + TEST(ttime.GetOffset() == offset); + + // test difference between returned values + TTime utcTime = intTask->ValidUntil().GetUtcTime(); + TTime localTime = intTask->ValidUntil().GetLocalTime(); + Int64 t = localTime.Int64() - utcTime.Int64(); + TTimeIntervalSeconds diff((localTime.Int64() - utcTime.Int64())/1000000); + // difference should be the kernel offset from UTC + offset = User::UTCOffset(); + TEST(diff == offset); + + // test that this instance is UTC and not local time based + TEST(ttime.IsUtc()); + + // test data + HBufC* data = const_cast(&(intTask->Data())); + TEST(data->Compare(KHBufTest) == 0); + + CleanupStack::PopAndDestroy(2, &intBuf); + } + + +static void RunTestsL() + { + doLocalTimeExternalizeTestL(); + doLocalTimeInternalizeTestL(); + doUtcExternalizeTestL(); + doUtcInternalizeTestL(); + } + +//*********************************************************************************** +GLDEF_C TInt E32Main() + { + CTrapCleanup* tc = CTrapCleanup::New(); + TEST(tc != NULL); + + __UHEAP_MARK; + + fileName.Copy(KFileName); + fileName[0] = RFs::GetSystemDriveChar(); + + TInt err = TheFsSession.Connect(); + TEST(err == KErrNone); + + TheTest.Title(); + TheTest.Start(_L("Unit tests for CScheduledTask")); + TRAP(err, ::RunTestsL()) + TEST(err == KErrNone); + + (void)TheFsSession.Delete(fileName); + TheFsSession.Close(); + TheTest.End(); + TheTest.Close(); + + __UHEAP_MARKEND; + + delete tc; + + return(KErrNone); + }