applayerpluginsandutils/bookmarksupport/test/tsecuritytests.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/bookmarksupport/test/tsecuritytests.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,346 @@
+// 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 "testutils.h"
+#include <bookmarkdatabase.h>
+
+_LIT(KFilename, "tsecuritytests.cpp");
+_LIT(KTitle, "Bookmark Security Unit Tests");
+
+_LIT(KTxtFolder1, "securityTEST Folder 1");
+
+_LIT ( KMyFolder, "MyFolder" );
+_LIT ( KMyNewFolder, "MyNewFolder" );
+_LIT ( KMyFolderDesc, "Testing last modified time in bookmark." );
+_LIT ( KMyFolderNewDesc, "1: Testing last modified time in bookmark." );
+
+const TInt KGeneralDelay = 2*1000*1000;
+
+LOCAL_D RTest gTest(KTitle());
+
+LOCAL_D CTrapCleanup* gTheTrapCleanup;
+LOCAL_D CTestWrapper* gTestWrapper;
+
+const TInt KTestCleanupStack=0x500;
+_LIT_SECURE_ID(KAppId,0x00001234);
+
+// Old bookmark database files path. These files will be copied into the 
+// c drive bookmarks private folder. This files will be used for testing 
+// missing last-modified time.
+_LIT ( KSourcePath1, "z:\\bookmarks\\testdata\\10205af8.cre" );
+_LIT ( KDestinationPath1, "c:\\private\\10202BE9\\persists\\10205af8.cre" );
+_LIT ( KSourcePath2, "z:\\bookmarks\\testdata\\10205af9.cre" );
+_LIT ( KDestinationPath2, "c:\\private\\10202BE9\\persists\\10205af9.cre" );
+_LIT ( KSourcePath3, "z:\\bookmarks\\testdata\\10205afa.cre" );
+_LIT ( KDestinationPath3, "c:\\private\\10202BE9\\persists\\10205afa.cre" );
+_LIT ( KSourcePath4, "z:\\bookmarks\\testdata\\10205afb.cre" );
+_LIT ( KDestinationPath4, "c:\\private\\10202BE9\\persists\\10205afb.cre" );
+_LIT ( KUninstallDbFiles, "c:\\private\\10202BE9\\persists\\*.cre" );
+
+
+LOCAL_C void DoOldDbCopyL ()
+	{
+	gTestWrapper->SetFile(KFilename);
+	gTestWrapper->Next(_L("*** Copying old database files ***"));
+	RFs fs;
+	User::LeaveIfError ( fs.Connect () );		
+	CFileMan* fileMan = CFileMan::NewL ( fs );
+	CleanupStack::PushL ( fileMan );
+	fs.MkDirAll ( KDestinationPath1 );
+	
+	User::LeaveIfError ( fileMan->Copy ( KSourcePath1, KDestinationPath1 ) );	
+	User::LeaveIfError ( fileMan->Copy ( KSourcePath2, KDestinationPath2 ) );
+	User::LeaveIfError ( fileMan->Copy ( KSourcePath3, KDestinationPath3 ) );	
+	User::LeaveIfError ( fileMan->Copy ( KSourcePath4, KDestinationPath4 ) );
+			
+	CleanupStack::PopAndDestroy ( fileMan );
+	fs.Close ();		
+	}
+
+ 
+LOCAL_C void DoOldDbRemoveL ()
+	{
+	gTestWrapper->Next(_L("*** Removing old database files ***"));
+	RFs fs;
+	User::LeaveIfError ( fs.Connect () );		
+	
+	CFileMan* fileMan = CFileMan::NewL ( fs );
+	CleanupStack::PushL ( fileMan );
+	
+	// Ensure all files are deletable.
+	fileMan->Attribs ( KUninstallDbFiles, KEntryAttArchive, KEntryAttReadOnly, TTime(0), CFileMan::ERecurse );
+	
+	// Delete the files.
+	fileMan->Delete ( KUninstallDbFiles );
+	
+	// Time for uninstall.	
+	User::After ( KGeneralDelay );
+	
+	CleanupStack::PopAndDestroy ( fileMan );
+	fs.Close ();		
+	}
+
+LOCAL_C void DoSecurityTestL()
+	{
+	gTestWrapper->Next(_L("*** Security tests ***"));
+	
+	RBkDatabase database1;
+	database1.OpenL(Bookmark::EVisibilityManager);
+	CleanupClosePushL(database1);
+	gTestWrapper->Next(_L("[Security tests] Check Public & Writable"));
+	
+	RBkFolder folder = database1.CreateFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+	Bookmark::TItemId folderId = folder.Id();
+	CleanupStack::PopAndDestroy(&folder);
+	database1.CommitL();
+	RBkFolder folder1 = database1.OpenFolderL(KTxtFolder1);
+	CleanupClosePushL(folder1);
+	folder1.SetOwnerL(0x00112233);
+	RBkBookmark bookmark1 = database1.CreateBookmarkL(&folder1);
+	CleanupClosePushL(bookmark1);
+	Bookmark::TItemId bookmarkId = bookmark1.Id();
+	CleanupStack::PopAndDestroy(&bookmark1);
+	CleanupStack::PopAndDestroy(&folder1);
+	database1.CommitL();
+	CleanupStack::PopAndDestroy(&database1);
+	
+	RBkDatabase database2;
+	database2.OpenL(Bookmark::EVisibilityManager);
+	CleanupClosePushL(database2);
+	RBkFolder folder2 = database2.OpenFolderL(KTxtFolder1);
+	gTestWrapper->TEST(!folder2.IsPublic());
+	CleanupClosePushL(folder2);
+	RBkBookmark bookmark2 = database2.OpenBookmarkL(bookmarkId);
+	CleanupClosePushL(bookmark2);
+	gTestWrapper->TEST(bookmark2.IsPublic());
+	gTestWrapper->TEST(bookmark2.OwnerL() == Bookmark::KNoOwnerId);
+	bookmark2.SetOwnerL(0x00112233);
+	gTestWrapper->TEST(!bookmark2.IsPublic());
+	bookmark2.SetWritableL(EFalse);
+	CleanupStack::PopAndDestroy(&bookmark2);
+	CleanupStack::PopAndDestroy(&folder2);
+	database2.CommitL();
+	CleanupStack::PopAndDestroy(&database2);
+	
+	RBkDatabase database3;
+	database3.OpenL(Bookmark::EVisibilityManager);
+	CleanupClosePushL(database3);
+	RBkBookmark bookmark3 = database3.OpenBookmarkL(bookmarkId);
+	CleanupClosePushL(bookmark3);
+	gTestWrapper->TEST(!bookmark3.IsPublic());
+	RThread thread;
+	TSecurityInfo secInfo(thread);
+	gTestWrapper->TEST(bookmark3.OwnerL() == 0x00112233);
+	gTestWrapper->TEST(!bookmark3.IsWritable());
+	CleanupStack::PopAndDestroy(&bookmark3);
+	database3.CommitL();
+	CleanupStack::PopAndDestroy(&database3);
+	
+	RBkDatabase database4;
+	database4.OpenL(Bookmark::EVisibilityManager);
+	CleanupClosePushL(database4);
+	RBkBookmark bookmark4 = database4.OpenBookmarkL(bookmarkId);
+	CleanupClosePushL(bookmark4);
+	gTestWrapper->TEST(!bookmark4.IsPublic());
+	bookmark4.SetWritableL(ETrue);
+	bookmark4.SetPublicL(ETrue);
+	gTestWrapper->TEST(bookmark4.IsPublic());
+	CleanupStack::PopAndDestroy(&bookmark4);
+	database4.DeleteItemL(folderId, ETrue);
+	database4.CommitL();
+	CleanupStack::PopAndDestroy(&database4);
+	}
+	
+LOCAL_C void DoFolderTitleTestL()
+	{
+	gTestWrapper->Next(_L("[Security tests] Folder title test"));
+	RBkDatabase database;
+	database.OpenL(Bookmark::EVisibilityManager);
+	CleanupClosePushL(database);
+	RBkFolder folder = database.CreateFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+	Bookmark::TItemId folderId = folder.Id();
+	CleanupStack::PopAndDestroy(&folder);
+	database.CommitL();
+	folder = database.OpenFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+ 	folder.SetOwnerL(KAppId);
+	CleanupStack::PopAndDestroy(&folder);
+	database.CommitL();
+	CleanupStack::PopAndDestroy(&database);
+	
+	database.OpenL(Bookmark::EVisibilityPrivate);
+	CleanupClosePushL(database);
+	RBkFolder root = database.OpenRootL();
+	CleanupClosePushL(root);
+	gTestWrapper->TEST(root.Count() == 0);
+	CleanupStack::PopAndDestroy(&root);
+	TRAPD(err, folder = database.CreateFolderL(KTxtFolder1));
+	gTestWrapper->TESTE(err == Bookmark::KErrTitleAlreadyUsed, err);
+	CleanupStack::PopAndDestroy(&database);
+	
+	database.OpenL(Bookmark::EVisibilityManager);
+	CleanupClosePushL(database);
+	database.DeleteItemL(folderId, ETrue);
+	database.CommitL();
+	CleanupStack::PopAndDestroy(&database);
+	}
+
+LOCAL_C void DoTestSecLastModifiedTimeL ()
+	{
+	gTestWrapper->Next(_L("[Security tests] Test last modified time"));
+	TTime currentTime;
+	RBkDatabase db;
+	db.OpenL (Bookmark::EVisibilityManager);
+	CleanupClosePushL ( db );	
+	
+	// Create a new folder.
+	RBkFolder folder = db.CreateFolderL ( KMyNewFolder );
+	CleanupClosePushL ( folder );
+	folder.SetDescriptionL ( KMyFolderDesc );
+	currentTime.HomeTime ();
+	folder.SetLastModifiedL ( currentTime );
+	db.CommitL ();
+	gTestWrapper->TEST( folder.LastModifiedL() == currentTime ); // Creation time.
+	CleanupStack::PopAndDestroy ( &folder );
+	
+	// Open the above created folder.
+	folder = db.OpenFolderL ( KMyNewFolder );
+	CleanupClosePushL ( folder );
+	folder.SetDescriptionL ( KMyFolderNewDesc );
+	currentTime.HomeTime ();
+	folder.SetLastModifiedL ( currentTime );
+	db.CommitL ();
+	gTestWrapper->TEST( folder.LastModifiedL() == currentTime ); // Creation time.
+	Bookmark::TItemId id = folder.Id();
+	db.DeleteItemL ( id ); // mark for deleting	
+	db.CommitL ();	
+	
+	CleanupStack::PopAndDestroy ( &folder );				
+	CleanupStack::PopAndDestroy ( &db );		
+	}
+
+LOCAL_C void DoTestSecLastModifiedTime1L ()
+	{	
+	gTestWrapper->Next(_L("[Security tests] Test last modified time1"));
+	TTime currentTime;
+	
+	RBkDatabase db;
+	db.OpenL (Bookmark::EVisibilityManager);
+	CleanupClosePushL ( db );	
+	
+	// Create a new folder.
+	RBkFolder folder = db.CreateFolderL ( KMyNewFolder );
+	CleanupClosePushL ( folder );
+	folder.SetDescriptionL ( KMyFolderDesc );
+	currentTime.HomeTime ();
+	folder.SetLastModifiedL ( currentTime );
+	db.CommitL ();
+	
+	CleanupStack::PopAndDestroy ( &folder );
+	CleanupStack::PopAndDestroy ( &db );
+	
+	db.OpenL (Bookmark::EVisibilityManager);
+	CleanupClosePushL ( db );	
+	folder = db.OpenFolderL ( KMyNewFolder );
+	CleanupClosePushL ( folder );
+	gTestWrapper->TEST ( currentTime == folder.LastModifiedL() );
+	
+	Bookmark::TItemId id = folder.Id();
+	db.DeleteItemL ( id ); // mark for deleting	
+	db.CommitL ();	
+	
+	CleanupStack::PopAndDestroy ( &folder );				
+	CleanupStack::PopAndDestroy ( &db );		
+	}
+
+LOCAL_D void DoTestOldDB ()
+	{
+	gTestWrapper->Next(_L("*** Testing old database ***"));
+	RBkDatabase db;
+	db.OpenL (Bookmark::EVisibilityManager);
+	CleanupClosePushL ( db );		
+		
+	// Check for older database data.
+	RBkFolder folder = 	db.OpenFolderL ( KMyFolder );	
+	CleanupClosePushL ( folder );
+	Bookmark::TItemId id = folder.Id ();
+	TDateTime dt ( 1970, EJanuary, 1, 0, 0, 0, 0 );
+	TTime currentTime ( dt );
+	
+	gTestWrapper->TEST( folder.LastModifiedL() == currentTime );	
+
+	CleanupStack::PopAndDestroy ( &folder );		
+	
+	CleanupStack::PopAndDestroy ( &db );			
+	}
+
+LOCAL_C void DoTestsL()
+	{
+	DoOldDbCopyL ();	
+	DoTestOldDB ();
+	DoOldDbRemoveL ();
+	DoSecurityTestL();
+	DoFolderTitleTestL();
+	DoTestSecLastModifiedTimeL ();
+	DoTestSecLastModifiedTime1L ();
+	DoOldDbRemoveL ();
+	}
+	
+LOCAL_C void TestL()
+	{
+	gTestWrapper = CTestWrapper::NewLC(gTest);
+	gTestWrapper->Start(_L("@SYMTestCaseID IWS-APPPROTOCOLS-BOOKMARKS-TSECURITYTESTS-0001 test"));
+
+	TRAPD(ret,DoTestsL());
+	gTestWrapper->TESTE(ret==KErrNone, ret);
+
+	gTestWrapper->End();
+	CleanupStack::PopAndDestroy(gTestWrapper);
+	}
+
+LOCAL_C void setupCleanup()
+//
+// Initialise the cleanup stack.
+//
+    {
+	gTheTrapCleanup=CTrapCleanup::New();
+	gTest(gTheTrapCleanup!=NULL);
+	TRAPD(r,\
+		{\
+		for (TInt i=KTestCleanupStack;i>0;i--)\
+			CleanupStack::PushL((TAny*)0);\
+		CleanupStack::Pop(KTestCleanupStack);\
+		});
+	gTest(r==KErrNone);
+	}
+
+
+GLDEF_C TInt E32Main()
+    {
+	setupCleanup();
+	__UHEAP_MARK;
+	//
+
+	TRAPD(ret,TestL());
+	gTest(ret==KErrNone);
+	//
+
+	__UHEAP_MARKEND;
+	delete gTheTrapCleanup;
+	return KErrNone;
+    }
+