commsfwutils/commsbufs/TE_mbufmgr/src/test20poolceilingfull.cpp
author hgs
Mon, 06 Sep 2010 13:49:23 +0100
changeset 72 ae47d0499bee
permissions -rw-r--r--
201033_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     1
/*
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     3
* All rights reserved.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     8
*
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    11
*
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    12
* Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    13
*
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    14
* Description: 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    15
*
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    16
*/
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    17
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    18
#include <ss_std.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    19
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    20
// Test system includes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    21
//#ifdef SYMBIAN_OLD_EXPORT_LOCATION
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    22
//#include "networking/log.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    23
//#include "networking/teststep.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    24
//#else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    25
//#include <networking/log.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    26
//#include <networking/teststep.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    27
//#endif
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    28
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    29
#include "TestStepCTMbufmgr.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    30
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    31
#include "test20poolceilingfull.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    32
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    33
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    34
CTest20PoolCeilingFull::CTest20PoolCeilingFull()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    35
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    36
	SetTestStepName( _L("MBufMgrTest20") );	// Store the name of this test case
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    37
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    38
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    39
CTest20PoolCeilingFull::~CTest20PoolCeilingFull()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    40
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    41
	iChain.Free();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    42
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    43
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    44
TVerdict CTest20PoolCeilingFull::doTestStepL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    45
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    46
	__UHEAP_MARK;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    47
	//-------------- substep 1 --------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    48
	INFO_PRINTF1(_L("  01 Create CMBufManager and install active scheduler:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    49
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    50
	CleanupStack::PushL( iActSch = new(ELeave) CActiveScheduler );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    51
	CActiveScheduler::Install(iActSch);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    52
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    53
	RArray<TCommsBufPoolCreateInfo> createInfoArray;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    54
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    55
	TCommsBufPoolCreateInfo createInfo;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    56
	createInfo.iBufSize = 256;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    57
	createInfo.iInitialBufs = 50;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    58
	createInfo.iGrowByBufs = 20;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    59
	createInfo.iMinFreeBufs = 4;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    60
	createInfo.iCeiling = 100; 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    61
	createInfoArray.Append(createInfo);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    62
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    63
	CreateInstanceMBufMgrL(createInfoArray);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    64
	CleanupClosePushL(iBufPond);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    65
	createInfoArray.Close ();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    66
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    67
	INFO_PRINTF1(_L("  02 Create and install active object that will do the test:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    68
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    69
	CMBufAsyncPoolCeilingFull* poolCeilingFull;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    70
	CleanupStack::PushL(poolCeilingFull = new(ELeave) CMBufAsyncPoolCeilingFull(*this));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    71
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    72
	INFO_PRINTF1(_L("  03 Start the test:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    73
	if(poolCeilingFull->DoStartTest() != KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    74
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    75
		INFO_PRINTF1(_L("Error: Async Alloc's failing in test run:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    76
		SetTestStepResult(EFail);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    77
		return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    78
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    79
	//Clean up stack
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    80
	CleanupStack::PopAndDestroy(); // poolCeilingFull
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    81
	CleanupStack::PopAndDestroy(); // bufpond
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    82
	CActiveScheduler::Install(NULL);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    83
	CleanupStack::PopAndDestroy(iActSch);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    84
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    85
	__UHEAP_MARKEND;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    86
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    87
	SetTestStepResult(EPass);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    88
	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    89
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    90
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    91
RCommsBufPond& CTest20PoolCeilingFull::BufPond()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    92
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    93
	return iBufPond;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    94
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    95
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    96
CMBufAsyncPoolCeilingFull::CMBufAsyncPoolCeilingFull(CTest20PoolCeilingFull& aTestObject)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    97
: CActive(EPriorityStandard),
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    98
	iTestObject(aTestObject)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    99
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   100
	CActiveScheduler::Add(this);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   101
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   102
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   103
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   104
CMBufAsyncPoolCeilingFull::~CMBufAsyncPoolCeilingFull()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   105
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   106
	Cancel();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   107
	iAsyncChain.Free();	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   108
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   109
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   110
void CMBufAsyncPoolCeilingFull::CompleteSelf()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   111
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   112
	TRequestStatus* pStat = &iStatus;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   113
	User::RequestComplete(pStat, KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   114
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   115
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   116
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   117
void CMBufAsyncPoolCeilingFull::RunL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   118
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   119
	User::LeaveIfError(iStatus.Int());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   120
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   121
	if((iThread1.ExitType() != EExitPending))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   122
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   123
		CActiveScheduler::Stop();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   124
		return;		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   125
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   126
	if(iAsyncChain.IsEmpty())
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   127
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   128
		iAsyncRequest.Alloc(iAsyncChain, 256 * 8, iStatus);	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   129
		SetActive();							
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   130
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   131
	else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   132
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   133
		iAsyncChain.Free();			
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   134
		CompleteSelf();		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   135
		}	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   136
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   137
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   138
void CMBufAsyncPoolCeilingFull::DoCancel()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   139
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   140
	iAsyncRequest.Cancel();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   141
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   142
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   143
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   144
TInt CMBufAsyncPoolCeilingFull::DoStartTest()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   145
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   146
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   147
	TInt err=iThread1.Create(_L("testThread1Rec"),
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   148
		                       fThread1,
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   149
 							   KDefaultStackSize,
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   150
							   KDefaultHeapSize,
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   151
							   KMaxHeapSize,
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   152
							   (TAny*)&iTestObject,
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   153
							   EOwnerProcess);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   154
	if (err!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   155
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   156
		User::Leave(EFail);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   157
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   158
	//iThread1.SetPriority(EPriorityAbsoluteHigh);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   159
	iThread1.Resume();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   160
	iAsyncRequest.Alloc(iAsyncChain, 256, iStatus);	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   161
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   162
	CActiveScheduler::Start();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   163
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   164
	iThread1.Close();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   165
	iThread2.Close();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   166
	iThread3.Close();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   167
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   168
	return iError;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   169
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   170
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   171
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   172
TInt CMBufAsyncPoolCeilingFull::fThread1(TAny* aInput)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   173
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   174
	TInt totalAllocation = 90;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   175
	CTest20PoolCeilingFull* pTestObject = (CTest20PoolCeilingFull*)aInput;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   176
	// We need to introduce this new client thread to the MBufMgr
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   177
	TCommsBufPondTLSOp tls(pTestObject->BufPond());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   178
	tls.Set();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   179
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   180
	CTrapCleanup* aCleanup = CTrapCleanup::New();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   181
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   182
	TBool freeMem = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   183
	for(TInt i=0; i < 1000; ++i)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   184
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   185
        //INFO_PRINTF2(_L("Inside the for loop: %d"),i);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   186
        RDebug::Printf("inside the for loop: %d", i);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   187
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   188
		RMBufChain chain;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   189
		chain.Alloc(512, 256, 256);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   190
		if(freeMem)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   191
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   192
			chain.Free();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   193
			freeMem = EFalse;	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   194
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   195
		else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   196
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   197
			pTestObject->iChain.Append(chain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   198
			freeMem = ETrue;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   199
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   200
		if(pTestObject->iChain.NumBufs() == totalAllocation)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   201
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   202
			// Free all. Will trigger the AO.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   203
			pTestObject->iChain.Free();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   204
			break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   205
			}	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   206
		//Sleep for 5ms
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   207
		User::After(5000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   208
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   209
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   210
	delete aCleanup;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   211
	return KErrNone;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   212
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   213
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   214
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   215