genericservices/taskscheduler/Test/PlatSec/tschsvrclient.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/genericservices/taskscheduler/Test/PlatSec/tschsvrclient.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,294 @@
+// Copyright (c) 2004-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:
+// tschsvrsclient1.cpp
+// 
+//
+
+#include <e32base.h>
+#include <e32debug.h>
+
+#include <csch_cli.h>
+#include <schinfointernal.h>
+#include "Thelpers.h"
+#include "TestUtils.h"
+
+_LIT(KTestName,	"Client with different UID test");
+RTest TheTest(KTestName);
+static RScheduler	TheScheduler;
+
+
+typedef CArrayFixFlat<TScheduleEntryInfo>	CSchEntryInfoArray;
+typedef CArrayFixFlat<TTaskInfo>			CTaskInfoArray;
+typedef CArrayFixFlat<TSchedulerItemRef>    CSchItemRefArray;
+typedef CArrayFixFlat<TTaskSchedulerCondition>	CSchConditionArray;
+
+
+static CSchEntryInfoArray* CreateScheduleArrayLC()
+	{
+	CSchEntryInfoArray* entryList = new (ELeave) CSchEntryInfoArray(3);
+	CleanupStack::PushL(entryList);
+
+	TScheduleEntryInfo entry1;
+	entry1.iStartTime		= SchSvrHelpers::TimeBasedOnOffset(0, 20); // 20m from "now"
+	entry1.iInterval		= 1;
+	entry1.iIntervalType	= EDaily;
+	entry1.iValidityPeriod	= 20;
+	entryList->AppendL(entry1);
+	
+	return entryList;
+	}
+
+static CSchConditionArray* CreateSingleConditionLC()
+	{
+	CSchConditionArray* conditionList = new (ELeave) CSchConditionArray(3);
+	CleanupStack::PushL(conditionList);
+
+	const TUid KTestUid = TUid::Uid(0x12345678);
+	
+	TTaskSchedulerCondition condition1;
+	condition1.iCategory = KTestUid;
+	condition1.iKey		= 1;
+	condition1.iState	= 10;
+	condition1.iType	= TTaskSchedulerCondition::EEquals;
+	conditionList->AppendL(condition1);
+	
+	return conditionList;			
+	}	
+/**
+@SYMTestCaseID          SYSLIB-SCHSVR-CT-1343
+@SYMTestCaseDesc	    Client with different UID test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Connect to Scheduler,
+                        Tests RScheduler::EditSchedule(),RScheduler::DisableSchedule(),RScheduler::EnableSchedule()
+						RScheduler::ScheduleTask(),RScheduler::GetScheduleRefsL(),RScheduler::GetScheduleL(),
+						RScheduler::GetTaskRefsL(),RScheduler::GetTaskDataSize(),RScheduler::GetTaskInfoL(),
+						RScheduler::GetScheduleTypeL(),RScheduler::DeleteTask(),RScheduler::DeleteSchedule() functions
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/			
+void DoExecuteL(TInt aScheduleHandle, 
+				TInt aTaskHandle, 
+				TInt aExpectedError,
+				TInt aExpectedScheduleCount,
+				TInt aExpectedTaskCount)
+	{
+	
+	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-1343 Connect to Scheduler "));
+	TInt res = TheScheduler.Connect();
+	TEST2(res, KErrNone);
+	TheTest.Next(_L("Registering Client"));
+	TEST2(SchSvrHelpers::RegisterClientL(TheScheduler), KErrNone);
+
+	//Edit Schedule
+	TheTest.Next(_L("Testing EditSchedule"));
+	CSchEntryInfoArray* scheduleArray = CreateScheduleArrayLC();
+	res = TheScheduler.EditSchedule(aScheduleHandle, *scheduleArray);
+	CleanupStack::PopAndDestroy(); //scheduleArray
+	TEST2(res, aExpectedError);
+	//condition API -  only check if we are expecting an error
+	if(aExpectedError != KErrNone)
+		{
+		CSchConditionArray* conditionList = CreateSingleConditionLC();
+		TTime time = SchSvrHelpers::TimeBasedOnOffset(0, 0, 0, 0, 0, 1); //1 year in the future
+		res = TheScheduler.EditSchedule(aScheduleHandle, *conditionList, time);
+		CleanupStack::PopAndDestroy(); // conditionList
+		TEST2(res, aExpectedError);
+		}
+	//Disable/Enable Schedule
+	TheTest.Next(_L("Testing DisableSchedule and EnableSchedule"));
+	res = TheScheduler.DisableSchedule(aScheduleHandle);
+	TEST2(res, aExpectedError);
+	res = TheScheduler.EnableSchedule(aScheduleHandle);
+	TEST2(res, aExpectedError);
+	
+	//ScheduleTask
+	TheTest.Next(_L("Testing ScheduleTask"));
+	TTaskInfo taskInfo;
+	taskInfo.iName = _L("MyTask");
+	taskInfo.iPriority = 2;
+	taskInfo.iTaskId = 0;
+	taskInfo.iRepeat = 1;
+	HBufC* data = _L("Task Data I cant schedule").AllocLC();
+	res = TheScheduler.ScheduleTask(taskInfo, *data, aScheduleHandle);
+	TEST2(res, aExpectedError);
+	CleanupStack::PopAndDestroy(); // data
+	
+	if(res == KErrNone)
+		{
+		res = TheScheduler.DeleteTask(taskInfo.iTaskId);
+		TEST2(res, KErrNone);
+		}
+		
+	//GetScheduleRefs
+	TheTest.Next(_L("Testing GetScheduleRefsL"));
+	CSchItemRefArray* refs = new (ELeave) CSchItemRefArray(3);
+	CleanupStack::PushL(refs);
+	res = TheScheduler.GetScheduleRefsL(*refs, EAllSchedules); 
+	TEST2(res, KErrNone);
+	TInt count = refs->Count();
+	TEST2(count, aExpectedScheduleCount); 
+	
+	//GetSchedule
+	TheTest.Next(_L("Testing GetScheduleL"));
+	CSchEntryInfoArray* entries = new (ELeave) CSchEntryInfoArray(3);
+	CleanupStack::PushL(entries);
+	CTaskInfoArray* tasks = new (ELeave) CTaskInfoArray(3);
+	CleanupStack::PushL(tasks);
+	
+	TTime nextTimeScheduleIsDue;
+	TScheduleState state;
+	res = TheScheduler.GetScheduleL(aScheduleHandle, 
+										state, 
+										*entries, 
+										*tasks, 
+										nextTimeScheduleIsDue);
+	TEST2(res, aExpectedError);
+	//condition API -  only check if we are expecting an error
+	if(aExpectedError != KErrNone)
+		{
+		CSchConditionArray* conditions = new (ELeave) CSchConditionArray(3);
+		CleanupStack::PushL(conditions);
+		res = TheScheduler.GetScheduleL(aScheduleHandle, 
+											state,
+											*conditions, 
+											nextTimeScheduleIsDue, 
+											*tasks);
+		CleanupStack::PopAndDestroy(conditions);									
+		TEST2(res, aExpectedError);
+		}
+	
+	//GetTaskRefs
+	TheTest.Next(_L("Testing GetScheduleL"));
+	res = TheScheduler.GetTaskRefsL(*refs, EAllSchedules, EAllTasks);
+	TEST2(res, KErrNone);
+	count = refs->Count();
+	TEST2(count, aExpectedTaskCount); 
+	
+	// TaskDataSize
+	TheTest.Next(_L("Testing GetTaskDataSize"));
+	TInt taskSize = 0;
+	res = TheScheduler.GetTaskDataSize(aTaskHandle, taskSize);
+	TEST2(res, aExpectedError);
+	
+	// GetTaskInfo
+	TheTest.Next(_L("Testing GetTaskInfoL"));
+	if(aExpectedError != KErrNone)
+		//use dummy size for task as we actually didnt get it from above
+		// if we were expected as error
+		taskSize = 10; 
+	HBufC* taskData = HBufC::NewLC(taskSize);
+	TPtr pTaskData = taskData->Des();
+
+	TTime scheduleNextDueTime;
+	TTaskInfo taskFromServer;
+	TSchedulerItemRef scheduleReference;
+
+	res = TheScheduler.GetTaskInfoL(aTaskHandle,
+										taskFromServer, 
+									  	pTaskData, 
+										scheduleReference, 
+										scheduleNextDueTime);
+	CleanupStack::PopAndDestroy(taskData);
+	TEST2(res, aExpectedError);
+	
+	TScheduleType scheduleType;
+	res = TheScheduler.GetScheduleTypeL(aScheduleHandle, scheduleType);
+	TEST2(res, aExpectedError);
+
+	//DeleteTask
+	TheTest.Next(_L("Testing TaskSchedule"));
+	res = TheScheduler.DeleteTask(aTaskHandle);
+	TEST2(res, aExpectedError);
+
+	//Delete Schedule
+	TheTest.Next(_L("Testing DeleteSchedule"));
+	res = TheScheduler.DeleteSchedule(aScheduleHandle);
+	TEST2(res, aExpectedError);
+											
+	CleanupStack::PopAndDestroy(tasks);
+	CleanupStack::PopAndDestroy(entries);
+	CleanupStack::PopAndDestroy(refs);
+	
+	TheScheduler.Close();
+	
+	}
+
+LOCAL_D TInt Execute(TInt aScheduleHandle, 
+					TInt aTaskHandle, 
+					TInt aExpectedError,
+					TInt aExpectedScheduleCount,
+					TInt aExpectedTaskCount)
+	{
+	TInt err = KErrNoMemory;
+	CTrapCleanup* cleanup=CTrapCleanup::New();	//can fail
+	if (cleanup)
+		{
+		
+		TheTest.Start(_L("TSchSvrClient"));
+		TheTest.Title();
+		err = KErrNone;
+		TRAP(err, DoExecuteL(aScheduleHandle, 
+							aTaskHandle, 
+							aExpectedError,
+							aExpectedScheduleCount,
+							aExpectedTaskCount))
+		delete cleanup;
+
+		TheTest.End();
+		TheTest.Close();
+
+		}
+	return err;
+	}
+
+
+//***********************************************************************************
+static TInt Str2Int(const TDesC& aStr)
+	{
+	TLex16 lex(aStr);
+	TInt val = 0;
+	lex.Val(val);
+	return val;
+	}
+
+static TBuf<20> ExtractInt(const TDesC& aBuf, TInt& aExtractedInt)
+	{
+	TBuf<20> buf = aBuf.Right(aBuf.Length() - aBuf.Locate(':')-1);
+	TBuf<5> handle;
+	handle.FillZ();
+	handle = buf.Left(buf.Locate(':'));
+	aExtractedInt = Str2Int(handle);
+	return buf;
+	}
+	
+GLDEF_C TInt E32Main()
+	{
+	TBuf<30> cmd;
+	User::CommandLine(cmd);
+	// schedule Handle is first
+	TInt scheduleHandle=0, taskHandle=0, errCode=0, schCount=0, taskCount=0;
+	cmd = ExtractInt(cmd, scheduleHandle);
+	// task Handle is second
+	cmd = ExtractInt(cmd, taskHandle);
+	// expected error code is third
+	cmd = ExtractInt(cmd, errCode);
+	// expected schedule count (based on this exe UID/Capability is fourth
+	cmd = ExtractInt(cmd, schCount);
+	// expected task count (based on this exe UID/Capability is fourth
+	cmd = ExtractInt(cmd, taskCount);
+	
+	return Execute(scheduleHandle, taskHandle, errCode, schCount, taskCount);
+	}
+	
+