phonebookengines/contactsmodel/tsrc/Integration/PerfFuncSuite/src/CompactAndRecoverStep.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/PerfFuncSuite/src/CompactAndRecoverStep.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,336 @@
+// 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 "CompactAndRecoverStep.h"
+#include "PerformanceFunctionalityDefs.h"
+#include <cntfilt.h>
+
+#define KNumberOfContacts 10
+
+_LIT(KRun1,"CRUD");
+_LIT(KRun2,"Transaction");
+_LIT(KRun3,"Simple");
+_LIT(KRun4,"AsyncOpen");
+
+_LIT(KTest1, "CRUD tests");
+_LIT(KTest2, "Transaction tests");
+_LIT(KTest3, "Simple operations test");
+_LIT(KTest4, "Asynchronous Open recovery test");
+
+
+_LIT(KCompleteSteps, "Complete all active steps Test");
+_LIT(KCancelSteps, "Cancel active steps Test");
+
+_LIT(KRecover, "Recover_" );
+_LIT(KComplete, "Complete_" );
+_LIT(KCompleteAndRecover, "CNR_" );
+
+
+
+CCompactAndRecoverStep::CCompactAndRecoverStep()  : CPerformanceFunctionalityBase(KNumberOfContacts)
+	{
+	SetTestStepName(KCompactAndRecoverStep);
+	}
+	
+TVerdict CCompactAndRecoverStep::doTestStepPostambleL()
+	{
+	CLEAR( iContactOpenOperation );	
+	return CPerformanceFunctionalityBase::doTestStepPostambleL();
+	}
+	
+void CCompactAndRecoverStep::InitializeL()
+	{
+	CPerformanceFunctionalityBase::InitializeL();
+	iContactsDatabase2 = CContactDatabase::OpenL();
+	//set timeout to 0, to minimize waits within the test
+	iContactsDatabase->SetOperationTimeOutL(0);
+	iContactsDatabase2->SetOperationTimeOutL(0);
+	}
+
+void CCompactAndRecoverStep::Cleanup()
+	{
+	CLEAR( iContactsDatabase2 );
+	CPerformanceFunctionalityBase::Cleanup();
+	}
+	
+void CCompactAndRecoverStep::PreTestL()
+	{
+	const TDesC &KSection = ConfigSection();
+	//read recover flag passed in section paramter
+	iRecoverFlag = ( KSection.Find( KRecover ) == 0 );
+	//read complete flag passed in section paramter
+	iCompleteSteps = ( KSection.Find( KComplete ) == 0 );
+	
+	if( !iRecoverFlag && !iCompleteSteps )
+		{
+		iRecoverFlag = iCompleteSteps = ( KSection.Find( KCompleteAndRecover ) == 0 );
+		}
+	}
+
+TVerdict CCompactAndRecoverStep::doTestStepL()
+	{
+#ifdef __SYMBIAN_CNTMODEL_USE_SQLITE__
+	return EPass;
+#else	
+	__UHEAP_MARK;
+	InitializeL();
+	_LIT(KPrintStart, "CCompactAndRecoverStep::doTestStepL()");
+	INFO_PRINTF1(KPrintStart);  //Block start 
+	iIterate->Reset();
+
+	const TDesC &run = ConfigSection();
+	
+	if( run.Find( KRun1 ) > KErrNotFound )
+		{
+		INFO_PRINTF1( KTest1 );
+		TestWrapperL( &CCompactAndRecoverStep::CRUDOperationsL, KErrNotReady, KErrNotReady, KErrNone, KErrNotReady );
+		}
+	else if( run.Find( KRun2 ) > KErrNotFound )
+		{
+		INFO_PRINTF1( KTest2 );
+		TestWrapperL(  &CCompactAndRecoverStep::TransactionOperations, KErrNotReady, KErrNotReady, KErrNone, KErrNotReady );
+		}
+	else if( run.Find( KRun3 ) > KErrNotFound )
+		{
+		INFO_PRINTF1( KTest3 );
+		TestWrapperL(  &CCompactAndRecoverStep::SimpleOperationsL, KErrAccessDenied, KErrNone, KErrNone, KErrNone );
+		}
+	else if( run.Find( KRun4 ) > KErrNotFound )
+		{
+		INFO_PRINTF1( KTest4 );
+		OpenAsyncTestL();
+		}
+	else
+		{
+		MissingTestPanic();
+		}
+		
+	Cleanup();
+	__UHEAP_MARKEND;
+
+	return TestStepResult();
+#endif
+	}
+	
+/**
+Test wrapper for performing all comapct and recover tests
+start recover/compress
+perfrom database operations, expecting recover/compress errors
+end recover compress
+perform database operations again, expecting no errors
+*/
+void CCompactAndRecoverStep::TestWrapperL(
+									void (CCompactAndRecoverStep::*aOperations)(const TInt ), 
+									const TInt aErr, 
+									const TInt aErr2, 
+									const TInt aErr3, 
+									const TInt aErr4 )
+	{
+	if(iCompleteSteps)
+		{
+		INFO_PRINTF1(KCompleteSteps);
+		}
+	else
+		{
+		INFO_PRINTF1(KCancelSteps);
+		}
+	
+	//start compress/recover	
+	if( iRecoverFlag )
+		{
+		StartRecoverL();
+		}
+	else
+		{
+		StartCompressL();
+		}
+	
+	//perfrom database operations	
+	#ifdef _DEBUG
+	
+	(this->*aOperations)( iRecoverFlag ? aErr : aErr2 );
+	(void)aErr3;
+	(void)aErr4;
+	
+	#else
+	
+	(this->*aOperations)( iRecoverFlag? aErr3 : aErr4 );
+	(void)aErr;
+	(void)aErr2;
+	
+	#endif
+	
+	//end recover / compress
+	if( iRecoverFlag )
+		{
+		EndRecoverL();
+		}
+	else
+		{
+		EndCompressL();
+		}
+		
+	CContactDatabase *temp = iContactsDatabase2;
+	iContactsDatabase2 = iContactsDatabase;
+	iContactsDatabase = temp;
+	
+	//perfrom database operations expecting no errors
+	(this->*aOperations)( KErrNone );
+	
+	temp = iContactsDatabase2;
+	iContactsDatabase2 = iContactsDatabase;
+	iContactsDatabase = temp;
+	}
+
+/**
+Performs and Traps database crud(Create, read, update, delete) operations
+all operations should leave with aError
+*/
+void CCompactAndRecoverStep::CRUDOperationsL(const TInt aError)
+	{
+	_LIT(KPrintErrors,"Expected error: %d and Observed error: %d");
+	TContactItemId con1 = iIterate->NextL();
+	CContactItem *contactItem1 = NULL;
+
+	TRAPD( err, 
+			contactItem1 = iContactsDatabase->ReadContactLC(con1);
+			CleanupStack::PopAndDestroy( contactItem1 );
+			);
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	
+	TRAP( err, 
+		contactItem1 = iContactsDatabase->OpenContactLX(con1);
+		CleanupStack::PushL(contactItem1);
+		iContactsDatabase->CommitContactL(*contactItem1);
+		CleanupStack::PopAndDestroy( contactItem1 );
+		CleanupStack::Pop( );//lock
+		);
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	
+	CContactCard* contact = CContactCard::NewLC(iTemplate);
+	TRAP(err, contactItem1 = iContactsDatabase->UpdateContactLC(con1, contact); 
+		  CleanupStack::PopAndDestroy(contactItem1);
+	);
+	CleanupStack::PopAndDestroy( contact );
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	
+	TRAP( err, 
+			AddEmptyContactsL(1, EFalse);
+			);
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	
+	TRAP( err, 
+			DeleteContactL(con1, EFalse);
+			);
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	}
+
+/**
+Performs and Traps database transaction operations
+all operations should leave with aError
+*/
+void CCompactAndRecoverStep::TransactionOperations(const TInt aError)
+	{
+	_LIT(KPrintErrors,"Expected error: %d and Observed error: %d");
+	
+	//begin transaction	
+	TRAPD(err,	iContactsDatabase->DatabaseBeginL(EFalse); );
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	
+	//perfrom crud operation
+	TRAP_IGNORE( AddEmptyContactsL(1, EFalse) );
+	
+	//commit transaction
+	TRAP(err,	iContactsDatabase->DatabaseCommitL(EFalse); );
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);	
+	
+	//begin transaction	
+	TRAP(err,	iContactsDatabase->DatabaseBeginL(EFalse); );
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	
+	//perfrom crud operation
+	TRAP_IGNORE( AddEmptyContactsL(1, EFalse) );
+	
+	//rollback transaction
+	TRAP(err,	
+	        iContactsDatabase->DatabaseRollback();
+	        User::After( 100000 );
+	         );
+	//rollback can't leave
+	TESTPRINT( KErrNone == err);
+	INFO_PRINTF3(KPrintErrors, KErrNone, err);
+	}
+	
+/**
+Performs and Traps simple database operations
+all operations should leave with aError
+*/
+void CCompactAndRecoverStep::SimpleOperationsL(const TInt aError)
+	{
+	_LIT(KPrintErrors,"Expected error: %d and Observed error: %d");
+	
+	const TContactItemId KOwnCardId = iContactsDatabase->OwnCardId();
+	TESTPRINT( KOwnCardId == -1 );
+	
+	CCntFilter *filter = CCntFilter::NewL();
+	TRAPD(err,	iContactsDatabase->FilterDatabaseL( *filter ); );
+	CLEAR( filter );
+	TESTPRINT(aError == err);
+	INFO_PRINTF3(KPrintErrors, aError, err);
+	}
+
+/**
+Start asynchronous open while in compress/recover state
+end compress/recover state
+wait for open to be successfully completed
+*/	
+void CCompactAndRecoverStep::OpenAsyncTestL()
+	{
+	_LIT(KOpenAsync, "Open Async");
+	_LIT(KEndAsync, "End Async");
+	iCompleteSteps = EFalse;
+	
+	StartRecoverL();
+	ALLPRINT(KOpenAsync);
+	iContactOpenOperation = CContactDatabase::Open(iStatus);
+	EndRecoverL();	
+	User::WaitForRequest(iStatus);
+	CLEAR( iContactOpenOperation );
+	ALLPRINT( KEndAsync );	
+	
+	StartCompressL();
+	ALLPRINT(KOpenAsync);
+	iContactOpenOperation = CContactDatabase::Open(iStatus);
+	EndCompressL();	
+	User::WaitForRequest(iStatus);
+	CLEAR( iContactOpenOperation );
+	ALLPRINT( KEndAsync );	
+	}
+	
+
+