messagingfw/msgtest/integration/biomsg/src/t_bio.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
child 58 6c34d0baa0b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/integration/biomsg/src/t_bio.cpp	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,300 @@
+// Copyright (c) 1998-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:
+// Name of test harness: T_BIO
+// Component: SMOKE
+// Owner: KP
+// Brief description of test harness:
+// Sends, receives and parses Internet Configuration messages.  An internet
+// connection is made using the received settings.
+// Detailed description of test harness:
+// As above
+// Input files required to run test harness:
+// \MSG\TEST\SMOKE\BIO\SCRIPT\BIOTEST.SCRIPT	<DRIVE>:\msgtest\BIO\biotest.script
+// Intermediate files produced while running test harness:
+// None
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_BIO.<PLATFORM>.<VARIANT>.LOG.txt
+// Description of how to build test harness:
+// cd \msg\test\smoke\
+// bldmake bldfiles
+// abld test build
+// Description of how to run test harness:
+// The following instructions are the same for all platforms:
+// 1. Build T_DB test harness from COMMDB component:
+// cd \commdb\group
+// bldmake bldfiles
+// abld test build t_db
+// 2. Build the test utilities:
+// cd \msg\testutils\group\
+// bldmake bldfiles
+// abld build
+// 3. Build the BIO test utilities:
+// cd \biomsg\bits\
+// bldmake bldfiles
+// abld build
+// WINS running instructions:
+// 1. \epoc32\release\wins\<VARIANT>\T_BIO.exe can be used at the command prompt
+// or executable can be run from Windows Explorer.
+// All other platform running instructions:
+// 1. Copy \epoc32\release\<PLATFORM>\<VARIANT>\T_BIO.exe onto the other platform
+// 2. Copy \epoc32\release\<PLATFORM>\<VARIANT>\MSVTESTUTILS.DLL into 
+// <DRIVE>:\system\libs on the other platform
+// 3. Copy \epoc32\release\<PLATFORM>\<VARIANT>\EMAILTESTUTILS.DLL into 
+// <DRIVE>:\system\libs on the other platform
+// 4. Copy \epoc32\release\<PLATFORM>\<VARIANT>\SMSTESTUTILS.DLL into 
+// <DRIVE>:\system\libs on the other platform
+// 5. Copy \epoc32\release\<PLATFORM>\<VARIANT>\BITS.DLL into 
+// <DRIVE>:\system\libs on the other platform
+// 4. Run T_BIO.exe on the other platform
+// 
+//
+
+#include <e32uid.h>
+#include <e32test.h>
+#include <watcher.h>
+#include <txtrich.h>
+#include <smuthdr.h>
+#include <commdb.h>
+
+#include "t_bio.h"
+#include "sendrecv.h"
+#include "parsertest.h"
+
+const TTimeIntervalMicroSeconds32 KWaitForWatchersToStart = 40000000;
+const TTimeIntervalMicroSeconds32 KWaitForWatchersToStartDisplayInterval = 5000000;
+const TTimeIntervalMicroSeconds32 KWaitForWatchersToDie = 5000000;
+
+RTest test(_L("T_Bio Biomsg SmokeTestrig"));
+CTrapCleanup* theCleanup;
+
+
+LOCAL_C void doMainL()
+	{
+	CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install( scheduler );
+
+	CBioSmokeTest* bioSmokeTest = CBioSmokeTest::NewL(test);
+	CleanupStack::PushL(bioSmokeTest);
+
+	bioSmokeTest->StartL();
+
+	CleanupStack::PopAndDestroy(2); //SmsTest, scheduler
+	}
+
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+	test.Start(_L("Setup"));
+	theCleanup = CTrapCleanup::New();
+	TRAPD(ret,doMainL());		
+	test(ret==KErrNone);
+	delete theCleanup;	
+	test.Console()->SetPos(0, 13);
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	return(KErrNone);
+	}
+
+
+// CEntryObserver
+//
+CEntryObserver::CEntryObserver(	CSmsTestUtils& aTestUtils, CMsvEntrySelection& aReceived, const TInt& aCurrentMessageNum)
+: CBase(), iTestUtils(aTestUtils), iReceived(aReceived), iCurrentMessageNum(aCurrentMessageNum)
+	{
+	}
+
+
+CEntryObserver::~CEntryObserver() 
+	{
+	delete iNew;
+	}
+
+void CEntryObserver::HandleEntryEventL(TMsvEntryEvent aEvent, TAny* aArg1, TAny* /*aArg2*/, TAny* /*aArg3*/)
+	{
+	if (aEvent == EMsvNewChildren && iCurrentMessageNum > -1)
+		{
+		delete iNew;
+		iNew = NULL;
+		iNew = ((CMsvEntrySelection*)aArg1)->CopyL();
+
+		TInt count = iNew->Count();
+
+		CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *iTestUtils.iRichText);
+		CleanupStack::PushL(header);
+
+		TInt msgRecv = 0;
+
+		while (count--)
+			{
+			TMsvId id = iNew->At(count);
+			iTestUtils.SetEntryL(id);
+
+			CMsvStore* store = iTestUtils.ReadStoreL();
+			CleanupStack::PushL(store);
+	
+			header->RestoreL(*store);
+
+			if (header->Type() == CSmsPDU::ESmsDeliver)
+				{
+				iReceived.AppendL(id);
+				msgRecv++;
+				}
+
+			CleanupStack::PopAndDestroy(); //store
+			}
+
+		CleanupStack::PopAndDestroy(); //header
+
+		if (msgRecv)	
+			iTestUtils.Printf(_L("%d Messages Received in inbox\n"), msgRecv);
+		
+		}
+	}
+
+//
+// CBioSmokeTest
+//
+CBioSmokeTest::~CBioSmokeTest()
+	{
+	CancelWatcher();
+	// delete everything
+	delete iTimer;
+	
+	delete iSendReceive;
+	delete iParserTest;
+
+	delete iEntryObserver;
+	delete iReceived;
+	delete iEntryForObserver;
+
+	delete iSmsTestUtils;
+
+	delete iWatcher;
+
+	iSocket.Close();
+	iSocketServ.Close();
+	}
+
+CBioSmokeTest::CBioSmokeTest()
+	{
+	}
+
+CBioSmokeTest* CBioSmokeTest::NewL(RTest& aTest)
+	{
+	CBioSmokeTest* self = new (ELeave) CBioSmokeTest();
+	CleanupStack::PushL(self);
+
+	self->ConstructL(aTest);
+
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CBioSmokeTest::StartL()
+	{
+	// fire up the watcher
+	StartWatcherL();
+	// send receive 
+
+	iBioSmokeState = EBioSmokeSendRecv;
+	
+	// create the send receive 
+	iSendReceive = CSendReceive::NewL(*iSmsTestUtils);
+	iSendReceive->StartL(iReceived);
+
+	delete iSendReceive;
+	iSendReceive = NULL;
+
+	// test parser
+	iParserTest = CParserTest::NewL(*iSmsTestUtils);
+	iParserTest->StartL(iReceived);
+	}
+
+void CBioSmokeTest::ConstructL(RTest& aTest)
+	{
+	iSmsTestUtils = CSmsTestUtils::NewL(aTest);
+	iSmsTestUtils->SetLogToFile();
+
+	iSmsTestUtils->NotifySaPhoneOnL();
+
+	User::LeaveIfError(iSocketServ.Connect());
+	TProtocolDesc protoinfo;
+	TProtocolName protocolname(KSmsDatagram);
+	User::LeaveIfError(iSocketServ.FindProtocol(protocolname,protoinfo));
+	User::LeaveIfError(iSocket.Open(iSocketServ,protoinfo.iAddrFamily,protoinfo.iSockType,protoinfo.iProtocol));
+	
+	TSmsAddr smsaddr;
+	smsaddr.SetSmsAddrFamily(ESmsAddrSendOnly);
+	User::LeaveIfError(iSocket.Bind(smsaddr));
+
+	iSmsTestUtils->WaitForInitializeL();
+	}
+
+void CBioSmokeTest::StartWatcherL()
+	{
+	test.Next(_L("Start the Watcher"));
+
+	delete iReceived;
+	iReceived = new (ELeave) CMsvEntrySelection();
+
+	delete iEntryObserver;
+	iEntryObserver = new (ELeave) CEntryObserver(*iSmsTestUtils, *iReceived, iCurrentMessageNum);
+
+	delete iEntryForObserver;
+	iEntryForObserver = Session().GetEntryL(KMsvGlobalInBoxIndexEntryId);
+	iEntryForObserver->AddObserverL(*iEntryObserver);
+
+	// Create the watcher
+	delete iWatcher;
+	iWatcher = NULL;
+	iWatcher = CTestUtilsWatcherStarter::NewL(CActive::EPriorityStandard);
+
+	TTimeIntervalMicroSeconds32 wait = KWaitForWatchersToStart;
+	CTestTimer* timer = CTestTimer::NewL();
+
+	while (wait.Int() > 0)
+		{
+		iSmsTestUtils->Printf(_L("Waiting %d secs for watchers to start...\n"), wait.Int() / 1000000);
+		timer->After(KWaitForWatchersToStartDisplayInterval);
+		wait = wait.Int() - KWaitForWatchersToStartDisplayInterval.Int();
+		CActiveScheduler::Start();
+		}
+
+	delete timer;
+	}
+
+void CBioSmokeTest::CancelWatcher()
+	{
+	if (iWatcher)
+		{
+		iWatcher->Cancel();
+		CActiveScheduler::Start();
+		delete iWatcher;
+		iWatcher = NULL;
+
+		iSmsTestUtils->Printf(_L("Waiting %d seconds for the watchers to die\n"), KWaitForWatchersToDie.Int() / 1000000);
+
+		CTestTimer* timer = NULL;
+		TRAPD(ret,timer=CTestTimer::NewL());
+		if (ret==KErrNone)
+			{
+			timer->After(KWaitForWatchersToDie);
+			CActiveScheduler::Start();
+			delete timer;
+			}		
+		iSmsTestUtils->TestHarnessCompleted();
+		}
+	}