genericservices/taskscheduler/Test/LongRunning/LongRunning.cpp
changeset 0 e4d67989cc36
--- /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);
+	}