os/ossrv/genericservices/taskscheduler/Test/Robustness/TC_TSCH_IPC.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
 
sl@0
    16
sl@0
    17
#include <e32test.h>
sl@0
    18
#include <e32math.h>
sl@0
    19
#include <e32debug.h>
sl@0
    20
#include "CSCHCODE.H"
sl@0
    21
#include "SCHINFO.H"
sl@0
    22
#include <bsul/bsul.h>
sl@0
    23
#include <schinfointernal.h>
sl@0
    24
using namespace BSUL;
sl@0
    25
sl@0
    26
sl@0
    27
LOCAL_D RTest				Test (_L("TC_TSCH_IPC"));
sl@0
    28
sl@0
    29
_LIT(KServerName, "!TaskScheduler");
sl@0
    30
_LIT(KServerProcess, "SchExe");
sl@0
    31
sl@0
    32
struct TTestInfo
sl@0
    33
	{
sl@0
    34
	TInt iFunction;
sl@0
    35
	TInt iType;
sl@0
    36
	TInt iArgCount;
sl@0
    37
	};
sl@0
    38
sl@0
    39
struct TExitDetails
sl@0
    40
	{
sl@0
    41
	TExitCategoryName iCategory;
sl@0
    42
	TExitType iExitType;
sl@0
    43
	TInt iReason;
sl@0
    44
	};
sl@0
    45
sl@0
    46
const TInt KAsynchDelay = 500000;
sl@0
    47
sl@0
    48
const TInt KFunctionNumbers [] = {	ERegisterClient,
sl@0
    49
									ECreateTimeSchedule,
sl@0
    50
									ECreateConditionSchedule,
sl@0
    51
									EScheduleTask,
sl@0
    52
									ERemoveTask,
sl@0
    53
									EDisableSchedule,
sl@0
    54
									EEnableSchedule,
sl@0
    55
									EDeleteSchedule,
sl@0
    56
									EEditTimeSchedule,
sl@0
    57
									EEditConditionSchedule,
sl@0
    58
									EGetScheduleInfo,
sl@0
    59
									EGetTimeScheduleData,
sl@0
    60
									EGetConditionScheduleData,
sl@0
    61
									EGetTaskData,
sl@0
    62
									ECountSchedules,
sl@0
    63
									ECountTasks,
sl@0
    64
									EGetTaskRefs,
sl@0
    65
									EGetTask,
sl@0
    66
									EGetTaskDataSize,
sl@0
    67
									EGetScheduleRefs,
sl@0
    68
									EDeleteTask,
sl@0
    69
									EGetSchedulerItemRefAndNextDueTime,
sl@0
    70
									EGetScheduleType};
sl@0
    71
sl@0
    72
const TInt KNumFunctions = sizeof(KFunctionNumbers)/sizeof(KFunctionNumbers[0]);
sl@0
    73
sl@0
    74
//===============================================================================
sl@0
    75
sl@0
    76
TBool IsFunctionAsynchronous(TInt aFunc)
sl@0
    77
	{
sl@0
    78
	TBool asynch = EFalse;
sl@0
    79
	switch(aFunc)
sl@0
    80
		{			
sl@0
    81
			
sl@0
    82
		default:
sl@0
    83
			break;
sl@0
    84
		}
sl@0
    85
	return asynch;
sl@0
    86
	}
sl@0
    87
sl@0
    88
class RIpcFuzzTest : public RSessionBase
sl@0
    89
{
sl@0
    90
public: // Constructors and destructor
sl@0
    91
sl@0
    92
	/**
sl@0
    93
		* Constructor for performing 1st stage construction
sl@0
    94
		*/
sl@0
    95
	RIpcFuzzTest();
sl@0
    96
sl@0
    97
	/**
sl@0
    98
		* Destructor.
sl@0
    99
		*/
sl@0
   100
	~RIpcFuzzTest();
sl@0
   101
sl@0
   102
	/**
sl@0
   103
		* Performs test steps
sl@0
   104
		*/
sl@0
   105
	
sl@0
   106
	void RunTestL(const TDesC& aTargetSrvName, TInt aFunc, 
sl@0
   107
				TInt aTestType, TInt aArgCount);
sl@0
   108
	
sl@0
   109
private:
sl@0
   110
	TInt Fuzz(TInt aMsg, TInt aArgCount);
sl@0
   111
	TInt FuzzL(TInt aMsg, TInt aArgCount);
sl@0
   112
	TInt Fuzz8L(TInt aMsg, TInt aArgCount);
sl@0
   113
};
sl@0
   114
sl@0
   115
RIpcFuzzTest::RIpcFuzzTest()
sl@0
   116
	{
sl@0
   117
	// No implementation required
sl@0
   118
	}
sl@0
   119
sl@0
   120
sl@0
   121
RIpcFuzzTest::~RIpcFuzzTest()
sl@0
   122
	{
sl@0
   123
	Close();	
sl@0
   124
	}
sl@0
   125
sl@0
   126
TInt RIpcFuzzTest::Fuzz(TInt aMsg, TInt aArgCount)
sl@0
   127
	{
sl@0
   128
	TIpcArgs args;
sl@0
   129
	
sl@0
   130
	for(TInt i = 0; i < aArgCount;i++)
sl@0
   131
		{
sl@0
   132
		args.Set(i,Math::Random());
sl@0
   133
		}	
sl@0
   134
	
sl@0
   135
	TInt ret;
sl@0
   136
	
sl@0
   137
	if(IsFunctionAsynchronous(aMsg))
sl@0
   138
		{
sl@0
   139
		ret = Send(aMsg, args);
sl@0
   140
		User::After(KAsynchDelay);
sl@0
   141
		}
sl@0
   142
	else
sl@0
   143
		{
sl@0
   144
		ret = SendReceive(aMsg, args);
sl@0
   145
		}
sl@0
   146
	return ret;
sl@0
   147
	}
sl@0
   148
sl@0
   149
TInt RIpcFuzzTest::Fuzz8L(TInt aMsg, TInt aArgCount)
sl@0
   150
	{
sl@0
   151
	HBufC8* buf = HBufC8::NewLC(255);
sl@0
   152
	TPtr8 ptr = buf->Des();
sl@0
   153
	ptr.Fill(Math::Random(),255);
sl@0
   154
	
sl@0
   155
	TIpcArgs args;
sl@0
   156
	
sl@0
   157
	for(TInt i = 0; i < aArgCount;i++)
sl@0
   158
		{
sl@0
   159
		args.Set(i,&ptr);
sl@0
   160
		}
sl@0
   161
	
sl@0
   162
	TInt ret;
sl@0
   163
	
sl@0
   164
	if(IsFunctionAsynchronous(aMsg))
sl@0
   165
		{
sl@0
   166
		ret = Send(aMsg, args);
sl@0
   167
		User::After(KAsynchDelay);
sl@0
   168
		}
sl@0
   169
	else
sl@0
   170
		{
sl@0
   171
		ret = SendReceive(aMsg, args);
sl@0
   172
		}
sl@0
   173
sl@0
   174
	CleanupStack::PopAndDestroy(buf);
sl@0
   175
	return ret;
sl@0
   176
	}
sl@0
   177
sl@0
   178
TInt RIpcFuzzTest::FuzzL(TInt aMsg, TInt aArgCount)
sl@0
   179
	{
sl@0
   180
	HBufC* buf = HBufC::NewLC(255);
sl@0
   181
	TPtr ptr = buf->Des();
sl@0
   182
	ptr.Fill(Math::Random(),255);
sl@0
   183
sl@0
   184
	TIpcArgs args;
sl@0
   185
	
sl@0
   186
	for(TInt i = 0; i < aArgCount;i++)
sl@0
   187
		{
sl@0
   188
		args.Set(i,&ptr);
sl@0
   189
		}
sl@0
   190
	
sl@0
   191
	TInt ret;
sl@0
   192
	
sl@0
   193
	if(IsFunctionAsynchronous(aMsg))
sl@0
   194
		{
sl@0
   195
		ret = Send(aMsg, args);
sl@0
   196
		User::After(KAsynchDelay);
sl@0
   197
		}
sl@0
   198
	else
sl@0
   199
		{
sl@0
   200
		ret = SendReceive(aMsg, args);
sl@0
   201
		}
sl@0
   202
sl@0
   203
	CleanupStack::PopAndDestroy(buf);
sl@0
   204
	return ret;
sl@0
   205
	}
sl@0
   206
sl@0
   207
void RIpcFuzzTest::RunTestL(const TDesC& aTargetSrvName, 
sl@0
   208
							TInt aFunc, TInt aTestType, TInt aArgCount)
sl@0
   209
	{
sl@0
   210
		TVersion version(0,0,0);
sl@0
   211
	
sl@0
   212
		TInt err = CreateSession(aTargetSrvName, version);
sl@0
   213
		
sl@0
   214
		User::LeaveIfError(err);
sl@0
   215
	
sl@0
   216
		switch(aTestType)
sl@0
   217
			{
sl@0
   218
			case 0:
sl@0
   219
				Fuzz(aFunc,aArgCount);
sl@0
   220
				break;
sl@0
   221
				
sl@0
   222
			case 1:
sl@0
   223
				Fuzz8L(aFunc,aArgCount);
sl@0
   224
				break;
sl@0
   225
				
sl@0
   226
			case 2:
sl@0
   227
				FuzzL(aFunc,aArgCount);
sl@0
   228
				break;			
sl@0
   229
			}
sl@0
   230
	}
sl@0
   231
sl@0
   232
TInt KillProcess(const TDesC& aProcessName)
sl@0
   233
	{
sl@0
   234
	TFullName name;
sl@0
   235
sl@0
   236
	RDebug::Print(_L("Find and kill \"%S\" process.\n"), &aProcessName);
sl@0
   237
sl@0
   238
	TBuf<64> pattern(aProcessName);
sl@0
   239
	TInt length = pattern.Length();
sl@0
   240
	pattern += _L("*");
sl@0
   241
	TFindProcess procFinder(pattern);
sl@0
   242
sl@0
   243
	while (procFinder.Next(name) == KErrNone)
sl@0
   244
		{
sl@0
   245
		if (name.Length() > length)
sl@0
   246
			{//If found name is a string containing aProcessName string.
sl@0
   247
			TChar c(name[length]);
sl@0
   248
			if (c.IsAlphaDigit() ||
sl@0
   249
				c == TChar('_') ||
sl@0
   250
				c == TChar('-'))
sl@0
   251
				{
sl@0
   252
				// If the found name is other valid application name
sl@0
   253
				// starting with aProcessName string.
sl@0
   254
				RDebug::Print(_L(":: Process name: \"%S\".\n"), &name);
sl@0
   255
				continue;
sl@0
   256
				}
sl@0
   257
			}
sl@0
   258
		RProcess proc;
sl@0
   259
		if (proc.Open(name) == KErrNone)
sl@0
   260
			{
sl@0
   261
			proc.Kill(0);
sl@0
   262
			RDebug::Print(_L("\"%S\" process killed.\n"), &name);
sl@0
   263
			}
sl@0
   264
		proc.Close();
sl@0
   265
		}
sl@0
   266
	return KErrNone;
sl@0
   267
	}
sl@0
   268
sl@0
   269
sl@0
   270
TInt FuzzServerL(TAny* aTestInfo)
sl@0
   271
	{
sl@0
   272
   	CTrapCleanup* cleanup=CTrapCleanup::New();
sl@0
   273
   	TInt err=KErrNoMemory;
sl@0
   274
   	if (cleanup)
sl@0
   275
   		{
sl@0
   276
   		
sl@0
   277
		TTestInfo* info = (TTestInfo*)aTestInfo;
sl@0
   278
		RIpcFuzzTest fuzzer;
sl@0
   279
		
sl@0
   280
		TRAP(err,fuzzer.RunTestL(KServerName,info->iFunction
sl@0
   281
				,info->iType, info->iArgCount));
sl@0
   282
		
sl@0
   283
		fuzzer.Close();
sl@0
   284
sl@0
   285
   		delete cleanup;
sl@0
   286
   		}
sl@0
   287
   	return err;
sl@0
   288
	}
sl@0
   289
sl@0
   290
sl@0
   291
void TestServerApi(TInt aFunctionNumber,
sl@0
   292
			TInt aTestType,TInt aArgCount, TExitDetails& aExitDetails)
sl@0
   293
	{
sl@0
   294
    
sl@0
   295
    TTestInfo testInfo;
sl@0
   296
	testInfo.iFunction = aFunctionNumber;
sl@0
   297
	testInfo.iType = aTestType;
sl@0
   298
	testInfo.iArgCount = aArgCount;
sl@0
   299
    
sl@0
   300
    RThread thread;	
sl@0
   301
    _LIT(KThreadName,"FuzzerThread" );
sl@0
   302
	thread.Create(KThreadName,&FuzzServerL, KDefaultStackSize, NULL,&testInfo);
sl@0
   303
	
sl@0
   304
	TRequestStatus threadStat;
sl@0
   305
	thread.Logon(threadStat);
sl@0
   306
	
sl@0
   307
	TBool jit = User::JustInTime();
sl@0
   308
	User::SetJustInTime(EFalse);
sl@0
   309
	
sl@0
   310
	thread.Resume();
sl@0
   311
	
sl@0
   312
	User::WaitForRequest(threadStat);
sl@0
   313
	
sl@0
   314
	User::SetJustInTime(jit);
sl@0
   315
sl@0
   316
	aExitDetails.iCategory = thread.ExitCategory();
sl@0
   317
	aExitDetails.iReason = thread.ExitReason();
sl@0
   318
	aExitDetails.iExitType = thread.ExitType();
sl@0
   319
	
sl@0
   320
	thread.Close();
sl@0
   321
sl@0
   322
	}
sl@0
   323
sl@0
   324
sl@0
   325
TInt LaunchServer(RProcess& aServer)
sl@0
   326
	{
sl@0
   327
	
sl@0
   328
	Test.Printf(_L("Launching Task Scheduler...\n"));
sl@0
   329
	
sl@0
   330
	const TUid KServerUid3 = {0x10005399};	
sl@0
   331
	const TUidType serverUid(KNullUid,KNullUid,KServerUid3);
sl@0
   332
	
sl@0
   333
	TInt err = aServer.Create(KServerProcess, _L(""),serverUid);
sl@0
   334
	 
sl@0
   335
	if(err == KErrNone)
sl@0
   336
		{   
sl@0
   337
		aServer.SetPriority(EPriorityForeground);  
sl@0
   338
		 
sl@0
   339
		//Start server and wait until it is running
sl@0
   340
		TRequestStatus serverStat;
sl@0
   341
		aServer.SetJustInTime(false);   
sl@0
   342
		aServer.Resume(); 
sl@0
   343
		    
sl@0
   344
		aServer.Rendezvous(serverStat);
sl@0
   345
		User::WaitForRequest(serverStat);
sl@0
   346
		}
sl@0
   347
	 
sl@0
   348
	 return err;
sl@0
   349
	    
sl@0
   350
	}
sl@0
   351
sl@0
   352
void PrintTestMessage(TInt iFunc, TInt iType, TInt iArgCount)
sl@0
   353
	{
sl@0
   354
	switch(iType)
sl@0
   355
		{
sl@0
   356
		case 0:
sl@0
   357
			Test.Printf(_L("\nFuzz Test on function number %d using random Int data. Number of Args = %d"), iFunc, iArgCount);
sl@0
   358
			break;
sl@0
   359
			
sl@0
   360
		case 1:
sl@0
   361
			Test.Printf(_L("\nFuzz Test on function number %d using random Des8 data. Number of Args = %d"), iFunc, iArgCount);
sl@0
   362
			break;
sl@0
   363
			
sl@0
   364
		case 2:
sl@0
   365
			Test.Printf(_L("\nFuzz Test on function number %d using random Des data. Number of Args = %d"), iFunc, iArgCount);
sl@0
   366
			break;
sl@0
   367
			
sl@0
   368
		}
sl@0
   369
	
sl@0
   370
	}
sl@0
   371
sl@0
   372
/**
sl@0
   373
Invoke the tests
sl@0
   374
*/
sl@0
   375
/**
sl@0
   376
@SYMTestCaseID          SYSLIB-SCHSVR-CT-4004
sl@0
   377
@SYMTestCaseDesc	    Tests SchSvr APIs for IPC Robustness
sl@0
   378
@SYMTestPriority 	    High
sl@0
   379
@SYMTestActions  	    The function calls each of the SchSvr APIs through a custom session object
sl@0
   380
						passing random TInt, Des8 and Des16 data .
sl@0
   381
@SYMTestExpectedResults The server should be robust to all malformed messages and should not
sl@0
   382
						hang or panic.
sl@0
   383
@SYMDEF                	PDEF118811
sl@0
   384
*/
sl@0
   385
LOCAL_C void DoFuzzTestsL ()
sl@0
   386
    {  
sl@0
   387
    Test.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-4004 "));
sl@0
   388
    RProcess server;
sl@0
   389
    
sl@0
   390
    User::LeaveIfError(LaunchServer(server));
sl@0
   391
sl@0
   392
    TExitDetails exitDetails;
sl@0
   393
      
sl@0
   394
    for(TInt i = 0;i< KNumFunctions;i++)
sl@0
   395
    	{
sl@0
   396
    	
sl@0
   397
    	//Carry out each type of test
sl@0
   398
    	for(TInt testType = 0; testType < 3;testType++)
sl@0
   399
    		{
sl@0
   400
       		//Carry out each test with number of arguments 1 - 4
sl@0
   401
    		for(TInt argCount = 1;argCount <= 4;argCount++)
sl@0
   402
    			{
sl@0
   403
    			PrintTestMessage(KFunctionNumbers[i], testType, argCount);
sl@0
   404
sl@0
   405
    			TestServerApi(KFunctionNumbers[i], testType, argCount, exitDetails);
sl@0
   406
		    	//Kill the server process and verify that it was still running
sl@0
   407
		    	//If the server was already dead it would return the reason it exited
sl@0
   408
	    		if(server.ExitType() != EExitPending)
sl@0
   409
	    			{
sl@0
   410
	    			server.Kill(0);
sl@0
   411
	    			TInt exitReason = server.ExitReason();
sl@0
   412
	    			server.Close();
sl@0
   413
	    			Test(exitReason == 0);    	
sl@0
   414
	    			User::LeaveIfError(LaunchServer(server));
sl@0
   415
	    			}
sl@0
   416
    			}
sl@0
   417
	    	
sl@0
   418
    		Test.Printf(_L("\nFuzz Test Successful\n"));
sl@0
   419
    		}
sl@0
   420
    	}
sl@0
   421
    }
sl@0
   422
sl@0
   423
sl@0
   424
/*
sl@0
   425
 * SERVER API TESTING
sl@0
   426
 */
sl@0
   427
sl@0
   428
typedef void (*TestFunction)();
sl@0
   429
sl@0
   430
class RClientMessageTestSession : public RSessionBase
sl@0
   431
	{
sl@0
   432
public:
sl@0
   433
	TInt Connect();
sl@0
   434
	
sl@0
   435
	TInt TestRegisterClient(const TDesC& aData0, TInt aArg1);
sl@0
   436
	
sl@0
   437
	TInt TestCreateTimeSchedule(TDesC8& aData0,TDesC8& aData1,TDes8& aData2);
sl@0
   438
	TInt TestCreateCondSchedule(TDesC8& aData0,TDesC8& aData1,TDesC8& aData2,TDes8& aData3);
sl@0
   439
	
sl@0
   440
	TInt TestScheduleTask(TDesC8& aData0,TInt aArg1,TDes8& aData2,TDesC& aData3);
sl@0
   441
	TInt TestDeleteTask(TInt aArg0);
sl@0
   442
	TInt TestDeleteSchedule(TInt aArg0);
sl@0
   443
	TInt TestDisableSchedule(TInt aArg0);
sl@0
   444
	TInt TestEnableSchedule(TInt aArg0);
sl@0
   445
	
sl@0
   446
	TInt TestEditTimeSchedule(TInt aArg0, TInt aArg1, TDes8& aData2);
sl@0
   447
	TInt TestEditCondSchedule(TInt aArg0, TInt aArg1, TDes8& aData2, TDes8& aData3);
sl@0
   448
	
sl@0
   449
	TInt TestGetScheduleRefs(TInt aArg0, TInt aArg1, TDes8& aData2);
sl@0
   450
	TInt TestCountSchedules(TDes8& aData0, TInt aArg1);
sl@0
   451
	TInt TestGetScheduleType(TInt aArg0,TDes8& aData1);
sl@0
   452
	TInt TestGetScheduleInfo(TInt aArg0, TDes8& aData1, TDes8& aData2);
sl@0
   453
	TInt TestGetTimeScheduleData(TInt aArg0, TDes8& aData1, TDes8& aData2);
sl@0
   454
	TInt TestGetCondScheduleData(TInt aArg0, TDes8& aData1, TDes8& aData2, TDes8& aData3);
sl@0
   455
	TInt TestGetScheduleItemRef(TInt aArg0, TDes8& aData1, TDes8& aData2);
sl@0
   456
		
sl@0
   457
	TInt TestGetTaskData(TInt aArg0, TDes8& aData1, TDes8& aData2);
sl@0
   458
	TInt TestGetTaskRefs(TInt aArg0, TInt aArg1,TInt aArg2, TDes8& aData3);
sl@0
   459
	TInt TestCountTasks(TDes8& aData0, TInt aArg1, TInt aArg2);	
sl@0
   460
	TInt TestGetTaskInfo(TInt aArg0,TDesC8& aData1,TInt aArg2,TDesC& aData3);
sl@0
   461
	TInt TestGetTaskDataSize(TInt aArg0,TDesC8& aData1);
sl@0
   462
sl@0
   463
sl@0
   464
	};
sl@0
   465
sl@0
   466
static TInt LaunchLogServerL()
sl@0
   467
	{
sl@0
   468
sl@0
   469
	RProcess process;
sl@0
   470
sl@0
   471
	TInt err = process.Create(KServerProcess,_L(""));
sl@0
   472
	 
sl@0
   473
	if(err == KErrNone)
sl@0
   474
		{
sl@0
   475
		 TRequestStatus serverStat;		
sl@0
   476
		 
sl@0
   477
		 process.SetJustInTime(EFalse);
sl@0
   478
		 process.Resume();
sl@0
   479
		 process.Rendezvous(serverStat);
sl@0
   480
		 User::WaitForRequest(serverStat);
sl@0
   481
		}
sl@0
   482
	
sl@0
   483
	return err;
sl@0
   484
	}
sl@0
   485
sl@0
   486
sl@0
   487
TInt RClientMessageTestSession::Connect()
sl@0
   488
	{
sl@0
   489
	TInt retry = 2;
sl@0
   490
	for(;;)
sl@0
   491
		{
sl@0
   492
		TInt r = CreateSession(KServerName,TVersion(1,0,0));
sl@0
   493
		
sl@0
   494
		if((r != KErrNotFound)&&(r != KErrServerTerminated))
sl@0
   495
			{
sl@0
   496
			return r;
sl@0
   497
			}
sl@0
   498
		
sl@0
   499
		if(--retry == 0)
sl@0
   500
			{
sl@0
   501
			return r;
sl@0
   502
			}
sl@0
   503
		
sl@0
   504
		r = LaunchLogServerL();
sl@0
   505
		if((r != KErrNone)&&(r != KErrAlreadyExists))
sl@0
   506
			{
sl@0
   507
			return r;
sl@0
   508
			}	
sl@0
   509
		}
sl@0
   510
	}
sl@0
   511
sl@0
   512
TInt RClientMessageTestSession::TestRegisterClient(const TDesC& aData0, TInt aArg1)
sl@0
   513
	{
sl@0
   514
	return SendReceive(ERegisterClient,TIpcArgs(&aData0, aArg1));
sl@0
   515
	}
sl@0
   516
sl@0
   517
TInt RClientMessageTestSession::TestCreateTimeSchedule(TDesC8& aData0,TDesC8& aData1,TDes8& aData2)
sl@0
   518
	{
sl@0
   519
	return SendReceive(ECreateTimeSchedule,TIpcArgs(&aData0, &aData1,& aData2));
sl@0
   520
	}
sl@0
   521
sl@0
   522
TInt RClientMessageTestSession::TestCreateCondSchedule(TDesC8& aData0,TDesC8& aData1,TDesC8& aData2,TDes8& aData3)
sl@0
   523
	{
sl@0
   524
	return SendReceive(ECreateConditionSchedule,TIpcArgs(&aData0,&aData1, &aData2, &aData3));
sl@0
   525
	}
sl@0
   526
sl@0
   527
TInt RClientMessageTestSession::TestScheduleTask(TDesC8& aData0,TInt aArg1,TDes8& aData2,TDesC& aData3)
sl@0
   528
	{
sl@0
   529
	return SendReceive(EScheduleTask,TIpcArgs(&aData0, aArg1, &aData2, &aData3));
sl@0
   530
	}
sl@0
   531
sl@0
   532
TInt RClientMessageTestSession::TestDeleteTask(TInt aArg0)
sl@0
   533
	{
sl@0
   534
	return SendReceive(EDeleteTask,TIpcArgs(aArg0));
sl@0
   535
	}
sl@0
   536
sl@0
   537
TInt RClientMessageTestSession::TestDeleteSchedule(TInt aArg0)
sl@0
   538
	{
sl@0
   539
	return SendReceive(EDeleteSchedule,TIpcArgs(aArg0));
sl@0
   540
	}
sl@0
   541
sl@0
   542
TInt RClientMessageTestSession::TestDisableSchedule(TInt aArg0)
sl@0
   543
	{
sl@0
   544
	return SendReceive(EDisableSchedule,TIpcArgs(aArg0));
sl@0
   545
	}
sl@0
   546
sl@0
   547
TInt RClientMessageTestSession::TestEnableSchedule(TInt aArg0)
sl@0
   548
	{
sl@0
   549
	return SendReceive(EEnableSchedule,TIpcArgs(aArg0));
sl@0
   550
	}
sl@0
   551
sl@0
   552
TInt RClientMessageTestSession::TestEditTimeSchedule(TInt aArg0, TInt aArg1, TDes8& aData2)
sl@0
   553
	{
sl@0
   554
	return SendReceive(EEditTimeSchedule,TIpcArgs(aArg0, aArg1, &aData2));
sl@0
   555
	}
sl@0
   556
sl@0
   557
TInt RClientMessageTestSession::TestEditCondSchedule(TInt aArg0, TInt aArg1, TDes8& aData2, TDes8& aData3)
sl@0
   558
	{
sl@0
   559
	return SendReceive(EEditConditionSchedule,TIpcArgs(aArg0, aArg1, &aData2,&aData3));
sl@0
   560
	}
sl@0
   561
sl@0
   562
sl@0
   563
TInt RClientMessageTestSession::TestGetScheduleRefs(TInt aArg0, TInt aArg1, TDes8& aData2)
sl@0
   564
	{
sl@0
   565
	return SendReceive(EGetScheduleRefs,TIpcArgs(aArg0, aArg1, &aData2));
sl@0
   566
	}
sl@0
   567
sl@0
   568
TInt RClientMessageTestSession::TestCountSchedules(TDes8& aData0, TInt aArg1)
sl@0
   569
	{
sl@0
   570
	return SendReceive(ECountSchedules,TIpcArgs(&aData0, aArg1));
sl@0
   571
	}
sl@0
   572
sl@0
   573
TInt RClientMessageTestSession::TestGetScheduleType(TInt aArg0,TDes8& aData1)
sl@0
   574
	{
sl@0
   575
	return SendReceive(EGetScheduleType,TIpcArgs(aArg0, &aData1));
sl@0
   576
	}
sl@0
   577
sl@0
   578
TInt RClientMessageTestSession::TestGetScheduleInfo(TInt aArg0, TDes8& aData1, TDes8& aData2)
sl@0
   579
	{
sl@0
   580
	return SendReceive(EGetScheduleInfo,TIpcArgs(aArg0, &aData1, &aData2));
sl@0
   581
	}
sl@0
   582
sl@0
   583
TInt RClientMessageTestSession::TestGetTimeScheduleData(TInt aArg0, TDes8& aData1, TDes8& aData2)
sl@0
   584
	{
sl@0
   585
	return SendReceive(EGetTimeScheduleData,TIpcArgs(aArg0, &aData1, &aData2));
sl@0
   586
	}
sl@0
   587
sl@0
   588
TInt RClientMessageTestSession::TestGetCondScheduleData(TInt aArg0, TDes8& aData1, TDes8& aData2, TDes8& aData3)
sl@0
   589
	{
sl@0
   590
	return SendReceive(EGetConditionScheduleData,TIpcArgs(aArg0, &aData1, &aData2, &aData3));
sl@0
   591
	}
sl@0
   592
sl@0
   593
TInt RClientMessageTestSession::TestGetScheduleItemRef(TInt aArg0, TDes8& aData1, TDes8& aData2)
sl@0
   594
	{
sl@0
   595
	return SendReceive(EGetSchedulerItemRefAndNextDueTime,TIpcArgs(aArg0, &aData1, &aData2));
sl@0
   596
	}
sl@0
   597
sl@0
   598
TInt RClientMessageTestSession::TestGetTaskData(TInt aArg0, TDes8& aData1, TDes8& aData2)
sl@0
   599
	{
sl@0
   600
	return SendReceive(EGetTaskData,TIpcArgs(aArg0, &aData1, &aData2));
sl@0
   601
	}
sl@0
   602
sl@0
   603
TInt RClientMessageTestSession::TestGetTaskRefs(TInt aArg0, TInt aArg1,TInt aArg2, TDes8& aData3)
sl@0
   604
	{
sl@0
   605
	return SendReceive(EGetTaskRefs,TIpcArgs(aArg0, aArg1, aArg2, &aData3));
sl@0
   606
	}
sl@0
   607
sl@0
   608
TInt RClientMessageTestSession::TestCountTasks(TDes8& aData0, TInt aArg1, TInt aArg2)
sl@0
   609
	{
sl@0
   610
	return SendReceive(ECountTasks,TIpcArgs(&aData0, aArg1, aArg2));
sl@0
   611
	}
sl@0
   612
sl@0
   613
TInt RClientMessageTestSession::TestGetTaskInfo(TInt aArg0,TDesC8& aData1,TInt aArg2,TDesC& aData3)
sl@0
   614
	{
sl@0
   615
	return SendReceive(EGetTask,TIpcArgs(aArg0, &aData1, aArg2, &aData3));
sl@0
   616
	}
sl@0
   617
sl@0
   618
TInt RClientMessageTestSession::TestGetTaskDataSize(TInt aArg0,TDesC8& aData1)
sl@0
   619
	{
sl@0
   620
	return SendReceive(EGetTaskDataSize,TIpcArgs(aArg0, &aData1));
sl@0
   621
	}
sl@0
   622
sl@0
   623
sl@0
   624
sl@0
   625
sl@0
   626
sl@0
   627
TInt TestFunctionLauncherL(TAny* aTestFunction)
sl@0
   628
	{
sl@0
   629
   	CTrapCleanup* cleanup=CTrapCleanup::New();
sl@0
   630
   	TInt r=KErrNoMemory;
sl@0
   631
   	if (cleanup)
sl@0
   632
   		{
sl@0
   633
   		TestFunction function = (TestFunction)aTestFunction;
sl@0
   634
sl@0
   635
__UHEAP_MARK;  		
sl@0
   636
 		TRAP(r,function());
sl@0
   637
__UHEAP_MARKEND;
sl@0
   638
 		
sl@0
   639
   		delete cleanup;
sl@0
   640
   		}
sl@0
   641
   	return r;
sl@0
   642
	}
sl@0
   643
sl@0
   644
sl@0
   645
TExitDetails LaunchTestThreadL(const TDesC& aThreadName, TestFunction aFunction)
sl@0
   646
	{
sl@0
   647
	RThread thread;	
sl@0
   648
	thread.Create(aThreadName, &TestFunctionLauncherL, KDefaultStackSize, NULL, (TAny*)aFunction);
sl@0
   649
	
sl@0
   650
	TRequestStatus threadStat;
sl@0
   651
	thread.Logon(threadStat);
sl@0
   652
	
sl@0
   653
	TBool jit = User::JustInTime();
sl@0
   654
	User::SetJustInTime(EFalse);
sl@0
   655
	
sl@0
   656
	thread.Resume();
sl@0
   657
	User::WaitForRequest(threadStat);
sl@0
   658
	
sl@0
   659
	User::SetJustInTime(jit);
sl@0
   660
	 
sl@0
   661
	TExitDetails exitDetails;
sl@0
   662
	exitDetails.iCategory = thread.ExitCategory();
sl@0
   663
	exitDetails.iReason = thread.ExitReason();
sl@0
   664
	exitDetails.iExitType = thread.ExitType();
sl@0
   665
	
sl@0
   666
	return exitDetails;
sl@0
   667
	}
sl@0
   668
sl@0
   669
sl@0
   670
sl@0
   671
/**
sl@0
   672
@SYMTestCaseID          SYSLIB-SCHSVR-CT-4005
sl@0
   673
@SYMTestCaseDesc	    Tests Create Schedule API robustness
sl@0
   674
@SYMTestPriority 	    High
sl@0
   675
@SYMTestActions  	    Calls the Create Schedule APIs passing in varying parameters
sl@0
   676
						to test the robustness of the API				
sl@0
   677
@SYMTestExpectedResults The server should be robust to badly formed messages and should
sl@0
   678
						return KErrBadParameter if messages do not fit the constraints 
sl@0
   679
						defined in the message schema.  
sl@0
   680
						The server should panic the client with KErrBadDescriptor if an 
sl@0
   681
						invalid descriptor argument is passed.
sl@0
   682
@SYMDEF                	PDEF118811
sl@0
   683
*/
sl@0
   684
void TestCreateSchedulesL()
sl@0
   685
	{
sl@0
   686
	
sl@0
   687
	RClientMessageTestSession session;
sl@0
   688
	
sl@0
   689
	TInt err = session.Connect();
sl@0
   690
	
sl@0
   691
	CleanupClosePushL(session);
sl@0
   692
	
sl@0
   693
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
   694
	Test(err == KErrNone);
sl@0
   695
	
sl@0
   696
	err = session.TestRegisterClient(_L("MyClient2"),-1);	
sl@0
   697
	Test(err == KErrBadParameter);
sl@0
   698
	
sl@0
   699
	TScheduleSettings2 settings;
sl@0
   700
	TScheduleEntryInfo2 info;
sl@0
   701
	TInt id;
sl@0
   702
	
sl@0
   703
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
   704
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
   705
	TPckg<TInt> pId(id);
sl@0
   706
	
sl@0
   707
	settings.iPersists = -1;
sl@0
   708
	settings.iEntryCount = -1;	
sl@0
   709
	
sl@0
   710
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId);
sl@0
   711
	Test(err == KErrBadParameter);
sl@0
   712
	
sl@0
   713
	settings.iPersists = 0;
sl@0
   714
	settings.iEntryCount = 1;	
sl@0
   715
	
sl@0
   716
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId);
sl@0
   717
	Test(err == KErrNone);
sl@0
   718
	
sl@0
   719
	TTsTime time;
sl@0
   720
	TPckg<TTsTime> pTime(time);
sl@0
   721
	TTaskSchedulerCondition conditions;
sl@0
   722
	TPckg<TTaskSchedulerCondition> pConditions(conditions);
sl@0
   723
	
sl@0
   724
	err = session.TestCreateCondSchedule(pSettings, pConditions, pTime,pId);
sl@0
   725
	Test(err == KErrNone);
sl@0
   726
	
sl@0
   727
	err = session.TestDisableSchedule(id);
sl@0
   728
	Test(err == KErrNone);
sl@0
   729
	
sl@0
   730
	err = session.TestDisableSchedule(249990000);
sl@0
   731
	Test(err == KErrNotFound);
sl@0
   732
	
sl@0
   733
	err = session.TestDisableSchedule(-1);
sl@0
   734
	Test(err == KErrBadParameter);
sl@0
   735
	
sl@0
   736
	err = session.TestDisableSchedule(250000000);
sl@0
   737
	Test(err == KErrBadParameter);
sl@0
   738
	
sl@0
   739
	CleanupStack::PopAndDestroy(&session);
sl@0
   740
	}
sl@0
   741
sl@0
   742
void TestCreateSchedulesPanic1L()
sl@0
   743
	{
sl@0
   744
	RClientMessageTestSession session;
sl@0
   745
	
sl@0
   746
	TInt err = session.Connect();
sl@0
   747
	
sl@0
   748
	CleanupClosePushL(session);
sl@0
   749
	
sl@0
   750
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
   751
	Test(err == KErrNone);
sl@0
   752
	
sl@0
   753
	TScheduleSettings2 settings;
sl@0
   754
	TScheduleEntryInfo2 info;
sl@0
   755
	TInt id;
sl@0
   756
	
sl@0
   757
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
   758
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
   759
	TPckg<TInt> pId(id);
sl@0
   760
	
sl@0
   761
	settings.iPersists = 0;
sl@0
   762
	settings.iEntryCount = 0;	
sl@0
   763
	
sl@0
   764
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId);
sl@0
   765
	Test(err == KErrNone);
sl@0
   766
sl@0
   767
	CleanupStack::PopAndDestroy(&session);
sl@0
   768
	}
sl@0
   769
sl@0
   770
void TestCreateSchedulesPanic2L()
sl@0
   771
	{
sl@0
   772
	RClientMessageTestSession session;
sl@0
   773
	
sl@0
   774
	TInt err = session.Connect();
sl@0
   775
	
sl@0
   776
	CleanupClosePushL(session);
sl@0
   777
	
sl@0
   778
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
   779
	Test(err == KErrNone);
sl@0
   780
	
sl@0
   781
	TScheduleSettings2 settings;
sl@0
   782
	TTaskSchedulerCondition conditions;
sl@0
   783
	TTsTime time;
sl@0
   784
	TInt id;
sl@0
   785
	
sl@0
   786
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
   787
	TPckg<TTaskSchedulerCondition> pConditions(conditions);
sl@0
   788
	TPckg<TTsTime> pTime(time);
sl@0
   789
	TPckg<TInt> pId(id);
sl@0
   790
	
sl@0
   791
	settings.iEntryCount = 2;	
sl@0
   792
	settings.iPersists = 0;
sl@0
   793
	
sl@0
   794
	err = session.TestCreateCondSchedule(pSettings, pConditions, pTime,pId);
sl@0
   795
	Test(err == KErrNone);
sl@0
   796
	
sl@0
   797
	CleanupStack::PopAndDestroy(&session);
sl@0
   798
	}
sl@0
   799
sl@0
   800
/**
sl@0
   801
@SYMTestCaseID          SYSLIB-SCHSVR-CT-4006
sl@0
   802
@SYMTestCaseDesc	    Tests Edit Schedule API robustness
sl@0
   803
@SYMTestPriority 	    High
sl@0
   804
@SYMTestActions  	    Calls the Edit Schedule APIs passing in varying parameters
sl@0
   805
						to test the robustness of the API				
sl@0
   806
@SYMTestExpectedResults The server should be robust to badly formed messages and should
sl@0
   807
						return KErrBadParameter if messages do not fit the constraints 
sl@0
   808
						defined in the message schema.  
sl@0
   809
@SYMDEF                	PDEF118811
sl@0
   810
*/
sl@0
   811
void TestEditSchedulesL()
sl@0
   812
	{
sl@0
   813
	
sl@0
   814
	RClientMessageTestSession session;
sl@0
   815
	
sl@0
   816
	TInt err = session.Connect();
sl@0
   817
	
sl@0
   818
	CleanupClosePushL(session);
sl@0
   819
	
sl@0
   820
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
   821
	Test(err == KErrNone);
sl@0
   822
	
sl@0
   823
	TScheduleSettings2 settings;
sl@0
   824
	TTaskSchedulerCondition conditions;
sl@0
   825
	TTsTime time;
sl@0
   826
	TInt id1;
sl@0
   827
	TInt id2;
sl@0
   828
	TScheduleInfo schedInfo;
sl@0
   829
	
sl@0
   830
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
   831
	TPckg<TTaskSchedulerCondition> pConditions(conditions);
sl@0
   832
	TPckg<TTsTime> pTime(time);
sl@0
   833
	TPckg<TInt> pId1(id1);
sl@0
   834
	TPckg<TInt> pId2(id2);
sl@0
   835
	TPckg<TScheduleInfo> pSchedInfo(schedInfo);
sl@0
   836
	
sl@0
   837
	settings.iEntryCount = 1;	
sl@0
   838
	settings.iPersists = 0;
sl@0
   839
	
sl@0
   840
	TScheduleEntryInfo2 info;
sl@0
   841
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
   842
	
sl@0
   843
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId1);
sl@0
   844
	Test(err == KErrNone);
sl@0
   845
	
sl@0
   846
	err = session.TestEditTimeSchedule(settings.iEntryCount, id1,pInfo );
sl@0
   847
	Test(err == KErrNone);
sl@0
   848
	
sl@0
   849
	err = session.TestEditTimeSchedule(-1, id1,pInfo );
sl@0
   850
	Test(err == KErrBadParameter);
sl@0
   851
	
sl@0
   852
	err = session.TestEditTimeSchedule(10000, id1,pInfo );
sl@0
   853
	Test(err == KErrBadParameter);
sl@0
   854
	
sl@0
   855
	err = session.TestEditTimeSchedule(settings.iEntryCount, -1,pInfo );
sl@0
   856
	Test(err == KErrBadParameter);
sl@0
   857
	
sl@0
   858
	err = session.TestEditTimeSchedule(settings.iEntryCount,300000000,pInfo );
sl@0
   859
	Test(err == KErrBadParameter);
sl@0
   860
	
sl@0
   861
	err = session.TestCreateCondSchedule(pSettings, pConditions, pTime,pId2);
sl@0
   862
	Test(err == KErrNone);
sl@0
   863
	
sl@0
   864
	err = session.TestEditCondSchedule(settings.iEntryCount, id2,pConditions, pTime );
sl@0
   865
	Test(err == KErrNone);
sl@0
   866
	
sl@0
   867
	err = session.TestEditCondSchedule(-231, id2,pConditions, pTime );
sl@0
   868
	Test(err == KErrBadParameter);
sl@0
   869
	
sl@0
   870
	err = session.TestEditCondSchedule(11000, id2,pConditions, pTime );
sl@0
   871
	Test(err == KErrBadParameter);
sl@0
   872
	
sl@0
   873
	err = session.TestEditCondSchedule(settings.iEntryCount, -1,pConditions, pTime );
sl@0
   874
	Test(err == KErrBadParameter);
sl@0
   875
	
sl@0
   876
	err = session.TestEditCondSchedule(settings.iEntryCount, 250000000,pConditions, pTime );
sl@0
   877
	Test(err == KErrBadParameter);
sl@0
   878
		
sl@0
   879
	CleanupStack::PopAndDestroy(&session);
sl@0
   880
sl@0
   881
	}
sl@0
   882
sl@0
   883
/**
sl@0
   884
@SYMTestCaseID          SYSLIB-SCHSVR-CT-4007
sl@0
   885
@SYMTestCaseDesc	    Tests  Schedule Data API robustness
sl@0
   886
@SYMTestPriority 	    High
sl@0
   887
@SYMTestActions  	    Calls the Get Schedule Data APIs passing in varying parameters
sl@0
   888
						to test the robustness of the API				
sl@0
   889
@SYMTestExpectedResults The server should be robust to badly formed messages and should
sl@0
   890
						return KErrBadParameter if messages do not fit the constraints 
sl@0
   891
						defined in the message schema.  
sl@0
   892
						The server should panic the client with KErrBadDescriptor if an 
sl@0
   893
						invalid descriptor argument is passed.
sl@0
   894
@SYMDEF                	PDEF118811
sl@0
   895
*/
sl@0
   896
void TestGetScheduleDataL()
sl@0
   897
	{
sl@0
   898
	RClientMessageTestSession session;
sl@0
   899
		
sl@0
   900
		TInt err = session.Connect();
sl@0
   901
		
sl@0
   902
		CleanupClosePushL(session);
sl@0
   903
		
sl@0
   904
		err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
   905
		Test(err == KErrNone);
sl@0
   906
		
sl@0
   907
		TScheduleSettings2 settings;
sl@0
   908
		TTaskSchedulerCondition conditions;
sl@0
   909
		TTsTime time;
sl@0
   910
		TInt id1;
sl@0
   911
		TInt id2;
sl@0
   912
		TScheduleInfo schedInfo;
sl@0
   913
		
sl@0
   914
		TPckg<TScheduleSettings2> pSettings(settings);
sl@0
   915
		TPckg<TTaskSchedulerCondition> pConditions(conditions);
sl@0
   916
		TPckg<TTsTime> pTime(time);
sl@0
   917
		TPckg<TInt> pId1(id1);
sl@0
   918
		TPckg<TInt> pId2(id2);
sl@0
   919
		TPckg<TScheduleInfo> pSchedInfo(schedInfo);
sl@0
   920
		
sl@0
   921
		settings.iEntryCount = 1;	
sl@0
   922
		settings.iPersists = 0;
sl@0
   923
		
sl@0
   924
		TScheduleEntryInfo2 info;
sl@0
   925
		TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
   926
		
sl@0
   927
		err = session.TestCreateTimeSchedule(pSettings, pInfo, pId1);
sl@0
   928
		Test(err == KErrNone);
sl@0
   929
		
sl@0
   930
		err = session.TestCreateCondSchedule(pSettings, pConditions, pTime,pId2);
sl@0
   931
		Test(err == KErrNone);
sl@0
   932
				
sl@0
   933
		err = session.TestGetScheduleInfo(id1,pSchedInfo, pTime);
sl@0
   934
		Test(err == KErrNone);
sl@0
   935
		
sl@0
   936
		err = session.TestGetScheduleInfo(-1,pSchedInfo, pTime);
sl@0
   937
		Test(err == KErrBadParameter);
sl@0
   938
		
sl@0
   939
		err = session.TestGetScheduleInfo(250000000,pSchedInfo, pTime);
sl@0
   940
		Test(err == KErrBadParameter);
sl@0
   941
		
sl@0
   942
		TInt count;
sl@0
   943
		TPckg<TInt> pCount(count);
sl@0
   944
		
sl@0
   945
		err = session.TestCountSchedules(pCount, -378);
sl@0
   946
		Test(err == KErrBadParameter);
sl@0
   947
		
sl@0
   948
		err = session.TestCountSchedules(pCount, EAllSchedules);
sl@0
   949
		Test(err == KErrNone);
sl@0
   950
		
sl@0
   951
		err = session.TestCountSchedules(pCount, EPendingSchedules);
sl@0
   952
		Test(err == KErrNone);
sl@0
   953
		
sl@0
   954
		err = session.TestCountSchedules(pCount, 3);
sl@0
   955
		Test(err == KErrBadParameter);
sl@0
   956
		
sl@0
   957
		schedInfo.iEntryCount = 1;
sl@0
   958
		
sl@0
   959
		err = session.TestGetTimeScheduleData(id1,pSchedInfo, pInfo);
sl@0
   960
		Test(err == KErrNone);
sl@0
   961
		
sl@0
   962
		schedInfo.iEntryCount = 23;
sl@0
   963
		
sl@0
   964
		err = session.TestGetTimeScheduleData(id1,pSchedInfo, pInfo);
sl@0
   965
		Test(err == KErrArgument);
sl@0
   966
		
sl@0
   967
		schedInfo.iEntryCount = 1;
sl@0
   968
		
sl@0
   969
		err = session.TestGetTimeScheduleData(250000000,pSchedInfo, pInfo);
sl@0
   970
		Test(err == KErrBadParameter);
sl@0
   971
		
sl@0
   972
		err = session.TestGetCondScheduleData(id2,pSchedInfo, pInfo, pTime);
sl@0
   973
		Test(err == KErrNone);
sl@0
   974
		
sl@0
   975
		schedInfo.iEntryCount = 23;
sl@0
   976
		
sl@0
   977
		err = session.TestGetCondScheduleData(id2,pSchedInfo, pInfo, pTime);
sl@0
   978
		Test(err == KErrArgument);
sl@0
   979
		
sl@0
   980
		schedInfo.iEntryCount = 1;
sl@0
   981
		
sl@0
   982
		err = session.TestGetCondScheduleData(250000000,pSchedInfo, pInfo, pTime);
sl@0
   983
		Test(err == KErrBadParameter);
sl@0
   984
		
sl@0
   985
		err = session.TestGetCondScheduleData(-3,pSchedInfo, pInfo, pTime);
sl@0
   986
		Test(err == KErrBadParameter);			
sl@0
   987
		
sl@0
   988
		err = session.TestCountSchedules(pCount, EAllSchedules);
sl@0
   989
		Test(err == KErrNone);
sl@0
   990
		
sl@0
   991
		HBufC8* data = HBufC8::NewL(sizeof(TSchedulerItemRef)* count);
sl@0
   992
		TPtr8 pData = data->Des();
sl@0
   993
		
sl@0
   994
		err = session.TestGetScheduleRefs(count,EAllSchedules,pData);
sl@0
   995
		Test(err == KErrNone);
sl@0
   996
		
sl@0
   997
		err = session.TestCountSchedules(pCount, EPendingSchedules);
sl@0
   998
		Test(err == KErrNone);
sl@0
   999
		
sl@0
  1000
		err = session.TestGetScheduleRefs(count,EPendingSchedules,pData);
sl@0
  1001
		Test(err == KErrArgument);
sl@0
  1002
		
sl@0
  1003
		err = session.TestGetScheduleRefs(count,3,pData);
sl@0
  1004
		Test(err == KErrBadParameter);
sl@0
  1005
		
sl@0
  1006
		err = session.TestGetScheduleRefs(count,-1,pData);
sl@0
  1007
		Test(err == KErrBadParameter);
sl@0
  1008
		
sl@0
  1009
		err = session.TestGetScheduleRefs(-5,EAllSchedules,pData);
sl@0
  1010
		Test(err == KErrBadParameter);
sl@0
  1011
		
sl@0
  1012
		delete data;
sl@0
  1013
		
sl@0
  1014
		TInt type;
sl@0
  1015
		TPckg<TInt> pType(type);
sl@0
  1016
		
sl@0
  1017
		err = session.TestGetScheduleType(id1,pType);
sl@0
  1018
		Test(err == KErrNone);
sl@0
  1019
		
sl@0
  1020
		err = session.TestGetScheduleType(id2,pType);
sl@0
  1021
		Test(err == KErrNone);
sl@0
  1022
		
sl@0
  1023
		err = session.TestGetScheduleType(-1,pType);
sl@0
  1024
		Test(err == KErrBadParameter);
sl@0
  1025
		
sl@0
  1026
		err = session.TestGetScheduleType(250000002,pType);
sl@0
  1027
		Test(err == KErrBadParameter);
sl@0
  1028
		
sl@0
  1029
		CleanupStack::PopAndDestroy(&session);
sl@0
  1030
	}
sl@0
  1031
sl@0
  1032
void TestGetScheduleDataPanic1L()
sl@0
  1033
	{
sl@0
  1034
	RClientMessageTestSession session;
sl@0
  1035
		
sl@0
  1036
	TInt err = session.Connect();
sl@0
  1037
	
sl@0
  1038
	CleanupClosePushL(session);
sl@0
  1039
	
sl@0
  1040
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
  1041
	Test(err == KErrNone);
sl@0
  1042
	
sl@0
  1043
	TScheduleSettings2 settings;
sl@0
  1044
	TTaskSchedulerCondition conditions;
sl@0
  1045
	TTsTime time;
sl@0
  1046
	TInt id1;
sl@0
  1047
	TScheduleInfo schedInfo;
sl@0
  1048
	
sl@0
  1049
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
  1050
	TPckg<TTsTime> pTime(time);
sl@0
  1051
	TPckg<TInt> pId1(id1);
sl@0
  1052
	TPckg<TScheduleInfo> pSchedInfo(schedInfo);
sl@0
  1053
	
sl@0
  1054
	settings.iEntryCount = 1;	
sl@0
  1055
	settings.iPersists = 0;
sl@0
  1056
	
sl@0
  1057
	TScheduleEntryInfo2 info;
sl@0
  1058
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
  1059
	
sl@0
  1060
	schedInfo.iEntryCount = 1;
sl@0
  1061
	
sl@0
  1062
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId1);
sl@0
  1063
	Test(err == KErrNone);
sl@0
  1064
	
sl@0
  1065
	err = session.TestGetTimeScheduleData(id1,pSchedInfo, pId1);
sl@0
  1066
	Test(err == KErrOverflow);
sl@0
  1067
sl@0
  1068
	CleanupStack::PopAndDestroy(&session);
sl@0
  1069
	}
sl@0
  1070
sl@0
  1071
void TestGetScheduleDataPanic2L()
sl@0
  1072
	{
sl@0
  1073
	RClientMessageTestSession session;
sl@0
  1074
		
sl@0
  1075
	TInt err = session.Connect();
sl@0
  1076
	
sl@0
  1077
	CleanupClosePushL(session);
sl@0
  1078
	
sl@0
  1079
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
  1080
	Test(err == KErrNone);
sl@0
  1081
	
sl@0
  1082
	TScheduleSettings2 settings;
sl@0
  1083
	TInt id1;
sl@0
  1084
	TInt count;
sl@0
  1085
	
sl@0
  1086
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
  1087
	TPckg<TInt> pId1(id1);
sl@0
  1088
	TPckg<TInt> pCount(count);
sl@0
  1089
	
sl@0
  1090
	settings.iEntryCount = 1;	
sl@0
  1091
	settings.iPersists = 0;
sl@0
  1092
	
sl@0
  1093
	TScheduleEntryInfo2 info;
sl@0
  1094
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
  1095
	
sl@0
  1096
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId1);
sl@0
  1097
	Test(err == KErrNone);
sl@0
  1098
	
sl@0
  1099
	err = session.TestCountSchedules(pCount, EAllSchedules);
sl@0
  1100
	Test(err == KErrNone);
sl@0
  1101
		
sl@0
  1102
	err = session.TestGetScheduleRefs(count,EAllSchedules,pInfo);
sl@0
  1103
	Test(err == KErrOverflow);
sl@0
  1104
	
sl@0
  1105
	CleanupStack::PopAndDestroy(&session);
sl@0
  1106
	}
sl@0
  1107
sl@0
  1108
/**
sl@0
  1109
@SYMTestCaseID          SYSLIB-SCHSVR-CT-4008
sl@0
  1110
@SYMTestCaseDesc	    Tests  Schedule Task API robustness
sl@0
  1111
@SYMTestPriority 	    High
sl@0
  1112
@SYMTestActions  	    Calls the Schedule Tasks APIs passing in varying parameters
sl@0
  1113
						to test the robustness of the API				
sl@0
  1114
@SYMTestExpectedResults The server should be robust to badly formed messages and should
sl@0
  1115
						return KErrBadParameter if messages do not fit the constraints 
sl@0
  1116
						defined in the message schema.  
sl@0
  1117
						The server should panic the client with KErrBadDescriptor if an 
sl@0
  1118
						invalid descriptor argument is passed.
sl@0
  1119
@SYMDEF                	PDEF118811
sl@0
  1120
*/
sl@0
  1121
void TestScheduleTasksL()
sl@0
  1122
	{
sl@0
  1123
	
sl@0
  1124
	RClientMessageTestSession session;
sl@0
  1125
		
sl@0
  1126
	TInt err = session.Connect();
sl@0
  1127
	
sl@0
  1128
	CleanupClosePushL(session);
sl@0
  1129
	
sl@0
  1130
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
  1131
	Test(err == KErrNone);
sl@0
  1132
	
sl@0
  1133
	TScheduleSettings2 settings;
sl@0
  1134
	TScheduleEntryInfo2 info;
sl@0
  1135
	TInt id1;
sl@0
  1136
	TInt taskId;
sl@0
  1137
	
sl@0
  1138
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
  1139
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
  1140
	TPckg<TInt> pId1(id1);
sl@0
  1141
	TPckg<TInt> pTaskId(taskId);
sl@0
  1142
sl@0
  1143
	
sl@0
  1144
	settings.iEntryCount = 1;	
sl@0
  1145
	settings.iPersists = 0;
sl@0
  1146
	
sl@0
  1147
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId1);
sl@0
  1148
	Test(err == KErrNone);
sl@0
  1149
	
sl@0
  1150
	TTaskInfo taskInfo;
sl@0
  1151
	TPckg<TTaskInfo> pTaskInfo(taskInfo);
sl@0
  1152
	TBuf<32> taskData;
sl@0
  1153
	
sl@0
  1154
	err = session.TestScheduleTask(pTaskInfo, -1, pTaskId,taskData);
sl@0
  1155
	Test(err == KErrBadParameter);
sl@0
  1156
	
sl@0
  1157
	err = session.TestScheduleTask(pTaskInfo, 300000000, pTaskId,taskData);
sl@0
  1158
	Test(err == KErrBadParameter);
sl@0
  1159
	
sl@0
  1160
	err = session.TestDeleteTask(0);
sl@0
  1161
	Test(err == KErrNotFound);
sl@0
  1162
	
sl@0
  1163
	err = session.TestDeleteTask(249999999);
sl@0
  1164
	Test(err == KErrNotFound);
sl@0
  1165
	
sl@0
  1166
	err = session.TestDeleteTask(250000000);
sl@0
  1167
	Test(err == KErrNotFound);
sl@0
  1168
	
sl@0
  1169
	err = session.TestDeleteTask(-1);
sl@0
  1170
	Test(err == KErrNotFound);
sl@0
  1171
		
sl@0
  1172
	CleanupStack::PopAndDestroy(&session);
sl@0
  1173
	}
sl@0
  1174
sl@0
  1175
void TestScheduleTasksPanic1L()
sl@0
  1176
	{
sl@0
  1177
	RClientMessageTestSession session;
sl@0
  1178
		
sl@0
  1179
	TInt err = session.Connect();
sl@0
  1180
	
sl@0
  1181
	CleanupClosePushL(session);
sl@0
  1182
	
sl@0
  1183
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
  1184
	Test(err == KErrNone);
sl@0
  1185
	
sl@0
  1186
	TScheduleSettings2 settings;
sl@0
  1187
	TScheduleEntryInfo2 info;
sl@0
  1188
	TInt id1;
sl@0
  1189
	TInt taskId;
sl@0
  1190
	
sl@0
  1191
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
  1192
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
  1193
	TPckg<TInt> pId1(id1);
sl@0
  1194
	TPckg<TInt> pTaskId(taskId);
sl@0
  1195
sl@0
  1196
	
sl@0
  1197
	settings.iEntryCount = 1;	
sl@0
  1198
	settings.iPersists = 0;
sl@0
  1199
	
sl@0
  1200
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId1);
sl@0
  1201
	Test(err == KErrNone);
sl@0
  1202
	
sl@0
  1203
	TTaskInfo taskInfo;
sl@0
  1204
	TPckg<TTaskInfo> pTaskInfo(taskInfo);
sl@0
  1205
	TBuf<32> taskData;
sl@0
  1206
	
sl@0
  1207
	//This should cause the server to panic the client as p0 is 
sl@0
  1208
	//the wrong size
sl@0
  1209
	err = session.TestScheduleTask(pInfo, id1, pTaskId,taskData);
sl@0
  1210
		
sl@0
  1211
	CleanupStack::PopAndDestroy(&session);
sl@0
  1212
	}
sl@0
  1213
sl@0
  1214
void TestScheduleTasksPanic2L()
sl@0
  1215
	{
sl@0
  1216
	RClientMessageTestSession session;
sl@0
  1217
		
sl@0
  1218
	TInt err = session.Connect();
sl@0
  1219
	
sl@0
  1220
	CleanupClosePushL(session);
sl@0
  1221
	
sl@0
  1222
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
  1223
	Test(err == KErrNone);
sl@0
  1224
	
sl@0
  1225
	TScheduleSettings2 settings;
sl@0
  1226
	TScheduleEntryInfo2 info;
sl@0
  1227
	TInt id1;
sl@0
  1228
	TInt taskId;
sl@0
  1229
	
sl@0
  1230
	TPckg<TScheduleSettings2> pSettings(settings);
sl@0
  1231
	TPckg<TScheduleEntryInfo2> pInfo(info);
sl@0
  1232
	TPckg<TInt> pId1(id1);
sl@0
  1233
	TPckg<TInt> pTaskId(taskId);
sl@0
  1234
sl@0
  1235
	
sl@0
  1236
	settings.iEntryCount = 1;	
sl@0
  1237
	settings.iPersists = 0;
sl@0
  1238
	
sl@0
  1239
	err = session.TestCreateTimeSchedule(pSettings, pInfo, pId1);
sl@0
  1240
	Test(err == KErrNone);
sl@0
  1241
	
sl@0
  1242
	TTaskInfo taskInfo;
sl@0
  1243
	TPckg<TTaskInfo> pTaskInfo(taskInfo);
sl@0
  1244
	TBuf<32> taskData;
sl@0
  1245
	
sl@0
  1246
	//This should cause the server to panic the client as p2 is too large
sl@0
  1247
	err = session.TestScheduleTask(pTaskInfo, id1, pTaskInfo,taskData);
sl@0
  1248
		
sl@0
  1249
	CleanupStack::PopAndDestroy(&session);
sl@0
  1250
	}
sl@0
  1251
sl@0
  1252
sl@0
  1253
/**
sl@0
  1254
@SYMTestCaseID          SYSLIB-SCHSVR-CT-4009
sl@0
  1255
@SYMTestCaseDesc	    Tests  Get Task Data API robustness
sl@0
  1256
@SYMTestPriority 	    High
sl@0
  1257
@SYMTestActions  	    Calls the Get Task Data APIs passing in varying parameters
sl@0
  1258
						to test the robustness of the API				
sl@0
  1259
@SYMTestExpectedResults The server should be robust to badly formed messages and should
sl@0
  1260
						return KErrBadParameter if messages do not fit the constraints 
sl@0
  1261
						defined in the message schema.  
sl@0
  1262
@SYMDEF                	PDEF118811
sl@0
  1263
*/
sl@0
  1264
void TestGetTaskDataL()
sl@0
  1265
	{
sl@0
  1266
	
sl@0
  1267
	RClientMessageTestSession session;
sl@0
  1268
		
sl@0
  1269
	TInt err = session.Connect();
sl@0
  1270
	
sl@0
  1271
	CleanupClosePushL(session);
sl@0
  1272
	
sl@0
  1273
	err = session.TestRegisterClient(_L("MyClient"),0);	
sl@0
  1274
	Test(err == KErrNone);
sl@0
  1275
	
sl@0
  1276
	TSchedulerItemRef itemRef;
sl@0
  1277
	TScheduleInfo schedInfo;
sl@0
  1278
	TTaskInfo taskInfo;
sl@0
  1279
	TInt id1;
sl@0
  1280
	TInt count;
sl@0
  1281
	TInt taskId;
sl@0
  1282
	
sl@0
  1283
	TPckg<TScheduleInfo> pSchedInfo(schedInfo);
sl@0
  1284
	TPckg<TSchedulerItemRef> pItemRef(itemRef);
sl@0
  1285
	TPckg<TTaskInfo> pTaskInfo(taskInfo);
sl@0
  1286
	TPckg<TInt> pId1(id1);
sl@0
  1287
	TPckg<TInt> pCount(count);
sl@0
  1288
	TPckg<TInt> pTaskId(taskId);
sl@0
  1289
	
sl@0
  1290
	
sl@0
  1291
	err = session.TestGetTaskData(-1,pSchedInfo,pTaskInfo);
sl@0
  1292
	Test(err == KErrBadParameter);
sl@0
  1293
	
sl@0
  1294
	err = session.TestGetTaskData(340000000,pSchedInfo,pTaskInfo);
sl@0
  1295
	Test(err == KErrBadParameter);
sl@0
  1296
	
sl@0
  1297
	err = session.TestGetTaskRefs(0,0,0,pItemRef);
sl@0
  1298
	Test(err == KErrArgument);
sl@0
  1299
	
sl@0
  1300
	err = session.TestGetTaskRefs(-1,EAllSchedules,EAllTasks,pItemRef);
sl@0
  1301
	Test(err == KErrBadParameter);
sl@0
  1302
	
sl@0
  1303
	err = session.TestGetTaskRefs(340000000, EAllSchedules,EMyTasks,pItemRef);
sl@0
  1304
	Test(err == KErrBadParameter);
sl@0
  1305
	
sl@0
  1306
	err = session.TestGetTaskRefs(1,-1,EAllTasks,pItemRef);
sl@0
  1307
	Test(err == KErrBadParameter);
sl@0
  1308
	
sl@0
  1309
	err = session.TestGetTaskRefs(1,3,EAllTasks,pItemRef);
sl@0
  1310
	Test(err == KErrBadParameter);
sl@0
  1311
	
sl@0
  1312
	err = session.TestGetTaskRefs(1,EPendingSchedules,-1,pItemRef);
sl@0
  1313
	Test(err == KErrBadParameter);
sl@0
  1314
	
sl@0
  1315
	err = session.TestGetTaskRefs(1,EPendingSchedules,2,pItemRef);
sl@0
  1316
	Test(err == KErrBadParameter);
sl@0
  1317
	
sl@0
  1318
	err = session.TestGetTaskRefs(1,EAllSchedules,EMyTasks,pItemRef);
sl@0
  1319
	Test(err == KErrArgument);
sl@0
  1320
	
sl@0
  1321
	err = session.TestCountTasks(pCount,EAllSchedules,EMyTasks);
sl@0
  1322
	Test(err == KErrNone);
sl@0
  1323
	
sl@0
  1324
	err = session.TestCountTasks(pCount,-1,EMyTasks);
sl@0
  1325
	Test(err == KErrBadParameter);
sl@0
  1326
	
sl@0
  1327
	err = session.TestCountTasks(pCount,2,EMyTasks);
sl@0
  1328
	Test(err == KErrBadParameter);
sl@0
  1329
	
sl@0
  1330
	err = session.TestCountTasks(pCount,EAllSchedules,-1);
sl@0
  1331
	Test(err == KErrBadParameter);
sl@0
  1332
	
sl@0
  1333
	err = session.TestCountTasks(pCount,EAllSchedules,2);
sl@0
  1334
	Test(err == KErrBadParameter);
sl@0
  1335
	
sl@0
  1336
	err = session.TestGetTaskDataSize(0,pCount);
sl@0
  1337
	Test(err == KErrNotFound);
sl@0
  1338
	
sl@0
  1339
	err = session.TestGetTaskDataSize(249999999,pCount);
sl@0
  1340
	Test(err == KErrNotFound);
sl@0
  1341
	
sl@0
  1342
	err = session.TestGetTaskDataSize(250000000,pCount);
sl@0
  1343
	Test(err == KErrNotFound);
sl@0
  1344
	
sl@0
  1345
	err = session.TestGetTaskDataSize(-1,pCount);
sl@0
  1346
	Test(err == KErrNotFound);
sl@0
  1347
	
sl@0
  1348
	TBuf<10> data;
sl@0
  1349
	
sl@0
  1350
	err = session.TestGetTaskInfo(0,pTaskInfo,10,data);
sl@0
  1351
	Test(err == KErrNotFound);
sl@0
  1352
	
sl@0
  1353
	err = session.TestGetTaskInfo(249999999,pTaskInfo,10,data);
sl@0
  1354
	Test(err == KErrNotFound);
sl@0
  1355
	
sl@0
  1356
	err = session.TestGetTaskInfo(250000000,pTaskInfo,10,data);
sl@0
  1357
	Test(err == KErrNotFound);
sl@0
  1358
	
sl@0
  1359
	err = session.TestGetTaskInfo(-1,pTaskInfo,10,data);
sl@0
  1360
	Test(err == KErrNotFound);
sl@0
  1361
	
sl@0
  1362
	TSchedulerItemRef schedItem;
sl@0
  1363
	TTsTime time;
sl@0
  1364
	
sl@0
  1365
	TPckg<TSchedulerItemRef> pSchedItem(schedItem);
sl@0
  1366
	TPckg<TTsTime> pTime(time);
sl@0
  1367
sl@0
  1368
	err = session.TestGetScheduleItemRef(0,pSchedItem,pTime);
sl@0
  1369
	Test(err == KErrNone);
sl@0
  1370
	
sl@0
  1371
	err = session.TestGetScheduleItemRef(249999999,pSchedItem,pTime);
sl@0
  1372
	Test(err == KErrNotFound);
sl@0
  1373
	
sl@0
  1374
	err = session.TestGetScheduleItemRef(250000000,pSchedItem,pTime);
sl@0
  1375
	Test(err == KErrBadParameter);
sl@0
  1376
	
sl@0
  1377
	err = session.TestGetScheduleItemRef(-1,pSchedItem,pTime);
sl@0
  1378
	Test(err == KErrBadParameter);	
sl@0
  1379
			
sl@0
  1380
	CleanupStack::PopAndDestroy(&session);
sl@0
  1381
	}
sl@0
  1382
sl@0
  1383
sl@0
  1384
static void DoAPITestsL()
sl@0
  1385
	{
sl@0
  1386
	
sl@0
  1387
	TExitDetails exitDetails;
sl@0
  1388
	
sl@0
  1389
	Test.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-4005 Test Create Schedule APIs "));
sl@0
  1390
	exitDetails = LaunchTestThreadL(_L("TestCreateSchedulesL"), &TestCreateSchedulesL);
sl@0
  1391
	Test(exitDetails.iExitType == EExitKill);
sl@0
  1392
	
sl@0
  1393
	exitDetails = LaunchTestThreadL(_L("TestCreateSchedulesPanic1L"), &TestCreateSchedulesPanic1L);
sl@0
  1394
	Test(exitDetails.iExitType == EExitPanic);
sl@0
  1395
	Test(exitDetails.iReason == KErrBadDescriptor);
sl@0
  1396
	
sl@0
  1397
	exitDetails = LaunchTestThreadL(_L("TestCreateSchedulesPanic2L"), &TestCreateSchedulesPanic2L);
sl@0
  1398
	Test(exitDetails.iExitType == EExitPanic);
sl@0
  1399
	Test(exitDetails.iReason == KErrBadDescriptor);
sl@0
  1400
	
sl@0
  1401
	Test.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-4006 Test Edit Schedule APIs "));
sl@0
  1402
	exitDetails = LaunchTestThreadL(_L("TestEditSchedulesL"), &TestEditSchedulesL);
sl@0
  1403
	Test(exitDetails.iExitType == EExitKill);
sl@0
  1404
sl@0
  1405
	Test.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-4007 "));
sl@0
  1406
	exitDetails = LaunchTestThreadL(_L("TestGetScheduleDataL"), &TestGetScheduleDataL);
sl@0
  1407
	Test(exitDetails.iExitType == EExitKill);
sl@0
  1408
	
sl@0
  1409
	exitDetails = LaunchTestThreadL(_L("TestGetScheduleDataPanic1L"), &TestGetScheduleDataPanic1L);
sl@0
  1410
	Test(exitDetails.iExitType == EExitPanic);
sl@0
  1411
	Test(exitDetails.iReason == KErrOverflow);
sl@0
  1412
	
sl@0
  1413
	Test.Next(_L("  Test Get Schedule Data APIs "));
sl@0
  1414
	exitDetails = LaunchTestThreadL(_L("TestGetScheduleDataPanic2L"), &TestGetScheduleDataPanic2L);
sl@0
  1415
	Test(exitDetails.iExitType == EExitPanic);
sl@0
  1416
	Test(exitDetails.iReason == KErrOverflow);
sl@0
  1417
	
sl@0
  1418
	Test.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-4008 Test Schedule Task APIs "));
sl@0
  1419
	exitDetails = LaunchTestThreadL(_L("TestScheduleTasksL"), &TestScheduleTasksL);
sl@0
  1420
	Test(exitDetails.iExitType == EExitKill);
sl@0
  1421
	
sl@0
  1422
	exitDetails = LaunchTestThreadL(_L("TestScheduleTasksPanic1L"), &TestScheduleTasksPanic1L);
sl@0
  1423
	Test(exitDetails.iExitType == EExitPanic);
sl@0
  1424
	Test(exitDetails.iReason == KErrBadDescriptor);
sl@0
  1425
	
sl@0
  1426
	exitDetails = LaunchTestThreadL(_L("TestScheduleTasksPanic2L"), &TestScheduleTasksPanic2L);
sl@0
  1427
	Test(exitDetails.iExitType == EExitPanic);
sl@0
  1428
	Test(exitDetails.iReason == KErrBadDescriptor);
sl@0
  1429
	
sl@0
  1430
	Test.Next(_L(" @SYMTestCaseID:SYSLIB-SCHSVR-CT-4009 Test Get Task Data APIs "));
sl@0
  1431
	exitDetails = LaunchTestThreadL(_L("TestGetTaskDataL"), &TestGetTaskDataL);
sl@0
  1432
	Test(exitDetails.iExitType == EExitKill);
sl@0
  1433
	
sl@0
  1434
	}
sl@0
  1435
sl@0
  1436
sl@0
  1437
sl@0
  1438
sl@0
  1439
sl@0
  1440
sl@0
  1441
GLDEF_C TInt E32Main ()
sl@0
  1442
	{
sl@0
  1443
sl@0
  1444
	Test.Printf (_L ("\n"));
sl@0
  1445
	Test.Title ();
sl@0
  1446
	Test.Start (_L("IPC Fuzz Tests"));
sl@0
  1447
sl@0
  1448
   	CTrapCleanup* cleanup=CTrapCleanup::New();
sl@0
  1449
	
sl@0
  1450
   	TInt err=KErrNoMemory;
sl@0
  1451
   	if (cleanup)
sl@0
  1452
   		{
sl@0
  1453
   		
sl@0
  1454
   		// Construct and install the active scheduler
sl@0
  1455
   		CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
sl@0
  1456
   		CActiveScheduler::Install (scheduler);
sl@0
  1457
   		
sl@0
  1458
   		KillProcess(KServerProcess);
sl@0
  1459
   		User::After(1000000);
sl@0
  1460
   				
sl@0
  1461
   		TRAP (err, DoFuzzTestsL ());
sl@0
  1462
   		Test (err == KErrNone);
sl@0
  1463
   		
sl@0
  1464
   		Test.Next(_L("Task Scheduler API Robustness Tests"));
sl@0
  1465
   		TRAP (err, DoAPITestsL ());
sl@0
  1466
   		Test (err == KErrNone);
sl@0
  1467
  
sl@0
  1468
   		Test.End ();
sl@0
  1469
   		Test.Close ();
sl@0
  1470
   		
sl@0
  1471
   		delete scheduler;
sl@0
  1472
   		delete cleanup;
sl@0
  1473
   		
sl@0
  1474
   		}
sl@0
  1475
	return err;
sl@0
  1476
	}