diff -r 000000000000 -r 8e480a14352b messagingfw/msgtest/integration/biomsg/src/t_bio.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtest/integration/biomsg/src/t_bio.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -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 :\msgtest\BIO\biotest.script +// Intermediate files produced while running test harness: +// None +// Output files produced by running test harness: +// :\msglogs\T_BIO...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\\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\\\T_BIO.exe onto the other platform +// 2. Copy \epoc32\release\\\MSVTESTUTILS.DLL into +// :\system\libs on the other platform +// 3. Copy \epoc32\release\\\EMAILTESTUTILS.DLL into +// :\system\libs on the other platform +// 4. Copy \epoc32\release\\\SMSTESTUTILS.DLL into +// :\system\libs on the other platform +// 5. Copy \epoc32\release\\\BITS.DLL into +// :\system\libs on the other platform +// 4. Run T_BIO.exe on the other platform +// +// + +#include +#include +#include +#include +#include +#include + +#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(); + } + }