phonebookengines/contactsmodel/tsrc/Integration/PerfFuncSuite/src/TimeoutBaseStep.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/PerfFuncSuite/src/TimeoutBaseStep.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,127 @@
+// Copyright (c) 2006-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:
+//
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+#include "TimeoutBaseStep.h"
+#include "PerformanceFunctionalityDefs.h"
+
+CTimeoutBaseStep::CTimeoutBaseStep(const TInt aContacts, const TInt aDeviation) 
+		:	CPerformanceFunctionalityBase( aContacts ), 
+			iTimeOut(KStartTime),
+			iDeviation(aDeviation)
+	{
+	}
+/**
+Checks that the relevant function call waits for the expected amount of time
+also checks that the timeout error matches the expected error
+*/	
+TBool CTimeoutBaseStep::CheckTimeOutL(	TInt (CTimeoutBaseStep::*aFunc)(CContactDatabase *, const TContactItemId),
+										CContactDatabase *aContactsDatabase, 
+										const TContactItemId aCid,
+										const TInt aLockErr,
+										const TInt aTimeout,
+										const TBool aSetTime)
+	{
+	TBool SingleCheck = EFalse;
+	TBool OverallResult = EFalse;
+	TInt deviation = 0;
+	if( aSetTime )
+		{
+		SetTimeOutL( aContactsDatabase );
+		}
+	iStart.UniversalTime();
+	TInt err = (this->*aFunc)(aContactsDatabase, aCid);
+	iEnd.UniversalTime();
+	deviation = static_cast<TInt>( iEnd.MicroSecondsFrom( iStart ).Int64() - aTimeout );
+	TESTPRINT( SingleCheck = (aLockErr == err) ); 
+	OverallResult = SingleCheck;
+	TESTPRINT( SingleCheck = ( Abs( deviation ) <= iDeviation ) );
+	OverallResult = OverallResult && SingleCheck;
+	if(!OverallResult)
+		{
+		_LIT(KTimeoutError,"Timeout check failed with following deviance %d <= %d and err %d == %d");
+		ERR_PRINTF5(KTimeoutError, Abs(deviation), iDeviation, aLockErr, err);
+		}
+	return OverallResult;
+	}
+
+//set the timeout for this session
+void CTimeoutBaseStep::SetTimeOutL(CContactDatabase *aContactsDatabase)
+	{
+	if( aContactsDatabase == NULL )
+		{
+		aContactsDatabase = iContactsDatabase;
+		}
+	aContactsDatabase->SetOperationTimeOutL( iTimeOut );
+	}
+//the following methods attemp to call a specific contact api and return any errors generated. 
+TInt CTimeoutBaseStep::CheckOpenL(CContactDatabase *aContactsDatabase, const TContactItemId aCid)
+	{
+	CContactItem *contactItem = NULL;
+	TRAPD(err, contactItem = aContactsDatabase->OpenContactL( aCid, *iViewAll ));
+	if( KErrNone == err )
+		{
+		iContactsDatabase->CloseContactL(contactItem->Id()); // this method *CANNOT* leave, depsite the trailing 'L'
+		CLEAR( contactItem ); 
+		}
+	return err;
+	}
+
+TInt CTimeoutBaseStep::CheckUpdateL(CContactDatabase *aContactsDatabase, const TContactItemId aCid)
+	{
+	CContactItem *contactItemR = iContactsDatabase->ReadContactLC( aCid, *iViewAll );
+	TRAPD(err, 
+				CContactItem *contactItem = aContactsDatabase->UpdateContactLC( aCid, contactItemR );
+				CleanupStack::PopAndDestroy( contactItem ); 
+		);
+	CleanupStack::PopAndDestroy( contactItemR );
+	contactItemR = NULL;
+	return err;
+	}
+	
+TInt CTimeoutBaseStep::CheckRead(CContactDatabase *aContactsDatabase, const TContactItemId aCid)
+	{
+	TRAPD(err, 
+				CContactItem *contactItem = aContactsDatabase->ReadContactL( aCid, *iViewAll );
+				CLEAR( contactItem ); 
+		);
+	return err;
+	}
+	
+TInt CTimeoutBaseStep::CheckAddL(CContactDatabase *aContactsDatabase, const TContactItemId /*aCid*/)
+	{
+	CContactCard* contact = CContactCard::NewLC(iTemplate);
+	TContactItemId cid = 0;
+	TRAPD(err, 
+				cid = aContactsDatabase->doAddNewContactL(*contact, EFalse, iTransaction);
+				iIterate->AddL( cid ); 
+		);
+	CleanupStack::PopAndDestroy(contact);
+	return err;
+	}
+	
+TInt CTimeoutBaseStep::CheckDelete(CContactDatabase *aContactsDatabase, const TContactItemId aCid)
+	{
+	TRAPD(err, 
+				aContactsDatabase->doDeleteContactL( aCid, ETrue, iTransaction );
+				iIterate->RemoveL(aCid);
+		);
+	return err;
+	}
+