landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP29.cpp
branchRCL_3
changeset 44 2b4ea9893b66
equal deleted inserted replaced
42:02ba3f1733c6 44:2b4ea9893b66
       
     1 /*
       
     2 * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *   ?description_line
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 //  INCLUDES
       
    21 #include "FT_CPosTp29.h"
       
    22 #include <utfw.h>
       
    23 #include <f32file.h>
       
    24 #include <EPos_CPosLMCategoryManager.h>
       
    25 #include <centralrepository.h>
       
    26 #include <UiklafInternalCRKeys.h>
       
    27 //#include <eposlmintservices.rsg>
       
    28 #include <barsread.h>
       
    29 #include <barsc.h>
       
    30 #include <bautils.h>
       
    31 
       
    32 // CONSTANTS
       
    33 _LIT(KFile1, "c:\\documents\\Tp29_1.txt");
       
    34 _LIT(KFile2, "c:\\documents\\Tp29_2.txt");
       
    35 //_LIT(KPosResourceFile, "\\resource\\eposlmintservices.rsc");
       
    36 //const TInt KOneK = 1024;
       
    37 
       
    38 // Size limit defined in "eposlmintservices.rss" to 250 kilobytes (kilo defined as 1024)
       
    39 //const TInt KMaxSize = 250000;
       
    40 // This is for KFile1, "fill" a file with contents until KSizeLimit1 limit is reached
       
    41 const TInt KSizeLimitOffset1 = 350000;
       
    42 // This is for KFile2, "fill" a file with contents until KSizeLimit2 limit is reached
       
    43 const TInt KSizeLimitOffset2 = 50000; // In bytes: 250000 bytes + 50000 bytes
       
    44 _LIT(KInternalServicesResFileRom, "z:\\resource\\eposlmintservices.rsc");
       
    45 _LIT(KInternalServicesResFileBackup, "c:\\resource\\copy_of_eposlmintservices.rsc");
       
    46 _LIT(KInternalServicesResFileCdrive, "c:\\resource\\eposlmintservices.rsc");
       
    47 //_LIT(KInternalServicesLargeResFile, "c:\\system\\test\\testdata\\eposlmintservices_453KB.rsc");
       
    48 //_LIT(KInternalServicesSmallResFile, "c:\\system\\test\\testdata\\eposlmintservices_198KB.rsc");
       
    49 
       
    50 // ================= MEMBER FUNCTIONS =======================
       
    51 
       
    52 // ---------------------------------------------------------
       
    53 // CPosTp29::GetName
       
    54 //
       
    55 // (other items were commented in a header).
       
    56 // ---------------------------------------------------------
       
    57 //
       
    58 void CPosTp29::GetName(TDes& aName) const
       
    59     {
       
    60     _LIT(KTestName, "Tp29 - Out of disk");
       
    61     aName = KTestName;
       
    62     }
       
    63 
       
    64 // ---------------------------------------------------------
       
    65 // CPosTp29::CloseTest
       
    66 //
       
    67 // (other items were commented in a header).
       
    68 // ---------------------------------------------------------
       
    69 //
       
    70 void CPosTp29::CloseTest()
       
    71     {
       
    72     delete iLandmarksDb;
       
    73     iLandmarksDb = NULL;
       
    74 
       
    75     delete iCategoryManager;
       
    76     iCategoryManager = NULL;
       
    77 
       
    78     //TryRestoreResourceFile();
       
    79 
       
    80     iFile1.Close();
       
    81     iFile2.Close();
       
    82     iFileServer.Delete(KFile1);
       
    83     iFileServer.Delete(KFile2);
       
    84     iFileServer.Close();
       
    85     }
       
    86 
       
    87 // ---------------------------------------------------------
       
    88 // CPosTp29::InitTestL
       
    89 //
       
    90 // (other items were commented in a header).
       
    91 // ---------------------------------------------------------
       
    92 //
       
    93 void CPosTp29::InitTestL()
       
    94     {
       
    95     // File setup, create two files
       
    96     User::LeaveIfError(iFileServer.Connect());
       
    97 
       
    98     // Try to restore if previous execution of Tp55 panicked or was killed.
       
    99     //TryRestoreResourceFile();
       
   100     }
       
   101 
       
   102 // ---------------------------------------------------------
       
   103 // CPosTp29::StartL
       
   104 //
       
   105 // (other items were commented in a header).
       
   106 // ---------------------------------------------------------
       
   107 //
       
   108 void CPosTp29::StartL()
       
   109     {
       
   110 #ifdef __WINS__
       
   111     _LIT(KNotSupported, "Test case is not supported on WINS, exucute it on target!");
       
   112     LogErrorAndLeave(KNotSupported);
       
   113 #else
       
   114     
       
   115     //Retreive threshold from centralrepository
       
   116     CRepository* repository = CRepository::NewLC(KCRUidUiklaf);
       
   117     User::LeaveIfError(repository->Get(KUikOODDiskCriticalThreshold, iCriticalThreshold));
       
   118     CleanupStack::PopAndDestroy(repository);
       
   119 
       
   120     TBuf<100> buf;
       
   121     buf.Format(_L("Critical threshold from central repository %d"), iCriticalThreshold);
       
   122     iLog->Put(buf);
       
   123 
       
   124     // Test import/export LMs when critical level is set to MLFW defined value.
       
   125     InitiateCriticalLevelL();
       
   126     ReInitTestL();
       
   127     TestCriticalLevelL();
       
   128 
       
   129     /*
       
   130     // Test import/export LMs when critical level is set to a large value.
       
   131     iLog->Put(_L("\r\nRedefining critical level to 453 KB and running all tests again...."));
       
   132     CopyResourceFileL(KInternalServicesLargeResFile);
       
   133     InitiateCriticalLevelL();
       
   134     ReInitTestL();
       
   135     TestCriticalLevelL();
       
   136 
       
   137     // Test import/export LMs when critical level is set to a small value.
       
   138     iLog->Put(_L("\r\nRedefining critical level to 198 KB and running all tests again...."));
       
   139     CopyResourceFileL(KInternalServicesSmallResFile);
       
   140     InitiateCriticalLevelL();
       
   141     ReInitTestL();
       
   142     TestCriticalLevelL();
       
   143     */
       
   144 #endif
       
   145     }
       
   146 
       
   147 // ---------------------------------------------------------
       
   148 // CPosTp29::ReInitTestL
       
   149 //
       
   150 // (other items were commented in a header).
       
   151 // ---------------------------------------------------------
       
   152 //
       
   153 void CPosTp29::ReInitTestL()
       
   154     {
       
   155     iGlobalErr = KErrNone;
       
   156     iFile1.Close();
       
   157     iFile2.Close();
       
   158 
       
   159     CFileMan* fileMan = CFileMan::NewL(iFileServer);
       
   160     fileMan->Delete(KFile1);
       
   161     fileMan->Delete(KFile2);
       
   162     delete fileMan;
       
   163 
       
   164     User::LeaveIfError(iFile1.Create(iFileServer, KFile1, EFileWrite));
       
   165     User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
       
   166     }
       
   167 
       
   168 // ---------------------------------------------------------
       
   169 // CPosTp29::TestCriticalLevelL
       
   170 //
       
   171 // (other items were commented in a header).
       
   172 // ---------------------------------------------------------
       
   173 //
       
   174 void CPosTp29::TestCriticalLevelL()
       
   175     {
       
   176 
       
   177     TTime startTime;
       
   178     TTime stopTime;
       
   179 
       
   180     startTime.UniversalTime();
       
   181 
       
   182     RemoveDefaultDbL();
       
   183 
       
   184     iLog->Put(_L("CPosLandmarkDatabase::OpenL();"));
       
   185     iLandmarksDb = CPosLandmarkDatabase::OpenL();
       
   186     if (iLandmarksDb->IsInitializingNeeded())
       
   187        {
       
   188        iLog->Put(_L("iLandmarksDb->InitializeL"));
       
   189        ExecuteAndDeleteLD(iLandmarksDb->InitializeL());        
       
   190        }
       
   191 
       
   192     iLog->Put(_L("CPosLmCategoryManager::NewL;"));
       
   193     iCategoryManager = CPosLmCategoryManager::NewL(*iLandmarksDb);
       
   194 
       
   195     // Asynchronous
       
   196     iLog->Put(_L("DoOutOfDiskTestL Asynchronous"));
       
   197 //    iSearchCallback=ETrue;
       
   198     DoOutOfDiskTestL(ETrue);
       
   199   //  iSearchCallback=EFalse;
       
   200 
       
   201     // Delete "out-of-disk" file
       
   202     iFile1.Close();
       
   203     iFileServer.Delete(KFile1);
       
   204     iFile2.Close();
       
   205     iFileServer.Delete(KFile2);
       
   206     TInt err = iFile1.Open(iFileServer, KFile1, EFileWrite);
       
   207     if (err == KErrNotFound)
       
   208         {
       
   209         err = iFile1.Create(iFileServer, KFile1, EFileWrite);
       
   210         }
       
   211     User::LeaveIfError(err);
       
   212     
       
   213     err = iFile2.Open(iFileServer, KFile2, EFileWrite);
       
   214     if (err == KErrNotFound)
       
   215         {
       
   216         err = iFile2.Create(iFileServer, KFile2, EFileWrite);
       
   217         }
       
   218     User::LeaveIfError(err);
       
   219 
       
   220     // Synchronous
       
   221     iLog->Put(_L("DoOutOfDiskTestL Synchronous"));
       
   222     DoOutOfDiskTestL(EFalse);
       
   223 
       
   224     stopTime.UniversalTime();
       
   225     TTimeIntervalMicroSeconds executionTime = 
       
   226         stopTime.MicroSecondsFrom(startTime);
       
   227 
       
   228     //TInt64 resse = executionTime.Int64()/1000000;
       
   229 
       
   230     TInt resse = executionTime.Int64()/1000000;
       
   231 
       
   232     TBuf<50> buf;
       
   233     buf.Zero();
       
   234     buf.Format(_L("TP29 took %d seconds"), resse);
       
   235     iLog->Put(buf);
       
   236     }
       
   237 
       
   238 // ---------------------------------------------------------
       
   239 // CPosTp29::DoOutOfDiskTestL
       
   240 //
       
   241 // (other items were commented in a header).
       
   242 // ---------------------------------------------------------
       
   243 //
       
   244 void CPosTp29::DoOutOfDiskTestL(TBool aSync)
       
   245     {
       
   246     TVolumeInfo volumeInfo;
       
   247     TBuf<200> buf;
       
   248     CPosLmOperation* op = NULL;
       
   249 
       
   250     _LIT(KUID,"Unique ID: %08x\r\n");
       
   251 	_LIT(KSize,"Size: %d bytes\r\n");
       
   252 	_LIT(KFree,"Free space: %d bytes\r\n");
       
   253 	//_LIT(KVolName,"Volume name: %S\r\n");
       
   254 
       
   255     TInt err=iFileServer.Volume(volumeInfo, EDriveC);
       
   256     if (err != KErrNone) iLog->Put(_L("Error from iFileServer"));
       
   257 
       
   258     buf.AppendFormat(KUID, volumeInfo.iUniqueID);
       
   259 	buf.AppendFormat(KSize, volumeInfo.iSize);
       
   260 	buf.AppendFormat(KFree, volumeInfo.iFree);
       
   261 	//buf.AppendFormat(KVolName, &volumeInfo.iName);
       
   262     iLog->Put(buf);
       
   263 
       
   264     TTime startTime;
       
   265     TTime stopTime;
       
   266 
       
   267     // Just in case
       
   268     ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   269 
       
   270     RArray<TPosLmItemId> lmIdArray;
       
   271     CleanupClosePushL(lmIdArray);
       
   272 
       
   273     // 1) Create a low disc space situation
       
   274     startTime.UniversalTime();
       
   275     ConsumeDiscSpace1L(iCriticalLevel + KSizeLimitOffset1);
       
   276     ConsumeDiscSpace2L(iCriticalLevel + KSizeLimitOffset2);
       
   277     
       
   278     err=iFileServer.Volume(volumeInfo, EDriveC);
       
   279     if (err != KErrNone) iLog->Put(_L("Error from iFileServer"));
       
   280     buf.AppendFormat(KUID, volumeInfo.iUniqueID);
       
   281 	buf.AppendFormat(KSize, volumeInfo.iSize);
       
   282 	buf.AppendFormat(KFree, volumeInfo.iFree);
       
   283     iLog->Put(buf);
       
   284 
       
   285     stopTime.UniversalTime();
       
   286     TTimeIntervalMicroSeconds executionTime = 
       
   287         stopTime.MicroSecondsFrom(startTime);
       
   288 
       
   289     TInt resse = executionTime.Int64()/1000000;
       
   290     buf.Zero();
       
   291     buf.Format(_L("ConsumeDiscSpaceL took %d seconds"), resse);
       
   292     iLog->Put(buf);
       
   293 
       
   294     // 2) Add Landmarks until "disk full" error occur
       
   295     if (iLandmarksDb->IsInitializingNeeded())
       
   296         {
       
   297         iLog->Put(_L("InitializeL"));
       
   298         // Synchronous 
       
   299         ExecuteAndDeleteLD(iLandmarksDb->InitializeL());        
       
   300         }
       
   301 
       
   302     CPosLandmark* landmark = CPosLandmark::NewLC();
       
   303     landmark->SetLandmarkNameL(_L("LandMarkName1"));
       
   304     iLog->Put(_L("Adding landmark1"));
       
   305     lmIdArray.Append(iLandmarksDb->AddLandmarkL(*landmark));
       
   306     CleanupStack::Pop(landmark);
       
   307 
       
   308     landmark = CPosLandmark::NewLC();
       
   309     landmark->SetLandmarkNameL(_L("LandMarkName2"));
       
   310     iLog->Put(_L("Adding landmark2"));
       
   311     lmIdArray.Append(iLandmarksDb->AddLandmarkL(*landmark));
       
   312     CleanupStack::Pop(landmark);
       
   313     err = KErrNone;
       
   314     TPosLmItemId idde;
       
   315     TInt i=0;
       
   316     
       
   317     startTime.UniversalTime();
       
   318     iLog->Put(_L("Adding landmark until KErrDiskFull.....1"));
       
   319     // some while loop adding landmarks here until "disk full" error occur!!!
       
   320     while (err != KErrDiskFull)
       
   321         {
       
   322         buf.Zero();
       
   323         buf.Format(_L("Land Mark___________%d"), i++);
       
   324         landmark = CPosLandmark::NewLC();
       
   325         landmark->SetLandmarkNameL(buf);
       
   326         TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
       
   327         if (err == KErrNone)
       
   328             {
       
   329             lmIdArray.Append(idde);
       
   330             }
       
   331         else if (err == KErrLocked) 
       
   332             {
       
   333             iLog->Put(_L("KErrLocked when adding 1"));
       
   334             User::After(100000);
       
   335             }
       
   336         CleanupStack::Pop(landmark);
       
   337         }
       
   338     stopTime.UniversalTime();
       
   339     executionTime = stopTime.MicroSecondsFrom(startTime);
       
   340     resse = executionTime.Int64()/1000000;
       
   341     buf.Zero();
       
   342     buf.Format(_L("Added %d nr of landmarks, took %d seconds"), i, resse);
       
   343     iLog->Put(buf);
       
   344 
       
   345     // Check that the filesize limit has not been exceeded 
       
   346     err=iFileServer.Volume(volumeInfo, EDriveC);
       
   347     buf.Zero();
       
   348 	buf.AppendFormat(KFree, volumeInfo.iFree);
       
   349     iLog->Put(buf);
       
   350     if (volumeInfo.iFree < iCriticalLevel)
       
   351         {
       
   352         LogErrorAndLeave(_L("The max size limit has been exceeded!!!"));
       
   353         }
       
   354 
       
   355     //Check that the added landmarks can be read
       
   356     iLog->Put(_L("Check that it is possible to read landmark"));
       
   357     TInt nrOfLandmarks = lmIdArray.Count();
       
   358     TInt p=0;
       
   359     for (p=0;p<nrOfLandmarks;p++)
       
   360         {
       
   361         landmark = iLandmarksDb->ReadLandmarkLC(lmIdArray[p]);
       
   362         CleanupStack::Pop(landmark);
       
   363         }
       
   364 
       
   365     // 3) Remove two landmarks and compress landmarks db
       
   366     TInt nr = lmIdArray.Count()-1;
       
   367     TPosLmItemId id = lmIdArray[nr];
       
   368     iLog->Put(_L("Removing landmark1"));
       
   369     lmIdArray.Remove(nr);
       
   370     TRAP(err, iLandmarksDb->RemoveLandmarkL(id));
       
   371     if (err == KErrDiskFull) 
       
   372         {
       
   373         ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   374 
       
   375         iLandmarksDb->RemoveLandmarkL(id);
       
   376         iLog->Put(_L("DiskFull when removing1"));
       
   377         }
       
   378 
       
   379     nr = lmIdArray.Count() - 1;
       
   380     id = lmIdArray[nr];
       
   381     iLog->Put(_L("Removing landmark2"));
       
   382     lmIdArray.Remove(nr);
       
   383     iLandmarksDb->RemoveLandmarkL(id);
       
   384     TRAP(err, iLandmarksDb->RemoveLandmarkL(id));
       
   385     if (err == KErrDiskFull) 
       
   386         {
       
   387         ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   388         
       
   389         iLandmarksDb->RemoveLandmarkL(id);
       
   390         iLog->Put(_L("DiskFull when removing2"));
       
   391         }
       
   392     err = KErrNone;
       
   393     iLog->Put(_L("Compacting"));
       
   394     ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   395     
       
   396     startTime.UniversalTime();
       
   397     iLog->Put(_L("Adding landmark until KErrDiskFull.....2"));
       
   398     // 4) Add landmarks until "disk full" error occur!!!
       
   399     while (err != KErrDiskFull)
       
   400         {
       
   401         buf.Zero();
       
   402         buf.Format(_L("Land Mark___________%d"), i++);
       
   403         landmark = CPosLandmark::NewLC();
       
   404         landmark->SetLandmarkNameL(buf);
       
   405         //iLog->Put(_L("Adding landmark id to idArray"));
       
   406         TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
       
   407         if (err == KErrNone)
       
   408             {
       
   409             lmIdArray.Append(idde);
       
   410             }
       
   411         else if (err == KErrLocked) 
       
   412             {
       
   413             iLog->Put(_L("KErrLocked when adding 2"));
       
   414             User::After(100000);
       
   415             }
       
   416         CleanupStack::Pop(landmark);
       
   417         }
       
   418 
       
   419     stopTime.UniversalTime();
       
   420     executionTime = stopTime.MicroSecondsFrom(startTime);
       
   421     resse = executionTime.Int64()/1000000;
       
   422     buf.Zero();
       
   423     buf.Format(_L("Added %d nr of landmarks, took %d seconds"), i, resse);
       
   424     iLog->Put(buf);
       
   425 
       
   426     iLog->Put(_L("Check that it is possible to read landmark"));
       
   427     //Check that the added landmarks can be read
       
   428     nrOfLandmarks = lmIdArray.Count();
       
   429     for (p=0;p<nrOfLandmarks;p++)
       
   430         {
       
   431         landmark = iLandmarksDb->ReadLandmarkLC(lmIdArray[p]);
       
   432         CleanupStack::Pop(landmark);
       
   433         }
       
   434 
       
   435     iLog->Put(_L("Remove all landmarks"));
       
   436     err = KErrNone;
       
   437     // 5) Remove all landmarks and compact database
       
   438     if (!aSync)
       
   439         {
       
   440         TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
       
   441         if (err == KErrNone) 
       
   442             {
       
   443             ExecuteAndDeleteLD(op);
       
   444             }
       
   445         else if (err == KErrDiskFull)
       
   446             {
       
   447             iLog->Put(_L("KErrDiskFull when removing all landmarks"));
       
   448             ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   449             
       
   450             // Delete KFile2 to free more space on disc, method also open connection to iFile2 again
       
   451             DeleteFile2L();
       
   452 
       
   453             iLog->Put(_L("Removing after Compact sync"));
       
   454             TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
       
   455             if (err == KErrDiskFull)
       
   456                 {
       
   457                 iLog->Put(_L("KErrDiskFull when Removing all landmarks after compact1"));
       
   458                 RemoveAllLandmarksL();
       
   459                 }
       
   460             else
       
   461                 {
       
   462                 ExecuteAndDeleteLD(op);
       
   463                 }
       
   464             }
       
   465         }
       
   466     else
       
   467         {
       
   468         iLog->Put(_L("Before RemoveAllLandmarksL(this)"));
       
   469         TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
       
   470         
       
   471         if (err == KErrNone) 
       
   472             {
       
   473             //***iActiveSchedulerWait->Start();
       
   474             //***delete op; op=NULL;
       
   475             RunAsyncOperationLD(op);
       
   476             }
       
   477         else if (err == KErrDiskFull)
       
   478             {
       
   479             iLog->Put(_L("KErrDiskFull when removing all landmarks"));
       
   480             ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   481             
       
   482             // Delete KFile2 to free more space on disc, method also open connection to iFile2 again
       
   483             DeleteFile2L();
       
   484 
       
   485             iLog->Put(_L("Removing after Compact async"));
       
   486             TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
       
   487             if (err == KErrDiskFull)
       
   488                 {
       
   489                 iLog->Put(_L("KErrDiskFull when removing all landmarks after compact2"));
       
   490                 RemoveAllLandmarksL();
       
   491                 }
       
   492             else
       
   493                 {
       
   494                 //***iActiveSchedulerWait->Start();
       
   495                 //***delete op; op=NULL;
       
   496                 RunAsyncOperationLD(op);
       
   497                 }
       
   498             }
       
   499         iLog->Put(_L("After RemoveAllLandmarksL(this)"));
       
   500         }
       
   501     
       
   502     ConsumeDiscSpace2L(iCriticalLevel + KSizeLimitOffset2);
       
   503 
       
   504     if (err == KErrDiskFull) iLog->Put(_L("KErrDiskFull when RemoveAllLandmarksL"));
       
   505     iLog->Put(_L("Compacting"));
       
   506     ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   507     
       
   508     lmIdArray.Reset();
       
   509     i=0;
       
   510     err = KErrNone;
       
   511     startTime.UniversalTime();
       
   512     iLog->Put(_L("Adding landmarkcategories until KErrDiskFull....."));
       
   513 
       
   514     // 6) Add LandmarkCategories until "disk full" error occur
       
   515     while (err != KErrDiskFull)
       
   516         {
       
   517         buf.Zero();
       
   518         buf.Format(_L("Landmark Category _________ %d"), i++);
       
   519         CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
       
   520         lmc->SetCategoryNameL(buf);
       
   521         lmc->SetIconL(_L("Pelles Icon"), 111, KPosLmIconMaskNotUsed);
       
   522 
       
   523         TRAP(err, idde = iCategoryManager->AddCategoryL(*lmc));
       
   524         if (err == KErrNone)
       
   525             {
       
   526             lmIdArray.Append(idde);
       
   527             }
       
   528         else if (err== KErrLocked)
       
   529             {
       
   530             iLog->Put(_L("KErrLocked when adding category"));
       
   531             User::After(100000);
       
   532             }
       
   533         CleanupStack::PopAndDestroy(lmc);
       
   534         }
       
   535 
       
   536     stopTime.UniversalTime();
       
   537     executionTime = stopTime.MicroSecondsFrom(startTime);
       
   538 
       
   539     resse = executionTime.Int64()/1000000;
       
   540     buf.Zero();
       
   541     buf.Format(_L("Added %d nr of landmarkcategories, took %d seconds"), i, resse);
       
   542     iLog->Put(buf);
       
   543 
       
   544     //Check that the added landmarkcategories can be read
       
   545     TInt nrOfCategories = lmIdArray.Count();
       
   546     for (p=0;p<nrOfCategories;p++)
       
   547         {
       
   548         CPosLandmarkCategory* lmc = iCategoryManager->ReadCategoryLC(lmIdArray[p]);
       
   549         CleanupStack::Pop(lmc);
       
   550         }
       
   551 
       
   552     // 7) Remove two categories and compress landmarks db
       
   553     nr = lmIdArray.Count()-1;
       
   554     id = lmIdArray[nr];
       
   555     iLog->Put(_L("Removing landmarkcategory1"));
       
   556     lmIdArray.Remove(nr);
       
   557     op=NULL;
       
   558     TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
       
   559     if (err == KErrDiskFull)
       
   560         {
       
   561         ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   562         ExecuteAndDeleteLD(iCategoryManager->RemoveCategoryL(id));
       
   563         iLog->Put(_L("KErrDiskFull when removing landmarkcategory1"));
       
   564         }
       
   565 
       
   566     if (err == KErrNone)
       
   567         {
       
   568         ExecuteAndDeleteLD(op);
       
   569         }
       
   570     else
       
   571         {
       
   572         delete op;
       
   573         op = NULL;
       
   574         }
       
   575 
       
   576     TBuf<50> buffe;
       
   577     buffe.Format(_L("1) Err after RemoveCategoryL: %d"), err);
       
   578     iLog->Put(buffe);
       
   579 
       
   580     nr = lmIdArray.Count()-1;
       
   581     id = lmIdArray[nr];
       
   582     iLog->Put(_L("Removing landmarkcategory2"));
       
   583     lmIdArray.Remove(nr);
       
   584 
       
   585     if (!aSync)
       
   586         {
       
   587         TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
       
   588         if (err == KErrDiskFull)
       
   589             {
       
   590             delete op;
       
   591             op = NULL;
       
   592             iLog->Put(_L("KErrDiskFull when removing landmarkcategory2"));
       
   593             ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   594             
       
   595             iLog->Put(_L("After compact before removing landmarkcategory2"));
       
   596             ExecuteAndDeleteLD(iCategoryManager->RemoveCategoryL(id));
       
   597             }
       
   598         else if (err == KErrNone)
       
   599             {
       
   600             ExecuteAndDeleteLD(op);
       
   601             }
       
   602         else if (err == KErrLocked)
       
   603             {
       
   604             iLog->Put(_L("KErrLocked returned from iCategoryManager->RemoveCategoryL"));
       
   605             delete op;
       
   606             op = NULL;
       
   607             }
       
   608         } 
       
   609     else
       
   610         {
       
   611         TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
       
   612         if (err == KErrNone)
       
   613             {
       
   614             //***iActiveSchedulerWait->Start();
       
   615             //***delete op;
       
   616             RunAsyncOperationLD(op);
       
   617             }
       
   618         else if (err == KErrDiskFull)
       
   619             {
       
   620             delete op;
       
   621             op = NULL;
       
   622             iLog->Put(_L("KErrDiskFull when removing landmarkcategory2 async"));
       
   623             ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   624             
       
   625             iLog->Put(_L("After compact before removing landmarkcategory2 async"));
       
   626             op = iCategoryManager->RemoveCategoryL(id);
       
   627             
       
   628             //***iActiveSchedulerWait->Start();
       
   629             //***delete op;
       
   630             RunAsyncOperationLD(op);
       
   631             }
       
   632         else if (err == KErrLocked)
       
   633             {
       
   634             delete op;
       
   635             op = NULL;
       
   636             iLog->Put(_L("KErrLocked returned from iCategoryManager->RemoveCategoryL"));
       
   637             }
       
   638         }
       
   639 
       
   640     buffe.Zero();
       
   641     buffe.Format(_L("2) Err after RemoveCategoryL: %d"), err);
       
   642     iLog->Put(buffe);
       
   643 
       
   644     iLog->Put(_L("Compacting"));
       
   645     ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   646     iLog->Put(_L("After Compacting"));
       
   647     
       
   648     lmIdArray.Reset();
       
   649     i=0;
       
   650     err = KErrNone;
       
   651 
       
   652     startTime.UniversalTime();
       
   653     // 8) Add LandmarkCategories until "disk full" error occur
       
   654     while (err != KErrDiskFull)
       
   655         {
       
   656         buf.Zero();
       
   657         buf.Format(_L("LandmarkCategory %d"), i++);
       
   658 
       
   659         CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
       
   660         lmc->SetCategoryNameL(buf);
       
   661         lmc->SetIconL(_L("PellesIcon"), 111, KPosLmIconMaskNotUsed);
       
   662         iLog->Put(buf);
       
   663         
       
   664         TRAP(err, idde = iCategoryManager->AddCategoryL(*lmc));
       
   665         if (err == KErrNone)
       
   666             {
       
   667             lmIdArray.Append(idde);
       
   668             }
       
   669         else if (err == KErrLocked)
       
   670             {
       
   671             iLog->Put(_L("KerrLocked when addCategory"));
       
   672             User::After(100000);
       
   673             }
       
   674         CleanupStack::PopAndDestroy(lmc); 
       
   675     }
       
   676     stopTime.UniversalTime();
       
   677     executionTime = stopTime.MicroSecondsFrom(startTime);
       
   678 
       
   679     resse = executionTime.Int64()/1000000;
       
   680     buf.Zero();
       
   681     buf.Format(_L("Added %d nr of landmarkcategories, took %d seconds"), i, resse);
       
   682     iLog->Put(buf);
       
   683 
       
   684     // 9) Remove all categories and compact db
       
   685     // sync method
       
   686     // XXXX add async check here
       
   687     iLog->Put(_L("Removing all categories"));
       
   688     TRAP(err, iCategoryManager->RemoveCategoriesL(lmIdArray));
       
   689     if (err == KErrDiskFull) iLog->Put(_L("KErrDiskFull when RemoveCategoriesL"));
       
   690     iLog->Put(_L("Compacting"));
       
   691     ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   692     
       
   693 
       
   694     // 10) Consume more space then the limit specified in resource file
       
   695     ConsumeDiscSpace1L(iCriticalLevel - KSizeLimitOffset2);
       
   696 
       
   697     // 11) Try to add a landmark
       
   698     buf.Zero();
       
   699     buf.Format(_L("LandMark%d"), i++);
       
   700     landmark = CPosLandmark::NewLC();
       
   701     landmark->SetLandmarkNameL(buf);
       
   702 
       
   703     TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
       
   704     if (err != KErrDiskFull)
       
   705         {
       
   706         buf.Zero();
       
   707         buf.Format(_L("Should leave with KErrDiskFull instead %d"), err);
       
   708         //LogErrorAndLeave(buf);
       
   709         LogErrorAndLeave(buf);
       
   710         }
       
   711     CleanupStack::PopAndDestroy(landmark);
       
   712     CleanupStack::PopAndDestroy(&lmIdArray);
       
   713     }
       
   714 
       
   715 
       
   716 // ---------------------------------------------------------
       
   717 // CPosTp29::RemoveAllLandmarksL
       
   718 //
       
   719 // (other items were commented in a header).
       
   720 // ---------------------------------------------------------
       
   721 //
       
   722 void CPosTp29::RemoveAllLandmarksL()
       
   723     {
       
   724     iLog->Put(_L("CPosTp29::RemoveAllLandmarksL"));
       
   725     CPosLmItemIterator* iter = iLandmarksDb->LandmarkIteratorL();
       
   726     CleanupStack::PushL(iter);
       
   727 
       
   728     TInt counter=0;
       
   729     TTime startTime;
       
   730     TTime stopTime;
       
   731     TPosLmItemId id = iter->NextL();
       
   732 
       
   733     startTime.UniversalTime();
       
   734 
       
   735     while (id != KPosLmNullItemId)
       
   736         {
       
   737         TRAPD(err, iLandmarksDb->RemoveLandmarkL(id));
       
   738         if (err == KErrDiskFull)
       
   739             {
       
   740             ExecuteAndDeleteLD(iLandmarksDb->CompactL());
       
   741             
       
   742             iLog->Put(_L(":-( DiskFull when removing single landmark entry !!!"));
       
   743             iLandmarksDb->RemoveLandmarkL(id);
       
   744             }
       
   745         else if (err == KErrLocked)
       
   746             {
       
   747             iLog->Put(_L("KErrLocked when removing landmark"));
       
   748             User::After(100000);
       
   749             }
       
   750         id = iter->NextL();
       
   751         counter++;
       
   752         }
       
   753 
       
   754     stopTime.UniversalTime();
       
   755     TTimeIntervalMicroSeconds executionTime = 
       
   756         stopTime.MicroSecondsFrom(startTime);
       
   757 
       
   758     TInt64 resse = executionTime.Int64()/1000000;
       
   759     TBuf<50> buf;
       
   760     buf.Zero();
       
   761     buf.Format(_L("Removing %d nr of landmarks, took %d seconds"), counter, resse);
       
   762     iLog->Put(buf);
       
   763 
       
   764     CleanupStack::PopAndDestroy(iter);
       
   765     }
       
   766 
       
   767 // ---------------------------------------------------------
       
   768 // CPosTp29::DeleteFile2L
       
   769 //
       
   770 // (other items were commented in a header).
       
   771 // ---------------------------------------------------------
       
   772 //
       
   773 void CPosTp29::DeleteFile2L()
       
   774     {
       
   775     iFile2.Close();
       
   776     iFileServer.Delete(KFile2);
       
   777     TInt err = iFile2.Open(iFileServer, KFile2, EFileWrite);
       
   778     if (err == KErrNotFound)
       
   779         {
       
   780         err = iFile2.Create(iFileServer, KFile2, EFileWrite);
       
   781         }
       
   782     }
       
   783 
       
   784 // ---------------------------------------------------------
       
   785 // CPosTp29::ConsumeDiscSpace1L
       
   786 //
       
   787 // (other items were commented in a header).
       
   788 // ---------------------------------------------------------
       
   789 //
       
   790 void CPosTp29::ConsumeDiscSpace1L(TInt aSizeLimit)
       
   791     {
       
   792     TInt err = KErrNone;
       
   793 
       
   794     // Approx 2160 bytes
       
   795     _LIT8(KNonsense, "nonsensenonsensenonsensenonsensenonsensenon \
       
   796 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   797 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   798 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   799 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   800 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   801 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   802 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   803 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   804 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   805 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   806 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   807 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   808 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   809 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   810 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   811 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   812 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   813 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   814 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   815 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   816 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   817 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   818 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   819 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   820 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   821 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   822 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   823 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   824 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   825 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   826 sensenonsensenonsensenonsensenonsensenonsensenonsense");
       
   827 
       
   828     TVolumeInfo volumeInfo;
       
   829     err=iFileServer.Volume(volumeInfo, EDriveC);
       
   830 
       
   831     // Fill file fast
       
   832     HBufC8* bigBuf = (&KNonsense)->AllocLC();
       
   833     while (volumeInfo.iFree > aSizeLimit)
       
   834         {
       
   835         err = iFile1.Write(*bigBuf);
       
   836         if (err != KErrNone) iLog->Put(_L("Problem writing"));
       
   837         err = iFileServer.Volume(volumeInfo, EDriveC);
       
   838         if (err != KErrNone) iLog->Put(_L("Problem voluming"));
       
   839         }
       
   840 
       
   841     CleanupStack::PopAndDestroy(1); // bigBuf
       
   842     }
       
   843 
       
   844 // ---------------------------------------------------------
       
   845 // CPosTp29::ConsumeDiscSpace2L
       
   846 //
       
   847 // (other items were commented in a header).
       
   848 // ---------------------------------------------------------
       
   849 //
       
   850 void CPosTp29::ConsumeDiscSpace2L(TInt aSizeLimit)
       
   851     {
       
   852     iLog->Put(_L("ConsumeDiscSpace2L"));
       
   853     TInt err = KErrNone;
       
   854 
       
   855     // Approx 2160 bytes
       
   856     _LIT8(KNonsense, "nonsensenonsensenonsensenonsensenonsensenon \
       
   857 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   858 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   859 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   860 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   861 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   862 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   863 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   864 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   865 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   866 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   867 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   868 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   869 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   870 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   871 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   872 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   873 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   874 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   875 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   876 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   877 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   878 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   879 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   880 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   881 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   882 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   883 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   884 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   885 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   886 nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
       
   887 sensenonsensenonsensenonsensenonsensenonsensenonsense");
       
   888 
       
   889     TVolumeInfo volumeInfo;
       
   890     err=iFileServer.Volume(volumeInfo, EDriveC);
       
   891 
       
   892     // Fill file fast
       
   893     HBufC8* bigBuf = (&KNonsense)->AllocLC();
       
   894     while (volumeInfo.iFree > aSizeLimit)
       
   895         {
       
   896         err = iFile2.Write(*bigBuf);
       
   897         if (err != KErrNone) iLog->Put(_L("Problem writing"));
       
   898         err = iFileServer.Volume(volumeInfo, EDriveC);
       
   899         if (err != KErrNone) iLog->Put(_L("Problem voluming"));
       
   900         }
       
   901 
       
   902     CleanupStack::PopAndDestroy(1); // bigBuf
       
   903     }
       
   904 
       
   905 // ---------------------------------------------------------
       
   906 // CPosTp29::InitiateCriticalLevelL
       
   907 // Extracts Critical Dsik Level. (value is extracted from an MLFW 
       
   908 // resource file that can reside on any drive)
       
   909 // (other items were commented in a header).
       
   910 // ---------------------------------------------------------
       
   911 //	
       
   912 void CPosTp29::InitiateCriticalLevelL()
       
   913     {
       
   914     iLog->Put(_L("InitiateCriticalLevelL"));
       
   915     /*
       
   916     // Find drive that the resource file resides on.
       
   917     TFindFile* filefinder = new (ELeave) TFindFile(iFileServer);
       
   918     CleanupStack::PushL(filefinder);
       
   919     TParse* fileparser = new (ELeave) TParse;
       
   920     CleanupStack::PushL(fileparser);
       
   921     fileparser->Set(KPosResourceFile, NULL, NULL);
       
   922     User::LeaveIfError(
       
   923         filefinder->FindByDir(fileparser->NameAndExt(), fileparser->DriveAndPath()));
       
   924 
       
   925     // Open resource file
       
   926     RResourceFile resFile;
       
   927     resFile.OpenL(iFileServer, filefinder->File());
       
   928     CleanupClosePushL(resFile);
       
   929 
       
   930     // Allocate the critical level as a buffer
       
   931     //TInt R_POS_LANDMARK_INTERNAL_CRITICAL_DISK_LEVEL = 250;
       
   932     HBufC8* resourceBuffer = resFile.AllocReadLC(iCriticalThreshold);
       
   933 
       
   934     // Convert the buffer to an int
       
   935     TResourceReader resReader;
       
   936     resReader.SetBuffer(resourceBuffer);
       
   937     iCriticalLevel = KOneK * resReader.ReadInt16();
       
   938     CleanupStack::PopAndDestroy(4, filefinder);
       
   939     */
       
   940     
       
   941     //iCriticalLevel = iCriticalThreshold * KOneK;
       
   942     iCriticalLevel = iCriticalThreshold;
       
   943     
       
   944     TBuf<50> msg;
       
   945     msg.Format(_L("CriticalLevel = %d"), iCriticalLevel);
       
   946     iLog->Put(msg);
       
   947     }
       
   948 
       
   949 // ---------------------------------------------------------
       
   950 // CPosTp29::CopyResourceFileL
       
   951 // 
       
   952 // (other items were commented in a header).
       
   953 // ---------------------------------------------------------
       
   954 //
       
   955 void CPosTp29::CopyResourceFileL(const TDesC& aResourceFile)
       
   956     {
       
   957     // Release all landmark references to make DLLs be unloaded.
       
   958     delete iLandmarksDb;
       
   959     iLandmarksDb = NULL;
       
   960 
       
   961     CFileMan* fileMan = CFileMan::NewL(iFileServer);
       
   962     CleanupStack::PushL(fileMan);
       
   963     
       
   964     // Check if landmark is flashed
       
   965      if (!BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
       
   966         {
       
   967          iLog->Put(_L("Landmark is NOT flashed, backing up eposlmintservices.rsc by renaming it bofore copying rsc-file."));
       
   968         // Landmark FW is not flashed. Rename the file before copying an own defiend file.
       
   969         // Since landmark FW is not flashed the file should exist hence leaving if it is not found!
       
   970          User::LeaveIfError(fileMan->Rename(KInternalServicesResFileCdrive, KInternalServicesResFileBackup, CFileMan::EOverWrite));
       
   971         }
       
   972      else
       
   973         {
       
   974         iLog->Put(_L("Landmark framework is flashed, copying global categories to c:"));
       
   975         }
       
   976 
       
   977     User::LeaveIfError(fileMan->Copy(aResourceFile, KInternalServicesResFileCdrive, CFileMan::EOverWrite));
       
   978  
       
   979     CleanupStack::PopAndDestroy(fileMan);
       
   980     }
       
   981 
       
   982 // ---------------------------------------------------------
       
   983 // CPosTp29::TryRestoreResourceFile
       
   984 // 
       
   985 // (other items were commented in a header).
       
   986 // ---------------------------------------------------------
       
   987 //
       
   988 void CPosTp29::TryRestoreResourceFile()
       
   989     {
       
   990     iLog->Put(_L("TryRestoreResourceFile"));
       
   991     CFileMan* fileMan = NULL;
       
   992     TRAPD(err, fileMan = CFileMan::NewL(iFileServer));
       
   993     User::LeaveIfError(err);
       
   994     if (fileMan)
       
   995         {
       
   996         // Try to restore the backup up rsc-file (only possible when LM FW is not flashed.
       
   997         TInt result = fileMan->Copy(KInternalServicesResFileBackup, KInternalServicesResFileCdrive, CFileMan::EOverWrite);
       
   998         if (result == KErrNotFound)
       
   999             {
       
  1000             if (BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
       
  1001                 {
       
  1002                 // LM FW is flashed. We need to remove the rsc-file on c:
       
  1003                 fileMan->Delete(KInternalServicesResFileCdrive);
       
  1004                 }
       
  1005             }
       
  1006         delete fileMan;
       
  1007         }
       
  1008     }
       
  1009 
       
  1010 // End of file
       
  1011