diff -r 7d4490026038 -r 44f437012c90 persistentstorage/centralrepository/test/t_cenrep_pma_bur.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/centralrepository/test/t_cenrep_pma_bur.cpp Tue Oct 19 16:26:13 2010 +0100 @@ -0,0 +1,262 @@ +// Copyright (c) 2010 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 +#include +#include +#include "srvrepos_noc.h" +#include "srvres.h" +#include "cachemgr.h" +#include "backup.h" +#include "t_cenrep_helper.h" + +RTest TheTest(_L("t_cenrep_pma_bur.exe")); + +enum FileSet + { + EOriginals, + EChanged, + ERemoved, + EDEF058823L + }; + +CRepositoryBackupClient* backupClient; + +CActiveScheduler* globalAS; + +const TUid KUidPmaBackupTestRepository1 = { 0xf1000201 }; +const TUid KUidPmaBackupTestRepository2 = { 0xf1000202 }; +const TUid KUidPmaBackupTestRepository3 = { 0xf1000203 }; +const TUid KUidPmaBackupTestRepository4 = { 0xf1000204 }; +const TUid KUidPmaBackupTestRepository5 = { 0xf1000205 }; + +/////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////// +//Test macros and functions + +LOCAL_C void DeleteFilesL() + { + _LIT( KOldInstallFiles, "c:\\private\\102081E4\\*.*" ); + _LIT( KOldPersistFiles, "c:\\private\\102081E4\\persists\\*.*" ); + _LIT( KOldPMAFiles, "c:\\private\\102081E4\\persists\\protected\\*.*" ); + + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + CFileMan* fm = CFileMan::NewL( fs ); + CleanupStack::PushL( fm ); + + TInt r = KErrNone; + + r = fm->Attribs( KOldInstallFiles, KEntryAttArchive, KEntryAttReadOnly, TTime( 0 ), CFileMan::ERecurse ); + if ( r != KErrNone && r != KErrNotFound && r != KErrPathNotFound ) + User::Leave(r); + r = fm->Delete( KOldInstallFiles ); + if ( r != KErrNone && r != KErrNotFound && r != KErrPathNotFound ) + User::Leave(r); + + r = fm->Attribs( KOldPersistFiles, KEntryAttArchive, KEntryAttReadOnly, TTime( 0 ), CFileMan::ERecurse ); + if ( r != KErrNone && r != KErrNotFound && r != KErrPathNotFound ) + User::Leave(r); + r = fm->Delete( KOldPersistFiles ); + if ( r != KErrNone && r != KErrNotFound && r != KErrPathNotFound ) + User::Leave(r); + + r = fm->Attribs( KOldPMAFiles, KEntryAttArchive, KEntryAttReadOnly, TTime( 0 ), CFileMan::ERecurse ); + if ( r != KErrNone && r != KErrNotFound && r != KErrPathNotFound ) + User::Leave(r); + r = fm->Delete( KOldPMAFiles ); + if ( r != KErrNone && r != KErrNotFound && r != KErrPathNotFound ) + User::Leave(r); + + CleanupStack::PopAndDestroy( 2 ); //fs and fm + } + +LOCAL_C void Check( TInt aValue, TInt aLine ) + { + if ( !aValue ) + { + TRAPD(err, DeleteFilesL()); + if (err != KErrNone) + { + RDebug::Print( _L( "*** DeleteFilesL also failed with error %d expecting KErrNone\r\n"), err ); + } + TheTest( EFalse, aLine ); + } + } + +LOCAL_C void Check( TInt aValue, TInt aExpected, TInt aLine ) + { + if ( aValue != aExpected ) + { + RDebug::Print( _L( "*** Expected error: %d, got: %d\r\n"), aExpected, aValue ); + TRAPD(err, DeleteFilesL()); + if (err != KErrNone) + { + RDebug::Print( _L( "*** DeleteFilesL also failed with error %d expecting KErrNone\r\n"), err ); + } + TheTest( EFalse, aLine ); + } + } + +#define TEST(arg) ::Check((arg), __LINE__) +#define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__) + +/////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////// + +static void CloseTServerResources(TAny*) + { + TServerResources::Close(); + } + +LOCAL_C void InstallFileSetL() + { + //There shouldn't be PMA keyspace in PMA drive that doesn't have its ROM equivalent + _LIT(KPmaCreReposInPMADriveSrc, "z:\\private\\10202BE9\\f1000202.pma"); + _LIT(KPmaCreReposInPMADriveTgt, "c:\\private\\102081E4\\persists\\protected\\f1000202.cre"); + _LIT(KPmaCreReposInPersistDirSrc, "z:\\private\\10202BE9\\f1000203.crp"); + _LIT(KPmaCreReposInPersistDirTgt, "c:\\private\\102081E4\\persists\\f1000203.cre"); + _LIT(KPmaTxtReposInInstallDirSrc, "z:\\private\\10202BE9\\f1000204.txi"); + _LIT(KPmaTxtReposInInstallDirTgt, "c:\\private\\102081E4\\f1000204.txt"); + _LIT(KPmaCreReposInInstallDirSrc, "z:\\private\\10202BE9\\f1000205.cri"); + _LIT(KPmaCreReposInInstallDirTgt, "c:\\private\\102081E4\\f1000205.cre"); + + DeleteFilesL(); + // When the contents of the repository directories change, the cached iOwnerIdLookUpTable becomes invalid + TServerResources::iOwnerIdLookUpTable.Reset(); + + RFs rfs; + User::LeaveIfError(rfs.Connect()); + CleanupClosePushL(rfs); + + CFileMan* fm = CFileMan::NewL( rfs ); + CleanupStack::PushL( fm ); + + CopyTestFilesL(*fm, KPmaCreReposInPMADriveSrc, KPmaCreReposInPMADriveTgt); + CopyTestFilesL(*fm, KPmaCreReposInPersistDirSrc, KPmaCreReposInPersistDirTgt); + CopyTestFilesL(*fm, KPmaTxtReposInInstallDirSrc, KPmaTxtReposInInstallDirTgt); + CopyTestFilesL(*fm, KPmaCreReposInInstallDirSrc, KPmaCreReposInInstallDirTgt); + + + CleanupStack::PopAndDestroy(2, &rfs); + } + +LOCAL_C void CleanupActiveScheduler(TAny* aShc) + { + CActiveScheduler::Replace( globalAS ); + delete aShc; + } + +LOCAL_C void BackupRepositoryL( ) + { + backupClient->CompleteOwnerIdLookupTableL(); + TEST2(TServerResources::FindOwnerIdLookupMapping(KUidPmaBackupTestRepository1.iUid), KErrNotFound); + TEST2(TServerResources::FindOwnerIdLookupMapping(KUidPmaBackupTestRepository2.iUid), KErrNotFound); + TEST2(TServerResources::FindOwnerIdLookupMapping(KUidPmaBackupTestRepository3.iUid), KErrNotFound); + TEST2(TServerResources::FindOwnerIdLookupMapping(KUidPmaBackupTestRepository4.iUid), KErrNotFound); + TEST2(TServerResources::FindOwnerIdLookupMapping(KUidPmaBackupTestRepository5.iUid), KErrNotFound); + } + +/** +@SYMTestCaseID SYSLIB-CENTRALREPOSITORY-UT-4174 +@SYMTestCaseDesc Verify iOwnerIdLookupTable does not contain PMA keyspaces before backup. +@SYMTestPriority High +@SYMTestActions Copy PMA keyspaces to PMA drive, persists and install directory. + Call CompleteOwnerIdLookupTableL(). + Call FindOwnerIdLookupMapping to verify iOwnerIdLookTable does not contain PMA keyspaces. +@SYMTestExpectedResults iOwnerIdLookTable list does not contain PMA keyspaces. +@SYMREQ 42876 +*/ +LOCAL_C void OwnerIdLookupTableTestsL() + { + TheTest.Next( _L( " @SYMTestCaseID:PDS-CENTRALREPOSITORY-UT-4174 OwnerIdLookupTable test on PMA repository " ) ); + + // create and install the active scheduler we need + CActiveScheduler* s = new(ELeave) CActiveScheduler; + + TCleanupItem tc(CleanupActiveScheduler, s); + CleanupStack::PushL(tc); + + CActiveScheduler::Replace( s ); + + backupClient = CRepositoryBackupClient::NewLC( TServerResources::iFs ); + TEST( backupClient != 0 ); + + // These tests don't test Backup&Restore functionality over Secure Backup Server so cache management + // is not possible. For that reason, cache is disabled manually. + TServerResources::iCacheManager->DisableCache(); + + // Install known files + InstallFileSetL(); + BackupRepositoryL( ); + + DeleteFilesL(); + CleanupStack::PopAndDestroy( backupClient ); + // Cleanup the scheduler + CleanupStack::PopAndDestroy( s ); + } + +LOCAL_C void DoTestsL() + { + TServerResources::InitialiseL(); + + CleanupStack::PushL(TCleanupItem(CloseTServerResources, 0)); + TheTest.Next( _L( "OwnerIdLookupTable tests" ) ); + OwnerIdLookupTableTestsL(); + + CleanupStack::Pop(1); //TServerResources + TServerResources::Close(); + } + + +LOCAL_C void MainL() + { + // create and install the active scheduler we need for the cache manager in TServerResources::InitialiseL + globalAS=new(ELeave) CActiveScheduler; + CleanupStack::PushL(globalAS); + CActiveScheduler::Install(globalAS); + + DoTestsL(); + DeleteFilesL(); + + CleanupStack::PopAndDestroy(globalAS); + + } + +TInt E32Main() + { + TheTest.Title (); + TheTest.Start( _L( "PMA Backup and restore tests" ) ); + + CTrapCleanup* cleanup = CTrapCleanup::New(); + TheTest(cleanup != NULL); + + __UHEAP_MARK; + + TRAPD(err, MainL()); + TEST2(err, KErrNone); + + __UHEAP_MARKEND; + + TheTest.End (); + TheTest.Close (); + + delete cleanup; + + User::Heap().Check(); + return KErrNone; + } +