diff -r 000000000000 -r bde4ae8d615e os/persistentdata/persistentstorage/centralrepository/test/t_cenrep_helper.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/os/persistentdata/persistentstorage/centralrepository/test/t_cenrep_helper.cpp	Fri Jun 15 03:10:57 2012 +0200
@@ -0,0 +1,328 @@
+// Copyright (c) 2005-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 "t_cenrep_helper.h"
+#include "srvdefs.h"
+#include <f32file.h> // RFs
+#include <e32test.h> // RTest
+#include <hal.h>
+#include "cachemgr.h"
+#include "clirep.h"
+
+#if defined(__CENTREP_SERVER_PERFTEST__) || defined(__CENTREP_SERVER_MEMTEST__) || defined(__CENTREP_SERVER_CACHETEST__)
+	#include "srvreqs.h"
+	#define CONDITIONAL_PARAM(x) x
+#else
+	#define CONDITIONAL_PARAM(x)
+#endif
+
+void PatchDrive(TDes& aPath)
+	{
+	TDriveNumber sysdrive = RFs::GetSystemDrive();
+	aPath[0] = 'a' + sysdrive-EDriveA; // Replace drive letter only.
+	}
+
+EXPORT_C void printDirL(const TDesC& aDirName)
+	{
+	CDir* fileList=NULL;
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+	TInt r = fs.GetDir(aDirName,KEntryAttNormal, ESortByDate, fileList);
+
+	if (r==KErrPathNotFound)
+		{
+		RDebug::Print(_L("No directory %S"), &aDirName);
+		}
+	else if (r==KErrNone)
+		{
+		TInt fileCount=fileList->Count();
+		RDebug::Print( _L("%02d files in %S\n"),fileCount, &aDirName);
+		for (TInt i = 0;i < fileCount; ++i)
+			{
+			TEntry entry=(*fileList)[i];
+
+			RDebug::Print( _L("File[%02d] - %S \n"),
+							i,
+							&(entry.iName)
+							);
+			}
+		}
+	else
+		{
+		RDebug::Print(_L("Error getting contents of directory %S"), &aDirName);
+		}
+	delete fileList;
+	CleanupStack::PopAndDestroy();	//fs
+	}
+
+EXPORT_C TInt KillProcess(const TDesC& aProcessName)
+	{
+	TFullName name;
+
+	RDebug::Print(_L("Find and kill \"%S\" process.\n"), &aProcessName);
+
+	TBuf<64> pattern(aProcessName);
+	TInt length = pattern.Length();
+	pattern += _L("*");
+	TFindProcess procFinder(pattern);
+
+	while (procFinder.Next(name) == KErrNone)
+		{
+		if (name.Length() > length)
+			{//If found name is a string containing aProcessName string.
+			TChar c(name[length]);
+			if (c.IsAlphaDigit() ||
+				c == TChar('_') ||
+				c == TChar('-'))
+				{
+				// If the found name is other valid application name
+				// starting with aProcessName string.
+				RDebug::Print(_L(":: Process name: \"%S\".\n"), &name);
+				continue;
+				}
+			}
+		RProcess proc;
+		if (proc.Open(name) == KErrNone)
+			{
+			proc.Kill(0);
+			RDebug::Print(_L("\"%S\" process killed.\n"), &name);
+			}
+		proc.Close();
+		}
+	return KErrNone;
+	}
+
+const TInt KSmallDelay = 2*1000;
+
+//File cleanup function
+EXPORT_C void CleanupCDriveL(TBool aRemoveRomCache)
+	{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+	CFileMan* fm = CFileMan::NewL(fs);
+	CleanupStack::PushL(fm);
+	HBufC* file_buf = HBufC::NewLC(KMaxFileName);
+	TPtr file(file_buf->Des());
+	file.Copy(KCPersistsFiles);
+	PatchDrive(file);
+	TInt r = fm->Delete(file);
+
+	if (r != KErrNone &&
+		r != KErrNotFound &&
+		r != KErrPathNotFound)
+		{
+		User::Leave(r);
+		}
+		
+	if(aRemoveRomCache)
+		{
+		//Delete cached rom version file
+		file.Copy(KCRomVersionFiles);
+		PatchDrive(file);
+		fm->Attribs(file, 0, KEntryAttReadOnly, TTime(0), 0);
+		r = fm->Delete(file);
+		if (r != KErrNone &&
+			r != KErrNotFound &&
+			r != KErrPathNotFound &&
+			r != KErrPermissionDenied)
+			{
+			User::Leave(r);
+			}
+		
+		// Delete all install files
+		file.Copy(KCInstallFiles);
+		PatchDrive(file);	
+		r = fm->Delete(file);
+		if (r != KErrNone &&
+			r != KErrNotFound &&
+			r != KErrPathNotFound)
+			{
+			User::Leave(r);
+			}
+
+		// Give SW time to handle uninstall.
+		User::After(KSmallDelay);
+		}
+	CleanupStack::PopAndDestroy(3);
+	}
+
+//Function to remove all repositories from repository cache
+//Try not to use this function because it is time consuming (129.5 seconds)
+EXPORT_C void CleanupRepositoryCache()
+	{
+	// So we wait here until the cache is empty to correct the behaviour.
+	User::After(KDefaultEvictionTimeout+950000);
+    }
+
+//Function to clean specific repository files
+EXPORT_C void CleanupFileFromCDriveL(const TUid aRepository)
+	{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+	CFileMan* fm = CFileMan::NewL(fs);
+	CleanupStack::PushL(fm);
+	
+	HBufC* file_buf = HBufC::NewLC(KMaxFileName);
+	TPtr filename(file_buf->Des());
+	filename = KCPersistsDir;
+	filename.AppendNumFixedWidth(aRepository.iUid,EHex,8);
+	filename.Append(KTxtFileExt);
+	PatchDrive(filename);
+	// Delete txt file from persists dir
+	TInt r = fm->Delete(filename);
+
+	if (r != KErrNone &&
+		r != KErrNotFound &&
+		r != KErrPathNotFound)
+		{
+		User::Leave(r);
+		}
+
+	filename = KCPersistsDir;
+	filename.AppendNumFixedWidth(aRepository.iUid,EHex,8);
+	filename.Append(KCreFileExt);
+	PatchDrive(filename);
+	// Delete cre file from persists dir
+	r = fm->Delete(filename);
+
+	if (r != KErrNone &&
+		r != KErrNotFound &&
+		r != KErrPathNotFound)
+		{
+		User::Leave(r);
+		}
+
+	filename = KCInstallDir;
+	filename.AppendNumFixedWidth(aRepository.iUid,EHex,8);
+	filename.Append(KTxtFileExt);	
+	PatchDrive(filename);
+	// Delete txt file from install dir	
+	r = fm->Delete(filename);
+	if (r != KErrNone &&
+		r != KErrNotFound &&
+		r != KErrPathNotFound)
+		{
+		User::Leave(r);
+		}
+
+	filename = KCInstallDir;
+	filename.AppendNumFixedWidth(aRepository.iUid,EHex,8);
+	filename.Append(KCreFileExt);	
+	PatchDrive(filename);	
+	// Delete cre file from install dir	
+	r = fm->Delete(filename);
+	if (r != KErrNone &&
+		r != KErrNotFound &&
+		r != KErrPathNotFound)
+		{
+		User::Leave(r);
+		}
+ 
+	// Give SW time to handle uninstall.
+	User::After(KSmallDelay);
+
+	CleanupStack::PopAndDestroy(3);
+	}	
+	
+//This function copies files from a source folder to a target folder
+//and sets the file attributes to archive and read only
+EXPORT_C void CopyTestFilesL(CFileMan& aFm, const TDesC& aSrc, const TDesC& aDest)
+	{
+	TBuf<KMaxFileName> src, dest;	
+	src.Copy(aSrc);	
+	dest.Copy(aDest);
+				
+	PatchDrive(dest);
+
+	//copy test files
+	User::LeaveIfError(aFm.Copy(src, dest,CFileMan::ERecurse));
+	aFm.Attribs(dest,
+					KEntryAttArchive,
+					KEntryAttReadOnly,
+					TTime(0),
+					CFileMan::ERecurse);		
+	}
+
+//This function prints out the recorded time in milliseconds of aTime.
+EXPORT_C void RecordPerformanceTimingL(TUint32 aTime)
+	{
+	TInt freq = 0;
+	TInt Err = HAL::Get(HAL::EFastCounterFrequency, freq);
+	if(Err != KErrNone)
+	{
+		RDebug::Print(_L("HAL error <%d>\r\n"), Err);
+	}
+	const TInt KMicroSecIn1Sec = 1000000;
+	const TInt KMsIn1Sec = 1000;
+
+	double v = ((double)aTime * KMicroSecIn1Sec) / (double)freq; TInt v2 = (TInt)v;
+	RDebug::Print(_L("####Execution time: %d ms\r\n"), v2 / KMsIn1Sec);
+	}
+
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+//Test macroes and functions
+
+EXPORT_C void CheckL(RTest& aTest, TInt aValue, TInt aLine)
+	{
+	if (!aValue)
+		{
+		CleanupCDriveL();
+		aTest(EFalse, aLine);
+		}
+	}
+EXPORT_C void CheckL(RTest& aTest, TInt aValue, TInt aExpected, TInt aLine)
+	{
+	if (aValue != aExpected)
+		{
+		RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"),
+					  aExpected, aValue);
+		CleanupCDriveL();
+		aTest(EFalse, aLine);
+		}
+	}
+
+/**
+ *Retrieves transaction state of the session.
+*/
+EXPORT_C TInt TransactionState(CRepository* aRep)
+	{
+	return (static_cast<CClientRepository*>(aRep))->TransactionState();
+	}
+
+/**
+ *Sends EGetSetParameters to server.
+*/
+EXPORT_C TInt SetGetParameters(const TIpcArgs& CONDITIONAL_PARAM(aArgs))
+	{
+#if defined(__CENTREP_SERVER_PERFTEST__) || defined(__CENTREP_SERVER_MEMTEST__) || defined(__CENTREP_SERVER_CACHETEST__)
+	RRepositorySession session;
+	TInt ret = session.Connect();
+	if (ret == KErrNone)
+		{
+		ret = session.SendReceive(EGetSetParameters, aArgs);
+		session.Close();
+		}
+	return ret;
+#else
+	return KErrNotSupported;
+#endif
+	}