--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwutils/commsbufs/TS_mbufmgr/test20poolceilingfull.cpp Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 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 <ss_std.h>
+// Test system includes
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+#include "networking/log.h"
+#include "networking/teststep.h"
+#else
+#include <networking/log.h>
+#include <networking/teststep.h>
+#endif
+
+#include "TestStepCTMbufmgr.h"
+#include "TestSuiteCTMbufmgr.h"
+
+#include "test20poolceilingfull.h"
+
+
+CTest20PoolCeilingFull::CTest20PoolCeilingFull()
+ {
+ iTestStepName = _L("MBufMgrTest20");// Store the name of this test case
+ }
+
+CTest20PoolCeilingFull::~CTest20PoolCeilingFull()
+ {
+ iChain.Free();
+ }
+
+TVerdict CTest20PoolCeilingFull::doTestStepL()
+ {
+ __UHEAP_MARK;
+ //-------------- substep 1 --------------------
+ Log(_L(" 01 Create CMBufManager and install active scheduler:"));
+ CleanupStack::PushL( iActSch = new(ELeave) CActiveScheduler );
+ CActiveScheduler::Install(iActSch);
+
+ RArray<TCommsBufPoolCreateInfo> createInfoArray;
+
+ TCommsBufPoolCreateInfo createInfo;
+ createInfo.iBufSize = 256;
+ createInfo.iInitialBufs = 50;
+ createInfo.iGrowByBufs = 20;
+ createInfo.iMinFreeBufs = 4;
+ createInfo.iCeiling = 100;
+ createInfoArray.Append(createInfo);
+
+ CreateInstanceMBufMgrL(createInfoArray);
+ CleanupClosePushL(iBufPond);
+ createInfoArray.Close ();
+
+ Log(_L(" 02 Create and install active object that will do the test:"));
+
+ CMBufAsyncPoolCeilingFull* poolCeilingFull;
+ CleanupStack::PushL(poolCeilingFull = new(ELeave) CMBufAsyncPoolCeilingFull(*this));
+
+ Log(_L(" 03 Start the test:"));
+ if(poolCeilingFull->DoStartTest() != KErrNone)
+ {
+ Log(_L("Error: Async Alloc's failing in test run:"));
+ User::Leave(EFail);
+ }
+ //Clean up stack
+ CleanupStack::PopAndDestroy(); // poolCeilingFull
+ CleanupStack::PopAndDestroy(); // bufpond
+ CActiveScheduler::Install(NULL);
+ CleanupStack::PopAndDestroy(iActSch);
+
+ __UHEAP_MARKEND;
+ return EPass;
+ }
+
+RCommsBufPond& CTest20PoolCeilingFull::BufPond()
+ {
+ return iBufPond;
+ }
+
+CMBufAsyncPoolCeilingFull::CMBufAsyncPoolCeilingFull(CTest20PoolCeilingFull& aTestObject)
+: CActive(EPriorityStandard),
+ iTestObject(aTestObject)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+CMBufAsyncPoolCeilingFull::~CMBufAsyncPoolCeilingFull()
+ {
+ Cancel();
+ iAsyncChain.Free();
+ }
+
+void CMBufAsyncPoolCeilingFull::CompleteSelf()
+ {
+ TRequestStatus* pStat = &iStatus;
+ User::RequestComplete(pStat, KErrNone);
+ SetActive();
+ }
+
+void CMBufAsyncPoolCeilingFull::RunL()
+ {
+ User::LeaveIfError(iStatus.Int());
+
+ if((iThread1.ExitType() != EExitPending))
+ {
+ CActiveScheduler::Stop();
+ return;
+ }
+ if(iAsyncChain.IsEmpty())
+ {
+ iAsyncRequest.Alloc(iAsyncChain, 256 * 8, iStatus);
+ SetActive();
+ }
+ else
+ {
+ iAsyncChain.Free();
+ CompleteSelf();
+ }
+ }
+
+void CMBufAsyncPoolCeilingFull::DoCancel()
+ {
+ iAsyncRequest.Cancel();
+ }
+
+
+TInt CMBufAsyncPoolCeilingFull::DoStartTest()
+ {
+
+ TInt err=iThread1.Create(_L("testThread1Rec"),
+ fThread1,
+ KDefaultStackSize,
+ KDefaultHeapSize,
+ KMaxHeapSize,
+ (TAny*)&iTestObject,
+ EOwnerProcess);
+ if (err!=KErrNone)
+ {
+ User::Leave(EFail);
+ }
+ iThread1.SetPriority(EPriorityAbsoluteHigh);
+ iThread1.Resume();
+ iAsyncRequest.Alloc(iAsyncChain, 256, iStatus);
+ SetActive();
+ CActiveScheduler::Start();
+
+ iThread1.Close();
+ iThread2.Close();
+ iThread3.Close();
+
+ return iError;
+ }
+
+
+TInt CMBufAsyncPoolCeilingFull::fThread1(TAny* aInput)
+ {
+ TInt totalAllocation = 100;
+ CTest20PoolCeilingFull* pTestObject = (CTest20PoolCeilingFull*)aInput;
+ // We need to introduce this new client thread to the MBufMgr
+ TCommsBufPondTLSOp tls(pTestObject->BufPond());
+ tls.Set();
+
+ CTrapCleanup* aCleanup = CTrapCleanup::New();
+
+ //Install active scheduler
+ CActiveScheduler* aActSch = new CActiveScheduler;
+ if(aActSch==NULL)
+ {
+ return KErrNoMemory;
+ }
+ CActiveScheduler::Install(aActSch);
+
+ RTimer aTimer;
+ TRequestStatus aTimerStatus; // Request status associated with timer
+ aTimer.CreateLocal(); // Create timer for this thread
+ TBool freeMem = EFalse;
+ for(TInt i=0; i < 1000; ++i)
+ {
+ RMBufChain chain;
+ chain.Alloc(512, 256, 256);
+ if(freeMem)
+ {
+ chain.Free();
+ freeMem = EFalse;
+ }
+ else
+ {
+ pTestObject->iChain.Append(chain);
+ freeMem = ETrue;
+ }
+ if(pTestObject->iChain.NumBufs() == totalAllocation)
+ {
+ // Free all. Will trigger the AO.
+ pTestObject->iChain.Free();
+ break;
+ }
+ //Sleep for 5ms
+ aTimer.After(aTimerStatus,5000);
+ User::WaitForRequest(aTimerStatus);
+ }
+ CActiveScheduler::Install(NULL);
+ delete aActSch;
+ delete aCleanup;
+ return KErrNone;
+ }
+
+
+