diff -r 000000000000 -r e4d67989cc36 genericservices/taskscheduler/Test/LongRunning/LongRunning.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericservices/taskscheduler/Test/LongRunning/LongRunning.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,160 @@ +// Copyright (c) 1997-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: +// TESTFIXES.CPP +// +// + +#include +#include +#include +#include +#include "Thelpers.h" +#include "TestUtils.h" + +// Globals +static RTest TheTest(_L("TestFixes")); +static RScheduler TheScheduler; +static RFs TheFsSession; + +// Type definitions +typedef CArrayFixFlat CScheduleEntryInfoArray; +typedef CArrayFixFlat CTaskInfoArray; + +//*********************************************************************************** +static TInt RegisterClient(RScheduler& aScheduler) +// +// Utility function to simplify registering a client with the task scheduler +// + { + TFileName filename = _L("Z:\\System\\Bin\\MinimalTaskHandler.exe"); + return aScheduler.Register(filename, 27); + } + +//*********************************************************************************** + +/** +@SYMTestCaseID SYSLIB-SCHSVR-CT-1023 +@SYMTestCaseDesc Tests for defect EDNHLJT-4WDEJV + A Kern Exec3 panic occurs 30 minutes after scheduling 300 tasks to complete at once. +@SYMTestPriority High +@SYMTestActions Create the schedule for the task.Create 300 tasks and enable the schedule and wait for 30 seconds.Check if any panic occurs +@SYMTestExpectedResults Check if any panic occurs +@SYMREQ REQ0000 +*/ +static void Test1L() + { + // Test title + TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-1023 \nTest for defect EDNHLJT-4WDEJV ")); + // A Kern Exec3 panic occurs after 30ish minutes after scheduling 300 tasks to complete at once. + + // Constants / vars used in this function + TSchedulerItemRef itemRef; + + TheTest.Next(_L("Connect to Scheduler")); + TInt res = TheScheduler.Connect(); + TheTest (res==KErrNone); + + TheTest.Next(_L("Registering Client")); + TheTest (RegisterClient(TheScheduler) == KErrNone); + + // Create some scheduling entries + CArrayFixFlat* entries = new(ELeave) CArrayFixFlat(10); + CleanupStack::PushL(entries); + + TScheduleEntryInfo entry1; + entry1.iIntervalType = EHourly; + entry1.iStartTime = SchSvrHelpers::TimeBasedOnOffset(1); + entry1.iInterval = 1; + entry1.iValidityPeriod = 20; + entries->AppendL(entry1); + + // Create the schedule for the task... + res = TheScheduler.CreatePersistentSchedule(itemRef, *entries); + TheTest(res == KErrNone); + + // Disable the schedule straight away + res = TheScheduler.DisableSchedule(itemRef.iHandle); + TheTest(res == KErrNone); + + if (res == KErrNone) + { + for(TInt i=0; i<300; i++) + { + // Create the tasks themselves.. + TTaskInfo task; + task.iRepeat = 1; // repeat once + task.iName = _L("Test Task For Defect Verification"); + task.iPriority = 100; + // + HBufC* taskData = HBufC::NewMaxLC(100); + taskData->Des().Repeat(_L(" ")); + // + res = TheScheduler.ScheduleTask(task, *taskData, itemRef.iHandle); + TheTest(res == KErrNone); + + CleanupStack::PopAndDestroy(taskData); + } + } + + res = TheScheduler.EnableSchedule(itemRef.iHandle); + TheTest(res == KErrNone); + + CleanupStack::PopAndDestroy(entries); + + TheTest.Printf(_L("Waiting for 30 minutes\n")); + // Wait for thirty minutes to see if a Kern Exec3 panic occurs + User::After(1000000 * 60 * 30); // thirty mins + + } + +//*********************************************************************************** + +GLDEF_C TInt DoTheTestsL() +// +// Kickoff method +// + { + // Add tests here:- + Test1L(); + + return KErrNone; + } + +//*********************************************************************************** +GLDEF_C TInt E32Main() +// +// Entry point +// + { + __UHEAP_MARK; + TheTest.Title(); + TheTest.Start(_L("TheTest Task Scheduler Fixes")); + + TInt error = KErrNone; + CTrapCleanup* cleanup = CTrapCleanup::New(); + if (!cleanup) + return KErrNoMemory; + + TheFsSession.Connect(); + TRAP(error, DoTheTestsL()); + TEST(error == KErrNone); + TheFsSession.Close(); + TheTest(error == KErrNone); + delete cleanup; + + TheTest.End(); + TheTest.Close(); + __UHEAP_MARKEND; + return(KErrNone); + }