phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/TestContactViewAccessStep.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/TestContactViewAccessStep.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,691 @@
+// Copyright (c) 2007-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 "TestContactViewAccessStep.h"
+
+/**
+ * Constructor
+ */
+CTestContactViewAccessStep::CTestContactViewAccessStep()
+	{
+	// Unique loggind Id for the test step
+	SetTestStepName(KTestContactViewAccessStep);
+	}
+
+/**
+ * Destructor
+ */
+CTestContactViewAccessStep::~CTestContactViewAccessStep()
+	{
+
+	if(iViewCollection)
+		{
+		delete iViewCollection;
+		}
+	delete iViewValidation;
+	delete iContactViewTest;
+	delete iContactUtility;
+	delete iBackupHelper;
+	}
+
+/**
+ * Base class pure virtual.
+ * @return	EPass or EFail indicating the result of the test step.
+ */
+TVerdict CTestContactViewAccessStep::doTestStepPreambleL()
+	{
+	iActiveScheduler = new (ELeave) CActiveScheduler;
+	CActiveScheduler::Install(iActiveScheduler);
+
+	CTestStep* self = static_cast<CTestStep*>(this);
+ 	iBackupHelper = CBackupRestoreHelper::NewL(*self);
+
+	// Create utility objects
+	CreateUtilityClassL();
+
+	// File from where contacts must be imported
+	TPtrC	importFileName;
+	TBool	filePresent;
+	filePresent = GetStringFromConfig(ConfigSection(), SharedConstants::KFileToBeImported, importFileName);
+
+	TBool	pbapBased = EFalse;
+	GetBoolFromConfig(ConfigSection(), SharedConstants::KVCardVersionPBAP, pbapBased);
+	if(filePresent)
+		{
+		iContactUtility->ImportVcardContactsL(importFileName, pbapBased);
+		}
+
+	return CTestStep::doTestStepPreambleL();
+	}
+
+/**
+ * Base class pure virtual.
+ * @return EPass or EFail indicating the result of the test step.
+ */
+TVerdict CTestContactViewAccessStep::doTestStepL()
+	{
+	TPtrC	listOfViews;
+	GetStringFromConfig(ConfigSection(), SharedConstants::KListOfViews, listOfViews);
+
+	/* Get the list of views from ini and construct the view like local view/remote view/named remote view/
+	   find view/filtered view/group view/concatenated view or sub view based on the requirement */
+	RArray<TPtrC>	sections;
+	iContactUtility->TokenizeStringL(listOfViews, sections);
+	iContactUtility->ConstructViewsL(sections); //section is destroyed in ConstructViewsL
+
+	AccessViewsL();
+	TestViewsUnderBackupRestoreL();
+
+	return TestStepResult();
+	}
+
+/**
+ * Test the view API's like AtL(), AllFieldsLC(), ContactAtL(), ContactL(), CountL(), SortOrder(),
+ * ViewPreferences(), RefineFindView(), ContactsMatchingCriteria() and ContactsMatchingPrefixL()
+ * based on the sections given in the ini file.
+ * @param aSection ini sections
+ */
+void CTestContactViewAccessStep::TestViewAPIsL(const RArray<TPtrC>& aSection)
+	{
+	// Based on the data specified in the ini file, test the view API's
+	for ( TInt i = 0; i < aSection.Count(); ++i )
+		{		
+		TPtrC	viewAccessSection = aSection[i];
+		
+		// Get the desired view based on the input given from the ini file	
+		CContactViewBase*	viewBase = iContactUtility->GetDesiredView(viewAccessSection);	
+		CleanupStack::PushL(viewBase);
+			
+		TBool	testAtLAPI = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestAtLAPI, testAtLAPI);	
+		if ( testAtLAPI )
+			{			
+			// Function to test the AtL() API which returns the contact item id for the specified index
+			TestContactViewAtL(viewAccessSection, viewBase);
+			}
+
+		TBool	testContactAtLAPI = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestContactAtLAPI, testContactAtLAPI);
+		if ( testContactAtLAPI )
+			{			
+			// Function to test the ContactAtL() API which returns the contact item
+			TestContactAtL(viewAccessSection, viewBase);
+			}
+
+		TBool	testCountLAPI = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestCountLAPI, testCountLAPI);
+		if ( testCountLAPI )
+			{
+			// Function to test the CountL() which returns the no. of contact items in the view
+			TestCountL(viewAccessSection, viewBase);
+			}
+
+		TBool	testAllFieldsAPI = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestAllFieldsAPI, testAllFieldsAPI);
+		if ( testAllFieldsAPI )
+			{
+			// Function to test the AllFieldsLC() API which returns the fields of the contact item
+			TestContactFieldsL(viewAccessSection, viewBase);
+			}
+
+		TBool	testFindLAPI = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestFindLAPI, testFindLAPI);
+		if ( testFindLAPI )
+			{
+			// Function to test the FindL() API which returns the index of the contact item
+			TestFindL(viewAccessSection, viewBase);
+			}
+
+		TBool	testSortOrder = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestSortOrder, testSortOrder);
+		if ( testSortOrder )
+			{
+			// Function to test the SortOrder() API which returns the view's sort order
+			TestSortOrderL(viewAccessSection, viewBase);
+			}
+
+		TBool	testViewPreferences = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestViewPreferences, testViewPreferences);
+		if ( testViewPreferences )
+			{
+			// Function to test the ViewPreferences() API which returns the view preferences
+			TestContactViewPreferencesL(viewAccessSection, viewBase);
+			}
+
+		TBool	refineFindView = EFalse;
+		GetBoolFromConfig(viewAccessSection, KRefineFindView, refineFindView);
+		if ( refineFindView )
+			{
+			TInt	index;
+			GetIntFromConfig(viewAccessSection, SharedConstants::KIndex, index);
+			// Get the desired view based on the input given from the ini file
+			CContactFindView* view = iViewCollection->GetDesiredFindView(index);
+			TPtrC	searchWords;
+			GetStringFromConfig(viewAccessSection, KSearchWords, searchWords);
+			iContactViewTest->RefineFindViewL(searchWords, view, iContactUtility);
+			}
+			
+		TBool	testContactsMatchingCriteria = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestContactsMatchingCriteria, testContactsMatchingCriteria);
+		// if contactMatchingCriteria is set to true, then get the contacts matching the specified words
+		if ( testContactsMatchingCriteria )
+			{			
+			TPtrC	findWords;
+			GetStringFromConfig(viewAccessSection, KFindWords, findWords);
+			TPtrC	errorCondition;
+			GetStringFromConfig(viewAccessSection, KErrorCondition, errorCondition);
+			RPointerArray <CViewContact> matchContactArray = iContactViewTest->GetContactsMatchingCriteriaL(findWords, viewBase, iContactUtility, errorCondition);
+			CleanupClosePushL(matchContactArray);
+			if(matchContactArray.Count() != 0)
+				{
+				iViewValidation->ValidateCountL(viewAccessSection, matchContactArray.Count());
+				}			
+			CleanupStack::PopAndDestroy(&matchContactArray);
+			}
+
+		TBool	testContactsMatchingPrefix = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestContactsMatchingPrefix, testContactsMatchingPrefix);
+
+		// if contactsMatchingPrefix is set to true, then get the contacts where the contacts matches with the prefix
+		if ( testContactsMatchingPrefix )
+			{			
+			TPtrC	errorCondition;
+			GetStringFromConfig(viewAccessSection, KErrorCondition, errorCondition);
+			TPtrC	searchWords;
+			GetStringFromConfig(viewAccessSection, KSearchWords, searchWords);
+			RPointerArray <CViewContact> matchContactArray = iContactViewTest->GetContactsMatchingPrefixL(searchWords, viewBase, iContactUtility, errorCondition);
+			CleanupClosePushL(matchContactArray);
+			if(matchContactArray.Count() != 0)
+				{
+				iViewValidation->ValidateCountL(viewAccessSection, matchContactArray.Count());	
+				}			
+			CleanupStack::PopAndDestroy(&matchContactArray);
+			}
+		TBool	testSearchContact = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestSearchContactId, testSearchContact);
+		
+		// if testSearchContact is set to true, then get the contacts which is having that search word and verify its index
+		if(testSearchContact)
+			{
+			TPtrC	errorCondition;			
+			GetStringFromConfig(viewAccessSection, KErrorCondition, errorCondition);
+			viewBase = iContactUtility->GetDesiredView(viewAccessSection);
+			TPtrC	searchWords;
+			GetStringFromConfig(viewAccessSection, KSearchWords, searchWords);
+			RPointerArray <CViewContact> matchContactArray = iContactViewTest->GetContactsMatchingCriteriaL(searchWords, viewBase, iContactUtility, errorCondition);
+			CleanupClosePushL(matchContactArray);			
+			if(matchContactArray.Count()!=0 )
+				{
+				TInt	index = iContactViewTest->FindL(matchContactArray[0]->Id(), viewBase, errorCondition);
+				iViewValidation->ValidateFindL(viewAccessSection, index);
+				}
+			else
+				{
+				ERR_PRINTF2(KContactNotFound, matchContactArray.Count());
+				SetTestStepResult(EFail);
+				}			
+			CleanupStack::PopAndDestroy(&matchContactArray);
+			}
+		
+		TBool	testContactssortorderchange = EFalse;
+		GetBoolFromConfig(viewAccessSection, KTestContactssortorderchange, testContactssortorderchange);	
+		
+		// if testContactssortorderchange is set to true, then change the sort order of the desired view
+		if ( testContactssortorderchange )
+			{				
+			iContactViewTest->TestChangeSortOrderL(viewAccessSection, iContactUtility);			
+			}
+		CleanupStack::Pop(viewBase);
+		}
+	}
+
+/**
+ * Verify and validate the Contact item id returned by the AtL() API
+ * @param aSection ini section
+ * @param aView desired view
+ */
+void CTestContactViewAccessStep::TestContactViewAtL(const TPtrC& aSection, CContactViewBase* aView)
+	{
+	TPtrC	errorCondition;
+	GetStringFromConfig(aSection, KErrorCondition, errorCondition);
+	// Get the required data for AtL() API from the ini file
+	TInt	index = iContactViewTest->GetAtLApiDataFromIni(aSection);
+	// Call the AtL() API by passing the index and the desired view
+	TInt	desiredContactItemId = iContactViewTest->AtL(index, aView, errorCondition);
+	// validate the returned contact item id with the expected contact item id
+	if(desiredContactItemId != -1)
+		{
+		iViewValidation->ValidateAtLApi(desiredContactItemId, aSection);
+		}
+	}
+
+/**
+ * Verify and Validate the contact item returned by the ContactAtL() API
+ * @param aSection ini section
+ * @param aView desired view
+ */
+void CTestContactViewAccessStep::TestContactAtL(const TPtrC& aSection, CContactViewBase* aView)
+	{
+	TInt	index = iContactViewTest->GetContactAtLApiDataFromIni(aSection);
+	CViewContact*	desiredContactItem = iContactViewTest->ContactAtL(index, aView);
+	if(desiredContactItem != NULL)
+		{
+		CleanupStack::PushL(desiredContactItem);
+		iViewValidation->ValidateContactAtLApi(desiredContactItem, aSection);
+		CleanupStack::PopAndDestroy(desiredContactItem);
+		}
+	}
+
+/**
+ * Verify and validate the count returned by the CountL() API
+ * @param aSection ini section
+ * @param aView desired view
+ */
+void CTestContactViewAccessStep::TestCountL(const TPtrC& aSection, CContactViewBase* aView)
+	{
+	TInt count = 0;
+	TRAPD( err, count = aView->CountL());
+	if ( err != KErrNone )
+		{
+		SetTestStepError(err);
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		iViewValidation->ValidateCountL(aSection, count);
+		}	
+	}
+
+/**
+ * Verify and validate the index returned by the FindL() API
+ * @param aSection ini section
+ * @param aView desired view
+ */
+void CTestContactViewAccessStep::TestFindL(const TPtrC& aSection, CContactViewBase* aView)
+	{
+	TPtrC	errorCondition;
+	GetStringFromConfig(aSection, KErrorCondition, errorCondition);
+	TInt	id = iContactViewTest->GetFindLApiDataFromIni(aSection);
+	TInt	index = iContactViewTest->FindL(id, aView, errorCondition);
+	if(index > -1)
+		{
+		iViewValidation->ValidateFindL(aSection, index);
+		}	
+	}
+
+/**
+ * Verify and validate the fields returned by the AllFieldsLC() API.
+ * @param aSection ini section
+ * @param aView desired view
+ */
+void CTestContactViewAccessStep::TestContactFieldsL(const TPtrC& aSection, CContactViewBase* aView)
+	{
+	HBufC* fields = NULL;
+	TBool invalidData = EFalse;	
+	GetBoolFromConfig(aSection, KInvalidData, invalidData);	
+	if(invalidData)
+		{
+		//If ivalid data is passed then in udeb mode it is panic but in urel mode it is returning NULL
+		#ifndef _DEBUG						
+		TRAPD( err, fields = iContactViewTest->GetAllFieldsLDataFromIniL(aSection, aView));
+		if ( err != KErrNone )
+			{
+			SetTestStepError(err);
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			if(fields != NULL)
+				{
+				// Append fields one by one to the fieldArray
+				RArray<TPtrC>	fieldArray;
+				iContactUtility->TokenizeStringL(*fields, fieldArray);
+				iViewValidation->ValidateAllFieldsL(aSection, fieldArray, aView, iContactViewTest);
+				}
+			else
+				{
+				INFO_PRINTF2(KInfoContactFields,&fields);
+				SetTestStepResult(EFail);
+				}
+			}			
+		#else
+			SetTestStepResult(EFail);
+		#endif
+		}
+	else
+		{
+		TRAPD( err, fields = iContactViewTest->GetAllFieldsLDataFromIniL(aSection, aView));
+			if ( err != KErrNone )
+				{
+				SetTestStepError(err);
+				SetTestStepResult(EFail);
+				}
+			else
+				{
+				if(fields != NULL)
+					{
+					// Append fields one by one to the fieldArray
+					RArray<TPtrC>	fieldArray;
+					iContactUtility->TokenizeStringL(*fields, fieldArray);
+					iViewValidation->ValidateAllFieldsL(aSection, fieldArray, aView, iContactViewTest);
+					}
+				else
+					{
+					INFO_PRINTF2(KInfoContactFields,&fields);
+					SetTestStepResult(EFail);
+					}
+				}
+			}
+	}
+
+/**
+ * Verify and validate the contact view preferences
+ * @param aSection ini section
+ * @param aView desired view
+ */
+void CTestContactViewAccessStep::TestContactViewPreferencesL(const TPtrC& aSection, CContactViewBase* aView)
+	{
+	TContactViewPreferences	desiredViewPreferences = iContactViewTest->ContactViewPreferences(aView);
+	iViewValidation->ValidateViewPreferencesL(aSection, desiredViewPreferences, iContactUtility);
+	}
+
+/**
+ * Verify and validate the sort order returned by the SortOrderL() API
+ * @param aSection ini section
+ * @param aView desired view
+ */
+void CTestContactViewAccessStep::TestSortOrderL(const TPtrC& aSection, CContactViewBase* aView)
+	{
+	TPtrC	errorCondition;
+	GetStringFromConfig(aSection, KErrorCondition, errorCondition);
+	// Get the sort order for the desired view
+	RContactViewSortOrder	contactViewSortOrder = iContactViewTest->GetSortOrderL(aView, errorCondition);
+	// Get the uid's of the retrieved sort order
+	TPtrC	sortOrder;
+	GetStringFromConfig(aSection, KSortOrder, sortOrder);
+	RContactViewSortOrder	viewSortOrder =	iContactUtility->ConvertStringToSortOrderL(sortOrder);	
+	// iterate through the Uid's and validate them
+	for ( TInt i = 0; i < contactViewSortOrder.Count(); ++i )	
+		{
+		TUid	expectedUid = viewSortOrder[i];
+		TUid	uid = contactViewSortOrder[i];		
+		iViewValidation->ValidateSortOrderL(uid, expectedUid);
+		}
+	}
+
+/**
+ * Create objects of CContactUtilitiesCollection, CContactViewApiTest and CContactViewValidation
+ */
+void CTestContactViewAccessStep::CreateUtilityClassL()
+	{
+	TBool	createDataBase = ETrue;
+	GetBoolFromConfig(ConfigSection(), SharedConstants::KCreateDataBase, createDataBase);
+	GetStringFromConfig(ConfigSection(), SharedConstants::KDbName, iDbName);
+
+	iCntDb = CreateAndOpenDataBaseL(iDbName, createDataBase);
+	iViewCollection = CContactViewCollection::NewL();
+	// Create Utility class object, to export the contact from database
+	CTestStep* self = static_cast<CTestStep*>(this);
+	CleanupStack::PushL(self);
+	iContactUtility = CContactUtilitiesCollection::NewL(*self, DatabaseReference(), ViewCollectionReference());
+	iContactViewTest = CContactViewApiTest::NewL(self);
+	iViewValidation = new(ELeave) CContactViewValidation(self);
+	CleanupStack::Pop(self);
+	}
+
+/**
+ * Return the database reference
+ * @return iCntDb 
+ */
+CContactDatabase& CTestContactViewAccessStep::DatabaseReference()
+	{
+	return *iCntDb;
+	}
+
+/**
+ * Return the viewcollection reference
+ * @return  iViewCollection 
+ */
+CContactViewCollection& CTestContactViewAccessStep::ViewCollectionReference()
+	{
+	return *iViewCollection;
+	}
+
+
+/**
+ * Create and open the contact database
+ * @param aDbName database to be created/ opened
+ * @return CContactDatabase*
+ */
+CContactDatabase* CTestContactViewAccessStep::CreateAndOpenDataBaseL(const TPtrC& aDbName, TBool aCreateDataBase)
+	{
+	HBufC*	dbName = HBufC::NewLC(aDbName.Length());
+	dbName->Des().Copy(aDbName);
+	CContactDatabase*	cntDb = NULL;
+	if( aCreateDataBase )
+		{
+		TInt	err = 0;
+		// Replace the existing database and opens it
+		if( aDbName != KNullDesC() )
+			{
+			TRAP(err, cntDb = CContactDatabase::ReplaceL(dbName->Des()));
+			}
+		else //if database name is not given then create and open the default DB
+			{
+			TRAP(err, cntDb = CContactDatabase::ReplaceL());
+			}
+
+		if( err != KErrNone )
+			{
+			ERR_PRINTF2(KErrInCreateDataBase, err);
+			SetTestStepResult(EFail);
+			SetTestStepError(err);
+			}
+		}
+	else
+		{
+		TRAPD(err, cntDb = CContactDatabase::OpenL(dbName->Des()));
+		if( err != KErrNone )
+			{
+			ERR_PRINTF2(KErrInOpen, err);
+			SetTestStepResult(EFail);
+			SetTestStepError(err);
+			}
+		}
+	CleanupStack::PopAndDestroy(dbName);
+	return	cntDb;
+	}
+
+/**
+ * Base class pure virtual.
+ * @return		EPass or EFail indicating the result of the test step.
+ */
+TVerdict CTestContactViewAccessStep::doTestStepPostambleL()
+	{
+	delete iViewCollection;
+	iViewCollection = NULL;
+	// Delete the database if the variable deleteDatabase is set to true
+	TBool	deleteDataBase = EFalse;
+	GetBoolFromConfig(ConfigSection(), SharedConstants::KDeleteDataBase, deleteDataBase);
+	delete iCntDb;
+	iContactUtility->DeleteDataBase(deleteDataBase, iDbName);
+	return CTestStep::doTestStepPostambleL();
+	}
+
+/**
+ * Access Contact View Apis and validate their behaviour
+ */
+void CTestContactViewAccessStep::AccessViewsL()
+	{
+	TPtrC	viewAccessList;
+	GetStringFromConfig(ConfigSection(), KViewAccessList, viewAccessList);
+
+	/* if the view access list is defined in the ini then test the views api's like CountL(), AtL(), ContactAtL(),
+	   FindL(), SortOrder(), ViewPreferences(), AllFieldsLC(), RefineFindView(), GetContactsMatchingCriteria()
+	   and GetContactsMatchingPrefix() for the desired view */
+	if ( viewAccessList != KNullDesC() )
+		{
+		RArray<TPtrC>	accessList;
+		CleanupClosePushL(accessList);
+		iContactUtility->TokenizeStringL(viewAccessList, accessList);
+		TestViewAPIsL(accessList);
+		CleanupStack::PopAndDestroy(&accessList);
+		}
+	}
+
+
+/**
+ * Access Contact View Apis under backup restore conditions
+ */
+void CTestContactViewAccessStep::TestViewsUnderBackupRestoreL()
+	{
+	_LIT(KViewAccessUnderBackupRestore, "ViewAccessUnderBackupRestore");
+	TBool	viewAccessUnderBackupRestore = EFalse;
+	GetBoolFromConfig(ConfigSection(), KViewAccessUnderBackupRestore, viewAccessUnderBackupRestore);
+	
+	if(!viewAccessUnderBackupRestore)
+		{
+		return;	
+		}
+
+	InitateBackupL();
+	AccessViewsL();
+
+	StopBackupL();
+	AccessViewsL();
+
+	InitiateRestoreL();
+	AccessViewsL();
+
+	StopRestoreL();
+	AccessViewsL();
+	}
+
+/**
+ * Initate a system wide backup operation
+ */
+void CTestContactViewAccessStep::InitateBackupL()
+	{
+	iBackupHelper->StartBackupL();
+	}
+/**
+ * Stop the system wide backup operation
+ */
+void CTestContactViewAccessStep::StopBackupL()
+	{
+	iBackupHelper->EndBackupL();
+	}
+/**
+ * Initate a system wide restore operation
+ */
+void CTestContactViewAccessStep::InitiateRestoreL()
+	{
+	iBackupHelper->StartRestoreL();
+	}
+/**
+ * Stop the system wide restore operation
+ */
+void CTestContactViewAccessStep::StopRestoreL()
+	{
+	iBackupHelper->EndBackupL();
+	}
+
+/**
+ * Initate a system wide restore operation
+ */
+CBackupRestoreHelper* CBackupRestoreHelper::NewL(CTestStep& aTestStep)
+	{
+	CBackupRestoreHelper* self = new(ELeave) CBackupRestoreHelper(aTestStep);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+/**
+ * Class CBackupRestoreHelper - Constructor
+ * @param aTestStep - Reference to current test step, used to read data from the ini file
+ */
+CBackupRestoreHelper::CBackupRestoreHelper(CTestStep& aTestStep)
+:iBaseTestStep(aTestStep)
+	{
+	}
+
+/**
+ * Class CBackupRestoreHelper - second level constructor
+ */
+void CBackupRestoreHelper::ConstructL()
+	{
+	/** Initialise the drive list to empty and then get drive list data from
+	 File Server.
+	 Required before Backup and Restore testing
+	 */
+	iFs.Connect();
+	iDriveList.FillZ();
+	User::LeaveIfError(iFs.DriveList(iDriveList));
+	iBackupClient = conn::CSBEClient::NewL();
+	}
+
+/**
+ * Class CBackupRestoreHelper - destructor
+ */
+CBackupRestoreHelper::~CBackupRestoreHelper()
+	{
+	delete iBackupClient;
+	iFs.Close();
+	}
+
+/**
+ * Uses the Secure Backup Engine API  and starts a backup.
+ */
+void CBackupRestoreHelper::StartBackupL()
+	{
+	iBackupClient->SetBURModeL(iDriveList, conn::EBURBackupFull, conn::EBackupBase);
+	}
+
+/**
+ * Uses the Secure Backup Engine API  and ends backup.
+ */
+void CBackupRestoreHelper::EndBackupL()
+	{
+	iBackupClient->SetBURModeL(iDriveList, conn::EBURNormal, conn::ENoBackup);
+	}
+
+/**
+ * Uses the Secure Backup Engine API  and starts a restore.
+ */
+void CBackupRestoreHelper::StartRestoreL()
+	{
+	iBackupClient->SetBURModeL(iDriveList, conn::EBURRestoreFull, conn::EBackupBase);
+	}
+
+/**
+ * Uses the Secure Backup Engine API  and ends restore.
+ */
+void CBackupRestoreHelper::EndRestoreL()
+	{
+	/** Use the Secure Backup Engine API to "end" a restore. */
+	iBackupClient->SetBURModeL(iDriveList, conn::EBURNormal, conn::ENoBackup);
+	}
+
+
+/**
+ * Reference to TestStep, used for retreiving ini data, printing operations etc.. 
+ */
+CTestStep& CBackupRestoreHelper::BaseTestStepReference()
+	{
+	return(iBaseTestStep);
+	}