diff -r c1f20ce4abcf -r 3e88ff8f41d5 kerneltest/f32test/server/t_dircache.cpp --- a/kerneltest/f32test/server/t_dircache.cpp Tue Aug 31 16:34:26 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,612 +0,0 @@ -// Copyright (c) 1995-2009 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 "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: -// f32test\server\t_dircache.cpp -// -// -#define __E32TEST_EXTENSION__ -#include -#include -#include -#include -#include "t_server.h" -#include "t_chlffs.h" -#include "f32_test_utils.h" -#include "fat_utils.h" -#include "d_pagestress.h" - -RTest test(_L("T_DIRCACHE")); - -/* - * This whole test execute on UDEB mode only. - */ -#if defined(_DEBUG) || defined(_DEBUG_RELEASE) - -TInt gDrive=-1; -const TInt32 KDef_KLeafDirCacheSize = 32; // default leaf dir cache number -const TInt32 KDef_DynamicDirCacheMinInBytes = 128 << 10; // default minimum fat dir cache size in bytes -const TInt32 KDef_DynamicDirCacheMaxInBytes = 256 << 10; // default maximum fat dir cache size in bytes -const TInt32 KDef_MaxDynamicDirCachePageSzLog2 = 14; // default value for directory cache single page - // maximal size Log2, 2^14 (16K) by default -const TInt32 KMaxThreadCount = 1; // the maximum number of multiple threads that can - // access dir cache concurrently. -const TInt32 KSegmentSize = 1 << 12; // the smallest memory unit that Kernel manages - -template -TInt controlIo(RFs &fs, TInt drv, TInt fkn, C &c) - { - TPtr8 ptrC((TUint8 *)&c, sizeof(C), sizeof(C)); - - TInt r = fs.ControlIo(drv, fkn, ptrC); - - return r; - } - -// See f32\sfile\sf_memory_man.cpp for the default value settings -const TInt KDefaultGlobalCacheMemorySize = (8 << 10) << 10; -const TInt KDefaultLowMemoryThreshold = 10; -//---------------------------------------------------------------------------------------------- -//@SYMTestCaseID PBASE-XXXX -//@SYMTestType FT -//@SYMPREQ PREQ1885 -//@SYMTestCaseDesc Check global cache settings. The global cache should be either: -// 1. 0 (disabled) -// 2. no less than the sum of all per-drive settings -//---------------------------------------------------------------------------------------------- -void TestGlobalSettings() - { - test.Next(_L("Test global cache settings")); - // read global cache settings from estart.txt - TGlobalCacheConfig globalCacheConfig; - TInt r = controlIo(TheFs,gDrive, KControlIoGlobalCacheConfig, globalCacheConfig); - test_KErrNone(r); - test_Value (globalCacheConfig.iGlobalCacheSizeInBytes, - globalCacheConfig.iGlobalCacheSizeInBytes > 0 || globalCacheConfig.iGlobalCacheSizeInBytes == KErrNotFound); - test_Value (globalCacheConfig.iGlobalLowMemoryThreshold, - globalCacheConfig.iGlobalLowMemoryThreshold >= 0 || globalCacheConfig.iGlobalLowMemoryThreshold == KErrNotFound); - - const TInt32 globalCacheSize = globalCacheConfig.iGlobalCacheSizeInBytes > 0 ? - globalCacheConfig.iGlobalCacheSizeInBytes : KDefaultGlobalCacheMemorySize; - - // test if global cache is enabled, it is configured in the way that its figure is no less - // than the sum of per-drive max size settings (taking default values into account). - TInt32 sumDirCacheMaxSize = 0; - for (TInt i = 0; i < KMaxDrives; i++) - { - TBuf<0x20> fsName; - r = TheFs.FileSystemName(fsName, i); - - if (r == KErrNone && (F32_Test_Utils::Is_Fat(TheFs, i) || F32_Test_Utils::Is_ExFat(TheFs, i))) - { - test.Printf(_L("drive[%C:] file system: (\"%S\")\n"), 'A' + i, &fsName); - TDirCacheConfig dirCacheConfig; - r = controlIo(TheFs,gDrive, KControlIoDirCacheConfig, dirCacheConfig); - test_KErrNone(r); - if(dirCacheConfig.iDirCacheSizeMax > 0) - { - sumDirCacheMaxSize += (dirCacheConfig.iDirCacheSizeMax > KDef_DynamicDirCacheMaxInBytes ? dirCacheConfig.iDirCacheSizeMax : KDef_DynamicDirCacheMaxInBytes); - } - else - { - sumDirCacheMaxSize += KDef_DynamicDirCacheMaxInBytes; - } - test.Printf(_L("++sumDirCacheMaxSize = %d\n"), sumDirCacheMaxSize); - } - } - test_Compare(globalCacheSize, >=, sumDirCacheMaxSize); - } - -//---------------------------------------------------------------------------------------------- -//@SYMTestCaseID PBASE-XXXX -//@SYMTestType FT -//@SYMPREQ PREQ1885 -//@SYMTestCaseDesc Test current drive's dir cache configurations, the current dir cache info should -// match the configurations read from estart.txt file. -//---------------------------------------------------------------------------------------------- -void TestDirCacheSettings() - { - test.Next(_L("Test current drive's dir cache settings")); - - // test global cache config is ON - TGlobalCacheConfig globalCacheConfig; - TInt r = controlIo(TheFs,gDrive, KControlIoGlobalCacheConfig, globalCacheConfig); - test_KErrNone(r); - test_Value (globalCacheConfig.iGlobalCacheSizeInBytes, - globalCacheConfig.iGlobalCacheSizeInBytes > 0 || globalCacheConfig.iGlobalCacheSizeInBytes == KErrNotFound); - test_Value (globalCacheConfig.iGlobalLowMemoryThreshold, - globalCacheConfig.iGlobalLowMemoryThreshold >= 0 || globalCacheConfig.iGlobalLowMemoryThreshold == KErrNotFound); - - // test global cache info is corresponding to the configurations - TGlobalCacheInfo globalCacheInfo; - r = controlIo(TheFs,gDrive, KControlIoGlobalCacheInfo, globalCacheInfo); - test_KErrNone(r); - - if (globalCacheConfig.iGlobalCacheSizeInBytes == KErrNotFound) - { - test_Equal(KDefaultGlobalCacheMemorySize, globalCacheInfo.iGlobalCacheSizeInBytes); - } - else - { - test_Equal(globalCacheConfig.iGlobalCacheSizeInBytes, globalCacheInfo.iGlobalCacheSizeInBytes); - } - - if (globalCacheConfig.iGlobalLowMemoryThreshold == KErrNotFound) - { - test_Equal(KDefaultLowMemoryThreshold, globalCacheInfo.iGlobalLowMemoryThreshold); - } - else - { - test_Equal(globalCacheConfig.iGlobalLowMemoryThreshold, globalCacheInfo.iGlobalLowMemoryThreshold); - } - - // read per-drive settings from estart.txt - TDirCacheConfig dirCacheConfig; - r = controlIo(TheFs,gDrive, KControlIoDirCacheConfig, dirCacheConfig); - test_KErrNone(r); - test_Value (dirCacheConfig.iLeafDirCacheSize, - dirCacheConfig.iLeafDirCacheSize >= 0 || dirCacheConfig.iLeafDirCacheSize == KErrNotFound); - test_Value (dirCacheConfig.iDirCacheSizeMin, - dirCacheConfig.iDirCacheSizeMin >= 0 || dirCacheConfig.iDirCacheSizeMin == KErrNotFound); - test_Value (dirCacheConfig.iDirCacheSizeMax, - dirCacheConfig.iDirCacheSizeMax >= 0 || dirCacheConfig.iDirCacheSizeMax == KErrNotFound); - - // caculate expected settings according to the readings from estart.txt - if (dirCacheConfig.iLeafDirCacheSize == 0) - dirCacheConfig.iLeafDirCacheSize = 1; - if (dirCacheConfig.iLeafDirCacheSize == KErrNotFound) - dirCacheConfig.iLeafDirCacheSize = KDef_KLeafDirCacheSize; - if (dirCacheConfig.iDirCacheSizeMin < KDef_DynamicDirCacheMinInBytes) - dirCacheConfig.iDirCacheSizeMin = KDef_DynamicDirCacheMinInBytes; - if (dirCacheConfig.iDirCacheSizeMax < KDef_DynamicDirCacheMaxInBytes) - dirCacheConfig.iDirCacheSizeMax = KDef_DynamicDirCacheMaxInBytes; - - TVolumeIOParamInfo ioParam; - r = TheFs.VolumeIOParam(gDrive, ioParam); - test_KErrNone(r); - const TInt32 KClusterSize = ioParam.iClusterSize; - test.Printf(_L("DRV[%C:] cluster = %d\n"), gDrive + 'A', ioParam.iClusterSize); - - const TInt32 KDefMaxCachePageSize = 1 << KDef_MaxDynamicDirCachePageSzLog2; - const TInt32 KPageSizeInData = KClusterSize < KDefMaxCachePageSize ? KClusterSize : KDefMaxCachePageSize; - const TInt32 KPageSizeInMem = KPageSizeInData < KSegmentSize ? KSegmentSize : KPageSizeInData; - const TInt32 KCacheSizeMinInPages = dirCacheConfig.iDirCacheSizeMin / KPageSizeInMem; - const TInt32 KCacheSizeMaxInPages = dirCacheConfig.iDirCacheSizeMax / KPageSizeInMem; - const TInt32 KUnlockedPageNum = 0; - - // remount drive, get current dir cache info and test - r = F32_Test_Utils::RemountFS (TheFs, CurrentDrive(), NULL); - test_KErrNone(r); - - TDirCacheInfo dirCacheInfo; - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - test_Equal(KSegmentSize, dirCacheInfo.iMemorySegmentSize); - test_Equal(KPageSizeInMem, dirCacheInfo.iPageSizeInMemory); - test_Equal(KPageSizeInData, dirCacheInfo.iPageSizeInData); - test_Equal(KCacheSizeMinInPages, dirCacheInfo.iMinCacheSizeInPages); - test_Equal(KCacheSizeMaxInPages, dirCacheInfo.iMaxCacheSizeInPages); - test_Equal(KMaxThreadCount, dirCacheInfo.iLockedPageNumber); - test_Equal(KUnlockedPageNum, dirCacheInfo.iUnlockedPageNumber); - } - -//---------------------------------------------------------------------------------------------- -//@SYMTestCaseID PBASE-XXXX -//@SYMTestType FT -//@SYMPREQ PREQ1885 -//@SYMTestCaseDesc Test populating dir cache under normal memory conditions. -//---------------------------------------------------------------------------------------------- -void TestPopulateCache() - { - test.Next(_L("Test populating dir cache under normal memory conditions")); - - CFileMan* fileMan = CFileMan::NewL(TheFs); - test_NotNull(fileMan); - TInt r = fileMan->RmDir(_L("\\TEST_DIRCACHE\\")); - test_Value(r, r==KErrNone || r==KErrPathNotFound); - - // remount drive, get current dir cache info - r = F32_Test_Utils::RemountFS (TheFs, CurrentDrive(), NULL); - test_KErrNone(r); - - /* - * Test populating dir cache - */ - TVolumeIOParamInfo ioParam; - r = TheFs.VolumeIOParam(gDrive, ioParam); - test_KErrNone(r); - const TInt32 KClusterSize = ioParam.iClusterSize; - - TFileName dirPath = _L("\\TEST_DIRCACHE\\"); - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - - TDirCacheInfo dirCacheInfo; - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - // this calculation is for volumes that have a large cluster size, larger than the allowed maximum - // page size. on this case, creating a new directory will generate two or more new pages in the - // dir cache - const TUint pagesPerDir = KClusterSize > dirCacheInfo.iPageSizeInMemory ? - KClusterSize / dirCacheInfo.iPageSizeInMemory : 1; - - // should be KMaxThreadCount + root dir (1 page) + "\\TEST_DIRCACHE\\" (number of pages that are - // needed for new directories, i.e. pagesPerDir) - test_Equal(KMaxThreadCount + 1 + pagesPerDir, dirCacheInfo.iLockedPageNumber); - - const TInt initialUnlockedPage = dirCacheInfo.iUnlockedPageNumber; - - const TInt createdNewDirs = dirCacheInfo.iMinCacheSizeInPages - dirCacheInfo.iLockedPageNumber; - // create directories so that it grows to KCacheSizeMinInPages - for (TInt i = 1; i <= createdNewDirs; i++) - { - dirPath = _L("\\TEST_DIRCACHE\\"); - TFileName dirName; - dirName.Format(_L("DIR%d\\"), i); - dirPath += dirName; - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - } - - const TInt KFatDirEntrySize = 32; - const TInt subDirNum = dirCacheInfo.iMinCacheSizeInPages - dirCacheInfo.iLockedPageNumber; - // calculate the extra pages needed for the newly created sub dir entries (plus the original - // "." and ".." entries) - TInt extraPagesForLeafdir = ((subDirNum + 2) * KFatDirEntrySize / dirCacheInfo.iPageSizeInData) - 1; - if (((subDirNum + 2) * KFatDirEntrySize) % dirCacheInfo.iPageSizeInData > 0) - extraPagesForLeafdir++; - test.Printf(_L("!!Extra pages needed for leafdir = %d\n"), extraPagesForLeafdir); //kk - - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - r = controlIo(TheFs,gDrive, 15, dirCacheInfo); - test_KErrNone(r); - - test_Equal(dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iLockedPageNumber); - - const TInt maxUnlockedPage = dirCacheInfo.iMaxCacheSizeInPages - dirCacheInfo.iMinCacheSizeInPages; - // calculating the expected unlocked page number here. - TInt newUnlockedPage = initialUnlockedPage; - newUnlockedPage += extraPagesForLeafdir; // if any extra pages are created for the leafdir - newUnlockedPage += createdNewDirs * (pagesPerDir - 1); // if more than one page is needed for each dir creation - test_Equal((newUnlockedPage > maxUnlockedPage ? maxUnlockedPage : newUnlockedPage), dirCacheInfo.iUnlockedPageNumber); - - // create directories so that it grows to KCacheSizeMinInPages + KCacheSizeMaxInPages - if (dirCacheInfo.iMaxCacheSizeInPages > dirCacheInfo.iMinCacheSizeInPages) - { - for (TInt i = 1; i <= dirCacheInfo.iMaxCacheSizeInPages - dirCacheInfo.iMinCacheSizeInPages; i++) - { - dirPath = _L("\\TEST_DIRCACHE\\"); - TFileName dirName; - dirName.Format(_L("DIR_UNLOCKED%d\\"), i); - dirPath += dirName; - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - } - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - r = controlIo(TheFs,gDrive, 15, dirCacheInfo); - test_KErrNone(r); - - test_Equal(dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iLockedPageNumber); - - test_Equal(dirCacheInfo.iMaxCacheSizeInPages - dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iUnlockedPageNumber); - } - - // create more directories and check that dir cache doesn't grow beyond KCacheSizeMaxInPages - for (TInt j = 1; j <= dirCacheInfo.iMinCacheSizeInPages; j++) - { - dirPath = _L("\\TEST_DIRCACHE\\"); - TFileName dirName; - dirName.Format(_L("DIR_MORE%d\\"), j); - dirPath += dirName; - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - } - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - r = controlIo(TheFs,gDrive, 15, dirCacheInfo); - test_KErrNone(r); - - test_Equal(dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iLockedPageNumber); - test_Equal(dirCacheInfo.iMaxCacheSizeInPages - dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iUnlockedPageNumber); - - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - r = fileMan->RmDir(_L("\\TEST_DIRCACHE\\")); - test_KErrNone(r); - - delete fileMan; - } - -//---------------------------------------------------------------------------------------------- -//@SYMTestCaseID PBASE-XXXX -//@SYMTestType FT -//@SYMPREQ PREQ1885 -//@SYMTestCaseDesc Test simulating low memory condition. -// 1. The cache should stop growing when it is at its minimum cache size in pages -// 2. The cache should function properly when it stops simulating low memory condition -//---------------------------------------------------------------------------------------------- -void TestSimulatingLowMemory() - { - // remount drive, get current dir cache info and test - test.Next(_L("Test dir cache growth when simulating low memory condition")); - - CFileMan* fileMan = CFileMan::NewL(TheFs); - test(fileMan != NULL); - TInt r = fileMan->RmDir(_L("\\TEST_DIRCACHE\\")); - test_Value(r, r==KErrNone || r==KErrPathNotFound); - - r = F32_Test_Utils::RemountFS (TheFs, CurrentDrive(), NULL); - test_KErrNone(r); - - r = TheFs.ControlIo(gDrive, KControlIoSimulateMemoryLow); - test_KErrNone(r); - - /* - * Test populating dir cache - */ - TFileName dirPath = _L("\\TEST_DIRCACHE\\"); - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - - TDirCacheInfo dirCacheInfo; - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - // create directories so that it grows to KCacheSizeMaxInPages - for (TInt i = 1; i <= dirCacheInfo.iMaxCacheSizeInPages; i++) - { - dirPath = _L("\\TEST_DIRCACHE\\"); - TFileName dirName; - dirName.Format(_L("DIR%d\\"), i); - dirPath += dirName; - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - } - - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - test_Equal(dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iLockedPageNumber); - test_Equal(0, dirCacheInfo.iUnlockedPageNumber); - - r = fileMan->RmDir(_L("\\TEST_DIRCACHE\\")); - test_KErrNone(r); - - // test when stop simulating the low memory condition, cache grows normally - test.Next(_L("Test dir cache growth when stop simulating low memory condition")); - r = TheFs.ControlIo(gDrive, KControlIoStopSimulateMemoryLow); - test_KErrNone(r); - - r = F32_Test_Utils::RemountFS (TheFs, CurrentDrive(), NULL); - test_KErrNone(r); - - /* - * Test populating dir cache - */ - dirPath = _L("\\TEST_DIRCACHE\\"); - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - - // create directories so that it grows to KCacheSizeMaxInPages - for (TInt j = 1; j <= dirCacheInfo.iMaxCacheSizeInPages; j++) - { - dirPath = _L("\\TEST_DIRCACHE\\"); - TFileName dirName; - dirName.Format(_L("DIR%d\\"), j); - dirPath += dirName; - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - } - - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - test_Equal(dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iLockedPageNumber); - test_Equal(dirCacheInfo.iMaxCacheSizeInPages - dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iUnlockedPageNumber); - - r = fileMan->RmDir(_L("\\TEST_DIRCACHE\\")); - test_KErrNone(r); - - delete fileMan; - } - -//---------------------------------------------------------------------------------------------- -//@SYMTestCaseID PBASE-XXXX -//@SYMTestType FT -//@SYMPREQ PREQ1885 -//@SYMTestCaseDesc Test low memory threshold on hardware platforms -// 1. Stress the system memory to below the low memory threshold configured -// 2. The cache should stop growing when it is at its minimum cache size in pages -// 3. Resume the system memory before step 1. -// 2. The cache should function properly when it stops simulating low memory condition -//---------------------------------------------------------------------------------------------- -void TestLowMemoryHW() - { - test.Next(_L("Test low memory threshold on hardware")); -#if !defined(__WINS__) - - CFileMan* fileMan = CFileMan::NewL(TheFs); - test_NotNull(fileMan); - TInt r = fileMan->RmDir(_L("\\TEST_DIRCACHE\\")); - test_Value(r, r==KErrNone || r==KErrPathNotFound); - - r = F32_Test_Utils::RemountFS (TheFs, CurrentDrive(), NULL); - test_KErrNone(r); - - RPageStressTestLdd PagestressLdd; - TMemoryInfoV1Buf memInfo; - r = UserHal::MemoryInfo(memInfo); - test_KErrNone(r); - - TGlobalCacheInfo globalCacheInfo; - r = controlIo(TheFs,gDrive, KControlIoGlobalCacheInfo, globalCacheInfo); - test_KErrNone(r); - - test.Printf(_L("Free RAM before setup %d\n"), memInfo().iFreeRamInBytes); - const TReal lowMemThreshold = globalCacheInfo.iGlobalLowMemoryThreshold / 200.00; - test.Printf(_L("Low memory threshold = %d%%\n"), globalCacheInfo.iGlobalLowMemoryThreshold); - test.Printf(_L("Current memory available = %d%%\n"), lowMemThreshold * 100); - - const TInt totalRamInBytes = memInfo().iTotalRamInBytes; - const TInt setupFreeRamInBytes = (TInt) (lowMemThreshold * totalRamInBytes); - const TInt setupFreeRamInPages = setupFreeRamInBytes / KSegmentSize; - - r = User::LoadLogicalDevice(KPageStressTestLddName); - test_Value(r, r==KErrNone || r==KErrAlreadyExists); - r = PagestressLdd.Open(); - test_KErrNone(r); - r = PagestressLdd.DoSetDebugFlag((TInt)ETrue); - test_KErrNone(r); - if (setupFreeRamInPages > 0 && setupFreeRamInBytes < totalRamInBytes) - { - r = PagestressLdd.DoConsumeRamSetup(setupFreeRamInPages, 1); - test_KErrNone(r); - r = UserHal::MemoryInfo(memInfo); - test_KErrNone(r); - test.Printf(_L("Free RAM after setup %d\n"), memInfo().iFreeRamInBytes); - } - else - { - test.Printf(_L("Current memory is already low: %d\n"), memInfo().iFreeRamInBytes); - } - - /* - * Test populating dir cache - */ - TFileName dirPath = _L("\\TEST_DIRCACHE\\"); - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - - TDirCacheInfo dirCacheInfo; - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - // create directories so that it grows to KCacheSizeMaxInPages - for (TInt i = 1; i <= dirCacheInfo.iMaxCacheSizeInPages; i++) - { - dirPath = _L("\\TEST_DIRCACHE\\"); - TFileName dirName; - dirName.Format(_L("DIR%d\\"), i); - dirPath += dirName; - r = TheFs.MkDirAll(dirPath); - test_KErrNone(r); - } - - r = controlIo(TheFs,gDrive, KControlIoDirCacheInfo, dirCacheInfo); - test_KErrNone(r); - - test_Equal(dirCacheInfo.iMinCacheSizeInPages, dirCacheInfo.iLockedPageNumber); - test_Equal(0, dirCacheInfo.iUnlockedPageNumber); - - // release memory - PagestressLdd.DoConsumeRamFinish(); - PagestressLdd.Close(); - r = User::FreeLogicalDevice(KPageStressTestLddName); - test_KErrNone(r); - - r = UserHal::MemoryInfo(memInfo); - test_KErrNone(r); - test.Printf(_L("Free RAM after test %d\n"), memInfo().iFreeRamInBytes); - - r = fileMan->RmDir(_L("\\TEST_DIRCACHE\\")); - test_KErrNone(r); - delete fileMan; -#else - test.Printf(_L("This test step only runs on hardware!!\n")); -#endif //#if !defined(__WINS__) - } - -#endif // #if defined(_DEBUG) || defined(_DEBUG_RELEASE) - -GLDEF_C void CallTestsL() -// -// Test the file server. -// - { -#if defined(_DEBUG) || defined(_DEBUG_RELEASE) - TInt nRes=TheFs.CharToDrive(gDriveToTest, gDrive); - test_KErrNone(nRes); - - TDriveInfo driveInfo; - nRes = TheFs.Drive(driveInfo, gDrive); - test.Printf(_L("MediaType: 0x%x\n"), driveInfo.iType); - test_KErrNone(nRes); - - if (F32_Test_Utils::Is_Fat(TheFs, gDrive) && driveInfo.iType != EMediaRam) - { - nRes = F32_Test_Utils::FormatDrive(TheFs, gDrive, ETrue); - test_KErrNone(nRes); - - F32_Test_Utils::PrintDrvInfo(TheFs, gDrive); - - TVolumeInfo v; - TInt r=TheFs.Volume(v, CurrentDrive()); - test_KErrNone(r); - - CreateTestDirectory(_L("\\F32-TST\\TDIRCACHE\\")); - - TestGlobalSettings(); - TestDirCacheSettings(); - TestPopulateCache(); - TestSimulatingLowMemory(); - TestLowMemoryHW(); - - DeleteTestDirectory(); - } - else - { - test.Printf(_L("This test executes on FAT drives and non-RAM media only!!\n")); - } -#else - test.Printf(_L("This test executes on DEBUG mode only!!\n")); -#endif //#if defined(_DEBUG) || defined(_DEBUG_RELEASE) - } - -/* -void TestReadEstart() - { - TDirCacheConfig dirCacheConfig; - TInt r = controlIo(TheFs,gDrive, KControlIoDirCacheConfig, dirCacheConfig); - test_KErrNone(r); - test.Printf(_L("Dir cache: \n Drive %C \n iLeafDirCacheSize %d \n iDirCacheSizeMin %d \n iDirCacheSizeMax %d \n iGlobalCacheMemorySize %d \n iLowMemoryThreshold %%%d"), - dirCacheConfig.iDrive + 'A', - dirCacheConfig.iLeafDirCacheSize, - dirCacheConfig.iDirCacheSizeMin, - dirCacheConfig.iDirCacheSizeMax); - } - -*/ - -// const TInt KControlIoGlobalCacheConfig=KMaxTInt-21; -// const TInt KControlIoGlobalCacheInfo=KMaxTInt-22; -// const TInt KControlIoDirCacheConfig=KMaxTInt-23; -// const TInt KControlIoDirCacheInfo=KMaxTInt-24; -// -//class TGlobalCacheConfig -//class TGlobalCacheInfo -//class TDirCacheConfig -//class TDirCacheInfo - -// this test is for FAT only!! -//if (F32_Test_Utils::Is_ExFat(TheFs, gDrive)) -// { -// // test cluster size -// TVolumeIOParamInfo ioParam; -// TInt r = TheFs.VolumeIOParam(gDrive, ioParam); -// test.Printf(_L("TheFs.VolumeIOParam for EXFAT: (cluster = %d) = %d\n"), ioParam.iClusterSize, r); -// } -//