phonebookengines/contactsmodel/tsrc/Integration/PerfFuncSuite/src/TimeoutStep.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/PerfFuncSuite/src/TimeoutStep.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,296 @@
+// 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:
+// Timeout tests involve:
+// Locking a contact then attempting to perform a crud operation on the contact
+// check the timeout and error returned are as expected.
+// 
+//
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+#include "ccontactprivate.h"
+#include "TimeoutStep.h"
+#include "PerformanceFunctionalityDefs.h"
+
+_LIT(KRun1,"ContactLock");
+_LIT(KRun2,"TransactionLock");
+_LIT(KRun3,"TemplateLock");
+_LIT(KRun4,"TimeoutRange");
+_LIT(KRun5,"MultipleSessionContactLock");
+_LIT(KRun6,"MultipleSessionTransactionLock");
+_LIT(KRun7,"MultipleSessionTemplateLock");
+_LIT(KRun8,"MultipleSessionTimeoutRange");
+
+_LIT(KTest1, "Contact locking timeout tests");
+_LIT(KTest2, "Transaction locking timeout tests");
+_LIT(KTest3, "Transaction internal locking timeout tests");
+_LIT(KTest4, "Template locking timeout tests");
+_LIT(KTest5, "Value range timeout tests");
+
+_LIT(KErrOnIteration,"On iteration number %d :");
+
+const TInt KIterations = 5;
+
+#define KNumberOfContacts 50
+	
+CTimeoutStep::CTimeoutStep() 
+		: 	CTimeoutBaseStep( KNumberOfContacts, KDeviation )
+	{
+	SetTestStepName(KTimeoutStep);
+	}
+
+TVerdict CTimeoutStep::doTestStepL()
+	{
+	__UHEAP_MARK;
+	InitializeL();
+	_LIT(KDoStepPrint,"CTimeoutStep::doTestStepL()");
+	INFO_PRINTF1(KDoStepPrint);  //Block start 
+	iIterate->Reset();
+	CContactDatabase *contactsDatabase = CContactDatabase::OpenL();
+	CleanupStack::PushL( contactsDatabase );
+	
+	const TDesC &run = ConfigSection();
+	
+	if( run == KRun1 )
+		{
+		TEST1(ContactLockingTestL(iContactsDatabase), ETrue);
+		}
+	else if( run == KRun2 )
+		{
+		TEST1(TransactionInternalLockingTestL(), ETrue);
+		}
+	else if( run == KRun3 )
+		{
+		TEST1(TemplateLockingTestL(iContactsDatabase), ETrue);
+		}
+	else if( run == KRun4 )
+		{
+		TimeoutValuesTestL(iContactsDatabase);
+		}
+	else if( run == KRun5 )
+		{
+		TEST1(ContactLockingTestL(contactsDatabase), ETrue);
+		}
+	else if( run == KRun6 )
+		{
+		TEST1(TransactionLockingTestL(contactsDatabase), ETrue);
+		}
+	else if( run == KRun7 )
+		{
+		TEST1(TemplateLockingTestL(contactsDatabase), ETrue);
+		}
+	else if( run == KRun8 )
+		{
+		TimeoutValuesTestL(contactsDatabase);
+		}
+	else
+		{
+		MissingTestPanic();
+		}
+
+	
+	CleanupStack::PopAndDestroy(contactsDatabase);
+	Cleanup();
+	__UHEAP_MARKEND;
+
+	return TestStepResult();
+	}
+	
+TBool CTimeoutStep::ContactLockingTestL(CContactDatabase *aContactsDatabase)
+	{
+	INFO_PRINTF1(KTest1);
+	TBool ret = EFalse;
+	TContactItemId cid = 0;
+	TInt i = 0;
+	for(; i < KIterations ; ++i, iTimeOut += KDefaultTime )
+		{
+		cid = iIterate->NextL();
+		OpenL(cid);//locks contact with id == cid
+		ret = CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, cid, KErrInUse, iTimeOut);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckUpdateL, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckRead, aContactsDatabase, cid, KErrNone, 0, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckDelete, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse);
+		CloseL( ETrue );
+		if(!ret)
+			{			
+			ERR_PRINTF2(KErrOnIteration,i+1);
+			break;
+			}
+		}
+	iTimeOut = KStartTime;
+	return ret;
+	}
+
+TBool CTimeoutStep::TransactionLockingTestL(CContactDatabase *aContactsDatabase)
+	{
+	INFO_PRINTF1(KTest2);
+	iTransaction = ETrue;
+	TBool ret = EFalse;
+	TContactItemId cid = 0;
+	TInt i = 0;
+	aContactsDatabase->DatabaseBeginLC( EFalse ); // locks the entire database
+	for(; i < KIterations ; ++i, iTimeOut += KDefaultTime )
+		{
+		cid = iIterate->NextL();
+		ret = CheckTimeOutL(&CTimeoutStep::CheckOpenL, iContactsDatabase, cid, KErrLocked, iTimeOut);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckUpdateL, iContactsDatabase, cid, KErrLocked, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckRead, iContactsDatabase, cid, KErrNone, 0, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckAddL, iContactsDatabase, cid, KErrLocked, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckDelete, iContactsDatabase, cid, KErrLocked, iTimeOut, EFalse);
+		if(!ret)
+			{
+			ERR_PRINTF2(KErrOnIteration,i+1);
+			break;
+			}
+
+		}
+	aContactsDatabase->DatabaseCommitLP( EFalse );
+	iTimeOut = KStartTime;
+	iTransaction = EFalse;
+	return ret;
+	}
+
+TBool CTimeoutStep::TransactionInternalLockingTestL()
+	{
+	INFO_PRINTF1(KTest3);
+	iTransaction = ETrue;
+	TBool ret = EFalse;
+	TContactItemId cid = 0;
+	TInt i = 0;
+	iContactsDatabase->DatabaseBeginLC( EFalse );
+	for(; i < KIterations ; ++i, iTimeOut += KDefaultTime )
+		{
+		cid = iIterate->NextL();
+		OpenL(cid);//locks contact with id == cid
+		ret = CheckTimeOutL(&CTimeoutStep::CheckOpenL, iContactsDatabase, cid, KErrInUse, iTimeOut);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckUpdateL, iContactsDatabase, cid, KErrInUse, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckRead, iContactsDatabase, cid, KErrNone, 0, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckAddL, iContactsDatabase, cid, KErrNone, 0, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckDelete, iContactsDatabase, cid, KErrInUse, iTimeOut, EFalse);
+		CloseL( ETrue );
+		if(!ret)
+			{
+			ERR_PRINTF2(KErrOnIteration,i+1);
+			break;
+			}
+
+		}
+	iContactsDatabase->DatabaseCommitLP( EFalse );
+	iTimeOut = KStartTime;
+	iTransaction = EFalse;
+	return ret;
+	}
+	
+TBool CTimeoutStep::TemplateLockingTestL(CContactDatabase *aContactsDatabase)
+	{
+	INFO_PRINTF1(KTest4);
+	TBool ret = EFalse;
+	TContactItemId cid = iIterate->NextL();
+	
+	ReadL( cid );
+	_LIT(KTLabel,"UserDefined template");
+	CContactItem *ctemplate = iContactsDatabase->CreateContactCardTemplateLC(iContactItem, KTLabel);
+	cid = aContactsDatabase->AddNewContactL(*ctemplate);
+	CloseL( EFalse );
+	
+	TInt i = 0;
+	for(; i < KIterations ; ++i, iTimeOut += KDefaultTime )
+		{
+		OpenL( ctemplate->Id() );//locks contact/template with id == cid
+		ret = CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, ctemplate->Id(), KErrInUse, iTimeOut);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckUpdateL, aContactsDatabase, ctemplate->Id(), KErrInUse, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckRead, aContactsDatabase, ctemplate->Id(), KErrNone, 0, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckDelete, aContactsDatabase, ctemplate->Id(), KErrInUse, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckUpdateL, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckRead, aContactsDatabase, cid, KErrNone, 0, EFalse);
+		ret = ret && CheckTimeOutL(&CTimeoutStep::CheckDelete, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse);
+		CloseL( ETrue );
+		if(!ret)
+			{
+			ERR_PRINTF2(KErrOnIteration,i+1);
+			break;
+			}
+		}
+	iTimeOut = KStartTime;
+	CleanupStack::PopAndDestroy( ctemplate );
+	return ret;
+	}
+	
+void CTimeoutStep::TimeoutValuesTestL(CContactDatabase *aContactsDatabase)
+	{
+	INFO_PRINTF1(KTest5);
+	TContactItemId cid = iIterate->NextL();
+	
+	iTimeOut = KStartTime;
+	TRAPD(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT(KErrNone == err);
+	
+	
+	iTimeOut = KMinTInt;
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT(KErrArgument == err);
+	OpenL( cid );
+	TESTPRINT( CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, cid, KErrInUse, KStartTime, EFalse) );
+	CloseL( ETrue );
+	
+	iTimeOut = -1;
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT(KErrArgument == err);
+	OpenL( cid );
+	TESTPRINT(CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, cid, KErrInUse, KStartTime, EFalse) );
+	CloseL( ETrue );
+	
+	iTimeOut = 0;
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT( KErrNone == err );
+	OpenL( cid );
+	TESTPRINT( CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse) );
+	CloseL( ETrue );
+	
+	iTimeOut = 1;
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT(KErrNone == err);
+	OpenL( cid );
+	TESTPRINT( CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse) );
+	CloseL( ETrue );
+	
+	iTimeOut = KFiveMins - 1;		
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT(KErrNone == err);
+
+	iTimeOut = KFiveMins;		
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT( KErrNone == err );
+	OpenL( cid );
+	TESTPRINT( CheckTimeOutL(&CTimeoutStep::CheckOpenL, aContactsDatabase, cid, KErrInUse, iTimeOut, EFalse) );
+	CloseL( ETrue );
+	
+	iTimeOut = KFiveMins + 1;		
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT(KErrArgument == err);
+	
+	iTimeOut = KMaxTInt;		
+	TRAP(err, SetTimeOutL( aContactsDatabase ) );
+	TESTPRINT(KErrArgument == err);
+	
+
+	iTimeOut = KStartTime;
+	SetTimeOutL();
+	}
+
+