installationservices/swcomponentregistry/test/tscr/source/componentquerysteps.cpp
changeset 24 84a16765cd86
child 25 98b66e4fb0be
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/source/componentquerysteps.cpp	Fri Mar 19 09:33:35 2010 +0200
@@ -0,0 +1,658 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* Implements test steps for component query APIs in the SCR
+*
+*/
+
+
+#include "componentquerysteps.h"
+#include <scs/cleanuputils.h>
+#include <usif/scr/screntries.h>
+#include "tscrdefs.h"
+
+using namespace Usif;
+
+// -----------CScrGetComponentStep-----------------
+
+CScrGetComponentStep::CScrGetComponentStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentStep::ImplTestStepL()
+	{
+	CComponentEntry *componentExpected = GetComponentEntryFromConfigLC();	
+	CComponentEntry *componentRetrieved = CComponentEntry::NewL();
+	CleanupStack::PushL(componentRetrieved);
+	
+	TLanguage locale = KUnspecifiedLocale;
+	GetLocaleFromConfigL(KComponentLocaleName, locale);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	if(!iScrSession.GetComponentL(componentExpected->ComponentId(), *componentRetrieved, locale))
+		{
+		ERR_PRINTF2(_L("Component Id %d doesn't exist!."), componentExpected->ComponentId());
+		User::Leave(KErrNotFound);
+		}
+	
+	TTime time = componentRetrieved->InstallTimeL(); // For the sake of coverage print install time
+	INFO_PRINTF2(_L("Component InstallTime is %ld."), componentRetrieved->InstallTimeL().Int64());
+	
+	if(*componentExpected != *componentRetrieved)
+		{
+		ERR_PRINTF5(_L("Returned component entry values(%S,%S) don't match with the expected ones(%S,%S)."),&componentRetrieved->Name(),&componentRetrieved->Vendor(),&componentExpected->Name(),&componentExpected->Vendor());
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(2, componentExpected); // componentExpected, componentRetrieved
+	}
+
+void CScrGetComponentStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentLocalizedStep-----------------
+
+CScrGetComponentLocalizedStep::CScrGetComponentLocalizedStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+    {
+    }
+
+void CScrGetComponentLocalizedStep::ImplTestStepPreambleL()
+    {
+    CScrTestStep::ImplTestStepPreambleL();
+    }
+
+void CScrGetComponentLocalizedStep::ImplTestStepL()
+    {
+    TComponentId expectedComponentId = GetComponentIdL();
+    RPointerArray<Usif::CLocalizableComponentInfo> compLocalizedInfoArrayExpected;
+    CleanupResetAndDestroyPushL(compLocalizedInfoArrayExpected);
+    
+    GetLocalisedComponentsFromConfigL(compLocalizedInfoArrayExpected);
+    
+    RPointerArray<Usif::CLocalizableComponentInfo> compLocalizedInfoArrayRetrieved;
+    // Start timer just before invocation of SCR API
+    StartTimer();
+    CleanupResetAndDestroyPushL(compLocalizedInfoArrayRetrieved);
+    iScrSession.GetComponentLocalizedInfoL(expectedComponentId, compLocalizedInfoArrayRetrieved);
+    if(compLocalizedInfoArrayExpected.Count()!=compLocalizedInfoArrayRetrieved.Count())
+        {
+        ERR_PRINTF1(_L("Returned component entry count doesnt match the expected count")); 
+        SetTestStepResult(EFail);
+        }
+    else
+        {
+        for(TInt i=0;i<compLocalizedInfoArrayExpected.Count();i++)
+            {
+            if((compLocalizedInfoArrayExpected[i]->NameL()!=compLocalizedInfoArrayExpected[i]->NameL())||(compLocalizedInfoArrayExpected[i]->VendorL()!=compLocalizedInfoArrayExpected[i]->VendorL())||(compLocalizedInfoArrayExpected[i]->Locale()!=compLocalizedInfoArrayExpected[i]->Locale()))
+                {
+                ERR_PRINTF7(_L("Returned component entry values(%S,%S,%d) don't match with the expected ones(%S,%S,%d)."),&(compLocalizedInfoArrayRetrieved[i]->NameL()),&(compLocalizedInfoArrayRetrieved[i]->VendorL()),compLocalizedInfoArrayRetrieved[i]->Locale(),&(compLocalizedInfoArrayExpected[i]->NameL()),&(compLocalizedInfoArrayExpected[i]->VendorL()),compLocalizedInfoArrayExpected[i]->Locale());
+                SetTestStepResult(EFail);
+                }
+            }
+        }           
+        
+    CleanupStack::Pop(2,&compLocalizedInfoArrayExpected); //compLocalizedInfoArrayExpected ,compLocalizedInfoArrayRetrieved 
+    compLocalizedInfoArrayRetrieved.ResetAndDestroy();
+    compLocalizedInfoArrayExpected.ResetAndDestroy();
+    }
+    
+void CScrGetComponentLocalizedStep::ImplTestStepPostambleL()
+    {
+    CScrTestStep::ImplTestStepPostambleL();
+    }
+
+
+
+// -----------CScrGetFilePropertiesStep-----------------
+
+CScrGetFilePropertiesStep::CScrGetFilePropertiesStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetFilePropertiesStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetFilePropertiesStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);	
+	
+	RPointerArray<CPropertyEntry> expectedFileProperties;
+	CleanupResetAndDestroyPushL(expectedFileProperties);	
+	GetPropertiesFromConfigL(expectedFileProperties);	
+
+	RPointerArray<CPropertyEntry> retrievedFileProperties;
+	CleanupResetAndDestroyPushL(retrievedFileProperties);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	iScrSession.GetFilePropertiesL(componentId, fileName, retrievedFileProperties);
+	
+	if(!ComparePropertiesL(expectedFileProperties, retrievedFileProperties))
+		{
+		ERR_PRINTF1(_L("Retrieved file properties don't match with the expected ones."));
+		SetTestStepResult(EFail);	
+		}
+	CleanupStack::PopAndDestroy(2, &expectedFileProperties); // expectedFileProperties, retrievedFileProperties
+	}
+
+void CScrGetFilePropertiesStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+
+// -----------CScrGetFilePropertyStep-----------------
+
+CScrGetFilePropertyStep::CScrGetFilePropertyStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetFilePropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetFilePropertyStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	
+	CPropertyEntry *expectedProperty = GetPropertyFromConfigLC(ETrue);
+	
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);	
+	// Start timer just before invocation of SCR API
+	StartTimer();	
+	CPropertyEntry *retrievedProperty = iScrSession.GetFilePropertyL(componentId, fileName, expectedProperty->PropertyName());
+	
+	if(!retrievedProperty)
+		{
+		ERR_PRINTF1(_L("The requested file property couldn't be found!"));
+		User::Leave(KErrNotFound);
+		}
+	CleanupStack::PushL(retrievedProperty);
+		
+	if(*retrievedProperty != *expectedProperty)
+		{
+		ERR_PRINTF3(_L("The retrieved property(%S) doesn't match with the expected one(%S)."), &retrievedProperty->PropertyName(), &expectedProperty->PropertyName());
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(2, expectedProperty); // expectedProperty, retrievedProperty
+	}
+
+void CScrGetFilePropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetFileComponentsStep-----------------
+
+CScrGetFileComponentsStep::CScrGetFileComponentsStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetFileComponentsStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetFileComponentsStep::ImplTestStepL()
+	{
+	TPtrC fileName;
+	GetFileNameFromConfigL(fileName);
+
+	RArray<TComponentId> expectedComponents;
+	CleanupClosePushL(expectedComponents);
+	GetComponentIdsFromConfigL(expectedComponents);
+	
+	RArray<TComponentId> foundComponents;
+	CleanupClosePushL(foundComponents);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	iScrSession.GetComponentsL(fileName, foundComponents);
+	
+	CompareComponentIdsL(foundComponents, expectedComponents);
+	
+	CleanupStack::PopAndDestroy(2, &expectedComponents); // expectedComponents, foundComponents
+	}
+
+void CScrGetFileComponentsStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentPropertyStep-----------------
+
+CScrGetComponentPropertyStep::CScrGetComponentPropertyStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentPropertyStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentPropertyStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	
+	CPropertyEntry *expectedProperty = GetPropertyFromConfigLC(ETrue,0,ETrue);
+	CPropertyEntry *retrievedProperty(0);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	switch(expectedProperty->PropertyType())
+		{
+		case CPropertyEntry::EBinaryProperty:
+		case CPropertyEntry::EIntProperty:
+			{
+			retrievedProperty = iScrSession.GetComponentPropertyL(componentId, expectedProperty->PropertyName());
+			break;
+			}
+		case CPropertyEntry::ELocalizedProperty:
+			{
+			CLocalizablePropertyEntry *locProperty = static_cast<CLocalizablePropertyEntry*>(expectedProperty);
+			retrievedProperty = iScrSession.GetComponentPropertyL(componentId, locProperty->PropertyName(), locProperty->LocaleL());
+			break;
+			}
+		}// switch
+	
+	if(!retrievedProperty)
+		{
+		ERR_PRINTF1(_L("The requested component property couldn't be found!"));
+		User::Leave(KErrNotFound);
+		}
+	CleanupStack::PushL(retrievedProperty);
+	
+	if(*retrievedProperty != *expectedProperty)
+		{
+		ERR_PRINTF3(_L("The retrieved property(%S) doesn't match with the expected one(%S)."), &retrievedProperty->PropertyName(), &expectedProperty->PropertyName());
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(2, expectedProperty); // expectedProperty, retrievedProperty
+	}
+
+void CScrGetComponentPropertyStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+
+// -----------CScrGetComponentPropertiesStep-----------------
+
+CScrGetComponentPropertiesStep::CScrGetComponentPropertiesStep(CScrTestServer& aParent) : CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentPropertiesStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentPropertiesStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+
+	RPointerArray<CPropertyEntry> expectedProperties;
+	CleanupResetAndDestroyPushL(expectedProperties);	
+	GetPropertiesFromConfigL(expectedProperties, ETrue); // ETrue means that localizable properties are supported
+	
+	RPointerArray<CPropertyEntry> foundProperties;
+	CleanupResetAndDestroyPushL(foundProperties);
+	
+	TLanguage locale = static_cast<TLanguage>(0);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	if(GetLocaleFromConfigL(locale))
+		{
+		iScrSession.GetComponentPropertiesL(componentId, foundProperties, locale);
+		}
+	else
+		{
+		iScrSession.GetComponentPropertiesL(componentId, foundProperties);
+		}
+
+	if (!ComparePropertiesL(foundProperties, expectedProperties))
+		{
+		ERR_PRINTF1(_L("The retrieved properties are different from the expected ones."));
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(2, &expectedProperties); // expectedProperties, foundProperties	
+	}
+
+void CScrGetComponentPropertiesStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentIdsStep-----------------
+
+CScrGetComponentIdsStep::CScrGetComponentIdsStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentIdsStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentIdsStep::ImplTestStepL()
+	{
+	CComponentFilter *componentFilter = ReadComponentFilterFromConfigLC();
+	INFO_PRINTF1(_L("Read component filter from configuration"));
+	
+	// Get expected list of component ids from config
+	RArray<TComponentId> expectedComponentIds;
+	CleanupClosePushL(expectedComponentIds);
+	GetComponentIdsFromConfigL(expectedComponentIds);
+			
+	RArray<TComponentId> foundComponentIds;
+	CleanupClosePushL(foundComponentIds);
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	iScrSession.GetComponentIdsL(foundComponentIds, componentFilter);
+		
+	CompareComponentIdsL(foundComponentIds, expectedComponentIds);
+		
+	CleanupStack::PopAndDestroy(3, componentFilter); // foundComponentIds, expectedComponentIds, componentFilter
+	}
+
+void CScrGetComponentIdsStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentFilesCountStep-----------------
+
+CScrGetComponentFilesCountStep::CScrGetComponentFilesCountStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentFilesCountStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentFilesCountStep::ImplTestStepL()
+	{
+	TComponentId componentId = GetComponentIdL();
+	TInt expectedFilesCountTmp(0);
+	if (!GetIntFromConfig(ConfigSection(), _L("ExpectedFilesCount"), expectedFilesCountTmp))
+		{
+		PrintErrorL(_L("ExpectedFilesCount property was not found!"), KErrNotFound);
+		}
+	if (expectedFilesCountTmp < 0)
+		{
+		PrintErrorL(_L("ExpectedFilesCount is negative!"), KErrArgument);
+		}
+	TUint expectedFilesCount = static_cast<TUint>(expectedFilesCountTmp);
+	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	TUint foundFilesCount = iScrSession.GetComponentFilesCountL(componentId);
+	
+	if (foundFilesCount != expectedFilesCount)
+		{
+		ERR_PRINTF4(_L("The retrieved files count is different from the expected one for component %d. Expected %d, but found %d"),
+				componentId, foundFilesCount, expectedFilesCount);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrGetComponentFilesCountStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+
+// -----------CScrGetComponentWithGlobalIdStep-----------------
+
+CScrGetComponentWithGlobalIdStep::CScrGetComponentWithGlobalIdStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentWithGlobalIdStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentWithGlobalIdStep::ImplTestStepL()
+	{
+	CComponentEntry *componentExpected = GetComponentEntryFromConfigLC();	
+	TLanguage locale = KUnspecifiedLocale;
+	GetLocaleFromConfigL(KComponentLocaleName, locale);
+	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	CComponentEntry *componentRetrieved = iScrSession.GetComponentL(componentExpected->GlobalId(), componentExpected->SoftwareType());
+	if(!componentRetrieved)
+		{
+		INFO_PRINTF3(_L("Global Id (%S,%S) doesn't exist!."), &componentExpected->GlobalId(), &componentExpected->SoftwareType());
+		User::Leave(KErrNotFound);
+		}
+	CleanupStack::PushL(componentRetrieved);
+	
+	if(*componentExpected != *componentRetrieved)
+		{
+		ERR_PRINTF5(_L("Returned component entry values(%S,%S) don't match with the expected ones(%S,%S)."),&componentRetrieved->Name(),&componentRetrieved->Vendor(),&componentExpected->Name(),&componentExpected->Vendor());
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(2, componentExpected); // componentExpected, componentRetrieved
+	}
+
+void CScrGetComponentWithGlobalIdStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetComponentIdStep-----------------
+
+CScrGetComponentIdStep::CScrGetComponentIdStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetComponentIdStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetComponentIdStep::ImplTestStepL()
+	{
+	CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+	TComponentId expectedCompId = GetComponentIdL();
+	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	TComponentId retrievedCompId = iScrSession.GetComponentIdL(globalId->GlobalIdName(), globalId->SoftwareTypeName());
+	CleanupStack::PopAndDestroy(globalId);
+	
+	if(expectedCompId != retrievedCompId)
+		{
+		ERR_PRINTF3(_L("Returned component id (%d) don't match with the expected one(%d)."), retrievedCompId, expectedCompId);
+		SetTestStepResult(EFail);
+		}
+	}
+
+void CScrGetComponentIdStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrGetGlobalIdListStep-----------------
+
+CScrGetGlobalIdListStep::CScrGetGlobalIdListStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrGetGlobalIdListStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrGetGlobalIdListStep::ImplTestStepL()
+	{
+	CGlobalComponentId *globalId = GetGlobalComponentIdLC();
+	
+	TBool noVerification = EFalse;
+	GetBoolFromConfig(ConfigSection(), _L("NoVerification"), noVerification);
+	RPointerArray<CVersionedComponentId> expectedVerCompIdList;
+	CleanupResetAndDestroyPushL(expectedVerCompIdList);
+	if(!noVerification)
+		{
+		GetExpectedVersionedComponentIdListL(expectedVerCompIdList);
+		}
+	
+	RPointerArray<CVersionedComponentId> retrievedVerCompIdList;
+	CleanupResetAndDestroyPushL(retrievedVerCompIdList);
+	
+	TPtrC globalIdType;
+	if (!GetStringFromConfig(ConfigSection(), KGlobalIdType, globalIdType))
+		PrintErrorL(_L("Global Id Type was not found!"), KErrNotFound);
+
+	// Start timer just before invocation of SCR API
+    StartTimer();
+	
+	if(!globalIdType.CompareF(_L("Dependant")))
+		iScrSession.GetSupplierComponentsL(*globalId, retrievedVerCompIdList);
+	else if (!globalIdType.CompareF(_L("Supplier")))
+		iScrSession.GetDependantComponentsL(*globalId, retrievedVerCompIdList);
+	else {
+		 ERR_PRINTF1(_L("The global Id type couldn't be identified."));
+		 SetTestStepResult(EFail);
+		 }
+	
+	if (!noVerification && !CompareVersionedComponentIdsL(retrievedVerCompIdList, expectedVerCompIdList))
+		{
+		ERR_PRINTF1(_L("The retrieved global Ids are different from the expected ones."));
+		SetTestStepResult(EFail);
+		}
+
+	CleanupStack::PopAndDestroy(3, globalId); // depGlobalId, expectedGlobalIdList, retrievedGlobalIdList
+	}
+
+void CScrGetGlobalIdListStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+	
+// -----------CScrValuesNegativeStep-----------------
+CScrValuesNegativeStep::CScrValuesNegativeStep(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	}
+
+void CScrValuesNegativeStep::ImplTestStepPreambleL()
+	{
+	CScrTestStep::ImplTestStepPreambleL();
+	}
+
+void CScrValuesNegativeStep::ImplTestStepL()
+	{
+	CComponentFilter* componentFilter = CComponentFilter::NewLC();
+	TDriveList driveList;
+	// Set an empty drive list
+	componentFilter->SetInstalledDrivesL(driveList);
+	RSoftwareComponentRegistryView subSession;
+	CleanupClosePushL(subSession);	
+	// Start timer just before invocation of SCR API
+	StartTimer();
+	TRAPD(err, subSession.OpenViewL(iScrSession, componentFilter));	
+	if (err != KErrArgument)
+		{
+		ERR_PRINTF2(_L("Received incorrect error %d on missing param in filter."), err);
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(2, componentFilter); // subSession
+	}
+
+void CScrValuesNegativeStep::ImplTestStepPostambleL()
+	{
+	CScrTestStep::ImplTestStepPostambleL();
+	}
+
+// -----------CScrOom-----------------
+SCROufOfMemory::SCROufOfMemory(CScrTestServer& aParent)	: CScrTestStep(aParent)
+	{
+	iFailRate = 0;
+	}
+
+void SCROufOfMemory::ImplTestStepPreambleL()
+	{
+	}
+
+void SCROufOfMemory::ImplTestStepL()
+	{
+	TInt i = 5000;
+	while(i--)
+		{
+		TRAPD(err, ExecuteL());
+		if (err == KErrNone)
+			{
+			}
+		}
+	}
+
+void SCROufOfMemory::ImplTestStepPostambleL()
+	{
+	}
+
+void SCROufOfMemory::ExecuteL()
+	{
+	// Connect to the SCR server
+	RSoftwareComponentRegistry scr;
+	TInt err = scr.Connect();
+	if (err != KErrNone)
+		{
+		INFO_PRINTF1(_L("Failed to connect to the SCR server"));
+		User::Leave(err);
+		}
+	CleanupClosePushL(scr);
+
+	scr.SetServerHeapFail(++iFailRate);
+	INFO_PRINTF2(_L("HeapFail set for %d allocation"),iFailRate);
+	
+	// Create an SCR view
+	RSoftwareComponentRegistryView scrView;
+	scrView.OpenViewL(scr);
+	CleanupClosePushL(scrView);
+
+	// Iterate over the matching components
+	CComponentEntry* entry = CComponentEntry::NewLC();
+	while (scrView.NextComponentL(*entry))
+	    {
+		RPointerArray<Usif::CLocalizableComponentInfo> compLocalizedInfoArray;
+		CleanupResetAndDestroyPushL(compLocalizedInfoArray);
+		scr.GetComponentLocalizedInfoL(entry->ComponentId(), compLocalizedInfoArray);
+		CleanupStack::Pop(&compLocalizedInfoArray);
+		compLocalizedInfoArray.ResetAndDestroy();
+	    }
+	
+	scrView.Close();
+	// Disconnect from the SCR server and cleanup the entry
+	scr.ResetServerHeapFail();
+	CleanupStack::PopAndDestroy();
+	CleanupStack::Pop();
+	CleanupStack::PopAndDestroy();
+	}