commonappservices/alarmserver/Test/TServerSessionEngineMain.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmserver/Test/TServerSessionEngineMain.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,249 @@
+// Copyright (c) 1999-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:
+//
+
+// System includes
+#include <e32base.h>
+#include <e32test.h>
+#include <f32file.h>
+
+// User includes
+#include "TServerSessionEngine.h"
+
+// Literal constants
+_LIT(KTest,		"server session engine test");
+
+// Constants
+const TAlarmCategory KASCliCategoryTest		= { 0x101F5031 };
+
+// Globals
+static RTest TheTest(KTest);
+
+
+void Test1L(CTestServerSessionEngine* aSessionEngine)
+	{
+	TheTest.Next(_L("Test 1"));
+	//******************************************************************************
+	// Test1 tests
+	//
+	// AlarmAddL
+	// AlarmDeleteL
+	// AlarmCountByCategory
+	// AlarmCountByState
+	// AlarmIdListByStateLC
+	//******************************************************************************
+	aSessionEngine->ClearAlarmStoreL();
+
+	RArray<TAlarmId> alarmIds;
+	CleanupClosePushL(alarmIds);
+
+	//add 10 alarms (category KASCliCategoryClock)
+	for(TInt ii=1; ii<=10; ii++)
+		{
+		TInt secondsFromNow = (ii)*2;
+		TAlarmId id = aSessionEngine->AddAlarmWithSpecificTimeL(secondsFromNow);
+		alarmIds.AppendL(id);
+		
+		TInt numberOfAlarms = aSessionEngine->Engine().AlarmCountByCategory(KASCliCategoryClock);
+		TheTest(numberOfAlarms == ii, __LINE__);
+		}
+
+	//check states of alarms
+	TInt alarmCount=0;
+	//states should be:
+	// 10 x EAlarmStateQueued
+	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateQueued);
+	TheTest(alarmCount == 10, __LINE__);
+
+	//wait for alarm to expire
+	aSessionEngine->AwaitNotificationL();
+	CActiveScheduler::Start();
+	//states should be:
+	// 1 x EAlarmStateNotifying
+	// 9 x EAlarmStateQueued
+	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateNotifying);
+	TheTest(alarmCount == 1, __LINE__);
+	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateQueued);
+	TheTest(alarmCount == 9, __LINE__);
+
+	//wait for another alarm to expire
+	CActiveScheduler::Start();
+	//states should be:
+	// 1 x EAlarmStateNotifying
+	// 1 x EAlarmStateWaitingToNotify
+	// 8 x EAlarmStateQueued
+	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateNotifying);
+	TheTest(alarmCount == 1, __LINE__);
+	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateWaitingToNotify);
+	TheTest(alarmCount == 1, __LINE__);
+	alarmCount = aSessionEngine->Engine().AlarmCountByState(EAlarmStateQueued);
+	TheTest(alarmCount == 8, __LINE__);
+
+	//last 8 alarms in our array should correspond to array of alarms with state queued
+	RArray<TAlarmId>* alarmsWithStateQueued = aSessionEngine->Engine().AlarmIdListByStateLC(EAlarmStateQueued);
+		for(TInt jj=0; jj<8; jj++)
+		{
+		TheTest(alarmIds[jj+2] == (*alarmsWithStateQueued)[jj], __LINE__);
+		}
+	alarmsWithStateQueued->Close();
+	CleanupStack::PopAndDestroy(alarmsWithStateQueued);
+
+	//delete all alarms individually
+	for(TInt count=alarmIds.Count(); count>0; count--)
+		{
+		aSessionEngine->Engine().AlarmDeleteL(alarmIds[count-1]);
+		}
+	CleanupStack::PopAndDestroy();//alarmIds
+	}
+
+
+void Test2L(CTestServerSessionEngine* aSessionEngine)
+	{
+	TheTest.Next(_L("Test 2"));
+	//******************************************************************************
+	// Test2 tests
+	//
+	// AlarmDetailsL
+	// AlarmCategoryL
+	// SetAlarmStatusByCategoryL
+	// AlarmCountByCategory
+	// DeleteAllAlarmsByCategoryL
+	// AlarmCategoryListLC
+	// AlarmIdListByCategoryLC
+	// SetAlarmStatusL
+	// AlarmStatus
+	//******************************************************************************
+	aSessionEngine->ClearAlarmStoreL();
+
+	//add 5 alarms with category KASCliCategoryClock
+	for(TInt ii=0; ii<5; ii++)
+		{
+		aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryClock);
+		}
+
+	//get list of categories - should contain only KASCliCategoryClock
+	RArray<TAlarmCategory>* alarmCategories = aSessionEngine->Engine().AlarmCategoryListLC();
+		
+	TheTest(alarmCategories->Count() == 1 && (*alarmCategories)[0] == KASCliCategoryClock, __LINE__);
+	alarmCategories->Close();
+	CleanupStack::PopAndDestroy(alarmCategories);
+	
+	//add 5 alarms with category KASCliCategoryTest
+	for(TInt jj=0; jj<5; jj++)
+		{
+		aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryTest);
+		}
+	
+	RArray<TAlarmCategory>* alarmCategories2 = aSessionEngine->Engine().AlarmCategoryListLC();
+	TheTest(alarmCategories2->Count() == 2, __LINE__);
+	alarmCategories2->Close();
+	CleanupStack::PopAndDestroy(alarmCategories2);
+
+	//add another 10 alarms with category KASCliCategoryClock
+	for(TInt kk=0; kk<10; kk++)
+		{
+		aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryClock);
+		}
+
+	//get alarms with category KASCliCategoryClock
+	RArray<TAlarmId>* alarms = aSessionEngine->Engine().AlarmIdListByCategoryLC(KASCliCategoryClock);
+	TInt count = alarms->Count();
+	TheTest(count == 15, __LINE__);
+	//check each alarm has category KASCliCategoryClock
+	for(TInt mm=0; mm<15; mm++)
+		{
+		//directly
+		TheTest(aSessionEngine->Engine().AlarmCategoryL((*alarms)[mm]) == KASCliCategoryClock, __LINE__);
+		//indirectly
+		TASSrvAlarm alarm(aSessionEngine->ServerWideData());
+		aSessionEngine->Engine().AlarmDetailsL((*alarms)[mm], alarm);
+		TheTest(alarm.Category() == KASCliCategoryClock, __LINE__);
+		}
+	alarms->Close();
+	CleanupStack::PopAndDestroy(alarms);
+
+	//should now have 15 alarms with category KASCliCategoryClock and 5 with category KASCliCategoryTest
+	TheTest(aSessionEngine->Engine().AlarmCountByCategory(KASCliCategoryClock)==15 &&
+		aSessionEngine->Engine().AlarmCountByCategory(KASCliCategoryTest)==5, __LINE__);
+	//disable all KASCliCategoryClock alarms
+	aSessionEngine->Engine().SetAlarmStatusByCategoryL(KASCliCategoryClock, EAlarmStatusDisabled);
+	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==5, __LINE__);
+	//try to delete all KASCliCategoryTest orphaned alarms (should be none)
+	aSessionEngine->Engine().DeleteAllAlarmsByCategoryL(KASCliCategoryTest, ETrue);
+	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==5, __LINE__);
+	//delete all KASCliCategoryTest alarms
+	aSessionEngine->Engine().DeleteAllAlarmsByCategoryL(KASCliCategoryTest, EFalse);
+	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==0, __LINE__);
+	//re-enable the KASCliCategoryClock alarms
+	aSessionEngine->Engine().SetAlarmStatusByCategoryL(KASCliCategoryClock, EAlarmStatusEnabled);
+	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==15, __LINE__);
+	//create a new enabled alarm
+	TAlarmId id = aSessionEngine->AddAlarmWithSpecificCategoryL(KASCliCategoryClock);
+	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==16, __LINE__);
+	//check status
+	TheTest(aSessionEngine->Engine().AlarmStatusL(id) == EAlarmStatusEnabled, __LINE__);
+	//disable it
+	aSessionEngine->Engine().SetAlarmStatusL(id, EAlarmStatusDisabled);
+	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==15, __LINE__);
+	TheTest(aSessionEngine->Engine().AlarmStatusL(id) == EAlarmStatusDisabled, __LINE__);
+	
+	//delete all remaining alarms
+	aSessionEngine->Engine().DeleteAllAlarmsByCategoryL(KASCliCategoryClock, EFalse);
+	TheTest(aSessionEngine->Engine().NumberOfActiveAlarmsInQueue()==0, __LINE__);
+	}
+
+
+static void doTestsL()
+	{
+	// this is a WINS test only, because it tests the functionality of the alarm server
+	// engine directly.  The tests are repeated in TClientSession which exercises the same
+	// functionality through a client session
+	
+#ifdef __WINS__
+	CTestServerSessionEngine* sessionEngine = CTestServerSessionEngine::NewLC();
+	//
+	TheTest.Next(_L("Start tests"));
+	Test1L(sessionEngine);
+	Test2L(sessionEngine);
+	
+	CleanupStack::PopAndDestroy(sessionEngine);
+#else
+	TheTest.Printf(_L("\nThis is a WINS test only\n"));
+#endif
+	}
+
+/**
+@SYMTestCaseID PIM-TSERVERSESSIONENGINEMAIN-0001
+*/	
+TInt E32Main()
+	{
+	__UHEAP_MARK;
+	//
+	TheTest.Title();
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if	(!cleanup)
+		return KErrNoMemory;
+	//
+	TheTest.Start(_L("@SYMTestCaseID PIM-TSERVERSESSIONENGINEMAIN-0001"));
+	//
+	TRAPD(err, doTestsL());
+	TheTest(err == KErrNone, __LINE__);
+
+	delete cleanup;
+	TheTest.End();
+	TheTest.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+	}