--- /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 <e32base.h>
+#include <e32test.h>
+#include <csch_cli.h>
+#include <f32file.h>
+#include "Thelpers.h"
+#include "TestUtils.h"
+
+// Globals
+static RTest TheTest(_L("TestFixes"));
+static RScheduler TheScheduler;
+static RFs TheFsSession;
+
+// Type definitions
+typedef CArrayFixFlat<TScheduleEntryInfo> CScheduleEntryInfoArray;
+typedef CArrayFixFlat<TTaskInfo> 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<TScheduleEntryInfo>* entries = new(ELeave) CArrayFixFlat<TScheduleEntryInfo>(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);
+ }