persistentstorage/centralrepository/test/t_cenrep_pma_bur.cpp
changeset 55 44f437012c90
--- /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 <e32test.h>
+#include <f32file.h>
+#include <badesca.h>
+#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;
+	}
+