messagingfw/biomsgfw/BIOSTSRC/T_BIOS.CPP
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BIOSTSRC/T_BIOS.CPP	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,592 @@
+// 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:
+//
+
+#include <msvruids.h>
+#include <e32test.h>
+#include <f32fsys.h>
+#include <s32file.h>
+#include <e32uid.h>
+#include <msvreg.h>
+#include <mtsr.h>
+
+#include <msvids.h>
+#include <bioscmds.h>
+// BIF file database
+#include <biodb.h>
+
+#include <biouids.h>		// Defines for use in Bio messaging
+#include <bitsids.h>		// Uids for use in Test Harnesses
+
+#include <bsp.h>
+
+#include "biotestutils.h"
+
+#include <txtrich.h>		//	rich text stuff
+#include <txtfmlyr.h>		//	para format gubbins..
+
+// Compiler flag to switch on Heap Failure Testing
+#define _HEAP_FAILURE_TEST_
+
+RTest	test(_L("BioServer MTM Testrig"));
+LOCAL_D	CTrapCleanup* trapcleanup;
+LOCAL_D CActiveScheduler* activescheduler;
+#ifdef _DEBUG
+LOCAL_D TInt failCount1;
+#endif
+
+enum{
+	ENbssReadingFiles,
+	ENbssTestParseProcess,
+	ENbssTestParse,
+	ENbssTestProcess,
+	ENbssTestCopyTo,
+	ENbssTestDelete,
+	ENbssTestMoveTo,
+	ENbssTestCopyFrom,
+	ENbssTestMoveFrom,
+	ENbssTestMoveWithin,
+	ENbssTestCreate,
+	ENbssTestChange,
+	ENbssTestParsing			// to allow heap testing to continue when
+								// thread has left with KErrNoMemory
+	};
+
+// create our own active scheduler class
+
+class CExampleScheduler : public CActiveScheduler
+	{
+public:
+	void Error (TInt aError) const;
+	};
+
+void CExampleScheduler::Error(TInt /*anError*/) const
+	{
+	CActiveScheduler::Stop();
+	}
+
+class CTestNbssMtm : public CActive
+	{
+public:
+	static CTestNbssMtm* NewLC();
+	static CTestNbssMtm* NewL();
+	void ConstructL();
+
+	  // Destruction
+	~CTestNbssMtm();
+
+	  // Issue request
+	void StartL();
+	CBaseServerMtm*	Mtm();
+	  // Cancel request.
+	  // Defined as pure virtual by CActive;
+	  // implementation provided by this class.
+	void DoCancel();
+
+	  // Service completed request.
+	  // Defined as pure virtual by CActive;
+	  // implementation provided by this class,
+	void RunL();
+	void DoRunL();
+
+	//  Sets the active scheduler going
+    void QueueOperationAsync(TInt aErr);
+	
+protected:
+	// message creation code
+	void InitialiseTesterL();
+	void SetMessageType(const TDesC& aFileName);
+	// mtm test functions
+	void DoCreateParserL();
+	void DoParseAgainL();
+	void DoProcessAgainL();
+	void DoCopyToL();
+	void DoCopyFromL();
+	void DoMoveToL();
+	void DoMoveFromL();
+	void DoMoveWithinL();
+	void DoDeleteL();
+	void DoCreateL();
+	void DoChangeL();
+
+	void ProcessError(TInt& aError);
+
+protected:
+	  // Data members defined by this class
+	CBaseServerMtm*				iNbssServerMtm;
+	CMsvEntrySelection*			iSelection;
+	CMsvEntrySelection*			iMsvSelection;
+	TInt						iState;
+
+	CDir*						iDir;
+
+	RFs							iFs;
+
+	CBioTestUtils*				iBioTestUtils;
+
+	TInt						iNumFiles;
+	TInt						iFilesProcessed;
+	TInt						iMessagesCreated;
+	TInt						iTestCtr;
+	CArrayPtrSeg<CParsedField>* iTestParsedFieldArray;
+	TBool						iTestsSuccessful;
+
+private:
+	CTestNbssMtm();
+	};
+
+//
+// CTestRefresh CActive object
+//
+CTestNbssMtm::CTestNbssMtm() // construct low-priority active object
+	: CActive(-5)
+	{
+	}
+
+CTestNbssMtm  *CTestNbssMtm::NewLC()
+	{
+	CTestNbssMtm* self=new (ELeave) CTestNbssMtm();
+	
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CTestNbssMtm  *CTestNbssMtm::NewL()
+	{
+	CTestNbssMtm* self=NewLC();
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CTestNbssMtm::ConstructL()
+	{
+	// connect to file system & create a BIO database
+	User::LeaveIfError(iFs.Connect());
+
+	iBioTestUtils = CBioTestUtils::NewL(test,ETuGoServerSide);
+
+	iBioTestUtils->CreateServicesL();
+
+	iBioTestUtils->InstantiateServerMtmsL();
+
+	iNbssServerMtm = iBioTestUtils->iBioServerMtm;
+
+	CActiveScheduler::Add(this); // add to active scheduler
+
+	// create an entry selection
+	iSelection= new (ELeave) CMsvEntrySelection;
+
+	iNumFiles=0;
+	iFilesProcessed=0;
+	iMessagesCreated=0;
+	iTestsSuccessful = ETrue;
+
+	test.Console()->ClearScreen(); // get rid of menu
+	}
+ 
+CTestNbssMtm::~CTestNbssMtm()
+	{ 
+	Cancel(); // make sure we're cancelled
+	
+	delete iSelection;
+	delete iMsvSelection;
+	delete iBioTestUtils;
+	delete iDir;
+	
+	iFs.Close();
+
+	if(iTestParsedFieldArray)
+		{
+		iTestParsedFieldArray->ResetAndDestroy();
+		delete iTestParsedFieldArray;
+		}
+	}
+
+
+
+void  CTestNbssMtm::DoCancel()
+	{
+	iNbssServerMtm->Cancel();
+	CActiveScheduler::Stop();
+	}
+
+
+CBaseServerMtm*	CTestNbssMtm::Mtm()
+	{
+	return iNbssServerMtm;
+	}
+
+
+void CTestNbssMtm::StartL()
+	{
+	test.Next(_L("CTestNbssMtm::Start()\n"));
+	Cancel();
+	iState=ENbssReadingFiles;
+#if defined _HEAP_FAILURE_TEST_
+	TBool finished=EFalse;
+#ifdef _DEBUG
+	TInt failCount=0;
+	failCount1=0;
+#endif
+	while (!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		TRAPD(error,InitialiseTesterL());
+		if (error==KErrNone)
+			{
+			finished=ETrue;
+			__UHEAP_RESET;
+			}
+		else 
+			{
+			test(error==KErrNoMemory);
+			__UHEAP_RESET;
+			}
+		}
+#else
+	InitialiseTesterL();
+#endif
+	QueueOperationAsync(KErrNone);
+	}
+
+
+
+void CTestNbssMtm::QueueOperationAsync(TInt aErr)
+    {
+    TRequestStatus*  pS = &iStatus;
+	iStatus = KRequestPending;
+    User::RequestComplete(pS, aErr);
+	SetActive();
+    }
+
+void CTestNbssMtm::InitialiseTesterL()
+	{
+	// Get the NB if we don't need this two step process, use SetSmsServiceL().
+	iBioTestUtils->TestStart(iTestCtr);
+	iBioTestUtils->SetBIOServiceIdL();
+	// Empty the Inbox
+	iBioTestUtils->EmptyInboxMessagesL();
+	iMsvSelection = iBioTestUtils->GenerateMessagesL();
+	}
+
+void CTestNbssMtm::DoCreateParserL()
+	{
+	TBuf8<1>dummy;
+	// add service entry and msg entry to selection passed to MTM
+	iSelection->Reset();
+	iSelection->AppendL((*iMsvSelection)[iFilesProcessed]);
+
+#if defined _HEAP_FAILURE_TEST_
+	TBool finished=EFalse;
+	while (!finished)
+		{
+		__UHEAP_FAILNEXT(failCount1++);
+		TRAPD(error,iNbssServerMtm->StartCommandL(*iSelection, KBiosMtmParseThenProcess, dummy, iStatus));
+		if (error==KErrNone)
+			{
+			finished=ETrue;
+			__UHEAP_RESET;
+			}
+		else 
+			{
+			test(error==KErrNoMemory);
+			__UHEAP_RESET;
+			}
+		}
+#else
+	iNbssServerMtm->StartCommandL(*iSelection, KBiosMtmParseThenProcess, dummy, iStatus);
+#endif
+	}
+
+void CTestNbssMtm::DoParseAgainL()
+	{
+	TBuf8<1>dummy;
+	iState = ENbssTestParse;
+	// add service entry and msg entry to selection passed to MTM
+	iSelection->Reset();
+
+	iSelection->AppendL((*iMsvSelection)[iFilesProcessed]);
+
+#if defined _HEAP_FAILURE_TEST_
+	TBool finished=EFalse;
+
+#ifdef _DEBUG
+	TInt failCount=0;
+#endif
+
+	while (!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		TRAPD(error,iNbssServerMtm->StartCommandL(*iSelection, KBiosMtmParse, dummy, iStatus));
+		if (error==KErrNone)
+			{
+			finished=ETrue;
+			__UHEAP_RESET;
+			}
+		else 
+			{
+			test(error==KErrNoMemory);
+			__UHEAP_RESET;
+			}
+		}
+#else
+	iNbssServerMtm->StartCommandL(*iSelection, KBiosMtmParse, dummy, iStatus);
+#endif
+	iState = ENbssTestParse;
+	}
+
+void CTestNbssMtm::DoProcessAgainL()
+	{
+	TBuf8<1>dummy;
+	iState = ENbssTestProcess;
+	// add service entry and msg entry to selection passed to MTM
+	iSelection->Reset();
+	iSelection->AppendL((*iMsvSelection)[iFilesProcessed]);
+
+#if defined _HEAP_FAILURE_TEST_
+	TBool finished=EFalse;
+
+#ifdef _DEBUG
+	TInt failCount=0;
+#endif
+
+	while (!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		TRAPD(error,iNbssServerMtm->StartCommandL(*iSelection, KBiosMtmProcess, dummy, iStatus));
+		if (error==KErrNone)
+			{
+			finished=ETrue;
+			__UHEAP_RESET;
+			}
+		else 
+			{
+			test(error==KErrNoMemory);
+			__UHEAP_RESET;
+			}
+		}
+#else
+	iNbssServerMtm->StartCommandL(*iSelection, KBiosMtmProcess, dummy, iStatus);
+#endif
+	iState = ENbssTestProcess;
+	}
+
+void CTestNbssMtm::DoCopyToL()
+	{
+	iNbssServerMtm->CopyToLocalL(*iSelection, KMsvGlobalInBoxIndexEntryId, iStatus);
+	}
+
+void  CTestNbssMtm::DoCopyFromL()
+	{
+	iNbssServerMtm->CopyFromLocalL(*iSelection,KMsvGlobalInBoxIndexEntryId, iStatus);
+	}
+
+void CTestNbssMtm::DoDeleteL()
+	{
+	iNbssServerMtm->MoveFromLocalL(*iSelection,KMsvGlobalInBoxIndexEntryId, iStatus);
+	}
+
+void CTestNbssMtm::DoMoveToL()
+	{
+	iNbssServerMtm->MoveFromLocalL(*iSelection,KMsvGlobalInBoxIndexEntryId, iStatus);
+	}
+
+void CTestNbssMtm::DoMoveFromL()
+	{
+	iNbssServerMtm->MoveFromLocalL(*iSelection,KMsvGlobalInBoxIndexEntryId, iStatus);
+	}
+
+void CTestNbssMtm::DoMoveWithinL()
+	{
+	iNbssServerMtm->MoveWithinServiceL(*iSelection,KMsvGlobalInBoxIndexEntryId, iStatus);
+	}
+
+void CTestNbssMtm::DoCreateL()
+	{
+	TMsvEntry dudEntry;
+	iNbssServerMtm->CreateL(dudEntry, iStatus);
+	}
+
+// test create
+void CTestNbssMtm::DoChangeL()
+	{
+	TMsvEntry dudEntry;
+	iNbssServerMtm->ChangeL(dudEntry, iStatus);
+	}
+
+void CTestNbssMtm::RunL()
+	{
+	TRAPD(error,DoRunL());
+	if(error!=KErrNone)
+		{
+		iBioTestUtils->TestFinish(iTestCtr,error);
+		CActiveScheduler::Stop();
+		}
+	}
+
+void CTestNbssMtm::DoRunL()
+	{
+	iTestCtr++;
+	TInt error=iStatus.Int();
+
+	if (iState == ENbssTestParsing)
+		{
+		// heap testing sets the active state to KErrNoMemory. In such a case
+		// resume testing from the current count of failCount1
+		if (error == KErrNone || error == KErrNotSupported)
+			{
+			// test has complete ok - move to next state
+			iBioTestUtils->LogCurrentMessageTypeL((*iMsvSelection)[iFilesProcessed]);
+			iState = ENbssTestParseProcess;
+			}
+		else
+			test (error==KErrNoMemory);
+		}
+	else
+		{
+		ProcessError(error);
+		iBioTestUtils->TestFinish(iTestCtr,error);
+		}
+	TBool quit=EFalse;
+
+	while (!quit)
+		{
+		switch(iState)
+			{
+		case ENbssReadingFiles:
+			// for messaging api v2 the bio server mtm is null. The following code allows
+			// the test harness to run and pass without breaking the nightly builds, but
+			// since this test harness is redundant, it should be removed.
+			iBioTestUtils->TestStart(iTestCtr,_L("Dummy test for null bio server MTM"));
+			iBioTestUtils->TestHarnessCompleted();
+			CActiveScheduler::Stop();
+			quit=ETrue;
+			break;
+		case ENbssTestParseProcess:
+			iBioTestUtils->TestStart(iTestCtr,_L("re-parse"));
+			DoParseAgainL();
+			SetActive();
+			quit=ETrue;
+			break;
+		case ENbssTestParse:
+			iBioTestUtils->TestStart(iTestCtr,_L("re-process"));
+			DoProcessAgainL();
+			SetActive();
+			quit=ETrue;
+			break;
+		case ENbssTestParsing:
+			DoCreateParserL();
+			SetActive();
+			quit=ETrue;
+			break;
+
+		case ENbssTestProcess:
+			iFilesProcessed++;
+			if(iFilesProcessed == iMessagesCreated)
+				{
+				if(iTestsSuccessful)
+					iBioTestUtils->TestHarnessCompleted();
+				CActiveScheduler::Stop();
+				quit=ETrue;
+				}
+			else
+				{
+				iBioTestUtils->TestStart(iTestCtr,_L("Call parse and process"));
+			#ifdef _DEBUG				
+				failCount1=0;
+			#endif				
+				iState=ENbssTestParsing;
+				}
+			break;
+			}
+		}
+	}
+
+void CTestNbssMtm::ProcessError(TInt& aError)
+	{
+	if(aError==KErrNotSupported)
+		{
+		aError = KErrNone;
+		iBioTestUtils->WriteComment(_L("Unsupported operation"));
+		}
+	else if (aError == -521)
+		{
+		aError = KErrNone;
+		iBioTestUtils->WriteComment(_L("Re-processing not performed. Script can only be added to once."));
+		}
+	else if((aError <= -500 && aError >= -521) || (aError <= -600 && aError >= -614))
+		{
+		iBioTestUtils->WriteComment(_L("Corrupt or missing Bio-data"));
+		}
+	else if(aError != KErrNone)
+		iTestsSuccessful = EFalse;
+	}
+
+LOCAL_C void testSetup()
+//
+//	Start the various bits and pieces of the comms server
+//
+	{
+	trapcleanup=CTrapCleanup::New();
+	test(trapcleanup!=NULL);
+	activescheduler = new CActiveScheduler;
+	test(activescheduler!=NULL);
+	CActiveScheduler::Install(activescheduler);
+	}
+
+LOCAL_C void testUnsetup()
+//
+//	Start the various bits and pieces of the comms server
+//
+	{
+	delete activescheduler;
+	delete trapcleanup;
+	}
+
+
+LOCAL_C void doMainL()
+//
+// Test SMMS.
+//
+    {
+	CTestNbssMtm* nbssTester = CTestNbssMtm::NewL();
+	nbssTester->StartL();
+
+	CActiveScheduler::Start();
+	
+	delete nbssTester;
+    }
+
+GLDEF_C TInt E32Main()
+	{
+ 	test.Title();
+	test.Start(_L("Testing..."));
+	__UHEAP_MARK;
+
+	testSetup();
+
+	TRAPD(error,doMainL());
+
+	testUnsetup();
+
+	test (error==KErrNone);
+
+	test.Console()->Printf(_L("Done, press any key\n"));
+
+	__UHEAP_MARKEND;
+	test.End();
+	return KErrNone;
+	}
+