Workaround for Bug 3854 - featuremgr bld.inf no longer exports features.dat for emulator
// 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:
// t_oomcenrep.cpp
//
//
#include "t_cenrep_helper.h"
#include <e32test.h>
#include <f32file.h>
#include <utf.h>
#include "srvsess.h"
#include "sessmgr.h"
#include "srvres.h"
#include "srvreqs.h"
#include "cachemgr.h"
#include "clientrequest.h"
#include "install.h"
#include <bautils.h>
LOCAL_D RFs TheFs;
LOCAL_D RTest TheTest (_L ("t_oomcenrep.exe"));
#ifdef __SECURE_DATA__
_LIT(KInstallDirFile, "c:\\private\\10202BE9\\persists\\installdir.bin");
_LIT(KPersistsFile, "c:\\private\\10202BE9\\persists\\11111111.cre");
_LIT(KInstallPersistsFile, "c:\\private\\10202BE9\\persists\\11111110.cre");
_LIT(KPersistsFileNoUpgrade, "c:\\private\\10202BE9\\bur\\11111111.crn");
_LIT(KPersistsFileUpgraded, "c:\\private\\10202BE9\\bur\\11111111.cru");
_LIT(KRomUpgradeRev1File, "z:\\private\\10202BE9\\11111111.txu");
_LIT(KRomUpgradeRev2File, "z:\\private\\10202BE9\\11111112.txu");
_LIT(KUpgradeFile, "c:\\private\\10202BE9\\11111111.txt");
_LIT(KInstallOnlyFile, "z:\\private\\10202BE9\\11111110.cri");
_LIT(KInstallOnlyUpgradeFile, "z:\\private\\10202BE9\\11111110.cru");
_LIT(KInstallFile, "c:\\private\\10202BE9\\11111110.cre");
#else
_LIT(KPersistsFiles, "c:\\system\\data\\cenrep\\persists\\*.*");
#endif
//Test repositories Uid
const TUid KTestRepositoryUid={0x11111111};
const TUid KCorruptRepositoryUid={0xBADBADBB};
static TUid KCurrentTestUid;
///////////////////////////////////////////////////////////////////////////////////////
//Test macroses and functions
LOCAL_C void CheckL(TInt aValue, TInt aLine)
{
if(!aValue)
{
RDebug::Print(_L("Error\r\n"));
CleanupCDriveL();
TheTest(EFalse, aLine);
}
}
LOCAL_C void CheckL(TInt aValue, TInt aExpected, TInt aLine)
{
if(aValue != aExpected)
{
RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue);
CleanupCDriveL();
TheTest(EFalse, aLine);
}
}
#define TESTL(arg) ::CheckL((arg), __LINE__)
#define TEST2L(aValue, aExpected) ::CheckL(aValue, aExpected, __LINE__)
#define TESTKErrNoneL(aValue) ::CheckL(aValue,0,__LINE__);
/////////////////////////////////////////////////////////////////////////////////////////
class CenrepSrvOOMTest :public CBase
{
public:
void GetL();
void FindL();
void ResetL();
void NotifyL();
void SetL();
void CreateL();
void DeleteL();
void MoveL();
CenrepSrvOOMTest();
~CenrepSrvOOMTest();
static CenrepSrvOOMTest* NewL();
#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS
void DoHeapRepositoryContentCheckL();
#endif
private:
void ConstructL();
public:
CServerRepository* iServerRepo;
CSessionNotifier* iSessionNotif;
};
//////////////////////////////////////////////////////////////////////////////////////////////////
class CenrepSwiOOMTest :public CBase
{
public:
void UpgradeROMRev1L(TBool aIsSetup);
void UpgradeROMRev2L(TBool aIsSetup);
void UninstallROMUpgradeL(TBool aIsSetup);
void InstallL(TBool aIsSetup);
void UpgradeInstallL(TBool aIsSetup);
void UninstallL(TBool aIsSetup);
CenrepSwiOOMTest();
~CenrepSwiOOMTest();
static CenrepSwiOOMTest* NewL();
private:
void ConstructL();
CCentRepSWIWatcher* iSwiWatcher;
public:
};
//////////////////////////////////////////////////////////////////////////////////////////////////
CenrepSrvOOMTest::CenrepSrvOOMTest(){}
CenrepSrvOOMTest::~CenrepSrvOOMTest()
{
if (iServerRepo)
{
if (iSessionNotif)
{
iServerRepo->Close();
}
delete iServerRepo;
}
if (iSessionNotif)
delete iSessionNotif;
// Cache must be disabled here. Otherwise, if any idle repositories exists, they will
// still be open (have their pointers in the iOpenRepositories list) and the list will leak.
TServerResources::iCacheManager->DisableCache();
TServerResources::iObserver->CloseiOpenRepositories();
}
CenrepSrvOOMTest* CenrepSrvOOMTest::NewL()
{
CenrepSrvOOMTest* self=new (ELeave)CenrepSrvOOMTest;
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(self);
return self;
}
void CenrepSrvOOMTest::ConstructL()
{
iServerRepo=new (ELeave)CServerRepository();
iSessionNotif=new (ELeave) CSessionNotifier();
iServerRepo->OpenL(KCurrentTestUid,*iSessionNotif);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
CenrepSwiOOMTest::CenrepSwiOOMTest(){}
CenrepSwiOOMTest::~CenrepSwiOOMTest()
{
delete iSwiWatcher;
}
CenrepSwiOOMTest* CenrepSwiOOMTest::NewL()
{
CenrepSwiOOMTest* self=new (ELeave)CenrepSwiOOMTest;
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(self);
return self;
}
void CenrepSwiOOMTest::ConstructL()
{
iSwiWatcher = CCentRepSWIWatcher::NewL(TServerResources::iFs);
}
//Getting various information and security policy from the repository
//TInt CServerRepository::Get(TUint32 aId,T& aVal)
//TServerSetting* CServerRepository::GetSetting(TUint32 aId)
void CenrepSrvOOMTest::GetL()
{
TInt err=KErrNone;
TInt keyInt=0;
TServerSetting* srvsetting;
//----------Getting the TInt(1-15)-----------------------------
for (TInt i=1;i<=15;i++)
{
err=iServerRepo->Get(i,keyInt);
//Remember the policy check is done at the session level
TESTKErrNoneL(err);
TESTL(i==keyInt);
srvsetting=iServerRepo->GetSetting(i);
TESTL(srvsetting->Key()==static_cast<TUint32>(i));
}
//---------Getting the TReal(16-19)---------------------------
TReal keyValue;
err=iServerRepo->Get(16,keyValue);
TESTKErrNoneL(err);
TESTL(keyValue==10.1010);
srvsetting=iServerRepo->GetSetting(16);
TESTL(srvsetting->Key()==16);
err=iServerRepo->Get(19,keyValue);
TESTKErrNoneL(err);
TESTL(keyValue==13.1313);
//----------Getting the String(20-23)-----------------------
TBuf8<50> keyString;
_LIT(KFourteen,"fourteen");
err=iServerRepo->Get(20,keyString);
TESTKErrNoneL(err);
//Even ascii(8 bytes) are stored as 16 bytes!!!
TPtr16 str16((TUint16*) keyString.Ptr(),keyString.Length()/2,keyString.Length()/2);
TESTL(str16.Compare(KFourteen)==0);
srvsetting=iServerRepo->GetSetting(20);
TESTL(srvsetting->Key()==20);
//---------Getting the String8(0x79)------------------------
TBuf8<50> keyString8;
_LIT8(KString8,"string8");
err=iServerRepo->Get(0x79,keyString8);
TESTKErrNoneL(err);
TESTL(keyString8.Compare(KString8)==0);
srvsetting=iServerRepo->GetSetting(0x79);
TESTL(srvsetting->Key()==0x79);
//---------Getting the binary(0x82)-------------------------
TBuf8<50> keyBinary;
_LIT8(KBinary8,"\x12\x34\xAB\xCD");
err=iServerRepo->Get(0x82,keyBinary);
TESTKErrNoneL(err);
//temporarily added to solve coverage problem in WINSCW
#ifdef __EPOC32__
TESTL(keyBinary.Compare(KBinary8)==0);
#endif
srvsetting=iServerRepo->GetSetting(0x82);
TESTL(srvsetting->Key()==0x82);
//----------Getting individual policy-----------------------
//Current Exe has caps AllFiles+WriteDeviceData+ReadDeviceData
RThread currentThread;
TSecurityPolicy secPolicy;
//default policy
secPolicy=iServerRepo->GetDefaultReadAccessPolicy();
TESTL(secPolicy.CheckPolicy(currentThread)==1);
secPolicy=iServerRepo->GetDefaultWriteAccessPolicy();
TESTL(secPolicy.CheckPolicy(currentThread)==1);
//check settings policies
//0x2 int 2 1 cap_rd=CommDD cap_wr=WriteDeviceData
//0x19 int 25 0 //defined in range policies with cap_rd=NetworkServices
secPolicy=iServerRepo->GetReadAccessPolicy(2);
TESTL(secPolicy.CheckPolicy(currentThread)==0);
secPolicy=iServerRepo->GetWriteAccessPolicy(2);
TESTL(secPolicy.CheckPolicy(currentThread)==1);
secPolicy=iServerRepo->GetReadAccessPolicy(25);
TESTL(secPolicy.CheckPolicy(currentThread)==0);
}
// now that write operations must be done in transactions, setting up this helper
// function to perform single Sets for the purpose of this test.
template<class T>
static TInt RepositorySingleSetL(CServerRepository& aRep, TUint32 aKey, const T& aValue)
{
aRep.StartTransaction(EConcurrentReadWriteTransaction);
aRep.CleanupCancelTransactionPushL();
aRep.TransactionSetL(aKey, aValue);
CleanupStack::Pop();
TUint32 keyInfo;
return User::LeaveIfError(aRep.CommitTransaction(keyInfo));
};
//Setting OOM testing
void CenrepSrvOOMTest::SetL()
{
TInt ret=KErrNone;
TInt intValue=0;
TReal realValue=0;
//---------------SetL-----------------------------------
//Setting an integer key
ret = RepositorySingleSetL(*iServerRepo, 0x60, 600);
TESTKErrNoneL(ret);
ret=iServerRepo->Get(0x60,intValue);
TESTL(intValue== 600);
//Setting a real key
ret = RepositorySingleSetL(*iServerRepo, 0x66, 99.99);
TESTKErrNoneL(ret);
ret=iServerRepo->Get(0x66,realValue);
TESTL(realValue==99.99);
//Setting a string key
//Even ascii(8 bytes) are stored as 16 bytes!!!
_LIT8(KString,"sixhundred");
TBuf8<50> stringChangeValue=KString();
ret = RepositorySingleSetL(*iServerRepo, 0x69, stringChangeValue);
TESTKErrNoneL(ret);
TBuf8<50> keyString;
ret=iServerRepo->Get(0x69,keyString);
TESTKErrNoneL(ret);
TESTL(keyString.Compare(KString)==0);
}
// now that write operations must be done in transactions, setting up this helper
// function to perform single Creates for the purpose of this test.
template<class T>
static TInt RepositorySingleCreateL(CServerRepository& aRep, TUint32 aKey, const T& aValue, TUint32* aMeta)
{
aRep.StartTransaction(EConcurrentReadWriteTransaction);
aRep.CleanupCancelTransactionPushL();
aRep.TransactionCreateL(aKey, aValue, aMeta);
CleanupStack::Pop();
TUint32 keyInfo;
return User::LeaveIfError(aRep.CommitTransaction(keyInfo));
};
void CenrepSrvOOMTest::CreateL()
{
TInt ret=KErrNone;
TInt intValue=0;
TReal realValue=0;
//--------------CreateL-----------------------------------
//Creating an integer key
TInt intRetValue;
intValue=9000;
RepositorySingleCreateL(*iServerRepo, 0x90, intValue, NULL);
TESTKErrNoneL(ret);
ret=iServerRepo->Get(0x90,intRetValue);
TESTKErrNoneL(ret);
TESTL(intRetValue==intValue);
//Creating a real key
TReal realRetValue;
realValue=33.3333;
RepositorySingleCreateL(*iServerRepo, 0x92, realValue, NULL);
TESTKErrNoneL(ret);
ret=iServerRepo->Get(0x92,realRetValue);
TESTKErrNoneL(ret);
TESTL(realValue==realRetValue);
//Creating a string key
_LIT8(KStringValue,"creatingkey");
TBuf8<50> stringCreateValue=KStringValue();
RepositorySingleCreateL(*iServerRepo, 0x93, stringCreateValue, NULL);
TESTKErrNoneL(ret);
}
// now that write operations must be done in transactions, setting up this helper
// function to perform single Creates for the purpose of this test.
static TInt RepositorySingleDeleteL(CServerRepository& aRep, TUint32 aKey)
{
aRep.StartTransaction(EConcurrentReadWriteTransaction);
aRep.CleanupCancelTransactionPushL();
aRep.TransactionDeleteL(aKey);
CleanupStack::Pop();
TUint32 keyInfo;
return User::LeaveIfError(aRep.CommitTransaction(keyInfo));
};
void CenrepSrvOOMTest::DeleteL()
{
TInt ret=KErrNone;
//--------------Delete-----------------------------------
//Find the settings 0x10A-0x10C to ensure it is still there
RSettingPointerArray matchingArray;
TUint32 partialId=0x100;
TUint32 idMask=0xFFFFFFF0;
ret=iServerRepo->FindSettings(partialId,idMask,matchingArray);
if (ret==KErrNoMemory)
{
matchingArray.Close();
User::LeaveNoMemory();
}
TESTKErrNoneL(ret);
TESTL(matchingArray.Count()==3);
matchingArray.Close();
//Deleting settings 0x10A to 0x10C
for (TInt i=0x10A;i<=0x10C;i++)
{
RepositorySingleDeleteL(*iServerRepo, i);
TESTKErrNoneL(ret);
}
//After deleting try to find the persistent settings again
ret=iServerRepo->FindSettings(partialId,idMask,matchingArray);
if (ret==KErrNoMemory)
{
matchingArray.Close();
User::LeaveNoMemory();
}
TESTKErrNoneL(ret);
TESTL(matchingArray.Count()==0);
matchingArray.Close();
//-------------DeleteRange---------------------------------
//Deleting settings 0x1 to 0xF
TClientRequest dummyrequest;
TUint32 errId=0;
partialId=0;
idMask=0xFFFFFFF0;
ret=iServerRepo->FindSettings(partialId,idMask,matchingArray);
if (ret==KErrNoMemory)
{
matchingArray.Close();
User::LeaveNoMemory();
}
TESTKErrNoneL(ret) ;
TESTL(matchingArray.Count()==15);
matchingArray.Close();
//Deleting settings using the DeleteRange
dummyrequest.SetParam(0,partialId);
dummyrequest.SetParam(1,idMask);
dummyrequest.SetPolicyCheck(ETrue);
// write operation must take place in a transaction
iServerRepo->StartTransaction(EConcurrentReadWriteTransaction);
iServerRepo->CleanupCancelTransactionPushL();
iServerRepo->TransactionDeleteRangeL(dummyrequest,errId);
CleanupStack::Pop();
TUint32 keyInfo;
User::LeaveIfError(iServerRepo->CommitTransaction(keyInfo));
//Now try to find the key being deleted
ret=iServerRepo->FindSettings(partialId,idMask,matchingArray);
if (ret==KErrNoMemory)
{
matchingArray.Close();
User::LeaveNoMemory();
}
TESTKErrNoneL(ret);
TESTL(matchingArray.Count()==0);
matchingArray.Close();
}
//Setting existing key value then follow by commit
void CenrepSrvOOMTest::MoveL()
{
RSettingPointerArray matchingArray;
TUint32 idMask=0xFFFFFFF0;
/*---------------MoveL-------------------------------------
TUint32 sourcePartialId = aMessage.Int0();
TUint32 targetPartialId = aMessage.Int1();
TUint32 idMask = aMessage.Int2();
*/
TClientRequest dummyrequest;
TUint32 errId=0;
TUint32 sourcePartialId=0x110;
TUint32 targetPartialId=0x120;
idMask=0xFFFFFFF0;
TKeyFilter srcKeyIdentifier = {sourcePartialId, idMask};
TPckg<TKeyFilter> pSrcIdentifier(srcKeyIdentifier);
TKeyFilter tgtKeyIdentifier = {targetPartialId, idMask};
TPckg<TKeyFilter> pTgtIdentifier(tgtKeyIdentifier);
//First check to ensure the target key before move does not exist
User::LeaveIfError(iServerRepo->FindSettings(targetPartialId,idMask,matchingArray));
TESTL(matchingArray.Count()==0);
matchingArray.Close();
//moving from 0x110(0x11B,0x11C,0x11E) to 0x120
dummyrequest.SetParam(0, &pSrcIdentifier);
dummyrequest.SetParam(1, &pTgtIdentifier);
dummyrequest.SetPolicyCheck(ETrue);
// write operation must take place in a transaction
iServerRepo->StartTransaction(EConcurrentReadWriteTransaction);
iServerRepo->CleanupCancelTransactionPushL();
iServerRepo->TransactionMoveL(dummyrequest,errId);
CleanupStack::Pop();
TUint32 keyInfo;
User::LeaveIfError(iServerRepo->CommitTransaction(keyInfo));
//Now try to find the key being moved
User::LeaveIfError(iServerRepo->FindSettings(targetPartialId,idMask,matchingArray));
TESTL(matchingArray.Count()==3);
matchingArray.Close();
}
//Finding keys from the settings
//TInt FindSettings(TUint32 aPartialId,TUint32 aIdMask,RSettingPointerArray& aMatches)
//Guarantees the heap free in aMatches if this function fail
void CenrepSrvOOMTest::FindL()
{
TInt ret=KErrNone;
RSettingPointerArray foundIdArray;
TUint32 partialId=0;
TUint32 idMask=0;
//-----------Finding settings array using partial id & mask------
//------------------Real type---------------------------------
//0x42,0x44,0x45,0x48
partialId=0x40;
idMask=0xFFFFFFF0;
User::LeaveIfError(iServerRepo->FindSettings(partialId,idMask,foundIdArray));
TESTKErrNoneL(ret);
TESTL(foundIdArray.Count()==4);
foundIdArray.Close();
//-----------------String type-------------------------------
//0x51,0x54,0x5B
partialId=0x50;
idMask=0xFFFFFFF0;
User::LeaveIfError(iServerRepo->FindSettings(partialId,idMask,foundIdArray));
TESTKErrNoneL(ret);
TESTL(foundIdArray.Count()==3);
foundIdArray.Close();
//--------------------Int type----------------------------------------------------
partialId=0x30;
idMask=0xFFFFFFF0;
//This should return only 0x30,0x34,0x35,0x39,0x3B( 5 items)
User::LeaveIfError(iServerRepo->FindSettings(partialId,idMask,foundIdArray));
TESTKErrNoneL(ret);
TESTL(foundIdArray.Count()==5);
//----------------Find comparison using EEqual & ENotEqual------------------------
TInt searchValue=100;
TClientRequest dummyrequest;
RArray<TUint32> idArray;
//Set the policycheck to always pass
dummyrequest.SetPolicyCheck(ETrue);
//Comparison using Equal
TRAP(ret,iServerRepo->FindCompareL(foundIdArray,searchValue,EEqual,idArray));
if (ret==KErrNoMemory)
{
//do not need to reset idArray as it is done inside the function itself when it returns not KErrNone
foundIdArray.Close();
User::LeaveNoMemory();
}
TESTL(idArray.Count()==2);
TESTL((idArray[0]==0x30 && idArray[1]==0x34) || (idArray[0]==0x34 && idArray[1]==0x30));
idArray.Close();
//Comparison using ENotEqual
TRAP(ret,iServerRepo->FindCompareL(foundIdArray,searchValue,ENotEqual,idArray));
if (ret==KErrNoMemory)
{
//do not need to reset idArray as it is done inside the function itself when it returns not KErrNone
foundIdArray.Close();
User::LeaveNoMemory();
}
TESTL(idArray.Count()==3);
idArray.Close();
foundIdArray.Close();
}
//Resetting settings
void CenrepSrvOOMTest::ResetL()
{
TInt ret=KErrNone;
TInt retValue=0;
TReal realValue=0;
//-------------Single key reset----------------------------
ret = RepositorySingleSetL(*iServerRepo, 1, 500);
TESTKErrNoneL(ret);
ret=iServerRepo->Get(1,retValue);
TESTL(retValue==500);
//Resetting individual settings
ret=iServerRepo->ResetL(1);
TESTKErrNoneL(ret);
//Check for value once being reset
ret=iServerRepo->Get(1,retValue);
TESTL(retValue==1);
//------------All keys reset------------------------------
ret = RepositorySingleSetL(*iServerRepo, 17, 3.1343424);
TESTKErrNoneL(ret);
//Reset all settings from Rom
User::LeaveIfError(iServerRepo->ResetAllL());
TESTKErrNoneL(ret);
//Check for value once all being reset
ret=iServerRepo->Get(17,realValue);
TESTL(realValue==11.1111);
}
void CenrepSrvOOMTest::NotifyL()
{
TInt err=KErrNone;
//addding individual requests
for (TInt i=0;i<10;i++)
{
TClientRequest dummyRequest;
User::LeaveIfError(iSessionNotif->AddRequest(i,dummyRequest));
}
//adding group requests
for (TInt i=0;i<10;i++)
{
TClientRequest dummyRequest;
TUint32 partialId=100*i;
TUint32 idMask=0xFFFFFFF0;
User::LeaveIfError(iSessionNotif->AddRequest(partialId,idMask,dummyRequest));
}
//cancelling individual requests
User::LeaveIfError(iSessionNotif->CancelRequest(5));
//Check to ensure that it has been deleted so calling cancel again will return KErrNotFound
err=iSessionNotif->CancelRequest(5);
TESTL(err==KErrNotFound);
//cancelling group requests
User::LeaveIfError(iSessionNotif->CancelRequest(500,0xFFFFFFF0));
err=iSessionNotif->CancelRequest(500,0xFFFFFF0);
TESTL(err==KErrNotFound);
//Finally cancel ALL requests
iSessionNotif->CancelAllRequests();
}
//Deletes the CServerRepository object properly
LOCAL_C void ReleaseRepository(TAny* aServerRepository)
{
CServerRepository* serverRepository = static_cast<CServerRepository*>(aServerRepository);
TServerResources::iCacheManager->DisableCache();
TServerResources::iObserver->CloseiOpenRepositories();
delete serverRepository;
TServerResources::iCacheManager->EnableCache();
}
//Opening a repository and closing the repository
LOCAL_C void CreateDeleteL(TBool /*aOOMMode*/)
{
CServerRepository* serverRepo=new (ELeave)CServerRepository();
TCleanupItem cleanupItem(&ReleaseRepository, serverRepo);
CleanupStack::PushL(cleanupItem);
CSessionNotifier* sessNotif=new (ELeave)CSessionNotifier();
CleanupStack::PushL(sessNotif);
// test access to a valid repository
serverRepo->OpenL(KCurrentTestUid,*sessNotif);
serverRepo->Close();
CleanupStack::PopAndDestroy(sessNotif);
CleanupStack::PopAndDestroy(1);
}
LOCAL_C void CreateDeleteCorruptL(TBool /*aOOMMode*/)
{
CServerRepository* serverRepo=new (ELeave)CServerRepository();
TCleanupItem cleanupItem(&ReleaseRepository, serverRepo);
CleanupStack::PushL(cleanupItem);
CSessionNotifier* sessNotif=new (ELeave)CSessionNotifier();
CleanupStack::PushL(sessNotif);
// test access to a corrupt repository
// trap KErrCorrupt
TRAPD(err, serverRepo->OpenL(KCorruptRepositoryUid,*sessNotif));
// leave if not KErrCorrupt
User::LeaveIfError((err == KErrCorrupt) ? KErrNone : err);
serverRepo->Close();
CleanupStack::PopAndDestroy(sessNotif);
CleanupStack::PopAndDestroy(1);
}
void CenrepSwiOOMTest::UpgradeROMRev1L(TBool aIsSetup)
{
if(aIsSetup)
{
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Copy rev 1 file into install dir & Reset read-only bit
User::LeaveIfError(fm->Copy(KRomUpgradeRev1File, KUpgradeFile));
User::LeaveIfError(fm->Attribs(KUpgradeFile,0,KEntryAttReadOnly,TTime(0)));
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
iSwiWatcher->HandleSWIEventL(ESASwisInstall | ESASwisStatusSuccess);
}
}
LOCAL_C void ModifyTimeStampL(RFs &fs, TDesC *fileName, TTime aTime)
{
// Reset read-only bit
User::LeaveIfError(fs.SetAtt(*fileName, 0, KEntryAttReadOnly));
TTimeIntervalHours interval(1);
TTime newTime=aTime+interval;
User::LeaveIfError(fs.SetModified(*fileName, newTime));
}
void CenrepSwiOOMTest::UpgradeROMRev2L(TBool aIsSetup)
{
if(aIsSetup)
{
// Set up rev 1
UpgradeROMRev1L(ETrue);
UpgradeROMRev1L(EFalse);
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Get modification time
TTime time;
TBuf<50> fileName(KUpgradeFile);
fs.Modified(fileName, time);
// Copy rev2 file into install dir & Reset read-only bit
User::LeaveIfError(fm->Copy(KRomUpgradeRev2File, KUpgradeFile));
User::LeaveIfError(fm->Attribs(KUpgradeFile,0,KEntryAttReadOnly,TTime(0)));
// Modify timestamp to cause upgrade
ModifyTimeStampL(fs,&fileName, time);
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
iSwiWatcher->HandleSWIEventL(ESASwisInstall | ESASwisStatusSuccess);
}
}
void CenrepSwiOOMTest::UninstallROMUpgradeL(TBool aIsSetup)
{
if(aIsSetup)
{
// Install rev 2
UpgradeROMRev2L(ETrue);
UpgradeROMRev2L(EFalse);
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Delete file from install dir
User::LeaveIfError(fm->Attribs(KUpgradeFile,0,KEntryAttReadOnly,TTime(0)));
TInt err=fs.Delete(KUpgradeFile);
if((err!=KErrNone)&&(err!=KErrNotFound))
User::Leave(err);
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
iSwiWatcher->HandleSWIEventL(ESASwisUninstall | ESASwisStatusSuccess);
}
}
void CenrepSwiOOMTest::InstallL(TBool aIsSetup)
{
if(aIsSetup)
{
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Copy rev 1 file into install dir & Reset read-only bit
User::LeaveIfError(fm->Copy(KInstallOnlyFile, KInstallFile));
User::LeaveIfError(fm->Attribs(KInstallFile,0,KEntryAttReadOnly,TTime(0)));
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
iSwiWatcher->HandleSWIEventL(ESASwisInstall | ESASwisStatusSuccess);
}
}
void CenrepSwiOOMTest::UpgradeInstallL(TBool aIsSetup)
{
if(aIsSetup)
{
// Install file
InstallL(ETrue);
InstallL(EFalse);
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Get modification time
TTime time;
TBuf<50> fileName(KInstallFile);
fs.Modified(fileName, time);
// Copy upgrade file into install dir & Reset read-only bit
User::LeaveIfError(fm->Copy(KInstallOnlyUpgradeFile, KInstallFile));
User::LeaveIfError(fm->Attribs(KInstallFile,0,KEntryAttReadOnly,TTime(0)));
// Modify timestamp to cause upgrade
ModifyTimeStampL(fs,&fileName, time);
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
iSwiWatcher->HandleSWIEventL(ESASwisInstall | ESASwisStatusSuccess);
}
}
void CenrepSwiOOMTest::UninstallL(TBool aIsSetup)
{
if(aIsSetup)
{
// Install upgrade
UpgradeInstallL(ETrue);
UpgradeInstallL(EFalse);
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Delete file from install dir
User::LeaveIfError(fm->Attribs(KInstallFile,0,KEntryAttReadOnly,TTime(0)));
TInt err=fs.Delete(KInstallFile);
if((err!=KErrNone)&&(err!=KErrNotFound))
User::Leave(err);
// Create a cre persists file, doesn't matter what's in it, it should be deleted
User::LeaveIfError(fm->Copy(KPersistsFileUpgraded, KInstallPersistsFile));
User::LeaveIfError(fm->Attribs(KInstallPersistsFile,0,KEntryAttReadOnly,TTime(0)));
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
iSwiWatcher->HandleSWIEventL(ESASwisUninstall | ESASwisStatusSuccess);
}
}
LOCAL_C void StartupUpgradeL(TBool aIsSetup)
{
if(aIsSetup)
{
// Set up files for test
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Clean out files
TInt err=fs.Delete(KInstallDirFile);
if((err!=KErrNone)&&(err!=KErrNotFound))
User::Leave(err);
// Cause directory listing with no files to be written
CCentRepSWIWatcher* swiWatcher = CCentRepSWIWatcher::NewL(TServerResources::iFs);
delete swiWatcher;
User::LeaveIfError(fm->Copy(KPersistsFileNoUpgrade, KPersistsFile));
User::LeaveIfError(fm->Attribs(KPersistsFile,0,KEntryAttReadOnly,TTime(0)));
User::LeaveIfError(fm->Copy(KRomUpgradeRev1File, KUpgradeFile));
User::LeaveIfError(fm->Attribs(KUpgradeFile,0,KEntryAttReadOnly,TTime(0)));
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
CCentRepSWIWatcher* swiWatcher = CCentRepSWIWatcher::NewL(TServerResources::iFs);
delete swiWatcher;
}
}
LOCAL_C void StartupDowngradeL(TBool aIsSetup)
{
if(aIsSetup)
{
StartupUpgradeL(ETrue);
StartupUpgradeL(EFalse);
// Set up files for test
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
TInt err=fs.Delete(KUpgradeFile);
if((err!=KErrNone)&&(err!=KErrNotFound))
User::Leave(err);
CleanupStack::PopAndDestroy(); // fs
}
else
{
CCentRepSWIWatcher* swiWatcher = CCentRepSWIWatcher::NewL(TServerResources::iFs);
delete swiWatcher;
}
}
LOCAL_C void StartupUninstallL(TBool aIsSetup)
{
if(aIsSetup)
{
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
// Copy rev 1 file into install dir & Reset read-only bit
User::LeaveIfError(fm->Copy(KInstallOnlyFile, KInstallFile));
User::LeaveIfError(fm->Attribs(KInstallFile,0,KEntryAttReadOnly,TTime(0)));
// Cause directory listing to be written and file to be installed
CCentRepSWIWatcher* swiWatcher = CCentRepSWIWatcher::NewL(TServerResources::iFs);
delete swiWatcher;
// Create a persists file that will be deleted
User::LeaveIfError(fm->Copy(KPersistsFileUpgraded, KInstallPersistsFile));
User::LeaveIfError(fm->Attribs(KInstallPersistsFile,0,KEntryAttReadOnly,TTime(0)));
TInt err=fs.Delete(KInstallFile);
if((err!=KErrNone)&&(err!=KErrNotFound))
User::Leave(err);
CleanupStack::PopAndDestroy(2); // fs and fm
}
else
{
CCentRepSWIWatcher* swiWatcher = CCentRepSWIWatcher::NewL(TServerResources::iFs);
delete swiWatcher;
}
}
// Type definition for pointer to function
// Used for functions that can't use CenrepSrvOOMTest::ConstructL
typedef void (*FuncPtrL) (TBool);
/**
Wrapper function to call all OOM test functions
@param testFuncL pointer to OOM test function
@param aTestDesc test function name
*/
LOCAL_C void DoOOMNoServReposL( FuncPtrL atestFuncL, const TDesC& aTestDesc, TBool aOOMMode)
{
TheTest.Next(aTestDesc);
TInt err;
TInt tryCount = 0;
do
{
__UHEAP_MARK;
//Initializing the server resources
TServerResources::InitialiseL ();
//Clear any files in the persist directory
CleanupCDriveL();
// find out the number of open handles
TInt startProcessHandleCount;
TInt startThreadHandleCount;
RThread().HandleCount(startProcessHandleCount, startThreadHandleCount);
(*atestFuncL)(ETrue);
if (aOOMMode)
__UHEAP_SETFAIL(RHeap::EDeterministic, ++tryCount);
TRAP(err, (*atestFuncL)(EFalse));
if (err!=KErrNoMemory)
TESTKErrNoneL(err);
if (aOOMMode)
__UHEAP_SETFAIL(RHeap::ENone, 0);
// check that no handles have leaked
TInt endProcessHandleCount;
TInt endThreadHandleCount;
RThread().HandleCount(endProcessHandleCount, endThreadHandleCount);
TEST2L(startProcessHandleCount, endProcessHandleCount);
TEST2L(startThreadHandleCount, endThreadHandleCount);
//Freeing the server resources
TServerResources::Close();
__UHEAP_MARKEND;
} while(err == KErrNoMemory);
TESTKErrNoneL(err);
if (aOOMMode)
TheTest.Printf(_L("- server succeeded at heap failure rate of %i\n"), tryCount);
}
// Type definition for pointer to member function.
// Used in calling the CRegistryDataTest member function for testing.
typedef void (CenrepSrvOOMTest::*ClassFuncPtrL) (void);
/**
Wrapper function to call all OOM test functions
@param testFuncL pointer to OOM test function
@param aTestDesc test function name
@param aOOMMode to enable/disable the OOM environment
*/
LOCAL_C void DoOOMTestL(ClassFuncPtrL testFuncL, const TDesC& aTestDesc,TBool aOOMMode)
{
TheTest.Next(aTestDesc);
TInt err=KErrNone;
TInt tryCount = 0;
do
{
__UHEAP_MARK;
//Initializing the server resources
TServerResources::InitialiseL ();
//Clear any files in the persist directory
CleanupCDriveL();
CenrepSrvOOMTest* theTest=CenrepSrvOOMTest::NewL();
CleanupStack::PushL(theTest);
TInt startProcessHandleCount;
TInt startThreadHandleCount;
RThread().HandleCount(startProcessHandleCount, startThreadHandleCount);
if (aOOMMode)
__UHEAP_SETFAIL(RHeap::EDeterministic, ++tryCount);
TRAP(err, (theTest->*testFuncL)());
if (aOOMMode)
__UHEAP_SETFAIL(RHeap::ENone, 0);
if (err!=KErrNoMemory)
TESTKErrNoneL(err);
CleanupStack::PopAndDestroy(theTest);
// check that no handles have leaked
TInt endProcessHandleCount;
TInt endThreadHandleCount;
RThread().HandleCount(endProcessHandleCount, endThreadHandleCount);
TEST2L(startProcessHandleCount, endProcessHandleCount);
TEST2L(startThreadHandleCount, endThreadHandleCount);
//Freeing the server resources
TServerResources::Close();
__UHEAP_MARKEND;
} while(err == KErrNoMemory);
TESTKErrNoneL(err);
if (aOOMMode)
TheTest.Printf(_L("- server succeeded at heap failure rate of %i\n"), tryCount);
}
// Type definition for pointer to member function.
// Used in calling the CRegistryDataTest member function for testing.
typedef void (CenrepSwiOOMTest::*ClassSwiFuncPtrL) (TBool);
/**
Wrapper function to call all OOM test functions
@param testFuncL pointer to OOM test function
@param aTestDesc test function name
@param aOOMMode to enable/disable the OOM environment
*/
LOCAL_C void DoOOMSwiTestL(ClassSwiFuncPtrL aTestFuncL, const TDesC& aTestDesc,TBool aOOMMode)
{
TheTest.Next(aTestDesc);
TInt err=KErrNone;
TInt tryCount = 0;
do
{
__UHEAP_MARK;
//Initializing the server resources
TServerResources::InitialiseL ();
//Clear any files in the persist directory
CleanupCDriveL();
TInt startProcessHandleCount;
TInt startThreadHandleCount;
RThread().HandleCount(startProcessHandleCount, startThreadHandleCount);
CenrepSwiOOMTest* theTest=CenrepSwiOOMTest::NewL();
CleanupStack::PushL(theTest);
// Set up test
(theTest->*aTestFuncL)(ETrue);
if (aOOMMode)
__UHEAP_SETFAIL(RHeap::EDeterministic, ++tryCount);
TRAP(err, (theTest->*aTestFuncL)(EFalse));
if (aOOMMode)
__UHEAP_SETFAIL(RHeap::ENone, 0);
if (err!=KErrNoMemory)
TESTKErrNoneL(err);
CleanupStack::PopAndDestroy(theTest);
// check that no handles have leaked
TInt endProcessHandleCount;
TInt endThreadHandleCount;
RThread().HandleCount(endProcessHandleCount, endThreadHandleCount);
TEST2L(startProcessHandleCount, endProcessHandleCount);
TEST2L(startThreadHandleCount, endThreadHandleCount);
//Freeing the server resources
TServerResources::Close();
__UHEAP_MARKEND;
} while(err == KErrNoMemory);
TESTKErrNoneL(err);
if (aOOMMode)
TheTest.Printf(_L("- server succeeded at heap failure rate of %i\n"), tryCount);
}
#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS
void CenrepSrvOOMTest::DoHeapRepositoryContentCheckL()
{
CServerRepository* srv=iServerRepo;
//check setting and its meta
TServerSetting* setting=NULL;
setting=srv->GetSetting(1);
TESTL(setting->iKey==1);
TESTL(setting->iMeta==0x80000010);
//points to global default policy here
TESTL(setting->iAccessPolicy->LowKey()==KUnspecifiedKey);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==1);
setting=srv->GetSetting(2);
TESTL(setting->iKey==2);
TESTL(setting->iMeta==0xA0000010);
//points to global default policy here
TESTL(setting->iAccessPolicy->LowKey()==KUnspecifiedKey);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==1);
setting=srv->GetSetting(3);
TESTL(setting->iKey==3);
TESTL(setting->iMeta==0x800000FF);
//points to global default policy here
TESTL(setting->iAccessPolicy->LowKey()==KUnspecifiedKey);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==1);
setting=srv->GetSetting(4);
TESTL(setting->iKey==4);
TESTL(setting->iMeta==0x80000010);
TESTL(setting->iAccessPolicy->LowKey()==4);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==0);
setting=srv->GetSetting(5);
TESTL(setting->iKey==5);
TESTL(setting->iMeta==0xC0000063);
//points to global default policy here
TESTL(setting->iAccessPolicy->LowKey()==KUnspecifiedKey);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==1);
setting=srv->GetSetting(6);
TESTL(setting->iKey==6);
TESTL(setting->iMeta==0x90000010);
TESTL(setting->iAccessPolicy->LowKey()==6);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==0);
setting=srv->GetSetting(7);
TESTL(setting->iKey==7);
TESTL(setting->iMeta==0x80000010);
TESTL(setting->iAccessPolicy->LowKey()==7);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==0);
setting=srv->GetSetting(9);
TESTL(setting->iKey==9);
TESTL(setting->iMeta==0x80000010);
TESTL(setting->iAccessPolicy->LowKey()==KUnspecifiedKey);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==1);
setting=srv->GetSetting(10);
TESTL(setting->iKey==10);
TESTL(setting->iMeta==0x80000010);
TESTL(setting->iAccessPolicy->LowKey()==10);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==0);
setting=srv->GetSetting(300);
TESTL(setting->iKey==300);
TESTL(setting->iMeta==0x900003E7);
TESTL(setting->iAccessPolicy->LowKey()==KUnspecifiedKey);
TESTL(setting->iAccessPolicy->HighKey()==1);
TESTL(setting->iAccessPolicy->KeyMask()==1);
}
LOCAL_C void DoAdditionalCheckingL()
{
TServerResources::InitialiseL ();
CenrepSrvOOMTest* test=CenrepSrvOOMTest::NewL();
CleanupStack::PushL(test);
test->DoHeapRepositoryContentCheckL();
CleanupStack::PopAndDestroy();
TServerResources::Close();
}
/**
@SYMTestCaseID PDS-CENTRALREPOSITORY-UT-4050
@SYMTestCaseDesc Verifying that CRE generated will have the latest CRE version which is currently 2
@SYMTestPriority High
@SYMTestActions Validating that CRE files generated with post PREQ2112 code will always contain version 2.
The unit test will load a txt repository and then modify some settings so that it gets persisted
in the persists directory. The test then read the cre files to verify that the version persisted
is the latest which is 2.
@SYMTestExpectedResults The correct file version is returned.
@SYMREQ REQ11282
*/
LOCAL_C void DoPersistedVersionCheckingL()
{
TheTest.Next (_L (" @SYMTestCaseID:PDS-CENTRALREPOSITORY-UT-4050 Verifying CRE generated will always be version 2 "));
TServerResources::InitialiseL ();
const TUid KTestUid={0x88880000};
KCurrentTestUid=KTestUid;
CenrepSrvOOMTest* test=CenrepSrvOOMTest::NewL();
CleanupStack::PushL(test);
//persist immediately
test->iServerRepo->CommitChangesL();
//now check the version of the CRE file
CHeapRepository* heap=CHeapRepository::NewL(KTestUid);
CleanupStack::PushL(heap);
TUint8 creVersion;
heap->CreateRepositoryFromCreFileL(TServerResources::iFs,_L("c:\\private\\10202be9\\persists\\88880000.cre"),creVersion);
TESTL(creVersion==KPersistFormatSupportsIndMetaIndicator);
CleanupStack::PopAndDestroy(2,test);
TServerResources::Close();
}
/**
@SYMTestCaseID PDS-CENTRALREPOSITORY-UT-4051
@SYMTestCaseDesc Server side OOM loading of a multiple repository files
@SYMTestPriority High
@SYMTestActions Create the server class CServerRepository and used it to load the multi ROFS keyspace.
Test are repeated for the following keyspace combination such as TXT/TXT, CRE/TXT or TXT/CRE and CRE/CRE.
Test will also verify the resulting merged settings which includes checking
individual metadata bits and security policy bits
@SYMTestExpectedResults Server loading of the multi rofs keypsace should not fail and leak memory under OOM condition.
@SYMREQ REQ11282
*/
LOCAL_C void DoOOMMultiRofsTestL()
{
TheTest.Next (_L (" @SYMTestCaseID:PDS-CENTRALREPOSITORY-UT-4051 CENREPSRV MultiROFS OOM Test "));
const TUid KMultiRofsRepositoryUid1={0xFFFF0000};
const TUid KMultiRofsRepositoryUid2={0xEEEE0000};
const TUid KMultiRofsRepositoryUid3={0xDDDD0000};
const TUid KMultiRofsRepositoryUid4={0xCCCC0000};
//First Testuid=KMultiRofsRepositoryUid
//Testing the OOM of multi rofs processing
KCurrentTestUid=KMultiRofsRepositoryUid1;
DoOOMNoServReposL(&CreateDeleteL, _L("Create Delete OOM Multi ROFS Test"),ETrue);
DoAdditionalCheckingL();
KCurrentTestUid=KMultiRofsRepositoryUid2;
DoOOMNoServReposL(&CreateDeleteL, _L("Create Delete OOM Multi ROFS Test"),ETrue);
DoAdditionalCheckingL();
KCurrentTestUid=KMultiRofsRepositoryUid3;
DoOOMNoServReposL(&CreateDeleteL, _L("Create Delete OOM Multi ROFS Test"),ETrue);
DoAdditionalCheckingL();
KCurrentTestUid=KMultiRofsRepositoryUid4;
DoOOMNoServReposL(&CreateDeleteL, _L("Create Delete OOM Multi ROFS Test"),ETrue);
DoAdditionalCheckingL();
}
#endif
LOCAL_C void DoOOMTestsL()
{
TheTest.Next (_L (" @SYMTestCaseID:SYSLIB-CENTRALREPOSITORY-LEGACY-T_OOMCENREP-0001 Starting CENREPSRV OOM Test "));
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CFileMan* fm = CFileMan::NewL(fs);
CleanupStack::PushL(fm);
//Clear any files in the persist directory
CleanupCDriveL();
//First Testuid=KTestRepositoryUid
KCurrentTestUid=KTestRepositoryUid;
DoOOMTestL(&CenrepSrvOOMTest::GetL,_L("Get Basic Test"),EFalse);
DoOOMTestL(&CenrepSrvOOMTest::FindL,_L("FindL Basic Test"),EFalse);
DoOOMTestL(&CenrepSrvOOMTest::NotifyL,_L("NotifyL Basic Test"),EFalse);
DoOOMTestL(&CenrepSrvOOMTest::ResetL,_L("ResetL Basic Test"),EFalse);
// Save file without timestamp
User::LeaveIfError(fm->Copy(KPersistsFile, KPersistsFileNoUpgrade));
DoOOMTestL(&CenrepSrvOOMTest::SetL,_L("SetL Basic Test"),EFalse);
DoOOMTestL(&CenrepSrvOOMTest::CreateL,_L("CreateL Basic Test"),EFalse);
DoOOMTestL(&CenrepSrvOOMTest::DeleteL,_L("DeleteL Basic Test"),EFalse);
DoOOMTestL(&CenrepSrvOOMTest::MoveL,_L("MoveL Basic Test"),EFalse);
//Clear any files in the persist directory
CleanupCDriveL();
// Simulate response to SWI rom-upgrade and downgrade events
DoOOMSwiTestL(&CenrepSwiOOMTest::UpgradeROMRev1L,_L("SwiUpgradeROMRev1L Basic Test"),EFalse);
// Save file with timestamp
User::LeaveIfError(fm->Copy(KPersistsFile, KPersistsFileUpgraded));
DoOOMSwiTestL(&CenrepSwiOOMTest::UpgradeROMRev2L,_L("SwiUpgradeROMRev2L Basic Test"),EFalse);
DoOOMSwiTestL(&CenrepSwiOOMTest::UninstallROMUpgradeL,_L("SwiUninstallROMUpgradeL Basic Test"),EFalse);
// Simulate response to SWI new rep install/uninstall event events
DoOOMSwiTestL(&CenrepSwiOOMTest::InstallL,_L("SwiInstallL Basic Test"),EFalse);
DoOOMSwiTestL(&CenrepSwiOOMTest::UpgradeInstallL,_L("SwiUpgradeInstallL Basic Test"),EFalse);
DoOOMSwiTestL(&CenrepSwiOOMTest::UninstallL,_L("SwiUninstallL Basic Test"),EFalse);
// Simulate SWI events before server startup
DoOOMNoServReposL(&StartupUpgradeL, _L("Startup Upgrade Basic Test"), EFalse);
DoOOMNoServReposL(&StartupDowngradeL, _L("Startup Downgrade Basic Test"), EFalse);
DoOOMNoServReposL(&StartupUninstallL,_L("Startup Uninstall Basic Test"), EFalse);
//OOM Test aOOMMode=ETrue
DoOOMNoServReposL(&CreateDeleteL, _L("Create Delete OOM Test"),ETrue);
DoOOMNoServReposL(&CreateDeleteCorruptL, _L("Create Delete Corrupt OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::GetL,_L("Get OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::FindL,_L("FindL OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::NotifyL,_L("NotifyL OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::ResetL,_L("ResetL OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::SetL,_L("SetL OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::CreateL,_L("CreateL OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::DeleteL,_L("DeleteL OOM Test"),ETrue);
DoOOMTestL(&CenrepSrvOOMTest::MoveL,_L("MoveL OOM Test"),ETrue);
//Clear any files in the persist directory
CleanupCDriveL();
DoOOMSwiTestL(&CenrepSwiOOMTest::UpgradeROMRev1L,_L("SwiUpgradeROMRev1L OOM Test"),ETrue);
DoOOMSwiTestL(&CenrepSwiOOMTest::UpgradeROMRev2L,_L("SwiUpgradeROMRev2L OOM Test"),ETrue);
DoOOMSwiTestL(&CenrepSwiOOMTest::UninstallROMUpgradeL,_L("SwiUninstallROMUpgradeL OOM Test"),ETrue);
DoOOMSwiTestL(&CenrepSwiOOMTest::InstallL,_L("SwiInstallL OOM Test"),ETrue);
DoOOMSwiTestL(&CenrepSwiOOMTest::UpgradeInstallL,_L("SwiUpgradeInstallL OOM Test"),ETrue);
DoOOMSwiTestL(&CenrepSwiOOMTest::UninstallL,_L("SwiUninstallL OOM Test"),ETrue);
DoOOMNoServReposL(&StartupUpgradeL, _L("Startup Upgrade OOM Test"), ETrue);
DoOOMNoServReposL(&StartupDowngradeL, _L("Startup Downgrade OOM Test"), ETrue);
DoOOMNoServReposL(&StartupUninstallL, _L("Startup Uninstall OOM Test"), ETrue);
#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS
DoPersistedVersionCheckingL();
DoOOMMultiRofsTestL();
#endif
// Delete files from bur dir
User::LeaveIfError(fm->Attribs(KPersistsFileNoUpgrade,0,KEntryAttReadOnly,TTime(0)));
TInt err=fs.Delete(KPersistsFileNoUpgrade);
if((err!=KErrNone)&&(err!=KErrNotFound))
User::Leave(err);
User::LeaveIfError(fm->Attribs(KPersistsFileUpgraded,0,KEntryAttReadOnly,TTime(0)));
err=fs.Delete(KPersistsFileUpgraded);
if((err!=KErrNone)&&(err!=KErrNotFound))
User::Leave(err);
//Clear any files in the persist directory
CleanupCDriveL();
CleanupStack::PopAndDestroy (2); // fs and fm
}
LOCAL_C void MainL()
{
TheTest.Title ();
TheTest.Start (_L("OOM Cenrepserv Test"));
CActiveScheduler* scheduler = new(ELeave)CActiveScheduler;
CActiveScheduler::Install(scheduler);
DoOOMTestsL();
//Clear any files in the persist directory
CleanupCDriveL();
TheFs.Close ();
delete scheduler;
TheTest.End ();
TheTest.Close ();
}
TInt E32Main ()
{
__UHEAP_MARK;
CTrapCleanup* cleanup = CTrapCleanup::New();
if(!cleanup)
return KErrNoMemory;
TRAPD(err, MainL());
if (err != KErrNone)
User::Panic(_L("Testing failed: "), err);
delete cleanup;
__UHEAP_MARKEND;
return KErrNone;
}