supl/locationomasuplpostester/epos_comasuplpostestermodulecfg/src/epos_comasuplthreadprocesstest.cpp
changeset 0 667063e416a2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationomasuplpostester/epos_comasuplpostestermodulecfg/src/epos_comasuplthreadprocesstest.cpp	Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2005-2006 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:  Tests for thread creation & Process priority.
+*
+*/
+
+#include <stiflogger.h>
+#include "epos_comasuplthreadprocesstest.h"
+#include "epos_comasuplpostesterlogger.h"
+
+/** Constant used for logging name of test*/
+_LIT8(KThreadTest, "---------------Thread and Process Test---------------");
+
+/** Constant used for logging name of test*/
+_LIT8(KThreadTestComplete, "Info: Thread and Process Test complete.");
+
+_LIT8(KThreadsNotKilled, "Error: Number of threads not killed: ");
+
+_LIT8(KExtraThreadsKilled, "Error: Number of extra threads killed: ");
+
+_LIT8(KSameThreadCount, "Info: Number of threads created = \
+Number of threads killed.");
+
+_LIT8(KPriorityChanged, "Error: Priority of the process is changed.");
+
+_LIT8(KPriorityNotChanged, "Info: Priority of the process is not changed.");	
+
+// ---------------------------------------------------------------------------
+// Named constructor
+// ---------------------------------------------------------------------------
+//
+COMASuplThreadProcessTest* COMASuplThreadProcessTest::NewL(
+										COMASuplPosTesterCategory* aCallBack )
+	{
+	COMASuplThreadProcessTest* self = 
+							new(ELeave)COMASuplThreadProcessTest(aCallBack);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+COMASuplThreadProcessTest::~COMASuplThreadProcessTest()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+COMASuplThreadProcessTest::COMASuplThreadProcessTest(
+							COMASuplPosTesterCategory* aCallBack )
+							: COMASuplPosTesterCategory( aCallBack )
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::ConstructL()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// This function is called by test handler. It is entry point of execution
+// of a test case.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::StartTestingL()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// Handles an active object's request completion event.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::RunL()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// Implements cancellation of an outstanding request.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::DoCancel()
+	{
+	
+	}
+
+// ---------------------------------------------------------------------------
+// Handles a leave occurring in the request completion event handler RunL().
+// ---------------------------------------------------------------------------
+//
+TInt COMASuplThreadProcessTest::RunError(TInt /*aError*/)
+	{
+	return KErrNone;
+	}
+
+
+// ---------------------------------------------------------------------------
+// Gets number of threads, name of process and process priority.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::ReadStatusL(TInt& aThreadCount
+											, TProcessPriority& aPriority
+											, TFullName& aProcessName)
+	{
+	RProcess process;
+	CleanupClosePushL(process);
+	aProcessName = process.FullName();
+	CountThreadsL(aProcessName, aThreadCount);
+	aPriority = process.Priority();
+	CleanupStack::PopAndDestroy(&process);// removing process
+	}
+
+// ---------------------------------------------------------------------------
+// Counts number of threads associated with a process.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::CountThreadsL(const TFullName& aProcessName
+											, TInt& aThreadCount)
+	{
+	aThreadCount = 0;
+	HBufC* searchString = NULL;
+	TFullName threadName;
+	PrepareSearchStringL(searchString, aProcessName);
+	TFindThread findThread(*searchString);
+	
+	while(KErrNone == findThread.Next(threadName))
+		{
+		aThreadCount++;
+		}
+	delete searchString;
+	}
+
+// ---------------------------------------------------------------------------
+// Prepares a search string from the name of process.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::PrepareSearchStringL(HBufC*& aSearchString
+								, const TFullName& aProcessName)
+	{
+	delete aSearchString;
+	aSearchString = HBufC::NewL(aProcessName.Length() + 2);
+	TPtr stringPtr = aSearchString->Des();
+	_LIT(KStar, "*");
+	stringPtr.Copy(KStar);
+	stringPtr.Append(aProcessName);
+	stringPtr.Append(KStar);
+	}
+
+// ---------------------------------------------------------------------------
+// Reads the number of threads, process priority & name of process 
+// before executing tests.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::StatusBeforeTestsL()
+	{
+	ReadStatusL(iThreadCountBeforeTests, iProcessPriorityBeforeTests
+				, iProcessNameBeforeTests);
+	}
+// ---------------------------------------------------------------------------
+// Reads the number of threads, process priority & name of process 
+// after executing tests.
+// ---------------------------------------------------------------------------
+//
+void COMASuplThreadProcessTest::StatusAfterTestsL()
+	{
+	ReadStatusL(iThreadCountAfterTests, iProcessPriorityAfterTests
+				, iProcessNameAfterTests);
+	}
+
+// ---------------------------------------------------------------------------
+// Matches the number of threads, process priority & name of process 
+// obtained before and after executing tests and logd the info.
+// ---------------------------------------------------------------------------
+//
+TBool COMASuplThreadProcessTest::MatchAndLogStatus()
+	{
+	iLogger->WriteTestHeader(KThreadTest, iTestNo);
+	TBool result = ETrue;
+	if(iThreadCountAfterTests > iThreadCountBeforeTests)
+		{
+		iError++;
+		iLogger->WriteStatus(KThreadsNotKilled,
+				 iThreadCountAfterTests - iThreadCountBeforeTests
+				 								, iTestNo, &KNULL());
+		result = EFalse;
+		}
+	else if(iThreadCountAfterTests < iThreadCountBeforeTests)
+		{
+		iError++;
+		iLogger->WriteStatus(KExtraThreadsKilled,
+				 iThreadCountBeforeTests - iThreadCountAfterTests
+				 								, iTestNo, &KNULL());
+		result = EFalse;
+		}
+		else
+			{
+			iInfo++;
+			iLogger->WriteLine(KSameThreadCount, iTestNo);
+			}
+	if(iProcessPriorityBeforeTests != iProcessPriorityAfterTests)
+		{
+		iError++;
+		iLogger->WriteLine(KPriorityChanged, iTestNo);
+		result = EFalse;
+		}
+	else
+		{
+		iInfo++;
+		iLogger->WriteLine(KPriorityNotChanged, iTestNo);
+		}
+	iInfo++;
+	iLogger->WriteLine(KThreadTestComplete, iTestNo);
+	return result;
+	}
+