diff -r 000000000000 -r dfb7c4ff071f commsfwutils/commsbufs/version1/mbufmgr/TS_mbufmgr/Test09Align.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwutils/commsbufs/version1/mbufmgr/TS_mbufmgr/Test09Align.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,191 @@ +// Copyright (c) 2002-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: +// Contains MBufMgr Test Step 09 for Align() methods +// +// + +// EPOC includes +#include + +// Test system includes +#include +#include +#include "TestStepCTMbufmgr.h" +#include "TestSuiteCTMbufmgr.h" + +#include "Test09Align.h" + +// constructor +CTest09Align::CTest09Align() + { + iTestStepName = _L("MBufMgrTest09");// Store the name of this test case + } + +// destructor +CTest09Align::~CTest09Align() + { + } + +// +enum TVerdict CTest09Align::doTestStepL(void) + { + __UHEAP_MARK; + + //-------------- substep 0 -------------------- + Log(_L(" 00 Read parameters from the script:")); + CScriptInput* aInput; + CleanupStack::PushL( aInput= new (ELeave) CScriptInput ); + TInt i; + TBuf<20> aBuf; + TInt bRet; + aInput->aBufsBefore=0; + for (i = 0;i<50;i++) + { + aBuf.Format(_L("Length%02d"),i+1); + bRet = GetIntFromConfig(_L("MBufMgrTest09"), aBuf, aInput->aBuf[i].aLength); + if (!bRet) + { + return EFail; + } + if (aInput->aBuf[i].aLength == -1) break; + + aBuf.Format(_L("Offset%02d"),i+1); + bRet = GetIntFromConfig(_L("MBufMgrTest09"), aBuf, aInput->aBuf[i].aOffset); + if (!bRet) + { + return EFail; + } + aInput->aBufsBefore++; + } + bRet = GetIntFromConfig(_L("MBufMgrTest09"),_L("BuffsAfter") , aInput->aBufsAfter); + + Log(_L(" The following has been read from the script:")); + Log(_L(" Number of RMBufs in chain before align= %2d"),aInput->aBufsBefore); + Log(_L(" Number of RMBufs in chain after align = %2d"),aInput->aBufsAfter); + + for (i = 0; i < aInput->aBufsBefore ; i++ ) + { + Log(_L(" Chain #%2d: Offset=%3d Length=%3d"), + i+1, aInput->aBuf[i].aOffset, aInput->aBuf[i].aLength); + } + +#ifdef __CFLOG_ACTIVE + __CFLOG_CREATEL; + __CFLOG_OPEN; +#endif + + //-------------- substep 1 -------------------- + Log(_L(" 01 Create CMBufManager and install active scheduler:")); + CleanupStack::PushL( iActSch = new(ELeave) CActiveScheduler ); + CActiveScheduler::Install(iActSch); + CleanupStack::PushL(CreateInstanceMBufMgrL(KMBufDefaultHeapSize)); + + //-------------- substep 2 -------------------- + Log(_L(" 02 Create TestStr structure and fill it with data:")); + CTestStr* aTestStr1; + CleanupStack::PushL( aTestStr1 = new (ELeave) CTestStr ); + + aTestStr1->iSrcAddr = 0x01234567; + aTestStr1->iDstAddr = 0x89abcdef; + aTestStr1->iSrcPort = 0x0246; + aTestStr1->iDstPort = 0x8ace; + aTestStr1->iLength = sizeof(CTestStr); + aTestStr1->iOptions = 0x1359; + StripeMem(aTestStr1->iData, 0, sizeof(aTestStr1->iData), '@', 'Z'); + + //-------------- substep 3 -------------------- + Log(_L(" 03 Create a chain containing RMBufs as specified in the script:")); + RMBufChain aChain; + RMBuf *buf=0; + for (i = aInput->aBufsBefore-1; i >= 0 ; i-- ) + { + TRAPD(ret,buf = iMBMngr->AllocL(KMBufSmallSize)); + if (ret!=KErrNone) + { + Log(_L("Error:Could not allocate buffer")); + aChain.Free(); + +#ifdef __CFLOG_ACTIVE + __CFLOG_CLOSE; + __CFLOG_DELETE; +#endif + User::Leave(EFail); + } + buf->SetData(aInput->aBuf[i].aOffset,aInput->aBuf[i].aLength); + aChain.Prepend(buf); + } + + //-------------- substep 4 -------------------- + Log(_L(" 04 Copy in TestStr into Chain:")); + aChain.CopyIn(TPtrC8((TUint8 *)aTestStr1, sizeof(CTestStr))); + + //-------------- substep 5 -------------------- + Log(_L(" 05 Allign Chain for the size of TestStr:")); + aChain.Align(sizeof(CTestStr)); + + //-------------- substep 6 -------------------- + Log(_L(" 06 Check the number of RMBufs in chain after allign:")); + if (aChain.NumBufs() != aInput->aBufsAfter) + { + Log(_L("ERROR: Number of bufs is %d instead of %d"),aChain.NumBufs(),aInput->aBufsAfter); + aChain.Free(); + +#ifdef __CFLOG_ACTIVE + __CFLOG_CLOSE; + __CFLOG_DELETE; +#endif + User::Leave(EFail); + } + + //-------------- substep 7 -------------------- + Log(_L(" 07 Create the pointer of TestStr type and point to the 1st RMBuf in chain:")); + CTestStr* aTestStr2 = (CTestStr*)(aChain.First()->Ptr()); + + //-------------- substep 8 -------------------- + Log(_L(" 08 Compare TestStr1 and TestData2. They should be the same:")); + if ( (aTestStr1->iSrcAddr != aTestStr2->iSrcAddr) || + (aTestStr1->iDstAddr != aTestStr2->iDstAddr) || + (aTestStr1->iSrcPort != aTestStr2->iSrcPort) || + (aTestStr1->iDstPort != aTestStr2->iDstPort) || + (aTestStr1->iLength != aTestStr2->iLength) || + (aTestStr1->iOptions != aTestStr2->iOptions) || + (Mem::Compare(aTestStr1->iData, sizeof(aTestStr1->iData), + aTestStr2->iData, sizeof(aTestStr2->iData))) ) + { + Log(_L("ERROR: They are not the same")); + aChain.Free(); + +#ifdef __CFLOG_ACTIVE + __CFLOG_CLOSE; + __CFLOG_DELETE; +#endif + User::Leave(EFail); + } + + //-------------- substep 9 -------------------- + Log(_L(" 09 Free the chain. Clean up stack:")); + aChain.Free(); + CleanupStack::PopAndDestroy(aTestStr1); + CleanupStack::PopAndDestroy(iMBMngr); + CActiveScheduler::Install(NULL); + CleanupStack::PopAndDestroy(iActSch); + CleanupStack::PopAndDestroy(aInput); + +#ifdef __CFLOG_ACTIVE + __CFLOG_CLOSE; + __CFLOG_DELETE; +#endif + __UHEAP_MARKEND; + return EPass; + }