landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP29.cpp
changeset 33 834e27cad510
child 35 1a92308afc46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP29.cpp	Tue Jul 06 14:44:11 2010 +0300
@@ -0,0 +1,1011 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*   ?description_line
+*
+*/
+
+
+//  INCLUDES
+#include "FT_CPosTp29.h"
+#include <utfw.h>
+#include <f32file.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <centralrepository.h>
+#include <UiklafInternalCRKeys.h>
+//#include <eposlmintservices.rsg>
+#include <barsread.h>
+#include <barsc.h>
+#include <bautils.h>
+
+// CONSTANTS
+_LIT(KFile1, "c:\\documents\\Tp29_1.txt");
+_LIT(KFile2, "c:\\documents\\Tp29_2.txt");
+//_LIT(KPosResourceFile, "\\resource\\eposlmintservices.rsc");
+//const TInt KOneK = 1024;
+
+// Size limit defined in "eposlmintservices.rss" to 250 kilobytes (kilo defined as 1024)
+//const TInt KMaxSize = 250000;
+// This is for KFile1, "fill" a file with contents until KSizeLimit1 limit is reached
+const TInt KSizeLimitOffset1 = 350000;
+// This is for KFile2, "fill" a file with contents until KSizeLimit2 limit is reached
+const TInt KSizeLimitOffset2 = 50000; // In bytes: 250000 bytes + 50000 bytes
+_LIT(KInternalServicesResFileRom, "z:\\resource\\eposlmintservices.rsc");
+_LIT(KInternalServicesResFileBackup, "c:\\resource\\copy_of_eposlmintservices.rsc");
+_LIT(KInternalServicesResFileCdrive, "c:\\resource\\eposlmintservices.rsc");
+//_LIT(KInternalServicesLargeResFile, "c:\\system\\test\\testdata\\eposlmintservices_453KB.rsc");
+//_LIT(KInternalServicesSmallResFile, "c:\\system\\test\\testdata\\eposlmintservices_198KB.rsc");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp29::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::GetName(TDes& aName) const
+    {
+    _LIT(KTestName, "Tp29 - Out of disk");
+    aName = KTestName;
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::CloseTest()
+    {
+    delete iLandmarksDb;
+    iLandmarksDb = NULL;
+
+    delete iCategoryManager;
+    iCategoryManager = NULL;
+
+    //TryRestoreResourceFile();
+
+    iFile1.Close();
+    iFile2.Close();
+    iFileServer.Delete(KFile1);
+    iFileServer.Delete(KFile2);
+    iFileServer.Close();
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::InitTestL()
+    {
+    // File setup, create two files
+    User::LeaveIfError(iFileServer.Connect());
+
+    // Try to restore if previous execution of Tp55 panicked or was killed.
+    //TryRestoreResourceFile();
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::StartL()
+    {
+#ifdef __WINS__
+    _LIT(KNotSupported, "Test case is not supported on WINS, exucute it on target!");
+    LogErrorAndLeave(KNotSupported);
+#else
+    
+    //Retreive threshold from centralrepository
+    CRepository* repository = CRepository::NewLC(KCRUidUiklaf);
+    User::LeaveIfError(repository->Get(KUikOODDiskCriticalThreshold, iCriticalThreshold));
+    CleanupStack::PopAndDestroy(repository);
+
+    TBuf<100> buf;
+    buf.Format(_L("Critical threshold from central repository %d"), iCriticalThreshold);
+    iLog->Put(buf);
+
+    // Test import/export LMs when critical level is set to MLFW defined value.
+    InitiateCriticalLevelL();
+    ReInitTestL();
+    TestCriticalLevelL();
+
+    /*
+    // Test import/export LMs when critical level is set to a large value.
+    iLog->Put(_L("\r\nRedefining critical level to 453 KB and running all tests again...."));
+    CopyResourceFileL(KInternalServicesLargeResFile);
+    InitiateCriticalLevelL();
+    ReInitTestL();
+    TestCriticalLevelL();
+
+    // Test import/export LMs when critical level is set to a small value.
+    iLog->Put(_L("\r\nRedefining critical level to 198 KB and running all tests again...."));
+    CopyResourceFileL(KInternalServicesSmallResFile);
+    InitiateCriticalLevelL();
+    ReInitTestL();
+    TestCriticalLevelL();
+    */
+#endif
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::ReInitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::ReInitTestL()
+    {
+    iGlobalErr = KErrNone;
+    iFile1.Close();
+    iFile2.Close();
+
+    CFileMan* fileMan = CFileMan::NewL(iFileServer);
+    fileMan->Delete(KFile1);
+    fileMan->Delete(KFile2);
+    delete fileMan;
+
+    User::LeaveIfError(iFile1.Create(iFileServer, KFile1, EFileWrite));
+    User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::TestCriticalLevelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::TestCriticalLevelL()
+    {
+
+    TTime startTime;
+    TTime stopTime;
+
+    startTime.UniversalTime();
+
+    RemoveDefaultDbL();
+
+    iLog->Put(_L("CPosLandmarkDatabase::OpenL();"));
+    iLandmarksDb = CPosLandmarkDatabase::OpenL();
+    if (iLandmarksDb->IsInitializingNeeded())
+       {
+       iLog->Put(_L("iLandmarksDb->InitializeL"));
+       ExecuteAndDeleteLD(iLandmarksDb->InitializeL());        
+       }
+
+    iLog->Put(_L("CPosLmCategoryManager::NewL;"));
+    iCategoryManager = CPosLmCategoryManager::NewL(*iLandmarksDb);
+
+    // Asynchronous
+    iLog->Put(_L("DoOutOfDiskTestL Asynchronous"));
+//    iSearchCallback=ETrue;
+    DoOutOfDiskTestL(ETrue);
+  //  iSearchCallback=EFalse;
+
+    // Delete "out-of-disk" file
+    iFile1.Close();
+    iFileServer.Delete(KFile1);
+    iFile2.Close();
+    iFileServer.Delete(KFile2);
+    TInt err = iFile1.Open(iFileServer, KFile1, EFileWrite);
+    if (err == KErrNotFound)
+        {
+        err = iFile1.Create(iFileServer, KFile1, EFileWrite);
+        }
+    User::LeaveIfError(err);
+    
+    err = iFile2.Open(iFileServer, KFile2, EFileWrite);
+    if (err == KErrNotFound)
+        {
+        err = iFile2.Create(iFileServer, KFile2, EFileWrite);
+        }
+    User::LeaveIfError(err);
+
+    // Synchronous
+    iLog->Put(_L("DoOutOfDiskTestL Synchronous"));
+    DoOutOfDiskTestL(EFalse);
+
+    stopTime.UniversalTime();
+    TTimeIntervalMicroSeconds executionTime = 
+        stopTime.MicroSecondsFrom(startTime);
+
+    //TInt64 resse = executionTime.Int64()/1000000;
+
+    TInt resse = executionTime.Int64()/1000000;
+
+    TBuf<50> buf;
+    buf.Zero();
+    buf.Format(_L("TP29 took %d seconds"), resse);
+    iLog->Put(buf);
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::DoOutOfDiskTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::DoOutOfDiskTestL(TBool aSync)
+    {
+    TVolumeInfo volumeInfo;
+    TBuf<200> buf;
+    CPosLmOperation* op = NULL;
+
+    _LIT(KUID,"Unique ID: %08x\r\n");
+	_LIT(KSize,"Size: %d bytes\r\n");
+	_LIT(KFree,"Free space: %d bytes\r\n");
+	//_LIT(KVolName,"Volume name: %S\r\n");
+
+    TInt err=iFileServer.Volume(volumeInfo, EDriveC);
+    if (err != KErrNone) iLog->Put(_L("Error from iFileServer"));
+
+    buf.AppendFormat(KUID, volumeInfo.iUniqueID);
+	buf.AppendFormat(KSize, volumeInfo.iSize);
+	buf.AppendFormat(KFree, volumeInfo.iFree);
+	//buf.AppendFormat(KVolName, &volumeInfo.iName);
+    iLog->Put(buf);
+
+    TTime startTime;
+    TTime stopTime;
+
+    // Just in case
+    ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+    RArray<TPosLmItemId> lmIdArray;
+    CleanupClosePushL(lmIdArray);
+
+    // 1) Create a low disc space situation
+    startTime.UniversalTime();
+    ConsumeDiscSpace1L(iCriticalLevel + KSizeLimitOffset1);
+    ConsumeDiscSpace2L(iCriticalLevel + KSizeLimitOffset2);
+    
+    err=iFileServer.Volume(volumeInfo, EDriveC);
+    if (err != KErrNone) iLog->Put(_L("Error from iFileServer"));
+    buf.AppendFormat(KUID, volumeInfo.iUniqueID);
+	buf.AppendFormat(KSize, volumeInfo.iSize);
+	buf.AppendFormat(KFree, volumeInfo.iFree);
+    iLog->Put(buf);
+
+    stopTime.UniversalTime();
+    TTimeIntervalMicroSeconds executionTime = 
+        stopTime.MicroSecondsFrom(startTime);
+
+    TInt resse = executionTime.Int64()/1000000;
+    buf.Zero();
+    buf.Format(_L("ConsumeDiscSpaceL took %d seconds"), resse);
+    iLog->Put(buf);
+
+    // 2) Add Landmarks until "disk full" error occur
+    if (iLandmarksDb->IsInitializingNeeded())
+        {
+        iLog->Put(_L("InitializeL"));
+        // Synchronous 
+        ExecuteAndDeleteLD(iLandmarksDb->InitializeL());        
+        }
+
+    CPosLandmark* landmark = CPosLandmark::NewLC();
+    landmark->SetLandmarkNameL(_L("LandMarkName1"));
+    iLog->Put(_L("Adding landmark1"));
+    lmIdArray.Append(iLandmarksDb->AddLandmarkL(*landmark));
+    CleanupStack::Pop(landmark);
+
+    landmark = CPosLandmark::NewLC();
+    landmark->SetLandmarkNameL(_L("LandMarkName2"));
+    iLog->Put(_L("Adding landmark2"));
+    lmIdArray.Append(iLandmarksDb->AddLandmarkL(*landmark));
+    CleanupStack::Pop(landmark);
+    err = KErrNone;
+    TPosLmItemId idde;
+    TInt i=0;
+    
+    startTime.UniversalTime();
+    iLog->Put(_L("Adding landmark until KErrDiskFull.....1"));
+    // some while loop adding landmarks here until "disk full" error occur!!!
+    while (err != KErrDiskFull)
+        {
+        buf.Zero();
+        buf.Format(_L("Land Mark___________%d"), i++);
+        landmark = CPosLandmark::NewLC();
+        landmark->SetLandmarkNameL(buf);
+        TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
+        if (err == KErrNone)
+            {
+            lmIdArray.Append(idde);
+            }
+        else if (err == KErrLocked) 
+            {
+            iLog->Put(_L("KErrLocked when adding 1"));
+            User::After(100000);
+            }
+        CleanupStack::Pop(landmark);
+        }
+    stopTime.UniversalTime();
+    executionTime = stopTime.MicroSecondsFrom(startTime);
+    resse = executionTime.Int64()/1000000;
+    buf.Zero();
+    buf.Format(_L("Added %d nr of landmarks, took %d seconds"), i, resse);
+    iLog->Put(buf);
+
+    // Check that the filesize limit has not been exceeded 
+    err=iFileServer.Volume(volumeInfo, EDriveC);
+    buf.Zero();
+	buf.AppendFormat(KFree, volumeInfo.iFree);
+    iLog->Put(buf);
+    if (volumeInfo.iFree < iCriticalLevel)
+        {
+        LogErrorAndLeave(_L("The max size limit has been exceeded!!!"));
+        }
+
+    //Check that the added landmarks can be read
+    iLog->Put(_L("Check that it is possible to read landmark"));
+    TInt nrOfLandmarks = lmIdArray.Count();
+    TInt p=0;
+    for (p=0;p<nrOfLandmarks;p++)
+        {
+        landmark = iLandmarksDb->ReadLandmarkLC(lmIdArray[p]);
+        CleanupStack::Pop(landmark);
+        }
+
+    // 3) Remove two landmarks and compress landmarks db
+    TInt nr = lmIdArray.Count()-1;
+    TPosLmItemId id = lmIdArray[nr];
+    iLog->Put(_L("Removing landmark1"));
+    lmIdArray.Remove(nr);
+    TRAP(err, iLandmarksDb->RemoveLandmarkL(id));
+    if (err == KErrDiskFull) 
+        {
+        ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+        iLandmarksDb->RemoveLandmarkL(id);
+        iLog->Put(_L("DiskFull when removing1"));
+        }
+
+    nr = lmIdArray.Count() - 1;
+    id = lmIdArray[nr];
+    iLog->Put(_L("Removing landmark2"));
+    lmIdArray.Remove(nr);
+    iLandmarksDb->RemoveLandmarkL(id);
+    TRAP(err, iLandmarksDb->RemoveLandmarkL(id));
+    if (err == KErrDiskFull) 
+        {
+        ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+        
+        iLandmarksDb->RemoveLandmarkL(id);
+        iLog->Put(_L("DiskFull when removing2"));
+        }
+    err = KErrNone;
+    iLog->Put(_L("Compacting"));
+    ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+    
+    startTime.UniversalTime();
+    iLog->Put(_L("Adding landmark until KErrDiskFull.....2"));
+    // 4) Add landmarks until "disk full" error occur!!!
+    while (err != KErrDiskFull)
+        {
+        buf.Zero();
+        buf.Format(_L("Land Mark___________%d"), i++);
+        landmark = CPosLandmark::NewLC();
+        landmark->SetLandmarkNameL(buf);
+        //iLog->Put(_L("Adding landmark id to idArray"));
+        TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
+        if (err == KErrNone)
+            {
+            lmIdArray.Append(idde);
+            }
+        else if (err == KErrLocked) 
+            {
+            iLog->Put(_L("KErrLocked when adding 2"));
+            User::After(100000);
+            }
+        CleanupStack::Pop(landmark);
+        }
+
+    stopTime.UniversalTime();
+    executionTime = stopTime.MicroSecondsFrom(startTime);
+    resse = executionTime.Int64()/1000000;
+    buf.Zero();
+    buf.Format(_L("Added %d nr of landmarks, took %d seconds"), i, resse);
+    iLog->Put(buf);
+
+    iLog->Put(_L("Check that it is possible to read landmark"));
+    //Check that the added landmarks can be read
+    nrOfLandmarks = lmIdArray.Count();
+    for (p=0;p<nrOfLandmarks;p++)
+        {
+        landmark = iLandmarksDb->ReadLandmarkLC(lmIdArray[p]);
+        CleanupStack::Pop(landmark);
+        }
+
+    iLog->Put(_L("Remove all landmarks"));
+    err = KErrNone;
+    // 5) Remove all landmarks and compact database
+    if (!aSync)
+        {
+        TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+        if (err == KErrNone) 
+            {
+            ExecuteAndDeleteLD(op);
+            }
+        else if (err == KErrDiskFull)
+            {
+            iLog->Put(_L("KErrDiskFull when removing all landmarks"));
+            ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+            
+            // Delete KFile2 to free more space on disc, method also open connection to iFile2 again
+            DeleteFile2L();
+
+            iLog->Put(_L("Removing after Compact sync"));
+            TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+            if (err == KErrDiskFull)
+                {
+                iLog->Put(_L("KErrDiskFull when Removing all landmarks after compact1"));
+                RemoveAllLandmarksL();
+                }
+            else
+                {
+                ExecuteAndDeleteLD(op);
+                }
+            }
+        }
+    else
+        {
+        iLog->Put(_L("Before RemoveAllLandmarksL(this)"));
+        TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+        
+        if (err == KErrNone) 
+            {
+            //***iActiveSchedulerWait->Start();
+            //***delete op; op=NULL;
+            RunAsyncOperationLD(op);
+            }
+        else if (err == KErrDiskFull)
+            {
+            iLog->Put(_L("KErrDiskFull when removing all landmarks"));
+            ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+            
+            // Delete KFile2 to free more space on disc, method also open connection to iFile2 again
+            DeleteFile2L();
+
+            iLog->Put(_L("Removing after Compact async"));
+            TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+            if (err == KErrDiskFull)
+                {
+                iLog->Put(_L("KErrDiskFull when removing all landmarks after compact2"));
+                RemoveAllLandmarksL();
+                }
+            else
+                {
+                //***iActiveSchedulerWait->Start();
+                //***delete op; op=NULL;
+                RunAsyncOperationLD(op);
+                }
+            }
+        iLog->Put(_L("After RemoveAllLandmarksL(this)"));
+        }
+    
+    ConsumeDiscSpace2L(iCriticalLevel + KSizeLimitOffset2);
+
+    if (err == KErrDiskFull) iLog->Put(_L("KErrDiskFull when RemoveAllLandmarksL"));
+    iLog->Put(_L("Compacting"));
+    ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+    
+    lmIdArray.Reset();
+    i=0;
+    err = KErrNone;
+    startTime.UniversalTime();
+    iLog->Put(_L("Adding landmarkcategories until KErrDiskFull....."));
+
+    // 6) Add LandmarkCategories until "disk full" error occur
+    while (err != KErrDiskFull)
+        {
+        buf.Zero();
+        buf.Format(_L("Landmark Category _________ %d"), i++);
+        CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+        lmc->SetCategoryNameL(buf);
+        lmc->SetIconL(_L("Pelles Icon"), 111, KPosLmIconMaskNotUsed);
+
+        TRAP(err, idde = iCategoryManager->AddCategoryL(*lmc));
+        if (err == KErrNone)
+            {
+            lmIdArray.Append(idde);
+            }
+        else if (err== KErrLocked)
+            {
+            iLog->Put(_L("KErrLocked when adding category"));
+            User::After(100000);
+            }
+        CleanupStack::PopAndDestroy(lmc);
+        }
+
+    stopTime.UniversalTime();
+    executionTime = stopTime.MicroSecondsFrom(startTime);
+
+    resse = executionTime.Int64()/1000000;
+    buf.Zero();
+    buf.Format(_L("Added %d nr of landmarkcategories, took %d seconds"), i, resse);
+    iLog->Put(buf);
+
+    //Check that the added landmarkcategories can be read
+    TInt nrOfCategories = lmIdArray.Count();
+    for (p=0;p<nrOfCategories;p++)
+        {
+        CPosLandmarkCategory* lmc = iCategoryManager->ReadCategoryLC(lmIdArray[p]);
+        CleanupStack::Pop(lmc);
+        }
+
+    // 7) Remove two categories and compress landmarks db
+    nr = lmIdArray.Count()-1;
+    id = lmIdArray[nr];
+    iLog->Put(_L("Removing landmarkcategory1"));
+    lmIdArray.Remove(nr);
+    op=NULL;
+    TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
+    if (err == KErrDiskFull)
+        {
+        ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+        ExecuteAndDeleteLD(iCategoryManager->RemoveCategoryL(id));
+        iLog->Put(_L("KErrDiskFull when removing landmarkcategory1"));
+        }
+
+    if (err == KErrNone)
+        {
+        ExecuteAndDeleteLD(op);
+        }
+    else
+        {
+        delete op;
+        op = NULL;
+        }
+
+    TBuf<50> buffe;
+    buffe.Format(_L("1) Err after RemoveCategoryL: %d"), err);
+    iLog->Put(buffe);
+
+    nr = lmIdArray.Count()-1;
+    id = lmIdArray[nr];
+    iLog->Put(_L("Removing landmarkcategory2"));
+    lmIdArray.Remove(nr);
+
+    if (!aSync)
+        {
+        TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
+        if (err == KErrDiskFull)
+            {
+            delete op;
+            op = NULL;
+            iLog->Put(_L("KErrDiskFull when removing landmarkcategory2"));
+            ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+            
+            iLog->Put(_L("After compact before removing landmarkcategory2"));
+            ExecuteAndDeleteLD(iCategoryManager->RemoveCategoryL(id));
+            }
+        else if (err == KErrNone)
+            {
+            ExecuteAndDeleteLD(op);
+            }
+        else if (err == KErrLocked)
+            {
+            iLog->Put(_L("KErrLocked returned from iCategoryManager->RemoveCategoryL"));
+            delete op;
+            op = NULL;
+            }
+        } 
+    else
+        {
+        TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
+        if (err == KErrNone)
+            {
+            //***iActiveSchedulerWait->Start();
+            //***delete op;
+            RunAsyncOperationLD(op);
+            }
+        else if (err == KErrDiskFull)
+            {
+            delete op;
+            op = NULL;
+            iLog->Put(_L("KErrDiskFull when removing landmarkcategory2 async"));
+            ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+            
+            iLog->Put(_L("After compact before removing landmarkcategory2 async"));
+            op = iCategoryManager->RemoveCategoryL(id);
+            
+            //***iActiveSchedulerWait->Start();
+            //***delete op;
+            RunAsyncOperationLD(op);
+            }
+        else if (err == KErrLocked)
+            {
+            delete op;
+            op = NULL;
+            iLog->Put(_L("KErrLocked returned from iCategoryManager->RemoveCategoryL"));
+            }
+        }
+
+    buffe.Zero();
+    buffe.Format(_L("2) Err after RemoveCategoryL: %d"), err);
+    iLog->Put(buffe);
+
+    iLog->Put(_L("Compacting"));
+    ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+    iLog->Put(_L("After Compacting"));
+    
+    lmIdArray.Reset();
+    i=0;
+    err = KErrNone;
+
+    startTime.UniversalTime();
+    // 8) Add LandmarkCategories until "disk full" error occur
+    while (err != KErrDiskFull)
+        {
+        buf.Zero();
+        buf.Format(_L("LandmarkCategory %d"), i++);
+
+        CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+        lmc->SetCategoryNameL(buf);
+        lmc->SetIconL(_L("PellesIcon"), 111, KPosLmIconMaskNotUsed);
+        iLog->Put(buf);
+        
+        TRAP(err, idde = iCategoryManager->AddCategoryL(*lmc));
+        if (err == KErrNone)
+            {
+            lmIdArray.Append(idde);
+            }
+        else if (err == KErrLocked)
+            {
+            iLog->Put(_L("KerrLocked when addCategory"));
+            User::After(100000);
+            }
+        CleanupStack::PopAndDestroy(lmc); 
+    }
+    stopTime.UniversalTime();
+    executionTime = stopTime.MicroSecondsFrom(startTime);
+
+    resse = executionTime.Int64()/1000000;
+    buf.Zero();
+    buf.Format(_L("Added %d nr of landmarkcategories, took %d seconds"), i, resse);
+    iLog->Put(buf);
+
+    // 9) Remove all categories and compact db
+    // sync method
+    // XXXX add async check here
+    iLog->Put(_L("Removing all categories"));
+    TRAP(err, iCategoryManager->RemoveCategoriesL(lmIdArray));
+    if (err == KErrDiskFull) iLog->Put(_L("KErrDiskFull when RemoveCategoriesL"));
+    iLog->Put(_L("Compacting"));
+    ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+    
+
+    // 10) Consume more space then the limit specified in resource file
+    ConsumeDiscSpace1L(iCriticalLevel - KSizeLimitOffset2);
+
+    // 11) Try to add a landmark
+    buf.Zero();
+    buf.Format(_L("LandMark%d"), i++);
+    landmark = CPosLandmark::NewLC();
+    landmark->SetLandmarkNameL(buf);
+
+    TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
+    if (err != KErrDiskFull)
+        {
+        buf.Zero();
+        buf.Format(_L("Should leave with KErrDiskFull instead %d"), err);
+        //LogErrorAndLeave(buf);
+        LogErrorAndLeave(buf);
+        }
+    CleanupStack::PopAndDestroy(landmark);
+    CleanupStack::PopAndDestroy(&lmIdArray);
+    }
+
+
+// ---------------------------------------------------------
+// CPosTp29::RemoveAllLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::RemoveAllLandmarksL()
+    {
+    iLog->Put(_L("CPosTp29::RemoveAllLandmarksL"));
+    CPosLmItemIterator* iter = iLandmarksDb->LandmarkIteratorL();
+    CleanupStack::PushL(iter);
+
+    TInt counter=0;
+    TTime startTime;
+    TTime stopTime;
+    TPosLmItemId id = iter->NextL();
+
+    startTime.UniversalTime();
+
+    while (id != KPosLmNullItemId)
+        {
+        TRAPD(err, iLandmarksDb->RemoveLandmarkL(id));
+        if (err == KErrDiskFull)
+            {
+            ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+            
+            iLog->Put(_L(":-( DiskFull when removing single landmark entry !!!"));
+            iLandmarksDb->RemoveLandmarkL(id);
+            }
+        else if (err == KErrLocked)
+            {
+            iLog->Put(_L("KErrLocked when removing landmark"));
+            User::After(100000);
+            }
+        id = iter->NextL();
+        counter++;
+        }
+
+    stopTime.UniversalTime();
+    TTimeIntervalMicroSeconds executionTime = 
+        stopTime.MicroSecondsFrom(startTime);
+
+    TInt64 resse = executionTime.Int64()/1000000;
+    TBuf<50> buf;
+    buf.Zero();
+    buf.Format(_L("Removing %d nr of landmarks, took %d seconds"), counter, resse);
+    iLog->Put(buf);
+
+    CleanupStack::PopAndDestroy(iter);
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::DeleteFile2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::DeleteFile2L()
+    {
+    iFile2.Close();
+    iFileServer.Delete(KFile2);
+    TInt err = iFile2.Open(iFileServer, KFile2, EFileWrite);
+    if (err == KErrNotFound)
+        {
+        err = iFile2.Create(iFileServer, KFile2, EFileWrite);
+        }
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::ConsumeDiscSpace1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::ConsumeDiscSpace1L(TInt aSizeLimit)
+    {
+    TInt err = KErrNone;
+
+    // Approx 2160 bytes
+    _LIT8(KNonsense, "nonsensenonsensenonsensenonsensenonsensenon \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+sensenonsensenonsensenonsensenonsensenonsensenonsense");
+
+    TVolumeInfo volumeInfo;
+    err=iFileServer.Volume(volumeInfo, EDriveC);
+
+    // Fill file fast
+    HBufC8* bigBuf = (&KNonsense)->AllocLC();
+    while (volumeInfo.iFree > aSizeLimit)
+        {
+        err = iFile1.Write(*bigBuf);
+        if (err != KErrNone) iLog->Put(_L("Problem writing"));
+        err = iFileServer.Volume(volumeInfo, EDriveC);
+        if (err != KErrNone) iLog->Put(_L("Problem voluming"));
+        }
+
+    CleanupStack::PopAndDestroy(1); // bigBuf
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::ConsumeDiscSpace2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::ConsumeDiscSpace2L(TInt aSizeLimit)
+    {
+    iLog->Put(_L("ConsumeDiscSpace2L"));
+    TInt err = KErrNone;
+
+    // Approx 2160 bytes
+    _LIT8(KNonsense, "nonsensenonsensenonsensenonsensenonsensenon \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+sensenonsensenonsensenonsensenonsensenonsensenonsense");
+
+    TVolumeInfo volumeInfo;
+    err=iFileServer.Volume(volumeInfo, EDriveC);
+
+    // Fill file fast
+    HBufC8* bigBuf = (&KNonsense)->AllocLC();
+    while (volumeInfo.iFree > aSizeLimit)
+        {
+        err = iFile2.Write(*bigBuf);
+        if (err != KErrNone) iLog->Put(_L("Problem writing"));
+        err = iFileServer.Volume(volumeInfo, EDriveC);
+        if (err != KErrNone) iLog->Put(_L("Problem voluming"));
+        }
+
+    CleanupStack::PopAndDestroy(1); // bigBuf
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::InitiateCriticalLevelL
+// Extracts Critical Dsik Level. (value is extracted from an MLFW 
+// resource file that can reside on any drive)
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//	
+void CPosTp29::InitiateCriticalLevelL()
+    {
+    iLog->Put(_L("InitiateCriticalLevelL"));
+    /*
+    // Find drive that the resource file resides on.
+    TFindFile* filefinder = new (ELeave) TFindFile(iFileServer);
+    CleanupStack::PushL(filefinder);
+    TParse* fileparser = new (ELeave) TParse;
+    CleanupStack::PushL(fileparser);
+    fileparser->Set(KPosResourceFile, NULL, NULL);
+    User::LeaveIfError(
+        filefinder->FindByDir(fileparser->NameAndExt(), fileparser->DriveAndPath()));
+
+    // Open resource file
+    RResourceFile resFile;
+    resFile.OpenL(iFileServer, filefinder->File());
+    CleanupClosePushL(resFile);
+
+    // Allocate the critical level as a buffer
+    //TInt R_POS_LANDMARK_INTERNAL_CRITICAL_DISK_LEVEL = 250;
+    HBufC8* resourceBuffer = resFile.AllocReadLC(iCriticalThreshold);
+
+    // Convert the buffer to an int
+    TResourceReader resReader;
+    resReader.SetBuffer(resourceBuffer);
+    iCriticalLevel = KOneK * resReader.ReadInt16();
+    CleanupStack::PopAndDestroy(4, filefinder);
+    */
+    
+    //iCriticalLevel = iCriticalThreshold * KOneK;
+    iCriticalLevel = iCriticalThreshold;
+    
+    TBuf<50> msg;
+    msg.Format(_L("CriticalLevel = %d"), iCriticalLevel);
+    iLog->Put(msg);
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::CopyResourceFileL
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::CopyResourceFileL(const TDesC& aResourceFile)
+    {
+    // Release all landmark references to make DLLs be unloaded.
+    delete iLandmarksDb;
+    iLandmarksDb = NULL;
+
+    CFileMan* fileMan = CFileMan::NewL(iFileServer);
+    CleanupStack::PushL(fileMan);
+    
+    // Check if landmark is flashed
+     if (!BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
+        {
+         iLog->Put(_L("Landmark is NOT flashed, backing up eposlmintservices.rsc by renaming it bofore copying rsc-file."));
+        // Landmark FW is not flashed. Rename the file before copying an own defiend file.
+        // Since landmark FW is not flashed the file should exist hence leaving if it is not found!
+         User::LeaveIfError(fileMan->Rename(KInternalServicesResFileCdrive, KInternalServicesResFileBackup, CFileMan::EOverWrite));
+        }
+     else
+        {
+        iLog->Put(_L("Landmark framework is flashed, copying global categories to c:"));
+        }
+
+    User::LeaveIfError(fileMan->Copy(aResourceFile, KInternalServicesResFileCdrive, CFileMan::EOverWrite));
+ 
+    CleanupStack::PopAndDestroy(fileMan);
+    }
+
+// ---------------------------------------------------------
+// CPosTp29::TryRestoreResourceFile
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::TryRestoreResourceFile()
+    {
+    iLog->Put(_L("TryRestoreResourceFile"));
+    CFileMan* fileMan = NULL;
+    TRAPD(err, fileMan = CFileMan::NewL(iFileServer));
+    User::LeaveIfError(err);
+    if (fileMan)
+        {
+        // Try to restore the backup up rsc-file (only possible when LM FW is not flashed.
+        TInt result = fileMan->Copy(KInternalServicesResFileBackup, KInternalServicesResFileCdrive, CFileMan::EOverWrite);
+        if (result == KErrNotFound)
+            {
+            if (BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
+                {
+                // LM FW is flashed. We need to remove the rsc-file on c:
+                fileMan->Delete(KInternalServicesResFileCdrive);
+                }
+            }
+        delete fileMan;
+        }
+    }
+
+// End of file
+