diff -r 000000000000 -r dfb7c4ff071f commsfwutils/commsbufs/version1/mbufmgr/TS_mbufmgr/Test20Alloc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwutils/commsbufs/version1/mbufmgr/TS_mbufmgr/Test20Alloc.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,170 @@ +// Copyright (c) 2001-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 definition of CTestStepCTMbufmgr which is the base class +// for all the Mbufmgr Test Step classes +// + +#include + +// Test system includes +#include +#include +#include "TestStepCTMbufmgr.h" +#include "TestSuiteCTMbufmgr.h" + +#include "Test20Alloc.h" + +// constructor +CTest20Alloc::CTest20Alloc() + { + iTestStepName = _L("MBufMgrTest20");// Store the name of this test case + } + +// destructor +CTest20Alloc::~CTest20Alloc() + { + } + +struct AllocTestStruct +{ + TInt min; + TInt max; + TInt allocSize; + TInt expectedSize; + TInt expectedBufCount; + TInt expectedBufSizes[4]; +}; + +const AllocTestStruct allocTests[] = +{ + { 64, 96, 96, 0, 0, {} }, // lower min nax range than pool range + { 1800, 2000, 96, 0, 0, {} }, // higher min nax range than pool range + { 1400, 1400, 96, 0, 0, {} }, // mid max range that doesn't match contain any pools + { 1600, 1600, 96, 96, 1, {1600} }, // highest size, allocate smaller + { 128, 128, 96, 96, 1, {128} }, // lowest size, allocate smaller + { 400, 400, 96, 96, 1, {400} }, // mid size, allocate smaller + { 1600, 1600, 3200, 3200, 2, {1600,1600} }, // highest size, allocate slightly higher + { 1600, 1600, 1604, 1604, 2, {1600,1600} }, // highest size, allocate slightly higher + { 128, 128, 132, 132, 2, {128,128} }, // lowest size, allocate slightly higher + { 400, 400, 260, 260, 1, {400} }, // mid size, allocate slightly higher + { 128, 1600, 1604, 1604, 2, {1600,128} }, // + { 128, 1600, 1728, 1728, 2, {1600,128} }, // + { 128, 1600, 1856, 1856, 2, {1600,400} }, // + { 128, 1600, 2000, 2000, 2, {1600,400} }, // + { 128, 1600, 2128, 2128, 2, {1600,1600} }, // + { 128, 1600, 2130, 2130, 2, {1600,1600} }, // + { 128, 1600, 2398, 2398, 2, {1600,1600}, }, // + { 128, 128, 300, 300, 3, {128,128,128} }, // + { 128, 1600, 3208, 3208, 3, {1600,1600,128} }, // Edge case spotted in old algorithm by SMP work + { 1600, 1600, 3208, 3208, 3, {1600,1600,1600} }, // Edge case spotted in old algorithm by SMP work + + { 0, 0, 0, 0,-1, {} } // -1 indicates end of list +}; + +// +enum TVerdict CTest20Alloc::doTestStepL(void) + { + __UHEAP_MARK; + +#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); + + MMBufSizeAllocator* MBufSizeAllocator; + CleanupStack::PushL(CreateInstanceMBufMgrL(KMBufDefaultHeapSize / 2, MBufSizeAllocator)); + + // Create some initial pools + MBufSizeAllocator->AddL(128, 128, 64, 48); + MBufSizeAllocator->AddL(400, 32, 16, 12); + MBufSizeAllocator->AddL(1600, 32, 16, 12); + + TBool accumulatedFail = EFalse; + + //-------------- substep 2 -------------------- + Log(_L(" 02 Alloc Tests")); + const AllocTestStruct* test = allocTests; + while(test->expectedBufCount != -1) + { + TBool fail = EFalse; + RMBufChain chain; + + //-------------- substep 2 -------------------- + _LIT(aLog1, " Min %d Max %d Alloc %d"); + Log(aLog1,test->min,test->max,test->allocSize); + chain.Alloc(test->allocSize,test->min,test->max); + + if(chain.Length() != test->expectedSize) + { + _LIT(aLog2, "Error: Wrong number of bytes allocated: received %d expected %d"); + Log(aLog2,chain.Length(),test->expectedSize); + fail = ETrue; + } + if( (!chain.IsEmpty() && chain.NumBufs() != test->expectedBufCount) + || ( chain.IsEmpty() && 0 != test->expectedBufCount) + ) + { + _LIT(aLog3, "Error: Wrong number of buffers allocated: received %d expected %d"); + Log(aLog3,chain.IsEmpty()?0:chain.NumBufs(),test->expectedBufCount); + fail = ETrue; + } + + if(!chain.IsEmpty()) + { + RMBuf* buf = chain.First(); + int count=0; + while(countSize() != test->expectedBufSizes[count]) + { + _LIT(aLog4, "Error: Expected buffer %d in the chain to be %d rather than %d"); + Log(aLog4,count,test->expectedBufSizes[count],buf->Size()); + fail = ETrue; + } + + buf = buf->Next(); + count++; + } + } + + accumulatedFail |= fail; + chain.Free(); + + ++test; + } + + //-------------- substep 7 -------------------- + Log(_L(" 03 Clean up stack:")); + CleanupStack::PopAndDestroy(iMBMngr); + CActiveScheduler::Install(NULL); + CleanupStack::PopAndDestroy(iActSch); + +#ifdef __CFLOG_ACTIVE + __CFLOG_CLOSE; + __CFLOG_DELETE; +#endif + __UHEAP_MARKEND; + + if (accumulatedFail) + { + return EFail; + } + + return EPass; + }