diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/bookmarksupport/test/tsecuritytests.cpp --- /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 + +_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; + } +